追試結果:Expert Advice はどこで効くのか

実験レポートで「効かない条件」を確認したので、 今度は逆に効く条件を探しました。仮説は 2 つ。 (A) 勝つべき Expert が時間とともに入れ替わる(B) 強さが同程度で外し方の違う Expert が複数いる。 これを人工データ 1 つと実データ 3 つで検証します。

4 つの追試の位置づけ
追試データ検証したい仮説結果
追試 1合成レジーム切替(A) 純粋な形で 最良固定 Expert 比 −29.8%
追試 2M4 Hourly(414 系列)(B) 系列間の多様性 −22.9%、系列の 62% で勝利
追試 3ETTh1(7 変数)(A)+(B) 実データで 7 変数すべてで勝利
追試 4COVID-19 期の電力需要(A) 実世界の構造変化 4 か国すべてで −40% 以上

追試 1:レジーム切替(人工データ)

まず、仮説 (A) をいちばん純粋な形で見ます。生成過程を途中で 4 回切り替えた系列を作り、 各区間で「正解の Expert」が入れ替わるようにしました。 Expert は性格のはっきり違う 8 本だけに絞り、重みの動きが読めるようにしています。

4 つのレジームからなる合成時系列
2,000 時点ずつ 4 つのレジームを連結した系列。各区間の上に、その区間で 実際に最良だった Expert を示しています。狙いどおり 4 区間で 4 種類の勝者に分かれました。
レジームごとの最良 Expert(合成データ)。4 区間で 4 種類の勝者に分かれています。
レジームその区間で最良の Expertその MAELastValue の MAE
A: strong daily cycleSeasonalProfile0.9755.075
B: random walkLastValue2.3972.397
C: noisy flat levelSMA_2414.35819.773
D: steep trendDrift_242.6043.384

全区間を通した最良の固定 Expert は LastValue ですが、どの区間でも一番にはなれていません。これが「乗り換えれば勝てる」余地です。

結果

レジーム切替データ(7,664 時点、Expert 8 本)の平均絶対誤差。
アルゴリズム平均 MAE最良固定 Expert 比
Equal Weight22.471+189.2%
Follow the Leader7.776+0.1%
Hedge (tuned eta)7.763-0.1%
Meta-eta Hedge7.777+0.1%
AdaHedge7.774+0.1%
Fixed-Share5.453-29.8%
ML-Poly7.827+0.7%
— 最良固定 Expert(LastValue、事後)7.7700.0%
— 切り替えオラクル(区間ごとに最良、事後)5.264-32.3%

Fixed-Share は切り替えオラクル(事後に区間ごとの最良を選べた場合)にかなり近いところまで到達しています。

最良固定 Expert に対する累積後悔の推移
累積後悔(regret)の推移。0 の線が「事後に選べる最良の単一 Expert」で、 下に行くほど良い結果です。点線はレジームの境界。 Hedge 系は第 2 レジームの途中で 0 に戻り、そのあと一切動きません — 最良固定 Expert に張り付いてしまうからです。Fixed-Share だけがレジームごとに さらに下へ伸びていきます。等重み平均は桁が違うため除いています。

なぜこうなるのかは、重みの動きを見ると一目で分かります。

Hedge の重み推移
Hedge:最初のレジームで SeasonalProfile に張り付き、 第 2 レジームで LastValue に乗り換えたあとは、レジームが変わっても動きません。 累積損失の差が開ききって、他の Expert の重みが復帰不可能な水準まで落ちているためです。
Fixed-Share の重み推移
Fixed-Share:レジーム境界(点線)ごとに主役が SeasonalProfile → LastValue → SMA_24 → Drift_24 と正確に入れ替わっています。 重みに下限 \(\alpha/N\) があるので、負けていた Expert が数十ステップで復帰できます。
レジーム切替データでの平均絶対誤差
平均絶対誤差の比較。黒破線が最良固定 Expert、橙点線が 「区間ごとに最良の Expert を選べた場合」(切り替えオラクル)。 Fixed-Share はオラクルにかなり近いところまで到達しています。

唯一のつまみ α はどれくらい敏感か

Fixed-Share の α に対する感度
\(\alpha\) を変えたときの平均絶対誤差。左端の点は \(\alpha = 0\)、すなわち素の Hedge です。 \(10^{-5}\) から \(10^{-2}\) までの 3 桁にわたってほぼ平坦で、 その範囲ならどこを選んでも切り替えオラクルに近い性能が出ます。 大きすぎる(0.1 以上)と等重み平均に近づいて悪化します。 チューニングに神経質になる必要はない、というのが実用上の結論です。

追試 2:M4 Hourly(実データ 414 系列)

次は仮説 (B)。M4 コンペティションの hourly 部門 414 系列を、1 系列ずつ独立に 1 ステップ先オンライン予測で解きます。系列ごとにスケールが違うので、 各系列の助走区間における naive 予測 MAE で割った scaled MAE で揃えました。

