数値回帰モデルを利用した需要予測

Demand forecasting with the regression model

数値回帰モデルを利用した需要予測

はじめに

MAGELLAN BLOCKS(BLOCKS)の機械学習サービスを使うと、数値回帰を通じてさまざまなデータから予測ができます。数値回帰は、過去のデータから数値的な予測を導き出す手法です。たとえば、天候や曜日のデータを活用して、店舗の来店者数、商品の販売数、交通機関の利用者数などの予測が可能です。

このチュートリアルでは、東京都の気象情報と日中時間(日の出から日の入りまでの時間)を用いて、電力使用量の予測(電力の需要予測)を例に挙げます。特に夏の暑い日や冬の寒い日など、季節による電力使用量の変動を分析するシナリオを取り上げ、BLOCKSを使った数値回帰の具体的な手順を解説します。

数値回帰のおおまかな流れ

BLOCKSの機械学習サービスは、「DataEditor」および「フローデザイナー」で利用できます。

このチュートリアルでは、「DataEditor」を使用して数値回帰を行います。下図は、今回の例における数値回帰の流れです。

  1. Microsoft Excel(Excel)を使って東京都の気象情報・日中時間・電力使用量をまとめたCSVファイルを作成
  2. DataEditorでCSVファイルを取り込み(インポート)、トレーニング用データと予測用データに分割
  3. DataEditorで学習(トレーニング)
    気象情報および日中時間と電力使用量との因果関係を学ばせます。
    このトレーニングの結果として、モデルと呼ばれる学習成果が得られます。
  4. DataEditorで電力使用量を予測

数値回帰を試してみよう

このチュートリアルでは、下図のステップで数値回帰の一連の流れを解説します。

機械学習では、まとまったデータが必要不可欠です。機械学習では、まとまったデータを元に学習を行うことで、予測が可能となります。このため、機械学習においてデータの収集と加工が最初の作業となります。

なお、チュートリアルを進めるにあたって、BLOCKS推奨のウェブブラウザーGoogle Chromeを準備してください。Firefoxでも構いませんが、このチュートリアルでは、Google Chromeの使用を前提にしています。

CSVファイルを準備しよう

まず、数値回帰のトレーニングと予測に必要なデータを準備します。データは、カンマ(,)区切りのCSVファイル(BOMなし・UTF-8)で用意します。

トレーニング用データは、東京都の日毎の気象情報および日中時間と電力使用量を使用します。

  • 最高気温
  • 最低気温
  • 日照時間
  • 平均湿度
  • 日中時間
  • 電力使用量

これらのデータは、気象庁・国立天文台・東京電力パワーグリッドの各ホームページから入手できます。

report 注意

日中時間は、国立天文台が提供する日の入りと日の出の時間から算出します。時間の単位は分とします。

このチュートリアルでは、2018年1月1日から2020年12月31日までの3年間のデータを準備し、トレーニング用データと予測用データに分けて使用します。

データの種類 データ量(期間)
トレーニング用データ 2018年1月1日から2020年11月30日までの2年11か月分
予測用データ 2020年12月1日から2020年12月31日までの1か月分

announcement 重要

予測用データは、実運用では未来のデータを使用します。このチュートリアルでは、実運用前の検証段階を想定しています。このため予測用データは、トレーニング結果の確からしさをテストするため、トレーニングには使用していない過去のデータを用います。

因子については、まとめたデータを用意しました。

データ 説明

サンプル気象データ(weather_daytimeminutes.csv)

気象庁と国立天文台が提供するデータから東京都の気象情報と日中時間をひとつにまとめたカンマ(,)区切りのCSVファイルです。このファイルには、2016年1月1日から2018年12月31日までの以下のデータが含まれています。

  • 年月日
  • 最高気温
  • 最低気温
  • 日照時間
  • 平均湿度
  • 日中時間

左の欄のリンクをマウスの右ボタンでクリックしてください。表示されるメニューからリンク先を保存する旨の項目をクリックするとダウンロードできます。

announcement 警告

