数値回帰モデルを利用した需要予測
はじめに
BLOCKSの機械学習のサービスを使うと、数値回帰が行えます。数値回帰を使うと、天候や曜日などから店舗への来店者数・商品の販売数・交通機関の利用者数などが予測できます。
このチュートリアルでは、東京都の気象情報および日中時間(日の出から日の入りまでの時間)から電力使用量の予測(電力の需要予測)をする例を使って、BLOCKSの数値回帰の使い方を解説します。

数値回帰のおおまかな流れ
BLOCKSの機械学習サービスは、「モデルジェネレーター」・「DataEditor」・「フローデザイナー」から利用できます。
このチュートリアルでは、「DataEditor」と「フローデザイナー」を使用して数値回帰を行います。下図は、今回の例における数値回帰の流れです。

- Microsoft Excel(Excel)を使って東京都の気象情報・日中時間・電力使用量をまとめたCSVファイルを作成
- DataEditorでCSVファイルを取り込み(インポート)、トレーニング用データと予測用データに分割
- DataEditorで学習(トレーニング)
気象情報および日中時間と電力使用量との因果関係を学ばせます。
このトレーニングの結果として、モデルと呼ばれる学習成果が得られます。 - フローデザイナーで電力使用量を予測
数値回帰を試してみよう
このチュートリアルでは、下図のステップで数値回帰の一連の流れを解説します。

機械学習では、まとまったデータが必要不可欠です。機械学習では、まとまったデータを元に学習を行うことで、予測が可能となります。このため、機械学習においてデータの収集と加工が最初の作業となります。
なお、チュートリアルを進めるにあたって、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ファイルです。このファイルには、2016年1月1日から2018年12月31日までの以下のデータが含まれています。
左の欄のリンクをマウスの右ボタンでクリックしてください。表示されるメニューからリンク先を保存する旨の項目をクリックするとダウンロードできます。 warningこのデータを利用した一切の行為について気象庁および国立天文台は何ら責任を負いません。 |
結果となる値の電力使用量は、2次配布が許可されていないため、東京電力パワーグリッドのダウンロードページopen_in_newから直接ダウンロードします。

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

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

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

このファイル(ブック)の新しいワークシートに、3つの電力使用量のデータファイルを取り込んでいきます。
Excel 2019やMicrosoft 365を利用の方は、以下の手順を実施してテキストファイルウィザードの機能が利用できるようにしてください。

- 「ファイル」メニューをクリック

- 「オプション」をクリック

- 「データ」をクリック
- 「テキストから(レガシ)」をクリック
- [OK]ボタンをクリック

- 「データ」をクリック
- 「データの取得」をクリック
- 「従来のウィザード」をクリック
- 「テキストから(レガシ)」をクリック
info_outlineExcel 2016以前をお使いの方は、[データ]→[テキストまたはCSVから]の順にクリックします。

- juyo-2018.csvファイルをクリック
- [インポート]ボタンをクリック

3行分のヘッダを読み飛ばす設定を以下の手順で実施します。
- [取り込み開始行]を
4
に変更 - [次へ]ボタンをクリック

カンマ区切りのCSVファイルを読み込むための設定を以下の手順で実施します。
- 区切り文字の[カンマ]のチェックボックスをオン
- [完了]ボタンをクリック

電力使用量のデータファイルは、新しいワークシートに取り込みます。
- [新規ワークシート]をクリック
- [OK]ボタンをクリック

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

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

- 「既存のワークシート」が選択され、=$A$8761となっていることを確認
=$A$8761以外の場合は、=$A$8761に変更 - [OK]ボタンをクリック

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

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

- 「既存のワークシート」が選択され、=$A$17521となっていることを確認
=$A$17521以外の場合は、=$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年分の気象情報・日中時間・電力使用量のデータがひとつにまとまりました。
この後はDataEditorで不正データの除去(クレンジング)と、トレーニング用データ・予測用データへ分割します。
DataEditorでは、カンマ区切りのCSVファイルが取り込めるので、Excelで加工中のデータをカンマ(,)区切りのCSVファイルへ出力します。
Excel上でF12キーを押します。