系列ごとの最良 Expert の分布
「その系列でいちばん良かった Expert」の集計。 414 系列に対して 11 種類の Expert が勝者になり、最多のものでも全体の 33% にとどまります。 つまり 事前に 1 本選ぶ戦略は、どれを選んでも多くの系列で外すことになります。

そこで比較対象を実務的なものに変えます。「事後に分かる最良の 1 本」ではなく、 全系列の平均成績で最良だった Expert を事前に 1 本選んで、全系列に適用する という、実際にやりそうな戦略です。

M4 Hourly 414 系列、1 ステップ先オンライン予測。指標は各系列の naive MAE で割った scaled MAE(小さいほど良い)。
アルゴリズムscaled MAE事前選択比勝率
Equal Weight2.1869+303.1%1%
Follow the Leader0.4505-17.0%44%
Hedge (tuned eta)0.4389-19.1%59%
Meta-eta Hedge0.4541-16.3%40%
AdaHedge0.4452-17.9%51%
Fixed-Share0.4182-22.9%62%
ML-Poly0.4501-17.0%43%
— 事前に選んだ最良の 1 本(RidgeLag_0.1)0.54250.0%
— 系列ごとに最良を選べた場合(事後オラクル)0.4424-18.5%

Fixed-Share は事後オラクル(系列ごとに最良の 1 本を選べた場合)も下回りました。系列内でも重みを動かせるためです。

M4 Hourly におけるアルゴリズム比較
黒破線が「事前に選んだ最良の 1 本」、橙点線が「系列ごとに最良を選べた場合」(事後オラクル)。 すべての集約アルゴリズムが黒破線を下回り、Fixed-Share は事後オラクルすら下回りました — 系列内でも重みを動かせるためです。
系列ごとの勝率
414 系列のうち何割で「事前に選んだ最良の 1 本」に勝ったか。 平均値だけでなく系列単位で見ても優位であることが確認できます。

追試 3:ETTh1(実データ・翌日予測)

ETT(Electricity Transformer Temperature)データセットの 1 時間粒度版、 2016-07 から 2018-06 までの 17,420 時点・7 変数を、 翌日(24 時間先)予測で評価しました。最初の約 6 か月を助走・学習に使っています。

ETTh1 の 7 変数、24 時間先予測。数値は最良固定 Expert に対する MAE の差。負が勝ち。
変数最良固定 Expertその MAEMeta-η HedgeAdaHedgeML-PolyFixed-Share
HUFLRidgeLag_0.13.040+0.1%-0.2%+0.0%-33.7%
HULLEMA_0.70.840-0.0%-0.1%+0.0%-21.5%
MUFLEMA_0.92.888+0.1%+0.0%+0.1%-36.4%
MULLRidgeLag_0.10.723+0.0%-0.1%+0.0%-21.0%
LUFLEMA_0.90.529+0.1%-0.3%+0.1%-32.1%
LULLEMA_0.50.202+0.1%-0.2%+0.0%-27.1%
OTRidgeLag_100.01.909+0.0%+0.0%+0.1%-43.5%

変数によって最良 Expert が Ridge 系だったり EMA 系だったりと入れ替わります。

ETTh1 の変数ごとの結果
変数ごとの「最良固定 Expert に対する差」。0 より下が勝ち。 Fixed-Share は 7 変数すべてで下回りました。 変数によって最良の Expert が Ridge だったり EMA だったりと入れ替わる点も、 仮説 (B) の裏付けになっています。
ETTh1 OT 列の累積後悔
油温(OT)の累積後悔。実データでも人工データと同じ形 — Hedge 系は 0 付近で止まり、Fixed-Share だけが下方向に伸び続けます。

追試 4:COVID-19 ロックダウン期の電力需要

最後に、実世界で起きた大規模な構造変化です。2020 年 3 月のロックダウンで 欧州各国の電力需要は水準も日内形状も一変しました。文献では、この時期に 静的なモデルが大きく劣化し、適応的な手法が有効だったと報告されています。

Open Power System Data の 1 時間粒度実測需要(ドイツ・スペイン・フランス・イタリア)を使い、 Expert の学習は 2015〜2018 年まで(COVID を一切知らない状態)、 評価は 2019-01 以降の翌日予測としました。

フランスの電力需要とロックダウン
フランスの時間別電力需要。赤線が 2020-03-16(ロックダウン開始週)。

結果

2020-03-16 以降(ロックダウン期)の翌日予測 MAE [MW]。数値は「ロックダウン前の実績で選んだ 1 本」に対する差。負が勝ち。
事前に選ばれた Expertその MAE [MW]Meta-η HedgeAdaHedgeML-PolyFixed-Share
GermanyRidgeLag_100.02,079+0.0%+0.0%+0.0%-42.6%
SpainRidgeLag_100.0931+0.0%+0.0%+0.0%-39.7%
FranceRidgeLag_100.01,828+0.0%+0.0%+0.0%-46.4%
ItalyRidgeLag_100.01,764+0.0%+0.0%+0.0%-48.0%