このデータを利用した一切の行為について気象庁および国立天文台は何ら責任を負いません。

結果となる値の電力使用量は、2次配布が許可されていないため、東京電力パワーグリッドのダウンロードページopen_in_newから直接ダウンロードします。

ダウンロードは、2020年・2019年・2018年のリンク(❶)をそれぞれマウスの右ボタンでクリックしてください。表示されるメニューからリンク先を保存する旨の項目をクリックするとダウンロードできます。いずれもカンマ(,)区切りのCSVファイルです。ファイル名は、それぞれjuyo-2020.csvjuyo-2019.csvjuyo-2018.csvです。

これで、データがすべて揃いました。これから、これらのデータをBLOCKSで扱えるデータ形式に加工していきます。

データの加工方法は色々ありますが、このチュートリアルでは、Excelで因子と結果となる値をひとつにまとめます。その後、BLOCKSのDataEditorで、トレーニング用データと予測用データへ分割します。

データ加工の流れ図

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

トレーニングデータの加工例

(図をクリックすると拡大表示されます。)

info 参考

因子年月日は因子データではありませんが、電力使用量をまとめたり、トレーニング用データと予測用データへ分割する際に必要です。

先にダウンロードしたweather_daytimeminutes.csvファイルをExcelで開きます。

Excelでweather_daytimeminutes.csvファイルを開いた様子

このファイル(ブック)の新しいワークシートに、3つの電力使用量のデータファイルを取り込んでいきます。

Excel 2019Microsoft 365を利用の方は、以下の手順を実施してテキストファイルウィザードの機能が利用できるようにしてください。

Excel 2019やMicrosoft 365で従来のテキストウィザードを有効にする手順(1)
  1. ファイル」メニューをクリック
Excel 2019やMicrosoft 365で従来のテキストウィザードを有効にする手順(2)
  1. オプション」をクリック
Excel 2019やMicrosoft 365で従来のテキストウィザードを有効にする手順(3)
  1. データ」をクリック
  2. テキストから(レガシ)」をクリック
  3. OK]ボタンをクリック
CSVファイルを取り込む様子
  1. データ」をクリック
  2. データの取得」をクリック
  3. 従来のウィザード」をクリック
  4. テキストから(レガシ)」をクリック

lightbulb ヒント

Excel 2016以前をお使いの方は、[データ]→[テキストまたはCSVから]の順にクリックします。

取り込むファイルを指定する様子
  1. juyo-2018.csvファイルをクリック
  2. インポート]ボタンをクリック
ファイルの何行目から取り込むかを指定する様子

3行分のヘッダを読み飛ばす設定を以下の手順で実施します。

  1. 取り込み開始行]を4に変更
  2. 次へ]ボタンをクリック
ファイルのフォーマットを指定する様子

カンマ区切りのCSVファイルを読み込むための設定を以下の手順で実施します。

  1. 区切り文字の[コンマ]のチェックボックスをオン
  2. 完了]ボタンをクリック
新規ワークシートにファイルを取り込む様子

電力使用量のデータファイルは、新しいワークシートに取り込みます。

  1. 新規ワークシート]をクリック
  2. OK]ボタンをクリック
1つ目の電力使用量のデータファイルを取り込んだ様子

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

アクティブセルをA8761に変更した様子

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

データを返す先を指定する様子
  1. 既存のワークシート」が選択され、=$A$8761となっていることを確認
    =$A$8761以外の場合は、=$A$8761に変更
  2. OK]ボタンをクリック
2つ目の電力使用量のデータファイルを取り込んだ様子

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

アクティブなセルをA17521に変更した様子

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

データを返す先を指定する様子
  1. 既存のワークシート」が選択され、=$A$17521となっていることを確認
    =$A$17521以外の場合は、=$A$17521に変更
  2. OK]ボタンをクリック
3つ目の電力使用量のデータファイルを取り込んだ様子

これで、3つの電力使用量のデータファイルがワークシートSheet1に取り込めました。データは、日・時・電力使用量の順で並んでいます。

