数値回帰を利用した需要予測のやり方
はじめに
このドキュメントは、BLOCKSの機械学習サービスの使い方を解説するチュートリアルです。
BLOCKSの機械学習サービスでは、学習データを使って学習する機能(学習機能)と、予測データを使って予測する機能(予測機能)を分けて提供しています。
学習機能は、モデルジェネレーターサービスとDataEditorサービスのモデル作成機能で提供しています。一方、予測機能は、フローデザイナーサービスの予測ブロックとDataEditorの予測機能で提供しています。
このチュートリアルでは、DataEditorを一切使わずにモデルジェネレーターを使った学習機能と、フローデザイナーを使った予測機能を組み合わせた方法でBLOCKSの機械学習サービスを使います。
info_outlineDataEditorを使ったBLOCKSの機械学習について知りたい方は、「数値回帰を利用した需要予測のやり方(DataEditor編)」を参照願います。
ここでは、東京都の電力使用量を予測する例(電力使用量の需要予測)を通して、BLOCKS機械学習サービスの数値回帰タイプの使い方を解説します。
この電力使用量の需要予測では、東京都の気象情報と日中時間(日の出から日の入りまでの時間)から東京都の電力使用量を予測します。

BLOCKS機械学習サービスの数値回帰タイプを利用すると、このような電力使用量の予測の他に、以下のような予測ができます。
- 店舗への来店者数や商品の販売数
- 交通機関の利用者数
このチュートリアルを実践すると、上記例も含め大小関係に意味のある数値(販売数であれば100個と200個では大小に意味がある)を予測する課題(回帰問題)への適用も簡単にできるようになります。
数値回帰のおおまかな流れ
下図は、今回の例における数値回帰のおおまかな流れです。

-
Microsoft Excel(Excel)を使ってデータをBLOCKSで扱える形式に加工
- 東京都の気象情報・日中時間・電力使用量をまとめます。
- まとめたデータをトレーニング用データと予測(検証)用データに分割します。
-
モデルジェネレーターを使って学習(トレーニング)
- トレーニング用データ中の気象情報・日中時間と電力使用量の因果関係を学習させます。
- トレーニング結果として、モデルと呼ばれる学習成果が得られます。
-
フローデザイナーを使って電力使用量を予測
- モデルと予測(検証)用データ(気象情報・日中時間)を使って電力使用量を予測します。
この流れは、データが異なっても(別の課題でも)基本的に同じです。
数値回帰を試してみよう
このチュートリアルでは、下図のステップで数値回帰の一連の流れを解説します。

機械学習では、まとまったデータが必要不可欠です。機械学習では、まとまったデータを元に学習することで、予測が可能となります。このため、機械学習においてデータの収集と加工が最初の作業となります(上図左端のステップ)。
なお、チュートリアルを進めるにあたって、BLOCKS推奨のウェブブラウザーGoogle Chromeを準備してください。Firefoxでも構いませんが、このチュートリアルでは、Google Chromeの使用を前提にしています。
CSVファイルを準備しよう
まず、数値回帰のトレーニングと予測に必要なデータを準備します。データは、カンマ(,)区切りのCSVファイル(BOMなし・UTF-8)で用意します。
トレーニング用データは、東京都の日毎の気象情報および日中時間と電力使用量を使用します。
- 最高気温
- 最低気温
- 日照時間
- 平均湿度
- 日中時間
- 電力使用量
トレーニングでは、気象情報および日中時間と電力使用量の間にどのような因果関係があるのかを学習させます。

ここでは、因果関係の原因となる項目(最高気温・最低気温・日照時間・平均湿度・日中時間)のことを「因子」と呼び、因果関係の結果となる項目(電力使用量)のことを「結果となる値」と呼びます。
予測では、モデルを使って未学習の因子から結果となる値を予測します。

