バックキャスト予測誤差が平均に崩壊する問題(model collapsing to mean)

Reddit r/MachineLearning / 2026/5/9

💬 オピニオンIdeas & Deep AnalysisModels & Research

要点

  • ユーザーは、日付Dに発表された天気予報をホライズン1〜14でさかのぼり(backcasting)、予報誤差(forecast − 予報先の日付で観測された実測値)を予測する時系列モデルを構築している。
  • データは、1つの行がホライズンに対応し、日付・actuals・normalsは14行連続で同一になるように重複している(forecastの出力日と到達日が異なるため)。
  • 季節性や長期トレンド、レベルのスケーリングを抑えるためにターゲット変換を行い、さらに実測と平年値の差(アノマリー)やラグ付きアノマリー、移動統計量(標準偏差・平均・中央値・分位点)などの特徴量を作っている。
  • 逆向きのフォールドでバックキャスティングを模倣し、リークが起きないようにしたうえで、RandomForest(深さ、葉の最小数、特徴量数などを調整)を学習している。
  • しかし特徴量の組み合わせやチューニングを増やしても、予測が平均に収縮して分散(stdやq10/q90)が大きく外れ、MAEもホライズンが長いほど悪化し、実質的に「0を当てる」ような挙動になっているため、改善のための探索アイデアを求めている。

みなさんこんにちは、

今のプロジェクトで、今すぐに助けが必要な状況でかなり切羽詰まっています。できるだけ明確に説明するようにします。

私は時系列のバックキャスティング問題に取り組んでいます。バックキャストしたいのは、異なる予報ホライズン(1〜14)における予測値です。ここでいう予測はMLの予測ではなく、天気予報のような予報だと思ってください。つまり、日付Dの時点で14個の予報(D+1〜D+14の予報)があります。2020年から2026年までのような予報データがあります(各行は1日を表し、各(date, horizon)キーは一意です)。なので、各行は一意の(date, horizon) → target_dateから成っているため、14個の日付がブロックとして複製されています。説明が十分に分かりやすければいいのですが。

やりたいことは、2020年より前の時点(例えば、分かりやすく2019〜2020)に対して、その予報をバックキャストすることです。予報値の列とホライゾン列に加えて、私は「actuals」(特定の変数、例えば気温の、真の実測値)と、「normals」(特定のデータに対する気候学的な基準を表す滑らかな曲線)を持っています。この「normals」列は、季節性、トレンド、そして他のあらゆる反復的で予測可能なパターンを捉えています。

つまり、明確にすると:

* 日付(予報発出日) | actuals | normals | horizon | forecasts *

そしてこの点を強調すると:日付、actuals、normalsは、14連続行(1行=1ホライゾン)では同一です。

私が予測したいターゲットは次の通りです: forecast - actual_at_forecast_date

つまり、観測された真の誤差(例えば、今日の予報を20(forecast)と予測していて実測が18(actual)なら、私のターゲットは +2)を予測したいのです。

ここまでにやったことは以下です:

- ターゲットから年周期の季節性、長期トレンド、レベルのスケーリングを取り除く変換

- 異常値(actual-normal)、遅延した異常値、ローリング統計(標準偏差、平均、中央値、分位点)といった古典的特徴量を作成

- target encoding の特徴量(例:target_encoding_horizon_x_month)を作成

- RandomForest(max_depth 10-15、min_leaf 10、max features “sqrt”、n_estimators 300)

バックキャスティングの枠組みでできるだけ良く評価したかったので、train/valのフォールド順を逆にしています。リークがないことは確認済みです。

そして最後に:

私の主な問題は、特徴量の組み合わせを大量に試し、チューニングも大量に試しているにもかかわらず、予測がとても浅く(薄く)、平均へ収縮してしまうことです(stdやq10, q90がかなりずれています)。なので、予測対象は0中心のforecast_errorであるため、ノイズしか捉えていないのではないかと思い始めています。実際、私の予測は何にも合っていない(フィットしていない)ように見えます。MAEはホライズンが大きいほど悪化しますが、それは自然なことです。それでもホライゾン1でさえ、MAEベースでは0だけを予測するのと同程度の良さしかありません。もし自分で試せるアイデアをお持ちの方がいれば、とてもありがたいです。ここには全ての詳細がないのは分かっていますが、バックキャスティングでの経験があり、何かおすすめがあれば本当にありがたいです。

みなさんこんにちは、

私は時系列のバックキャスティング問題に取り組んでいて、なかなか頑固な問題に直面しています。同様のセットアップを扱ったことのある人からの洞察がとても欲しいです。

問題設定

毎日発出される予測には複数のホライズンがあります:

  • 各日付Dで、D+1,...,D+14の予測があります
  • データ期間は2020–2026です
  • 各行は一意の(forecast_date, horizon)ペアです

おもちゃの例:

forecast_date horizon target_date forecast actual normal
2023-01-01 1 2023-01-02 20 18 19
2023-01-01 2 2023-01-03 21 20 19
... ... ... ... ... ...
2023-01-01 14 2023-01-15 25 23 20

重要:

  • forecast_dateactual、およびnormal14ホライズンすべてで同一です
  • 変化するのはhorizontarget_date、およびforecastだけです

目的

2020年より前の予報誤差をバックキャストしたいです。

ターゲット:

target = forecast − actual(target_date) 

つまり、forecast = 20、actual = 18 → target = +2。

特徴量

  • forecast、horizon
  • actual、normal
  • anomaly = actual − normal
  • 遅延した異常値
  • ローリング統計(平均、標準偏差、分位点)
  • ターゲットエンコーディング(例:horizon × month)

モデル

Random Forest:

  • max_depth: 10–15
  • min_samples_leaf: 10
  • max_features: sqrt
  • n_estimators: 300

検証

  • バックキャスティングに適応した時系列分割
  • リークなし(慎重に確認済み)

主な問題

予測がとても浅く、0へ崩れ落ちます

  • 分散が非常に低い
  • 裾(q10 / q90)の推定が不十分
  • ホライゾン = 1でも、性能は(MAEにおいて)定数0を予測するのに非常に近い

MAEはホライゾンが大きいほど(予想通り)増加しますが、全体としての性能は弱いままです。

診断

  • std(predictions) / std(target) ≈ 0.4(最大でも)
  • この比率はホライゾンが大きいほど低下します

つまり、モデルは明確に分散が足りない(under-dispersed)です。

解釈

現時点で私は次を疑っています:

  • 信号がとても弱い
  • あるいはモデルが過度に慎重で、振幅を捉えられていない

どんな助けでも、フィードバックでも、試してみるべきアイデアでも大歓迎です。

どうもありがとうございます。

submitted by /u/Ambitious-Log-5255
[link] [comments]