Brier scoreとは?3クラスの確率予測を手計算して評価の意味を確かめる
Brier scoreは、予測した確率と実際の結果とのずれを二乗して平均する指標です。正解した件数だけでは分からない「どれほど自信を持って予測したか」も数値に反映されます。この記事では、架空の文書をA・B・Cの3種類に分類する例を使います。特定のサービスの性能を測った結果ではありません。
確率の合計と正解ラベルを先に確認する
各文書について3クラスの予測確率の合計を1にします。正解クラスだけを1、残りを0にした正解ベクトルと比較します。ここで使う定義は、各クラスの二乗誤差を足し、その合計を文書数で平均するものです。
BS = (1/N) × Σ文書 Σクラス (予測確率 − 正解の0または1)²
| 文書 | Aの確率 | Bの確率 | Cの確率 | 正解 | 二乗誤差の合計 |
|---|---|---|---|---|---|
| 1 | 0.7 | 0.2 | 0.1 | A | 0.09 + 0.04 + 0.01 = 0.14 |
| 2 | 0.2 | 0.5 | 0.3 | C | 0.04 + 0.25 + 0.49 = 0.78 |
| 3 | 0.1 | 0.7 | 0.2 | B | 0.01 + 0.09 + 0.04 = 0.14 |
この教材のBrier scoreは (0.14 + 0.78 + 0.14)/3 = 0.353333… です。文書2は、正解Cに0.3しか与えず、別のBに0.5を与えたため、誤差が大きくなっています。同じ入力に対して常に各クラス1/3を返す比較用予測なら、各文書の誤差は2/3、平均も2/3です。この3件だけでは一般的な優劣を判断できませんが、比較計算の手順は確かめられます。
0〜1と0〜2の説明がある理由
全クラスの誤差を足す上の定義では値の範囲は0〜2です。合計をさらに2で割る定義では0〜1になります。この教材を半分にすると0.176666…です。同じ指標名でも尺度が違えば、そのまま大小を比べられません。
二値分類では、陽性になる確率pと正解yについて (p-y)² を平均する説明もよく使われます。陽性と陰性の両方を足すと、二値ではこの値の2倍になります。ライブラリを使う場合も引数とバージョンを記録してください。scikit-learnの公式文書では scale_by_half による調整が説明され、auto は二値分類を半分にしますが、多クラス分類を半分にはしません。
低いスコアだけで「確率が正確」と言い切らない
確率の校正は、たとえば0.7と予測した集団で、実際に約70%が該当したかを確かめる観点です。Brier scoreは校正だけでなく、事例を区別する能力なども反映します。そのため、低い値になったことだけで校正が改善したと判断するのは不十分です。確率帯ごとの件数と実際の割合も確認します。少数のサンプルで帯を細かくしすぎると、割合が不安定になります。
比較を始める前のチェック表
| 確認点 | 記録する内容 |
|---|---|
| 同じ問題か | ラベル定義、クラス順、評価対象の件数 |
| 同じ尺度か | 全クラスの合計か、半分にするか、二値の陽性だけか |
| 同じデータか | 比較する予測が同じ評価行に対応しているか |
| 学習から独立しているか | 評価用の正解を学習・調整に使っていないか |
| 比較対象があるか | 一定の確率を返す単純な予測と、同じ定義で比較したか |
| 校正も見たか | 確率帯の件数、予測平均、実際の割合 |
提出物には、計算式、クラス順、評価件数、尺度の設定、比較対象を添えます。「Brier scoreが0.18」とだけ書くより、どの計算をした数値なのかを第三者が再確認できます。
出典
- scikit-learn: brier_score_loss(定義・尺度設定)
- scikit-learn: Probability calibration(校正と評価指標の関係)