Hedge 系がすべて ±0.0% なのは、重みが事実上その 1 本に集中しきっているためです。

14 日移動平均の予測誤差
14 日移動平均の予測誤差。黒破線が「ロックダウン前の実績で選んだ 1 本」で、 Meta-η Hedge(青)はこれとほぼ完全に重なっています(Hedge 系はすべて同様)。 Fixed-Share(赤)だけが一貫して下を走ります。
Fixed-Share の重み配分の推移
Fixed-Share の重み配分。ロックダウン(赤破線)の前後で配分が組み替わっています。

正直な報告:期待した現象は再現しなかった

再現しなかったこと

「COVID でモデルが壊れ、適応手法だけが生き残った」という筋書きを期待していましたが、 この Expert 群では再現しませんでした。季節をそろえて (3/16〜6/30 の 2019 年と 2020 年を)比べると、事前に選んだ Expert の誤差はむしろ 減っています。ロックダウン期は需要水準そのものが下がり、 予測しやすくなった効果の方が大きかったためです。

季節をそろえた 2019 年と 2020 年の比較
季節をそろえた比較(3/16〜6/30)。ほとんどの手法で 2020 年の方が誤差が小さく、 「COVID で壊れた」という単純な図式にはなりません。 ただしフランスでは Fixed-Share の改善幅(−27%)が基準(−17%)より大きく、 適応の価値がこの時期に相対的に増したことは読み取れます。

では、何が壊れたのか

Expert を個別に見ると、原因ははっきりします。

Expert ごとの 2019 年と 2020 年の誤差比較
Expert ごとの季節そろえ比較(フランス)。 暦だけを見る事前学習モデル(SeasonalProfile)だけが +77% 悪化し、 直近の観測値を使う Expert はすべて改善しています。
France:季節をそろえた Expert 単体の比較(3/16〜6/30 の MAE [MW])。
Expert2019 年春2020 年春(ロックダウン)変化
SeasonalProfile6,28111,122+77.1%
SeasonalNaive_1683,0552,850-6.7%
SeasonalNaive_243,1112,297-26.2%
RidgeLag_100.02,3401,942-17.0%
LastValue3,1112,297-26.2%
SMA_245,2194,226-19.0%

直近の観測値を使わない SeasonalProfile だけが大きく悪化しています。集約の価値は、こうした壊れたモデルを自動的に切り捨てられる点にあります。

わかったこと

壊れたのは 「曜日 × 時刻」の平均プロファイルのように、過去の実績だけで作り、 直近の観測を見ないモデルでした。文献で報告された劣化も、まさにこの種の (気象と暦を説明変数にする)モデルで起きたものです。

一方、本プロジェクトの Expert はほとんどが直近ラグを使うため、 個々の Expert が勝手に新しい水準へ追随してしまい、 集約が救うべき「壊れたモデル」がそもそも少なかった、というのが真相です。 集約の価値は「壊れたモデルを切り捨てられること」にあり、その意味では SeasonalProfile を捨てられた点で確かに機能しています。


まとめ:効く条件チェックリスト

4 つの追試から言えることを、実務で使える形にまとめます。

  1. 勝つべき Expert が入れ替わるか?
    入れ替わるなら Fixed-Share が効きます。入れ替わらないなら、どの集約手法を使っても 最良の 1 本と同じ結果にしかなりません。まず「区間ごとの最良 Expert」を集計して確認してください。
  2. Expert の強さは同程度か?
    1 本だけ突出して強い構成では利得が出ません。同じ family のパラメータ違いを並べるより、 外し方が違うモデル(直近ラグ型・暦型・トレンド型)を混ぜる方が効きます。
  3. タスクは十分難しいか?
    1 ステップ先予測は「直近値」がほぼ正解で、工夫の余地がありません。 翌日予測など、Expert の得意・不得意が分かれるホライズンを選んでください。
  4. 重みが過去に引きずられていないか?
    Hedge の重みは累積損失だけで決まるため、時間が経つほど動かなくなります。 Fixed-Share の \(\alpha\)(\(10^{-5}\)〜\(10^{-2}\) の広い範囲で有効)を入れるだけで解決します。

再現方法

uv sync --all-extras
uv run python scripts/download_data.py        # M4 / ETTh1 / OPSD / UCI を取得

uv run python scripts/experiments/exp1_regime.py
uv run python scripts/experiments/exp2_m4.py
uv run python scripts/experiments/exp3_etth1.py
uv run python scripts/experiments/exp4_covid.py

uv run python scripts/build_site.py           # このページの表を更新

使用データ: M4 Competition(M4 Hourly)、 ETDataset(ETTh1)、 Open Power System Data(1 時間粒度実測需要)、 UCI Electricity Load Diagrams 2011-2014