始めてデータサイエンティストを目指す皆さんを応援しています!一緒に楽しくデータサイエンスの世界を探検しましょう。今回はTableauでデータを理解することから始めて、ディープラーニング(ニューラルネットワーク)による予測と連携することに挑戦していきたいと思います。題材として東京の気象情報から、東京電力の電力使用量を予測するモデルを作っていきたいと思います。以下分析のステップです。データを入手するそれでは、今回利用するデータをダウンロードしましょう。以下リンクを利用します。Prepで複数ファイルをユニオンした後、タイムスタンプで気象情報と電力情報を結合します。Prepで簡単にデータを結合できます。本当に簡単なのでステップは省略します。Prep)それでは早速データを可視化して、理解していきましょう!下のグラフの上段が2018年一年間の電力使用量(青色)、下段が気温の変化(緑色)です。平均気温から離れる(暑いまたは寒い)ときに電力使用量が増えることが分かります。気温は説明変数として電力の予想に利用できそうですね。可視化することで時間帯、曜日(平日・土日)によって電力利用量に差があることもわかります。平日の日中は色が濃いので電力の使用量が多いということになります。Notebookを使用して作業を行います。今回は株式会社キカガクさんの講習で学んだ内容をもとに、Chainerを使ってニューラルネットワークのモデルを作成し電力利用量を学習させます。Pythonコードの詳細な説明については省略させていただきますが、Chainerのインストール方法については、こちらの資料や株式会社キカガクさんのトレーニングコースを参照ください。電力使用量を教師データとして利用するためPandasのデータフレームに読み込みましょう。訓練データの準備を行います。Chainerをインポートします。ニューラルネットのクラスを定義します。中間層のノード数、バッチサイズを変化させながら誤差の変化を確認します。ハイパーパラメータを変えてみてエポック数(何回データを総なめして学習したか)が進むごとにどれだけ学習できたか(誤差が減ったか)をグラフにします。値が低くなっているほど誤差が小さくなり、学習が進んだことを表します。なることが分かりましたので、ハイパーパラメータのチューニングの結果としてはこの設定が良い感じのようです。Prep)2018年の訓練データ全体に、ニューラルネットで予測した予測値を列としてデータフレームの一番右端に追加しCSV形式で出力します。青色が実績で、オレンジが予測です。実績と予測の動きに大きな乖離が見られますね。頑張ってニューラルネットワークのハイパーパラメータをチューニングしてみましだが、気象情報をそのまま使っても、当てはまりの良い予測モデルはできていないようです。Error)という指標を使って数値化しましょう。定義はこういった形になりますが、ざっくりいうと、それぞれのデータの誤差を全部足して平均したようなもの(小さいほど誤差が少ないということ)です。同じことを計算しちゃうこともできて、こんな感じになります。ちなみに、最初のトライ(気象データをそのまま使う)ではRMSE=638.2でした。戻り、気温が平温より高い、または低い時に電力消費が上がる(おそらく暖房、冷房を利用するのだろう・・・という)ことが想像出来るため、仮に摂氏20度からの気温の差異の絶対値を説明変数として加えてみましょう。Prepで摂氏20度からの差異の絶対値を作成します。これを説明変数としてニューラルネットに入れます。再度できあがった予測モデルを可視化してみます。青い線(実測値)だとオレンジ色の線(予測値)がだいぶ近くなってきました。電力の利用量は時間帯に依存することが分かっていますので、時間帯を切り出してこれを説明変数に加えて同じハイパーパラメータ条件で予測モデルを作成します。当てはまりが良くなりました。一歩モデルの精度を追求していきましょう。誤差を計算式として作成し、日付別で誤差の大きな日付を確認します。可視化を行うと、周期的に実績が予測を下回るように見受けられます。これはどうしてでしょうか?ここに土日かどうかを表す「土日フラグ」を作成してオレンジ色で着色してみます。すると、やはり土日については実績が予測より下回っている(誤差がマイナスになっている)ことが分かります。正月、ゴールデンウィークについても実際の電力消費量は予測より少ないことが分かります。このことから、土日以外にも祝日をカレンダーとして持たせて祝日フラグを作成し判別させるようにした方が良さそうです。使って祝日休日フラグを作成します。Prepでカレンダーテーブルを外部結合し、土日または祝日に該当する日を識別するフラグを作成します。下のグラフで上段が祝日フラッグ無しの場合、下段が祝日フラッグ有の場合の誤差です。全体的に日付ごとの誤差が小さくなっていることが分かりますね。一度予測モデルを作って可視化します。全体的に青色(実績)とオレンジ色(予測)がシンクロしている様子が見られます。Python)では、ここで良い感じのモデルができたところで、2018年のモデルを使って2019年の電力需要予測も実施してみましょう。今まで色々なデータ加工を行ってきましたが、同じことを新たなデータに対して同じ順番で実施するのは結構大変ですね。使えば、データ結合、計算式、フラグの作成がすべて終わった段階で、最終的に日付を2019年にフィルタするブランチ(枝分かれ)を作って出力するだけで2019年の検証データが作成できます。2018年のデータをもとに作成した予測モデルに、2019年のデータを投入し予測値を得ます。同様に可視化を行います。このブログを書いている時点では、2019年6月1日までのデータしかありませんが、ほぼ予測値がほぼ実績値と一致しており、2018年のデータを使った予測モデルで2019年の電力消費量が予測できていることが分かりました。2018年の予測モデルを使って2019年の予測もそこそこの精度が出ていますので、2018年の訓練データに対して過学習している(あまりに訓練データに真面目に適合しすぎて新しいデータには応用が利かない状態になっている)ということもなさそうです。以上、ディープラーニング(ニューラルネットワーク)を使った電力使用量の予測を行いましたが、より良い精度のモデルを作るためには、モデルのハイパーパラメータをチューニングするのと同時に、データを理解して、良い感じの特徴量をモデルに投入することがとても大事だということがわかりました。ディープラーニングを利用すると、非常に精度の高いモデルが作れると思いました。何が功を奏しているのか説明するのが難しくて色々と試行錯誤してみるしかなくて、正しいドメイン知識も必要になるんだなぁと感じました。今回は検証しませんが、1週間先の天気予報が分かれば未来の電力需要が予測できそうです。気温の他にも、降雪日や猛暑日フラグ、主要工場の稼働時間等新たな説明変数を組み合わせると更に精度の高いモデルができるかもしれませんね!以上、参考になれば幸いです。徳行さんに多大なるご協力とご指導いただきました。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。コメントデータの処理方法の詳細はこちらをご覧ください。ThemeZee.Translate。