MATLABによる時系列データ解析と予測
MathWorks Japan
アプリケーションエンジニアリング部
テクニカルコンピューティング
中川 慶子 氏
MathWorks Japan アプリケーションエンジニアリング部 テクニカルコンピューティングの中川 慶子 氏は、「MATLABによる時系列データ解析と予測」をテーマに講演。電力需要予測を例にとり、「データの準備」「機械学習」「自己回帰モデル」の3つのステップでMATLABをどのように利用するかをデモンストレーションした。
データの準備
過去データから未来の電力需要予測を行うには、まず時系列データを用意する。今回のデモでは、2014年~2015年の電力需要量データを利用し、変数として「温度」「湿度」「時刻」「曜日」「休日・祝日フラグ」「前週の同時刻電力需要」「前日の同時刻電力需要」「前日の平均電力需要」を使った。
気象情報のサイトからCSVの気象データを、Excelのテンプレートから休日・祝日情報を、データベースに蓄積されたデータから電力使用量を利用して、MATLABの最新版に搭載された「Live Editor」によりワークスペースにデータを読み込む。読み込まれたデータは、最新のデータ型である「Time Table関数」で、時系列データとして取り扱うことが可能になる。サンプリング時間が違う2つの時系列データをそろえたい場合、「リサンプリング関数」で自動補完することも可能だ。
また最新版では、メモリに入りきらないデータを逐次読込で処理する「Tall配列」も利用できる。Tall配列は、並列分散処理にも対応しており、さらにノイズ除去やピーク検出、たたみ込みと相関計算、スペクトル解析などの前処理が可能な「Signal Processing Toolbox」も提供されている。
機械学習
電力需要は、昼に電気をつけて夜は消すという周期的な時系列データになる。この時系列データに対して、非線形重回帰分析を行う場合、相関性の高いデータを「corrplot関数」を使って削除していくことで予測の精度を向上させられる。
中川氏は、「回帰分析をするときに最小二乗法を使っているので、『エラーが正規分布しているか?』ということも重要なポイントの1つです。しかし、必ずしもエラーが正規分布するわけではありません。ここで有効なのが、ニューラルネットワークです。MATLABでは、3つのステップでニューラルネットワークを利用でき、多重共線性などを考えることなく予測できます」と説明した。
図:MATLABにおける機械学習
自己回帰系モデル
ARIMA(Autoregressive Integrated Moving Average)モデルは、自らの過去データと移動平均に依存するモデルであり、GARCH(Generalized Autoregressive Conditional Heteroscedasticity)モデルは、時系列の変動も含んだモデルだ。時系列モデルによる予測の手順としては、「Box Jenkins法」を利用する。
Box Jenkins法による予測は、
- 定常性(平均や標準偏差などが時間に関わらず一定のあるデータ)
- ARか、MAか、ARMA化方法を決め何世代前のデータまで参考にするかラグを決める
- 係数パラメータを推定する
- 観測データを使った検証を行う
という4つの手順で行う。
電力需要予測では、まず単位根検定の関数を使い、定常性があることを確認する。電力需要データは24時間周期のデータであり24ステップ目に高い相関が出ることからフィルターで平滑化する。ARIMA関数を使いラグ数2でモデルを作成し、estimate関数で実データを使いARMAモデルのセッティングすることで最終的な予測の結果を得ることができる。
また、複数の時系列モデルを作成する場合、VAR(Vector Autoregression)モデルを利用することもできる。中川氏は、「単変量の非定常では確率微分方程式や回帰分析、NARXを、定常ではARIMAやGARCHを使うのが有効です。また、多変量の非定常の場合には、機械学習や重回帰分析を、定常では、VARを利用するのが有効です」と、時系列データ解析のポイントを説明した。
図:時系列データ解析