予測用データは、「キー項目」と「因子」を使用します。キー項目は、ひとまとまりの予測用データ(1行分のデータ)を特定するための値です。キー項目は、予測用データ全体でユニークな値でなければなりません。今回は、年月日をキー項目として用います。
これらのデータは、気象庁・国立天文台・東京電力パワーグリッドの各ホームページから入手できます。
- 最高気温・最低気温・日照時間・平均湿度:気象庁open_in_new
- 日中時間:国立天文台open_in_new
- 電力使用量:東京電力パワーグリッドopen_in_new
info_outline日中時間は、国立天文台が提供する日の入りと日の出の時間から算出します。時間の単位は分とします。
このチュートリアルでは、2018年1月1日から2020年12月31日までの約3年間分のデータを準備し、トレーニング用データと予測用データに分けて使用します。
データの種類 | データ量(期間) |
---|---|
トレーニング用データ | 2018年1月1日から2020年11月30日までの2年11か月分 |
予測用データ | 2020年12月1日から2020年12月31日までの1か月分 |
info_outline予測用データは、実運用では未来のデータを使用します。このチュートリアルでは、実運用前の検証段階を想定しています。このため予測用データは、トレーニング結果の確からしさをテストするため、トレーニングには使用していない過去のデータを用います。
因子については、まとめたデータを用意しました。
データ | 説明 |
---|---|
cloud_download サンプル気象データ(weather_daytimeminutes.csv) |
気象庁と国立天文台が提供するデータから東京都の気象情報と日中時間をひとつにまとめたカンマ(,)区切りのCSVファイルです。このファイルには、2018年1月1日から2020年12月31日までの以下のデータが含まれています。
左の欄のリンクをマウスの右ボタンでクリックしてください。表示されるメニューからリンク先を保存する旨の項目をクリックするとダウンロードできます。 warningこのデータを利用した一切の行為について気象庁および国立天文台は何ら責任を負いません。 |
結果となる値の電力使用量は、2次配布が許可されていないため、東京電力パワーグリッドのダウンロードページopen_in_newから直接ダウンロードします。

ダウンロードは、2018年・2019年・2020年のリンク(❶)をそれぞれマウスの右ボタンでクリックしてください。表示されるメニューからリンク先を保存する旨の項目をクリックするとダウンロードできます。いずれもカンマ(,)区切りのCSVファイルです。ファイル名は、それぞれjuyo-2018.csv・juyo-2019.csv・juyo-2020.csvです。
これで、データがすべて揃いました。これから、これらのデータをBLOCKSで扱えるデータ形式に加工していきます。
データの加工方法は色々ありますが、このチュートリアルでは、Excelで因子と結果となる値をひとつにまとめます(結合)。その後、トレーニング用データと予測用データへ分割します。

それでは、Excelで因子データと結果となる値をひとつにまとめていきます。形式は以下のように、因子→結果となる値の順に並べます。表の見出しは英数字とアンダースコア(_)で構成します(括弧内の表記が実際の見出し)。

(図をクリックすると拡大表示されます。)
info_outline年月日は因子データではありませんが、電力使用量をまとめたり、トレーニング用データと予測用データへ分割する際に必要です。また、予測用データのキー項目としても使います。その際、キー項目はkeyという名称でなければなならないため、keyという表見出しにしています。
ダウンロードしたサンプル気象データ(weather_daytimeminutes.csv)をExcelで開きます。

このブックの新しいワークシートに、3つの電力使用量のCSVファイルを取り込んでいきます。
[ファイル]メニューから[オプション]をクリックします。

[データ](❶)をクリックし、[テキストから(レガシ)](❷)にチェックを付けて、[OK]ボタンをクリックします。
info_outlineExcelのバージョンが古い場合は、このステップは不要です。

[データ](❶)→[データの取得](❷)→[従来のウィザード](❸)→[テキストから(レガシ)](❹)の順にクリックします。
info_outlineExcelのバージョンが古い場合は、[データ]→[外部データの取り込み]→[テキストファイル]をクリックします。

juyo-2018.csvファイル(❶)→[インポート]ボタン(❷)の順にクリックします。

3行分のヘッダを読み飛ばすため、[取り込み開始行](❶)を4
に変更し、[次へ]ボタン(❷)をクリックします。

読み込むファイルはカンマ区切りのCSVファイルのため、区切り文字の[コンマ]のチェックボックス(❶)にチェックを入れて、[完了]ボタン(❷)をクリックします。