取り込んだ電力使用量のデータを見ると、1時間毎の電力使用量が記録されています。これに対して、今回のトレーニングデータは、気象情報および日中時間を日毎のデータでまとめています。このため、取り込んだこのデータはそのまま使えず、電力使用量を日毎のデータに再集計する必要があります。

それでは、ワークシートSheet1の電力使用量を日毎のデータにまとめて、ワークシートweather_daytimeminutesに記録する手順を紹介します。

ワークシートを切り替えて、セルG1をクリックする様子
  1. ワークシートをweather_daytimeminutesに切り替える
  2. セルG1をクリックし、electricity_usageと電力使用量の見出しを入力
セルG2に計算式を入力する様子
  1. セルG2をクリックし、=SUMIF(Sheet1!$A:$A,A2,Sheet1!$C:$C)と日毎の電力使用量を求める計算式を入力
セルG2入力後の様子

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

計算式を一気に展開する様子
  1. G2セルをクリック
  2. G2セル右下隅の矩形部分をダブルクリック
計算式が一気に展開された様子

これで、3年分の気象情報・日中時間・電力使用量のデータがひとつにまとまりました。

この後はDataEditorで不正データの除去(クレンジング)と、トレーニング用データ・予測用データへ分割します。

DataEditorでは、カンマ区切りのCSVファイルが取り込めるので、Excelで加工中のデータをカンマ(,)区切りのCSVファイルへ出力します。

Excel上でF12キーを押します。

CSV形式でファイルを保存する様子
  1. ファイルの種類」から「CSV(コンマ区切り)(*.csv)」をクリック
  2. ファイル名」をpredict_electricity_demand.csvに変更
  3. 保存]ボタンをクリック
ファイル保存確認画面
  1. OK]ボタンをクリック

これで、カンマ(,)区切りのCSVファイルの出力は完了です。Excelは、このまま保存せずに閉じても構いませんし、ブックとして保存しても構いません。このチュートリアルでは、以降このExcelのデータは使用しません。

DataEditorでデータを分割しよう

続いて、Excelで作成したデータをDataEditorでトレーニング用データと予測用データに分割します。

ウェブブラウザーで、BLOCKSにログインします。以降、BLOCKSログイン後を前提とした操作の解説です。

DataEditorを開く様子
  1. グローバルナビゲーション左端のメニューアイコン()をクリック
  2. DataEditor」をクリック

作成したCSVファイルをDataEditorにインポートします。

インポートボタンをクリックする様子
  1. インポート]ボタンをクリック
ファイルをインポートする様子
  1. インポート元から「Upload」をクリック
  2. GCS URLで-dataで終わる項目をクリック
  3. ファイル欄に、predict_electricity_demand.csvファイルをドラッグ・アンド・ドロップ
  4. データセットIDの[]ボタンをクリックし、tutorialと入力
    既にtutorialがある場合はそれを選択
  5. 名前欄に、電力の需要予測の基礎データと入力
  6. インポート]ボタンをクリック

lightbulb ヒント

DataEditorは、BigQuery上のデータを視覚的に操作できるツールです。BigQueryに関する知識は必要ありませんが、BigQuery上の重要な要素であるデータセットとテーブルは指定する必要があります。Microsoft Excelに例えると、データセットはブックで、テーブルはシートに対応する概念です。

インポートしたデータを開く様子
  1. 開く]ボタンをクリック
インポートしたデータの操作画面

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

テーブル分割機能を使用する様子
  1. テーブル」タブをクリック
  2. テーブル操作」から「テーブル分割」のアイコンをクリック
トレーニング用データと予測用データに分割する様子
  1. 分割方法から「カスタム」をクリック
  2. 分割条件から「key」をクリック
  3. 同じく分割条件からアイコンをクリック
  4. スライダーを左にスライドさせ、日付が2020-11-30となるように調整
  5. 列名がkeyのチェックを外す
    (トレーニング用データに必要ない年月日を取り除く)
  6. 列名がelectricity_usageのチェックを外す
    (予測用データに必要のない結果となる値を取り除く)
  7. 分割]ボタンをクリック
