前回、SARIMAモデルを用いて電力量の予測を行ったが、うまくいかなかった(とはいえRMSE20kWh未満)。そもそも突発的に変動する(時刻に関係なく)受電電力量を時系列モデルで評価することがそもそも間違いだったのか?
そこで今回は、機械学習(RandomForest)を用いて電力量の予測ができないかを検証した。
#概要
- とあるビルから受電電力量データを受領
- 機械学習を用いて2日先までの48時間分のデータを予測
- RMSE(平均二乗誤差)を用いて予測精度を評価
#条件
- 受領データ
- 10min毎に計測
- 計測データは受電電力量のみ
- 土日祝日を除外
- 目的変数
- 受電電力量
- 説明変数
- 遅れデータ(48次,49次,50次遅れ)
- 曜日データ
- 時刻データ
説明変数
LagDF = pd.DataFrame(index=ForecastDF.index)
#1次遅れデータ
LagDF['Lag'] = ForecastDF.shift(48)
LagDF['Lag2'] = ForecastDF.shift(49)
LagDF['Lag3'] = ForecastDF.shift(50)
#曜日データ生成
DateDF = pd.DataFrame()
DateDF['Weekday'] = ForecastDF.index.weekday
DateDF['Time'] = ForecastDF.index
DateDF.index = ForecastDF.index
trainx = pd.concat([LagDF,DateDF['Weekday']],axis=1)
追記:2017/11/06
アホなことしてました。
説明変数に曜日データと時刻データもたせたつもりになってましたけど、基本的にダミーデータとして別データにしなきゃ意味ないんですね。。。後日ダミーデータ作成した後に検証します。
受領データを3期間それぞれから1日選択し、適度な学習期間で検証を行った。
期間名 | 学習期間 | 予測期間 |
---|---|---|
夏期 | 1Week | 2day |
冬期 | 1Week | 2day |
#結果
検証結果としては、下記のようになっている。比較的良好な結果となったが、突発的に発生する外乱に対応ができていない。
期間 | RMSE[kWh] |
---|---|
夏期 | 15.7 |
冬期 | 28.3 |
夏期
冬期
#まとめ
- 現状では、使い物にならないが説明変数の選定で精度向上は期待できる。
- 10%程度のずれでは、シビアな管理はできない。これが限界であれば移動平均だけでよい気もする。