# 分位点損失と区間予測 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% 以下しか起きないはずの事象が起きた → 異常と判断 - 点予測との差だけを見ると、普段から暴れるメトリクスは常に「外れている」ように見えてしまう ### 一言まとめ 不確実性が見えると、アラート・増設・異常判断のすべてで「外れたとき想定内か異常か」を区別できる。