この記事は「【リアルタイム電力予測】需要・価格・電源最適化ダッシュボード構築記」シリーズの十二日目です
Day1はこちら | 全体構成を見る
今回は、前回、前々回で作成した価格モデルの 残差分析 を行っていきます。
ここでいう残差は$\text{residual} = \text{予測値} - \text{実測値}$として定義しています。
残差分析をする目的は以下の3点です。
- モデルの苦手領域(季節・時間帯・需要レベル)を特定する
- 特徴量設計の見落としを見つける
- モデル選択の判断材料にする(どの場面でどちらのモデルを採用するか)
前々回は LightGBM 単体、前回は GAM の出力を LightGBM の特徴量の一つとして追加したモデル(GAM + LightGBM) を比較しました。
指標ベースではどちらもほぼ同程度の精度であり、本番運用時の「予測入力のノイズに対する頑健性」を期待して GAM + LightGBM を採用する方針にしています。
今回は、その判断が妥当かどうかも確認するために、2 つのモデルを並べて残差を可視化していきます。
実測値 vs 予測値(p50)
ここではまず、モデル全体のざっくりした挙動を見るために、
- x 軸:実測価格
- y 軸:50%分位(中央値)の予測値
を散布図でプロットしています。
ねらいは「モデルが価格帯ごとにどれだけバイアスなく予測できているか」を見ることです。理想的には、すべての点が対角線(y=x)の近くに乗るはず。
LightGBM
- 高価格帯では、点が上下に散らばっており、高騰局面は当たる時と外れる時のばらつきが大きい
- 0 円近辺では予測がべったりと 0 円付近に張り付いている。ただし実データ側にも春先に 0.01 円などの超低価格が出現しており、ある程度は実態を反映している
GAM + LightGBM
- 点の分布は LightGBM 単体とほぼ同じで、中央値予測のバイアス構造はほとんど変わっていない
- つまり、GAM を入れたからといって「全体として高すぎる/低すぎる」といった系統誤差が増えたわけではないと言える
残差の時系列プロット
次に、残差を時系列で並べたプロットを見ていきます。
ここでは
- x 軸:時間
- y 軸:残差(予測 − 実測)
をプロットし、「いつ・どの期間で大きく外れているか」 を確認していきます。
LightGBM
GAM + LightGBM
- 残差の「山・谷」が出るタイミングはほぼ同じで、どちらのモデルも外す日・外さない日は概ね共通している
- 一方で、GAM + LightGBM の方が、一部の高騰局面でやや振れ幅が大きいようにも見える
⇒ この時点では「どちらがどの場面で得意か」がまだ分からないので、次からは 時間帯・月・需要レベルごとに集約して見ていこうと思います
時間帯別の分析
ここからは「1 日のどの時間帯で外しやすいか」を見るために、時刻ごとに残差を集約して可視化していきます
時間帯別 MAE(p50)
- この図は、各時間帯ごとの MAE(中央値予測の絶対誤差) をプロットしたもの
- 日中のピーク時間帯(9〜18 時)では、GAM + LightGBM(青)の MAE がわずかに小さい
- 早朝・深夜の低需要帯では、2 モデルの差はほとんどない
⇒ ピーク時間帯の「典型的な価格水準」は、GAM を入れた方が若干当てやすくなっている
時間帯別カバー率(p10–p90)
- ここでは、p10–p90 の予測レンジが実測値をどの程度含んでいるか(カバー率) を時間帯別に見ている
- 全体的に、LightGBM 単体(赤)の方がカバー率が高い時間帯が多い
⇒ LightGBM 単体の方が「外れにくいバンド」を作れている一方で、GAM + LightGBM はややバンドがタイトで外れがち、という傾向が見える
時間帯別「はみ出し量」
- この図では、実測値がバンドの外側に出たときの「どれくらい外れていたか」の平均値 を時間帯別にプロットしている
- ここでも、ほとんどの時間帯で LightGBM 単体の方がはみ出し量が小さい
⇒ つまり LightGBM は、外した時でも「バンドのすぐ外側」に収まることが多く、GAM + LightGBM は一部で 外れ方が大きいケースがある と解釈できる
時間帯別 Pinball ロス
- Pinball ロスは分位点回帰の基本指標で、小さいほどその分位点の予測が良い
- グラフからは、p10 では大差ないが、p50・p90 に関しては GAM + LightGBM(青)がわずかに良い時間帯が多いように見える
⇒ 中央値と上側リスク(p90)については、時間帯によっては GAM + LightGBM がやや有利、という結果になっている
月別の分析
次は「季節ごとの得手不得手」を見るために、月ごとに集約した指標を可視化します。
月別 MAE(p50)
- 春(3〜5 月)は LightGBM 単体の方が MAE が小さい
- 夏(7〜9 月)は GAM + LightGBM の方がやや良い
- 冬は両者ほぼ同程度
⇒ 季節によって「どちらのモデルが相性が良いか」が変わっている。
夏の高需要期では、GAM が捉えているなめらかな季節構造が効いている可能性がある
月別カバー率(p10–p90)
- 多くの月で LightGBM 単体の方がカバー率が高い
- 特に春先〜初夏で差が開いている
月別「はみ出し量」
- こちらも、LightGBM 単体の方が「外したときの外れ方」が小さい月が多い
- GAM + LightGBM は一部の月で大きく外すケースがありそうだ
需要レベル別の分析
最後に、「需要がどれくらい高いときに外れやすいか」を見るため、需要をビン分けして指標を見ていきます。
需要レベル別 MAE(p50)
- 中程度の需要帯では両モデルの MAE は近いが、最高需要帯では GAM + LightGBM の MAE がやや大きい
- 高需要=高価格になりやすい領域では、GAM のベースラインと LightGBM の修正がうまく噛み合っていないケースがあるかもしれない
需要レベル別カバー率(p10–p90)
- ほとんどの需要帯で LightGBM の方がカバー率が高い
- 特に高需要帯では差がやや大きい
需要レベル別 予測レンジ幅(p90−p10)
幅を広げてカバー率を稼いでいるだけになっていないかをチェックするため、レンジ幅の平均を需要レベルごとに見ていきます。
- 高需要帯になるほど両モデルともレンジ幅は広がるが、LightGBM の方がやや広めに取っている
- その分、カバー率とはみ出し量が改善されているので、「高需要帯では幅を広げてでも外さないようにしている」という挙動になっている
まとめと解釈
ここまでの残差分析から、2 つのモデルの性格をまとめると次のようになります。
-
LightGBM 単体
- p10–p90 の カバー率が高く、はみ出し量も小さい
- 特に春〜初夏や高需要帯で「外さないバンド」を作れている
- 一方で、中央値 MAE については GAM + LightGBM と大差はない
-
GAM + LightGBM
- 中央値(p50)や一部の時間帯で Pinball ロスがわずかに良い
- ピーク時間帯や夏季では MAE で LightGBM 単体と同等〜やや優位
- ただし、カバー率とはみ出し量の面では LightGBM に一歩及ばない
本番のリアルタイム予測では、需要・気温などの入力は予測値になり、今よりノイズが増えることが想定されます。
GAM はなめらかな加法構造を前提としているため、入力が多少ノイジーでも極端に尖った反応はしづらいと仮定すると、「GAM で穏やかなベースラインを作り、それを LightGBM に渡して微調整させる」という構成は、ノイズに対して頑健な中央値予測を維持するという意味で妥当だと考えています(__)
明日
今日で価格モデルの作成は終わりです。
次回からは時間別の電源構成を予測するために、数理最適化を扱っていきます!![]()













