大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

混同行列

二値分類の混同行列は、実際のラベルと予測を交差させ、真陽性 TP、偽陽性 FP、偽陰性 FN、真陰性 TN を数えます。正解率、適合率、再現率はこの表から計算します。順位の品質や確率校正には、選んだ閾値の表以外の情報も必要です。

本課の 40 例では、一件も警告しなくても正解率 85%、全件警告すれば再現率満点、最高スコアだけなら適合率満点です。一つの数値で有用性は決まりません。四つの件数、標本数、誤りの費用を合わせて読みます。

スコアから四つのセルへ

先にスコアがあり、次に判断があります。本課は高いほど陽性寄りです。ロジスティック回帰の確率、木の葉の頻度、ネットワーク出力などをスコアにできますが、校正済みとは限りません。閾値 τ を選び、score ≥ τ なら警告して順位を予測へ変えます。

  • TP:実際に陽性で警告。検出できた例。
  • FP:実際は陰性なのに警告。誤警告。
  • FN:実際は陽性なのに警告しない。見逃し。
  • TN:実際に陰性で警告しない。正しい除外。

横軸はスコア、線の上は実際の陽性、下は陰性です。縦の閾値線で四領域に分け、そのまま表へ移します。表はラベルと閾値判断の交差集計です。

正解率 = (TP + TN) / n

適合率 = TP / (TP + FP):警告のうち本物はどれだけか。

再現率 = TP / (TP + FN):実際の陽性をどれだけ捉えたか。

適合率は TN を見ず、再現率は FP と TN を見ません。正解率は各誤りを同じ一件として扱い、誤警告と見逃しの結果の違いを表せません。

ステップ実行

既定値はホールドアウト 40 例、陰性 34、陽性 6、陽性率 15% です。陽性スコアは 0.93、0.81、0.64、0.55、0.34、0.19。陰性の 9 例は 0.20 以上で最高 0.88、残り 25 例は 0.18 未満です。

τ = 0.50 では陽性の上位 4 例が通り TP = 4、残りは FN = 2。陰性の 0.88、0.72、0.52 が誤警告となり FP = 3、TN = 31 です。正解率 (4 + 31)/40 = 0.875、適合率 4/7 = 0.571、再現率 4/6 = 0.667 になります。

全スコアより閾値を高くすると TP = FP = 0、FN = 6、TN = 34。再現率は 0、適合率は未定義、正解率は 34/40 = 0.850 = 1 − 陽性率 です。この定数規則は既定の予測より 2.5 ポイント低いだけです。

陽性のスコアまで順に下げ、追加検出のために増える誤警告を見ます。

τTPFP適合率再現率正解率
0.93101.0000.1670.875
0.81210.6670.3330.875
0.64320.6000.5000.875
0.55420.6670.6670.900
0.34550.5000.8330.850
0.19690.4001.0000.775

最初の検出には誤警告がありません。4 件目も誤警告を増やさず、適合率は 0.600 から 0.667 に上がります。5 件目には 3 件、6 件目にはさらに 4 件の誤警告が付きます。閾値が越える例のラベルによって、どちらの誤りが変わるかは異なります。

τ = 0 では全件警告し、再現率 1.000、適合率と正解率は 6/40 = 0.150 です。全件警告の適合率は標本の陽性率そのものです。

正解率は τ = 0.55 付近の 0.900 が最大で、0.44 で定数規則の 0.850 に戻り、0.38 で初めて下回ります。0.34 でもう一度 0.850 に達し、その後は超えません。0.19 は全陽性を捉える最も高い閾値で、さらに低い閾値も全例を捉えますが誤警告が増えます。正解率だけを最大化すると 6 例中 2 例を見逃します。

一つの指標が隠すもの

規則良く見える指標隠れた結果
一件も警告しない正解率 0.850再現率 0
全件警告再現率 1.000適合率 0.150
最高の一例だけ警告適合率 1.000再現率 0.167