電力使用量のデータファイルは、新しいワークシートに取り込みます。このため、データを返す先として[新規ワークシート](❶)をクリックし、更に[OK]ボタン(❷)をクリックします。

2つ目のファイルjuyo-2019.csvを取り込む準備として、アクティブなセルの位置を最終行の次行(A8761のセル)に移動させます。キーボード操作で、Ctrl + ↓の後に、↓を1回押します。これで、A8761のセルがアクティブになります。

先ほどと同じ手順([データ]→[データの取得]→[従来のウィザード]→[テキストから(レガシ)])で、juyo-2019.csvを取り込みます。

ただし、データを返す先の指定では、[既存のワークシート]が選択され、=$A$8761(❶)となっていることを確認し[OK]ボタン(❷)をクリックします(異なる場合はこれに合わせます)。

3つ目のファイルjuyo-2020.csvを取り込む準備として、アクティブなセルの位置を最終行の次行(A17521のセル)に移動させます。キーボード操作で、Ctrl + ↓の後に、↓を1回押します。これで、A17521のセルがアクティブになります。

先ほどと同じ手順([データ]→[データの取得]→[従来のウィザード]→[テキストから(レガシ)])で、juyo-2020.csvを取り込みます。

ただし、データを返す先の指定では、[既存のワークシート]が選択され、=$A$17521(❶)となっていることを確認し[OK]ボタン(❷)をクリックします(異なる場合はこれに合わせます)。

これで、3つの電力使用量のデータファイルがワークシートSheet1に取り込めました。データは、日・時・電力使用量の順で並んでいます。
取り込んだ電力使用量のデータを見ると、1時間毎の電力使用量が記録されています。これに対して、今回のトレーニングデータは、気象情報および日中時間を日毎のデータでまとめています。このため、取り込んだこのデータはそのままでは使えず、電力使用量を日毎のデータに再集計する必要があります。
それでは、ワークシートSheet1の電力使用量を日毎のデータにまとめて、ワークシートweather_daytimeminutesに記録する手順を紹介します。

ワークシートをweather_daytimeminutes(❶)に切り替えて、セルG1(❷)をクリックし、electricity_usage
と電力使用量の見出しを入力します。

セルG2(❶)をクリックし、=SUMIF(Sheet1!$A:$A,A2,Sheet1!$C:$C)
と日毎の電力使用量を求める計算式を入力します。

これで、2018年1月1日分の電力使用量が計算されてG2に入力されました。後は、G3以降のセルに同様の式を展開するだけです。

G2セル(❶)をクリックし、G2セル右下隅の矩形部分(❷)をダブルクリックします。

これで、3年分の気象情報・日中時間・電力使用量のデータがひとつのシートにまとまりました。
このまとめたデータからトレーニング用データと予測(検証)用データに分割するため、シートを2枚追加します。

この例では、Sheet2・Ssheet3を追加し、分かりやすいようにそれぞれトレーニング用データ
・予測用データ
というシート名に変更しています。
それでは、データをまとめたシートからトレーニング用データシートへ、トレーニング用データをコピーします。

データをまとめたシート(weather_daytimeminutes)のB2セルからG1066セルまでを範囲選択して、コピーします(見出しの行と日付の列は含めない)。

コピーしたデータをトレーニング用データシートのA1セルに、形式を選択して貼り付けます。形式は、値の貼り付けを選択します。

続けて、データをまとめたシートから予測用データシートへ、予測用データをコピーします。

データをまとめたシートのA1067セルからF1097セルまでを範囲選択して、コピーします(最終列は含めない)。

予測用データには、トレーニング用データと違い見出し(ヘッダー)が必要です。このため、予測用データは、2行目以降に作成します。
コピーしたデータを予測用シートのA2セルに、貼り付け(❶)ます。

ヘッダーもデータをまとめたシートから持ってきます。

データをまとめたシートのA1セルからF1セルまでを範囲選択して、コピーします。

コピーしたヘッダーを予測用シートのA1セルに、貼り付け(❶)ます。

これで、トレーニング用データと予測(検証)用データの準備ができました。これらをCSVファイルへ出力します。
トレーニング用データシートに切り替えて、F12キーを押します。