- 「ファイルの種類」から「CSV(カンマ区切り)(*.csv)」をクリック
- 「ファイル名」を
predict_electricity_demand.csv
に変更 - [保存]ボタンをクリック

- [OK]ボタンをクリック
これで、カンマ(,)区切りのCSVファイルの出力は完了です。Excelは、このまま保存せずに閉じても構いませんし、ブックとして保存しても構いません。このチュートリアルでは、以降このExcelのデータは使用しません。
DataEditorでデータを分割しよう
続いて、Excelで作成したデータをDataEditorでトレーニング用データと予測用データに分割します。
ウェブブラウザーで、BLOCKSにログインします。以降、BLOCKSログイン後を前提とした操作の解説です。

- グローバルナビゲーション左端のメニューアイコン(menu)をクリック
- 「DataEditor」をクリック
作成したCSVファイルをDataEditorにインポートします。

- [インポート]ボタンをクリック

- インポート元から「Upload」をクリック
- GCS URLで-dataで終わる項目をクリック
- ファイル欄に、predict_electricity_demand.csvファイルをドラッグ・アンド・ドロップ
- データセットIDの[+]ボタンをクリックし、
tutorial
と入力
既にtutorialがある場合はそれを選択 - 名前欄に、
電力の需要予測の基礎データ
と入力 - [インポート]ボタンをクリック
info_outlineDataEditorは、BigQuery上のデータを視覚的に操作できるツールです。BigQueryに関する知識は必要ありませんが、BigQuery上の重要な要素であるデータセットとテーブルは指定する必要があります。Microsoft Excelに例えると、データセットはブックで、テーブルはシートに対応する概念です。

- [開く]ボタンをクリック

インポートしたデータからトレーニング用データと予測用データに分割したデータを作ります。

- 「テーブル」タブをクリック
- 「テーブル操作」から「テーブル分割」のアイコンをクリック

- 分割方法から「カスタム」をクリック
- 分割条件から「key」をクリック
- 同じく分割条件からアイコンをクリック
- スライダーを左にスライドさせ、日付が2020-11-30となるように調整
- 列名がkeyのチェックを外す
(トレーニング用データに必要ない年月日を取り除く) - 列名がelectricity_usageのチェックを外す
(予測用データに必要のない結果となる値を取り除く) - [分割]ボタンをクリック

- [戻る]ボタンをクリック
これで、データの分割が完了し、数値回帰のトレーニングと予測に必要なデータの準備ができました。

DataEditorでトレーニングしよう
先ほど準備したトレーニングデータを使いDataEditorでトレーニングします。

- 「電力の需要予測の基礎データ_train」をクリック

- [モデル作成]タブをクリック
- [モデルジェネレーター(回帰)]をクリック
セルフサービスプランのみ:
プロジェクト作成後に初めてモデルを作成する場合は、ストレージ設定の操作が必要です。
- Google Cloud Storage(ストレージ)のバケットを選択
バケット名の例:-us-central1-mlで終わるバケット - フォルダーを作成もしくは選択
フォルダー名の例:blocks_ml
ストレージ設定は、初回以降は変更できません。次回以降のモデル作成時は、設定内容を確認するだけの項目として表示されます。
- [モデル作成]ボタンをクリック

- [閉じる]ボタンをクリック
これで、トレーニングが始まります。トレーニングの所要時間は、4〜5時間ほどです(時間はサーバー側の状況により前後)。しばらくお待ちください。
トレーニングの状況は、モデル一覧画面およびモデルの詳細画面で確認できます。

- homeをクリック

- [モデル]タブをクリック

このモデル一覧画面で、各モデルのトレーニング状況が「誤差/正確率」欄で確認できます。
モデル名(❶)をクリックすると、そのモデルの更に詳細な情報が確認できます。❷のアイコンをクリックすると、「誤差/正確率」のトレーニング状況が更新できます。

