# 分位点損失と区間予測
Toto 2.0 が Student-T mixture から切り替えた手法。以下は連問の形でまとめる。
---
## 分位点損失(ピンボール損失)とは何か
### 点予測と区間予測の違い
普通の予測モデルは「**点予測**」をする——「明日の値は 100 です」と 1 つの数値を出す。外れたら均等にペナルティがかかる。
分位点損失は「**区間予測**」のために設計されている——「明日の値は **80〜120 の間に 90% の確率で収まる**」という予測を出す。
### 分位点とは
分位点(quantile)は「全体の何% 以下か」という境界値。
- **10 分位点(p=0.1)**: 「10% の確率でこの値より低くなる」
- **90 分位点(p=0.9)**: 「90% の確率でこの値より低くなる」
この 2 つを組み合わせると「80% 信頼区間」が作れる。
### ペナルティの非対称性
| 外れ方 | ペナルティ |
|---|---|
| p=0.9 の予測より**実際が上**に外れた | 大きいペナルティ |
| p=0.9 の予測より**実際が下**に外れた | 小さいペナルティ |
「90% 以下に収まるはず」と言ったのに上に外れたら重く罰する。下に外れるのは想定内なので軽くする。この非対称な重み付けで「ちゃんと 90% の確率で当たる上限」をモデルが学べる。
「ピンボール損失」という名前は、ペナルティの形がピンボール台の斜面のように左右非対称な傾きを持つことから来ている。
---
## 「それぞれ独立に学習できる」の意味
### Student-T mixture(Toto 1.0)の前提
Student-T という確率分布は形が決まっている。「平均・広がり・裾の重さ」という 3 パラメータで形全体が決まる。モデルはこの 3 パラメータを出すだけで、10/50/90 分位点はその山型から自動計算される——独立ではなく、山型という一つの式でまとめて決まる。
### ピンボール損失(Toto 2.0)
10/50/90 分位点を**別々の目標として学習する**。3 つの出力ヘッドをそれぞれ別のペナルティルールで訓練する。
- ヘッド A(p=0.1 用): 「実際の値の 10% が A より下になるよう」調整
- ヘッド B(p=0.5 用): 「実際の値の 50% が B より下になるよう」調整
- ヘッド C(p=0.9 用): 「実際の値の 90% が C より下になるよう」調整
3 つは互いに相手の結果を参照せず、それぞれのペナルティだけで学習が進む——これが「独立」の意味。
観測メトリクスが左に偏っていて右の裾だけ長い分布だった場合、Student-T の山型では 10 分位点か 90 分位点のどちらかが必ずズレる。ピンボール損失なら各境界値を「データの実際の形」から直接学べるため、分布が歪んでいても正確に当てられる。
---
## 「学習」とは何が行われるのか
モデルは巨大な「数式の塊」で、内部に無数の**係数(重み)**を持つ。学習とはこの係数を少しずつ調整していく作業。
サイクル:
```
① 過去データを入力
② 現在の係数で予測値を計算
③ 実際の値と比べてズレを測る ← ここで損失関数が使われる
④ どの係数をどっちにどれだけ動かせばズレが減るかを計算
⑤ 係数を少し動かす
⑥ ① に戻る(これを何億回も繰り返す)
```
損失関数の違いはステップ③の「ズレの測り方」の違い。測り方が変わると係数の動く方向が変わり、最終的に「何を正確にしようとするか」が変わる。
---
## 3 つの出力ヘッドで 3 つのモデルができるわけではない
実際には **1 つのモデルに 3 つの出力口**がある構造。
```
過去データ
↓
┌─────────────────┐
│ 共通の処理部分 │ ← パターン認識を担う(パラメータ共有)
└────┬──────┬────┘
↓ ↓ ↓
ヘッドA ヘッドB ヘッドC
(p=0.1) (p=0.5) (p=0.9)
↓ ↓ ↓
下限値 中央値 上限値
```
損失は 3 つ同時に計算されて足し合わせてから係数を調整する。共通部分の係数は 3 つ全員から影響を受け、ヘッド固有の係数はそれぞれ自分の損失だけから調整される。
| | 実態 |
|---|---|
| モデルの数 | 1 つ |
| 出力の数 | 3 つ(各分位点分) |
| 共通部分の学習 | 3 つの損失がまとめて影響 |
| ヘッド部分の学習 | それぞれ自分の損失だけが影響 |
---
## 区間予測ができると何がうれしいか
点予測だけでは「何が起きるか」しか言えない。区間予測は「**どのくらい確信しているか**」も一緒に出せる。
### 具体的な恩恵
**アラート閾値の設定**
- 点予測: 「平均 70% を超えたらアラート」→ 普段から 80% まで振れるメトリクスに使うと誤報だらけ
- 区間予測: 「90 分位点が閾値を超えたらアラート」→ 普段の上振れは織り込み済みなので誤報が減る
**キャパシティプランニング**
- 点予測: 「来月のピーク使用率は 75%」→ 余裕を感じてサーバーを増やさない
- 区間予測: 「来月のピークは 90% の確率で 95% 以下」→ 95% に近いなら増設を判断できる
**異常検知**
- 実際の値が「90 分位点の上限」を超えた → 統計的に 10% 以下しか起きないはずの事象が起きた → 異常と判断
- 点予測との差だけを見ると、普段から暴れるメトリクスは常に「外れている」ように見えてしまう
### 一言まとめ
不確実性が見えると、アラート・増設・異常判断のすべてで「外れたとき想定内か異常か」を区別できる。