陽性率 0.3% なら常に否定するだけで正解率 99.7% です。本課を 36 例中 2 陽性に変えると、無警告の正解率は 0.944 になります。コードではなくクラス比率がスコアを変えました。

閾値を下げると TP は減らず、FN は増えないので再現率は単調に増加または維持します。適合率は分子・分母がともに増えうるため、新しい例のラベル次第で上下し、適合率–再現率曲線は鋸歯状になりえます。正解率は FN と FP のどちらも 1/40 だけ減点しますが、実際の費用は同じとは限りません。

閾値を選ぶ手順

課題の制約を決め、その中で最適化します。計算例として再現率 0.80 以上で適合率を最大化するなら、表の候補は 0.34 と 0.19。適合率 0.500 が 0.400 より高い 0.34 を選び、検出 5、誤警告 5、見逃し 1 です。適合率 0.65 以上で再現率を最大化するなら 0.55 です。

これらは医療などの推奨基準ではなく数値例です。制約は誤りの費用や処理能力から決め、行列だけでは作れません。実際は検証データで閾値を選び、独立したテストで評価します。40 例だけでは配備時の性能を確証できません。

境界ケース

  • 警告ゼロ:TP + FP = 0 で適合率は 0/0、未定義です。本課の適合率の表示は数値ではなくダッシュになります。ライブラリは zero_division 設定によりゼロなどを返し、既定で警告を出す場合があります。予測陽性がなかった事実を報告し、「全警告が誤り」と混同しません。
  • 実際の陽性ゼロ:再現率も未定義です。本課は最低 2 陽性ですが、小さな交差検証の fold では起こりえます。
  • スコアが閾値と等しい:本課は ≥ で警告します。> なら該当例の TP が FN、または FP が TN になります。用意した 58 スコアが互いに異なっても、閾値との一致は起こります。表もスコアを閾値にしています。実データには同点も多いため規則を明記します。
  • F1:2PR/(P+R)、または 2TP/(2TP+FP+FN)。全件警告で 0.261、最高一例で 0.286、既定値で 0.615 です。適合率と再現率を合わせても TN を見ず、FP と FN に同じ係数を使うため、任意の費用は表せません。
  • 特異度:TN/(TN+FP)。τ = 0.19 では 25/34 = 0.735 ですが、同じ 9 件の誤警告に対する適合率は 0.400。分母の違いです。
  • 軸順:sklearn.metrics.confusion_matrix の 0/1 既定順は [[TN, FP], [FN, TP]]。本課は実際の陽性を上、予測陽性を右に置き、スコア図に合わせるため TP と TN は反対角線です。セルの位置より軸ラベルを確認します。

よくある間違い

  • 正解率だけで n と陽性率を報告しない。陽性率 30% の無警告基準は 70%、95% なら 5%、本課の 15% なら 85% です。同じ正解率でも基準が違います。
  • 再現率だけを最適化する。全件警告は満点でも 34/40 が誤警告なので、適合率、特異度、処理件数の制約も必要です。
  • 既定閾値を学習済み順位モデルの変えられない部分と見る。閾値は判断方針の一部で、上げると誤警告を減らせても見逃しが増ええます。
  • A の閾値 0.5 と B の 0.3 の差をすべてモデル品質に帰す。それは二つの運用点の比較です。同じ再現率、同じ適合率、または全閾値範囲でも比較します。
  • 件数か割合の片方しか見ない。6 陽性中 4 検出と 6,000 陽性中 4 検出は異なります。

モデルの範囲

スコアとラベルは手計算できる教材用の固定値で、学習済みモデルからの出力ではありません。(y_true, y_score) を入力とし、評価だけを扱います。小さな単一ホールドアウト、二値分類、未校正スコアで、信頼区間、交差検証、費用行列はありません。

40 例の適合率は不安定になりえます。多クラスでは k×k 行列とクラス別、マクロ、重み付きなどの指標が必要です。スコア 0.9 は自動で陽性確率 90% を意味しません。判断には見逃しと誤警告の費用が必要で、それを指標が作ることはできません。