トレーニングが成功で終わると、「誤差/正確率」の欄に誤差の数値が表示され、以降フローデザイナーを使っての予測が可能です。
フローデザイナーで予測しよう
ここでは、フローデザイナーを使った予測方法を紹介します。
DataEditorでは、リアルタイムな予測が可能ですが、予測のバッチ処理や予測の定期的な実行はできません。このチュートリアルでは、予測のバッチ処理や予測の定期的な実行が可能な、フローデザイナーによる予測方法を紹介します。
DataEditorによる予測方法については、「DataEditorによるモデルの作成と予測」を参照願います。
フローデザイナーを準備しよう
予測は、フローデザイナーで行います。フローデザイナーのフローテンプレート作成機能を活用すると、簡単に画像分類を予測するためのフローが作成できます。このチュートリアルでは、このフローテンプレートを使った方法を解説します。

- グローバルナビゲーション左端のメニューアイコン(menu)をクリック
- 「フローデザイナー」をクリック

- [利用開始]ボタンをクリック
info_outline既にフローデザイナーを作成している場合は、「フローデザイナーとは」の画面は表示されません。後で述べるフローデザイナーの一覧画面が表示されます。その場合は、既存のフローデザイナーの名前をクリックして、以降の作業を進めてください。もし無料トライアル以外をお使いで、新たにフローデザイナーを作成できるライセンス枠がある場合は、フローデザイナー一覧画面の左上にある[追加]ボタンをクリックしてください。
info_outlineライセンス不足の場合は、その旨のメッセージが表示されます(管理者の場合は、ライセンス購入画面を表示)。メッセージが表示された場合は、組織の管理者に問い合わせてください(管理者の場合は、ラインセンスを購入してください)。

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

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

- フローデザイナーのヘッダーから[+]ボタンをクリック

作成するフローの種類を設定します。
- 「数値回帰予測」をクリック
- [次へ]ボタンをクリック

作成するフローのフロー名を設定します。
電力の需要予測
と入力- [次へ]ボタンをクリック

ここでは、フローで使用する予測ブロックの各項目を設定します。
- モデル選択で「電力の需要予測の基礎データ_train_model(数値回帰タイプ)」をクリック
- 予測形式選択で「オンライン予測」をクリック
- [次へ]ボタンをクリック

ここでは、DataEditorで準備した予測用データを設定します。
- ストレージの選択で「DataEditor」をクリック
- データの名前で「電力の需要予測の基礎データ_test」をクリック
- [次へ]ボタンをクリック

ここでは、予測結果をどこに出力するかを設定します。今回は、もっとも手軽に結果の確認ができるDataEditorを出力先とします。
- 保存先で「DataEditor」をクリック
- [次へ]ボタンをクリック
これで予測結果は、DataEditorの「電力の需要予測の基礎データ_test_result」に出力されます。

最後に、フローを配置する場所を指定します。初期設定値の[現在のタブに表示する]を採用するため、そのまま[配置]ボタン(❶)をクリックします。
作成されたフローが下図の赤枠部分に配置されます。

ここで、一旦[保存]ボタン(❶)をクリックして、フローを保存しておきます。
予測フローを実行して予測をしよう
これで、予測の準備ができました。早速、予測を試してみます。

- フロー先頭の「電力の需要予測」ブロック右端のmore_vertをクリック
- 表示されるメニュー中程の「フローの実行」をクリック
これで、電力の需要予測が実行されます。

予測の実行状況を確認するために、フローの実行ログを確認します。
- 表示中のメニューから「ログを見る」をクリック

画面下部に、ログパネルが表示されます。ログパネル左側のログリストのステータスでフローの実行状況が確認できます。フローの実行には、少々時間がかかるので、「実行中」(❶)の表示になっているはずです。実行が終わるまで、しばらく待ちます。