[ファイル名]をpredict_electricity_demand_train.csv
(❶)に変更し、[保存]ボタン(❷)をクリックします。

[OK]ボタンをクリックします。
予測用データシートに切り替えて、F12キーを押します。

[ファイル名]をpredict_electricity_demand_test.csv
(❶)に変更し、[保存]ボタン(❷)をクリックします。

[OK]ボタンをクリックします。
このExcelブックは、名前を付けて保存で、Excelブック形式で保存してください。保存時の名前は自由に決めて構いません(例:predict_electricity_demand.xlsx
)。
これで、データの分割が完了しました。

info_outline図では分かりやすいように、トレーニング用データにヘッダーを記載していますが、実際のファイルにはヘッダーは含みません。
最後に、これらのファイルをGoogle Cloud Storage(GCS)へアップロードします。これは、BLOCKSの機械学習が、トレーニング用データ・予測用データのCSVファイルをGCSから読み取る仕様となっているためです。
ファイルをGCSへアップロードするには、BLOCKSのサポートツールGCS Explorerを使用します。
ウェブブラウザーで、BLOCKSにログインopen_in_newします。

- グローバルナビゲーション左端のmenuをクリック
- [GCS Explorer]をクリック

- 適切なGCPサービスアカウントを選択
既に適切なGCPサービスアカウントが選択されている場合はそのまま
info_outline既にGCPサービスアカウント選択済みでこの画面を表示したい場合は、❷のアイコンをクリックします。

- 末尾が-us-central1-dataのバケット名をクリック
既に適切なバケットが選択されている場合はそのまま
info_outline既に他のバケットもしくはフォルダーを選択している場合で、この画面を表示したい場合は、❷の[バケット一覧]をクリックします。
info_outlineセルフサービスプラン(無料トライアル含む)の場合は、プロジェクト作成時にオプションを選択してバケットが同時に作成されていることを前提としています。
バケットがひとつもない場合は、プロジェクト設定のGCPサービスアカウントの項で、バケットの作成ができます(下図❶の部分をクリック)。

既に異なるバケットが作成済みの場合は、そのバケットを選択しても構いません。ただし、そのバケットのロケーションタイプはRegion、ロケーションはus-central1、ストレージクラスはStandardを速度およびコストの面から強く推奨します。

- フォルダーに歯車の絵柄のボタンをクリック
- [ファイルアップロード]をクリック

- predict_electricity_demand_train.csvとpredict_electricity_demand_test.csvを選択
- [開く]ボタンをクリック

これでCSVファイルの準備ができました。
モデルジェネレーターでトレーニングしよう
続いて、準備したトレーニング用データを使って、モデルジェネレーターで学習(トレーニング)を行います。
まず、モデルジェネレーターを準備します。

- グローバルナビゲーション左端のmenuをクリック
- [モデルジェネレーター]をクリック
モデルジェネレーターがひとつもない場合は、「モデルジェネレーターとは」の画面が表示されます。

この画面が表示された場合は、[利用開始]ボタン(❶)をクリックします。
モデルジェネレーターがひとつ以上ある場合は、作成済みのモデルジェネレーターの一覧が表示されます。

この画面が表示された場合は、[追加]ボタン(❶)をクリックします。

- [数値回帰タイプ]をクリック
- [次へ]ボタンをクリック

- 名前を入力(例:
電力の需要予測
) - [次へ]ボタンをクリック
info_outline無料トライアルおよびセルフサービスプランの場合は、画面の案内に沿って以下のステップを進めてください。

この画面で、トレーニング用データの形式を設定します。
[項目を追加する]ボタン(❶)を5回クリックして、結果となる値を除く項目名を入力します。
入力する項目名は、以下のとおりです。型と型別指定は、そのままとします。
high_temperature
low_temperature
sunlight_hours
average_humidity
daytime_minutes

- [次へ]ボタンをクリック

- [完了]ボタンをクリック

- [OK]ボタンをクリック
これで、トレーニングの準備ができました。早速、トレーニングしていきます。

- [トレーニング開始]ボタンをクリック

