# モデルのキャリブレーションと信頼度測定
## 定義
**モデルのキャリブレーション(calibration)**とは、モデルが出力する確率が実際の頻度と一致しているかを測る性質である。「70%の確率で何かが起きる」という予測は、その予測が行われた全回数のうち70%が実際に的中することを意味する。あるモデルがチームAがチームBに70%の確率で勝つと予測し、実際に1,000回対戦してチームAが60%しか勝利していなければ、そのモデルはキャリブレーションされていない。キャリブレーションされたモデルは、チームAが60%の確率で勝利すると予測するはずである。キャリブレーションの重要性は2つの例で示される。ユーザーAが80%の確率で恋愛映画、20%の確率でコメディ映画を視聴する場合、キャリブレーションされたレコメンドシステムは一貫して恋愛映画だけを勧めるのではなく、80%が恋愛映画・20%がコメディ映画になるよう推薦を行うべきである。また、広告A・広告Bのクリック率をそれぞれ10%・8%と予測するモデルは、ランキングのみが目的ならキャリブレーション不要だが、クリック数そのものを推定したい場合はキャリブレーションが必要であり、実際のクリック率が5%しかなければ推定クリック数は大きく外れる。測定は単純な数え上げで行える。モデルが出力する確信度Xの回数と、予測が実際に的中した頻度Yを数え、YをXに対してプロットする。完璧にキャリブレーションされたモデルはすべてのデータ点でX=Yになる。scikit-learnの`sklearn.calibration.calibration_curve`で二値分類器のキャリブレーション曲線を描画でき、キャリブレーション手法としてはPlattスケーリングが代表的で、`sklearn.calibration.CalibratedClassifierCV`に実装されている。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]] §6.2.2.4)
**信頼度測定(confidence measurement)**とは、個々の予測に対する意味のある閾値についての考え方である。モデルの予測を(たとえ不正確でも)無条件にすべてユーザーへ見せると、ユーザーの不快感やシステムへの信頼低下を招く。スマートウォッチが早足歩行を走行と誤認識する程度なら軽微だが、予測型の治安維持アルゴリズムが無実の人を潜在的犯罪者と見なすような場合は深刻な結果を招きうる。モデルが結果に自信があるときのみ表示したい場合、確信度をどう測定し、表示の閾値をどこに設定し、閾値を下回った予測を破棄・人間への引き継ぎ・追加情報の要求のいずれで扱うかを設計する必要がある。他の指標の大半がシステムのパフォーマンスを平均的に測定するのに対し、信頼度測定はサンプル単位の指標であり、システムレベルの測定が全体的なパフォーマンス把握に役立つのに対し、サンプルレベルの測定はすべてのサンプルに対するシステムの挙動に注意を向けたい場合に重要になる。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]] §6.2.2.5)
## 横断的知見
本 concept は現時点で単一ソース([[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]])のみに基づく。[[分類モデルの評価指標]]が扱うAUC ROC・F値などは分類の閾値やクラスラベルの一致度を測るのに対し、本ページのキャリブレーションは同じ確率出力について「その数値自体が実際の頻度と一致しているか」という別の軸を測る点で異なる。あるモデルが高いAUCを持ちながらキャリブレーションされていない、という状況は理論上ありうるが、この独立性を明示的に論じた記述はどちらのソースにもまだない。また[[モデルの確実性検証]]が扱う「モデルが運用スタックを壊さないか」という確実性チェックと、本ページの信頼度測定が扱う「個々の予測をユーザーに見せてよいか」という判断は、どちらも「モデルの出力をそのまま信頼してよいか」という広い意味での安全弁だが、前者はシステムレベルの障害防止、後者はサンプルレベルのユーザー体験保護という異なる粒度で機能する。複数ソースを突き合わせた横断的知見は、他のキャリブレーション・不確実性定量化関連ソースが wiki 化された際に蓄積する。
## 未解決の問い
- キャリブレーションされたモデルとAUC・F値などの識別性能(discrimination)が高いモデルは独立な性質だとされることが多いが、本ソースはこの独立性そのものには触れていない。両者がトレードオフになる具体例はあるか。
- 信頼度測定における「表示すべきか否かの閾値」の設定方法(コスト非対称性を反映した最適化など)は、本ソースでは問いの提示にとどまり具体的な決定手順は示されていない。
- Plattスケーリング以外のキャリブレーション手法(温度スケーリング、等調回帰(isotonic regression)など)との比較は本ソースでは扱われていない。ニューラルネットワークのキャリブレーションについては言及されるが詳細は外部ブログへの参照にとどまる。
- ニューラルネットワーク特有のキャリブレーションの問題(過信しやすい傾向など)は、本ソースがGitHubの外部実装や外部ブログ記事を参照するにとどまり、章本文では詳細に扱われていない。
## 関連
- source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 6 モデル開発とオフライン評価]]
- concept: [[分類モデルの評価指標]](識別性能という異なる軸の評価指標) / [[モデルの確実性検証]](システムレベルの安全弁という隣接論点) / [[モデル評価のベースライン]] / [[摂動テストと不変性テスト]]
- entity: [[scikit-learn]](`calibration_curve`・`CalibratedClassifierCV`の実装)
## 出典
- Chip Huyen 著, 江川崇・平山順一 訳, 『機械学習システムデザイン』, オライリー・ジャパン, 2023, 6章, §6.2.2.4, §6.2.2.5.