フローの実行が正常に終了すると、ログリストのステータスが「成功」(❶)に変わります。これで予測は完了です。
DataEditorで予測結果を確認しよう
予測結果は、DataEditorのデータとして出力しているので、DataEditorで確認します。別タブにあるBLOCKSの画面(フローデザイナーの一覧画面)に切り替えます。

- グローバルナビゲーション左端のメニューアイコン(menu)をクリック
- 「DataEditor」をクリック

- cachedをクリック
- 「電力の需要予測の基礎データ_test_result」をクリック

- 「テーブル」タブをクリック
- 「データを表示」をクリック

各列のそれぞれの意味は、以下のとおりです。
名前 | 説明 |
---|---|
key |
予測用データで指定したキー項目です。 今回の例では、2020年12月1日から2020年12月31日までの各日付がキーです。 |
output |
キーに対応した因子を元に予測した結果です。 今回の例では、各日付に対応した電力使用量が結果です。 |
予測結果が確認できたところで、予測値と実績値を比較してみます。
2020年12月分の実績値は、DataEditorへ最初にインポートした「電力の需要予測の基礎データ」の中にあります。この実績値を予測結果にまとめた後で、予測値と実測値をグラフ化して比較します。
まず、予測値と実測値をまとめる準備として、key列の型をSTRINGからDATEへ変換します(「電力の需要予測の基礎データ」のkey列の型と合わせる)。

- key列の鉛筆アイコンをクリック
- 「列の型変更」をクリック

- 型で「DATE」をクリック
- 日付や時刻の形式で「YYYY-MM-DD」をクリック
- [OK]ボタンをクリック

変更した内容を保存します。
- historyをクリック
- more_horizをクリック
- 「上書き保存」をクリック

実績値をまとめるために、テーブル結合という機能を使います。
- 「テーブルの操作」から「テーブル結合」のアイコンをクリック

まとめたい実績値を含む「電力の需要予測の基礎データ」を指定します。
- [DataEditorテーブル]ボタンをクリック
- 「電力の需要予測の基礎データ」をクリック

予測値と実績値のそれぞれの日付が一致するデータをまとめる指定をします。
- すべての列を選択するため、欄外のチェックボックスをクリック
- 列electricity_usageのチェックボックスをクリック
- [追加]ボタンをクリック
- keyをクリック
- keyをクリック
- [確認]ボタンをクリック

まとめたデータを格納する先を指定します。
- 名前に
電力の需要予測の予実比較
と入力 - データセットIDでtutorialをクリック
- テーブルIDに
predict_electricity_demand_compare
と入力 - [結合]ボタンをクリック

- [戻る]ボタンをクリック
これで予実績をグラフで確認する準備が整いました。

- 「電力の需要予測の予実比較」をクリック

- 「データ可視化」をクリック

グラフ化に必要なデータを指定します。
- 「線グラフ」をクリック
- 列をクリックし、keyをクリック
- 行をクリック
- output行とelectricity_usage行の合計列をクリック
- [実行]ボタンをクリック
しばらくすると線グラフが表示されます。

問題は、この予測精度は良いのか悪いのかという点です。これは、この電力の需要予測の利用シーンによって異なります。残念ながらこのチュートリアルでは、明確な利用シーンを想定していないため、正直なんとも言えないところです。
info_outline数値回帰の評価について詳しくは、弊社ブログ記事「精度の評価と評価指標について(回帰編)open_in_new」を参考にしてください。
操作中にエラーとなったら
DataEditorのモデル作成時のエラー内容は、モデル詳細画面の「エラーログ」で確認できます。以下に、そのエラー内容の確認方法を紹介します。

- モデル一覧の[誤差/正確率]の欄が[失敗]と表示されている名前をクリック

- [エラーログ]をクリック

- [コピー]ボタンをクリック
エラーの内容がクリップボードにコピーされます。
フローデザイナーの場合は、先に紹介したログパネルで確認できます。

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