- トレーニング名を入力(例:
1回目のトレーニング
) - folderをクリック

- -dataで終わるバケット名のarrow_drop_downをクリック
- predict_electricity_demand_train.csvをクリック
- [選択]ボタンをクリック

- [開始]ボタンをクリック
info_outlineトレーニングに必要な設定は他にもいくつかありますが、今回は標準値のまま進めます。トレーニングに必要な設定項目について詳しくは、モデルジェネレーターヘルプの「トレーニング開始」を参照してください。

トレーニングが始まり、トレーニングの状況が画面内で確認できます。
トレーニングの所要時間は、4時間ほどです(時間はサーバー側の状況により前後)。しばらくお待ちください。

トレーニングが成功で終わると、トレーニング一覧の当該トレーニングのステータスが成功に変わります。
このトレーニングのモデルを予測で使用するためには、このトレーニングのモデルを予測で使用することを明示する必要があります。モデルジェネレーターでは、この行為を適用と呼びます。

- arrow_drop_downをクリック
- 適用対象から[本番用]をクリック
- [適用]ボタンをクリック
info_outline適用対象について詳しくは、モデルジェネレーターヘルプの「トレーニングを一覧する」のアクションの項を参照してください。
もし、トレーニングが失敗する場合は、再度トレーニングしてみてください。トレーニング失敗の理由の確認方法については、「操作中にエラーとなったら」を参考にしてください。
フローデザイナーで予測しよう
フローデザイナーを準備しよう
予測は、フローデザイナーで行います。フローデザイナーのフローテンプレート作成機能を活用すると、簡単に予測ができます。このチュートリアルでは、このフローテンプレートを使った方法を解説します。

- グローバルナビゲーション左端のmenuをクリック
- [フローデザイナー]をクリック

- [利用開始]ボタンをクリック
info_outline既にフローデザイナーを作成している場合は、フローデザイナーの一覧画面が表示されます。その場合は、既存のフローデザイナーの名前をクリックして、以降の作業を進めてください。もし無料トライアル以外をお使いで、新たにフローデザイナーを作成できるライセンス枠がある場合は、フローデザイナー一覧画面の左上にある[追加]ボタンをクリックしてください。

- フローデザイナーの名前を入力(例:
チュートリアル
) - [作成]ボタンをクリック

- [チュートリアルopen_in_new]をクリック
予測フローを作成しよう
新しいタブでフローデザイナーが開きます。引き続き、フローテンプレート作成機能を使って、数値回帰で予測するフローを作成します。

- [フローテンプレート作成]ボタンをクリック

- [数値回帰予測]をクリック
- [次へ]ボタンをクリック

電力の需要予測
と入力- [次へ]ボタンをクリック

- [電力の需要予測(数値回帰タイプ)]をクリック
- [オンライン予測]をクリック
- [次へ]ボタンをクリック

- [Google Cloud Storage(GCS)]をクリック
- folderをクリック

- arrow_drop_downをクリック
- predict_electricity_demand_test.csvをクリック
- [選択]ボタンをクリック

- [次へ]ボタンをクリック

- [Google Cloud Storage(GCS)]をクリック
- 表示されているURLに続けて
predict_electricity_demand_results.csv
を追加入力 - [次へ]ボタンをクリック
この設定で予測結果は、GCS上のpredict_electricity_demand_results.csvファイルに出力されます。

- [配置]ボタンをクリック
作成されたフローが下図の赤枠部分に配置されます。

- [保存]ボタンをクリック
予測フローを実行して予測をしよう
予測結果を確認しよう
予測結果は、GCS上にCSVファイルとして出力されています。CSVファイルをダウンロードして、Excelで内容を確認します。
別タブにあるBLOCKSの画面(フローデザイナーの一覧画面)に切り替えます。

- グローバルナビゲーション左端のmenuをクリック
- [GCS Explorer]をクリック

- predict_electricity_demand_results.csvファイル先頭のチェックボックスにチェックを入れる
- [ファイルダウンロード]ボタンをクリック

- predict_electricity_demand_results.csvopen_in_newをクリック

- [保存]ボタンをクリック