分割完了の画面
  1. 戻る]ボタンをクリック

これで、データの分割が完了し、数値回帰のトレーニングと予測に必要なデータの準備ができました。

テーブル分割でできたトレーニング用データと予測用データの図

DataEditorでトレーニングしよう

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

トレーニングデータのデータ編集画面へ切り替える様子
  1. 電力の需要予測の基礎データ_train」をクリック
  1. モデル作成」タブをクリック
  2. 線形回帰(回帰)」をクリック
  3. 詳細設定」をクリック
  4. high_temperaturelow_temperaturesunlight_hoursaverage_humiditydaytime_minutes列の「因子設定」が「予測因子」となっていることを確認
  5. electricity_usage列の「因子設定」が「予測対象」となっていることを確認
  6. モデル作成]ボタンをクリック
  1. 閉じる]ボタンをクリック

これで、トレーニングが始まります。しばらくお待ちください。

トレーニングの状況は、モデル一覧画面およびモデルの詳細画面で確認できます。

ホーム画面に切り替える様子
  1. をクリック
モデル一覧画面に切り替える様子
  1. モデル]タブをクリック

モデル名(❶)をクリックすると、そのモデルの更に詳細な情報が確認できます。

トレーニングが成功で終わると、ステータスが「モデル作成完了」と表示されます。

DataEditorで予測しよう

ここでは、分割した予測用のデータ(電力の需要予測の基礎データ_test)を使って予測します。

  1. home」をクリック
  1. 電力の需要予測の基礎データ_test」をクリック
  1. 予測」タブをクリック
  2. 予測に使うモデルを選択してください」をクリック
  3. 線形回帰」左横の「arrow_drop_down」をクリック
  4. predict_electricity_demand_train_model」をクリック
  5. 予測]ボタンをクリック

predicted_label(結果)」列が予測結果です。

操作中にエラーとなったら

DataEditorのモデル作成時のエラー内容は、モデル詳細画面の「エラーログ」で確認できます。以下に、そのエラー内容の確認方法を紹介します。

モデル一覧で失敗したトレーニングをクリックする様子
  1. モデル一覧の[誤差/正確率]の欄が[失敗]と表示されている名前をクリック
トレーニング詳細で失敗したトレーニングをクリックする様子
  1. エラーログ]をクリック
エラー内容を確認する様子
  1. コピー]ボタンをクリック
    エラーの内容がクリップボードにコピーされます。

info 参考

お問い合わせについて詳しくは、基本操作ガイドの「お問い合わせ」を参考にしてください。

まとめ

このようにBLOCKSを使うと、データを準備するだけで、機械学習の専門的な知識は必要なく簡単に数値回帰が利用できます。ただし、データの準備に際し、留意点があります。準備するカンマ(,)区切りのCSVファイルは、BOMなし・UTF-8にしてください。これ以外だと、BLOCKSで扱うことができません。

info 参考

BOMなし・UTF-8について詳しくは、弊社ブログの「MAGELLAN BLOCKSを利用する上で文字コードのお話し」を参考にしてください。

なお、トレーニングの精度について評価はしませんでしたが、因子を見直すことで改善の余地はあると思われます。

例えば、企業が休みの休日は電力使用量が平日よりも少なくなる可能性があります。また、季節によっても電力使用量の度合いは異なってくるでしょう。これらのことから、月や曜日を因子として追加することで、トレーニングの精度はより良くなる可能性があると思われます。

今回のチュートリアルの応用課題として、データの準備段階でこれらの因子を追加して試してみてはいかがでしょうか。

announcement 重要

機械学習を使ってビジネスの課題を解決するには、チュートリアル同様にまずデータ収集から始めます。社内にある既存のデータを集めたり、新たにアンケートを採ってデータを集めたり、データを購入することもあります。更にそれらデータを精査し、データを選別したり、不正なデータを除去するなどのデータ加工の作業も必要です。このデータ収集と加工作業が、機械学習のステップの大半を占めると言っても過言ではありません。

この情報は役に立ちましたか?