時系列予測の評価と統計 — 「良くなった」を信じる前に確認すること¶
作成日: 2026-11-01
位置づけ: 特徴量(ニュースなど)を足して予測が良くなったと言うときの、評価のズルと統計の基礎。特定の実験結果は含めない。
関連: ニュース知識グラフで価格予測_モデルの部品_基礎知識_整理
0. 概要¶
一言で: 「良くなった」と言うには、ズルが入らない評価と、偶然を疑う統計の両方が要る。直し方によって、改善率は数分の一に縮むことがある。
1. 評価のズル(過大評価の 5 要因)¶
flowchart LR
Old["見かけの改善率<br>大きい"]
F1["平均同士の比<br>外れ値を改善に数える"]
F2["最終エポックを採用<br>検証損失の振れで決まる"]
F3["正規化のリーク<br>全データで fit"]
F4["run 数が少ない<br>順位が確定しない"]
F5["売買の日付ずれ<br>答えを見て売買"]
New["修正後の改善率<br>小さい"]
Old --> F1
Old --> F2
Old --> F3
Old --> F4
F1 --> New
F2 --> New
F3 --> New
F4 --> New
F5 -.->|売買評価のみ| New
| 要因 | 何が起きるか | 直し方 |
|---|---|---|
| 平均同士の比 | 対照(Baseline)の一部の run が外れ値で悪化すると、平均同士の比ではそれが「改善」になる | seed を揃えた対応比較にする |
| 最終エポック採用 | 検証損失は終盤も数倍振れることがある。最終エポックが山に当たるかで結果が決まる | 検証損失が最小のエポックの重みを復元する |
| 正規化のリーク | スケーラを分割前の全データで fit。テスト期間のレンジが訓練に漏れる | 訓練区間だけで fit |
| run 数が少ない | 差が run 間のばらつきと同程度だと、順位を確定できない | run を増やし、事前に必要数を見積もる |
| 売買の日付ずれ | \(d\) の予測を、\(d\) の終値(答え)で売買する | \(d-1\) の終値の時点で判断し、\(d-1 \to d\) の値動きで損益を取る |
直し方が逆向きに効くことがある。片方だけ直した数値は誤解を招くので、全部直した状態だけで議論する。
2. 統計: 偶然を疑う¶
対応のある比較¶
- 提案と対照を同じ seed 同士で比べる。seed ごとの差を取るので、学習の運のばらつきが相殺される
- 改善率は 2 通り出す。平均同士の比(外れ値に引きずられる)と、seed ごとの改善率の中央値(頑健)。食い違うなら、平均が少数の大きな勝ちに支えられている
検定(2 つ並べる理由)¶
| 検定 | 見るもの | 強み・弱み |
|---|---|---|
| 対応のある t 検定 | seed ごとの差の平均 | 検出力が高いが、外れ値に弱い |
| Wilcoxon 符号順位検定 | seed ごとの差の順位 | 外れ値に強いが、検出力は低め |
t 検定だけ有意で Wilcoxon が境界的なら、平均の改善が少数の大きな勝ちに支えられているサイン。
多重比較の補正(Holm 法)¶
- 比較を何本もやると、偶然 p<0.05 になるものが混ざる。比較の本数ぶん基準を厳しくする
- Holm 法: p 値を小さい順に並べ、\(i\) 番目を \(\alpha / (m - i + 1)\) と比べる。上から順に見て、落ちたら以降も棄却しない。Bonferroni より検出力が高い
- 比較の本数を後から増やすと、補正後の p は上がる。何本比べたかを必ず書く
効果量と検出力¶
- Cohen's \(d_z\): seed ごとの差の平均 ÷ その標準偏差。「差がばらつきの何個分か」。0.2 小、0.5 中、0.8 大が目安
- 検出力: 本当にある差を見つけられる確率。検出力 80%(有意水準 5%)に必要な run 数の目安は
\[
n \approx \frac{7.85}{d_z^2}
\]
- 相対関係で掴む: 必要な run 数は効果量の二乗に反比例する。差が半分になると run は 4 倍。現実的に回せない数の差は、「効かない」と扱うのが妥当
3. イベントスタディ: スコアは先行指標か¶
- 問い: ニュースの重要度スコアが高い日のあとに、値動きが大きくなるか
- 日単位(その日の最大スコア)で集計し、Jonckheere-Terpstra 検定(グループに順序があるとき、単調な増減を見る検定)で調べる
- 当日の値動きと対応するだけなら、そのスコアは同時点の指標で、先行指標ではない。同じ日の記事数でも同程度に説明できるなら、スコアの付加価値は小さい
- 同じ日の記事は値動きを共有するので、記事単位でなく日単位で集計する
4. 売買評価(バックテスト)¶
| 指標 | 意味 |
|---|---|
| 累積リターン | 期間全体の損益 |
| シャープレシオ | リスク調整後リターン。年中取引される市場なら年率換算は \(\sqrt{365}\) |
| 最大ドローダウン | 高値からの最大の下落幅 |
| Buy & Hold | 初日に全額買って持つ。最低限の比較基準 |
| 閾値 \(\theta\) | 予測が現在価格より \(\theta\) 以上高ければ BUY、低ければ SELL、そうでなければ HOLD |
\[
\text{signal}_{d-1} = \begin{cases} \text{BUY} & \hat{p}_d > p_{d-1}(1+\theta) \\ \text{SELL} & \hat{p}_d < p_{d-1}(1-\theta) \\ \text{HOLD} & \text{otherwise} \end{cases}
\]
- 設定を明示する: 現物のロングのみか、空売りありか、全額投入か、手数料はいくらか
- 勝ちがどの取引から来たかを見る。閾値を上げたときの見かけの勝ちが、暴落日の 1 回の買いを持ち続けただけ、ということがある。予測が前日より系統的に高く出る(上方向の偏り)と、一度買うと売りシグナルが出にくい
- 予測精度(RMSE)の改善は、収益に直結しない。向きの的中率がランダム並みなら、売買には使えない
5. 数字を見るときのチェックリスト¶
- 比較は同じ seed 同士か。平均同士の比になっていないか
- 採用した重みは最良エポックか。最終エポックではないか
- 正規化・特徴量の統計は訓練区間だけで作ったか
- run 数は十分か。差の大きさ(\(d_z\))から必要数を見積もったか
- 比較は何本か。多重比較の補正をしたか
- 平均と中央値が食い違っていないか
- 売買評価は、判断に使った情報がその時点で手に入ったものか
- 勝ちがどの取引から来たか。1 回の偶然に依存していないか
6. 参考¶
- Fischer & Krauss (2018) "Deep Learning with Long Short-Term Memory Networks for Financial Market Predictions", European Journal of Operational Research
- Leung et al. (2021) "The Promises and Pitfalls of Machine Learning for Predicting Stock Returns", The Journal of Financial Data Science
作成: 2026-11-01 / 最終更新: 2026-11-01