- [閉じる]ボタンをクリック
これで、予測結果のCSVファイルがダウンロードできました。早速、Excelで開いて確認してみます。

各列の意味は、以下のとおりです。
列 | 意味 |
---|---|
key |
予測用データのキー項目です。 |
output |
キー毎の予測用データに対応する予測結果(電力使用量)です。 |
この予測では、2020年12月1日から2020年12月31日までの過去のデータを使用しました。電力使用量の実績値と比較して予測の精度を確認してみます。

最終列(C列)に、CSVファイルを準備したときに保存したExcelブックから、2020年12月1日から2020年12月31日までの電力使用量の実績値を貼り付けます。

- [挿入]をクリック
- [折れ線/面グラフの挿入]アイコンをクリック
- [マーカー付き折れ線]アイコンをクリック

これでグラフが表示されました。予測値と実績値は、概ね似たような値を取っていることがわかります。
問題は、この予測精度は良いのか悪いのかという点です。これは、この電力の需要予測の利用シーンによって異なります。このチュートリアルでは、明確な利用シーンを想定していないため、この結果についてこれ以上言及できません。
info_outline数値回帰の評価について詳しくは、弊社ブログ記事「精度の評価と評価指標について(回帰編)open_in_new」を参考にしてください。
操作中にエラーとなったら
トレーニングや予測時にエラーが発生した場合は、以下に紹介する方法で、エラー情報が収集できます。
モデルジェネレーターの場合は、トレーニング詳細画面の「エラー内容」で確認できます。以下に、モデルジェネレーターでのエラー内容の確認方法を紹介します。

- ステータスが[失敗]と表示されているトレーニングのトレーニング名をクリック

- [エラーログ]をクリック
- [エラーログをコピーする]をクリック(問い合わせをする場合)
フローデザイナーの場合は、先に紹介したログパネルで確認できます。

エラー部分が赤字で表示されます。
エラーの原因を特定するには、エラー部分を中心に前後のメッセージも含めて読み解くと良いです(フローデザイナーは、[エラーログの詳細を表示]チェックボックスをチェック)。
エラーが発生し、何度リトライしても失敗するようであれば、グローバルナビゲーション右端のユーザーアイコンをクリックして表示される[お問い合わせ]からエラー内容をテキストファイル化したファイルを添付してお問い合わせください。エラー内容をテキストファイル化する場合は、赤字のエラー部分だけではなく、すべてのエラーメッセージを含めてください(フローデザイナーは、[エラーログの詳細を表示]チェックボックスをチェック)。
フローデザイナーでエラーが発生する場合は、フローをエクスポートしたJSONファイルも添付してください。
info_outlineお問い合わせについて詳しくは、基本操作ガイドの「お問い合わせ」を参考にしてください。
まとめ
このようにBLOCKSを使うと、データを準備するだけで、機械学習の専門的な知識は必要なく簡単に数値回帰が利用できます。ただし、データの準備に際し、留意点があります。準備するカンマ(,)区切りのCSVファイルは、BOMなし・UTF-8にしてください。これ以外だと、BLOCKSで扱うことができません。
info_outlineBOMなし・UTF-8について詳しくは、弊社ブログの「MAGELLAN BLOCKSを利用する上で文字コードのお話し」を参考にしてください。
なお、トレーニングの精度について評価はしませんでしたが、因子を見直すことで改善の余地はあると思われます。
例えば、企業が休みの休日は電力使用量が平日よりも少なくなる可能性があります。また、季節によっても電力使用量の度合いは異なってくるでしょう。これらのことから、月や曜日を因子として追加することで、トレーニングの精度はより良くなる可能性があると思われます。
今回のチュートリアルの応用課題として、データの準備段階でこれらの因子を追加して試してみてはいかがでしょうか。
info_outline機械学習を使ってビジネスの課題を解決するには、チュートリアル同様にまずデータ収集から始めます。社内にある既存のデータを集めたり、新たにアンケートを採ってデータを集めたり、データを購入することもあります。更にそれらデータを精査し、データを選別したり、不正なデータを除去するなどのデータ加工の作業も必要です。このデータ収集と加工作業が、機械学習のステップの大半を占めると言っても過言ではありません。