広告

二値分類器を評価する方法:完全ガイド

Dev.to / 2026/3/30

💬 オピニオンIdeas & Deep AnalysisTools & Practical Usage

要点

  • この記事では、二値分類器の評価は混同行列(TP、FP、TN、FN)から始めるべきだと強調し、特定のビジネスやドメインにおけるコスト構造に対して、モデルがどのような種類の誤りを起こしているのかを理解します。
  • 不均衡なクラスでは特に、精度(accuracy)が誤解を招きうると警告しています。モデルは多数派のクラスだけを予測することで高い精度を達成できても、少数派の陽性クラスに対しては完全に失敗する可能性があります。
  • 適合率(precision)と再現率(recall)が、さまざまな誤りコスト(誤警報 vs 見逃し)に直接対応すること、そしてそれらの選択が現実世界の目的(例:詐欺 vs スパム vs 医療スクリーニング)に依存する理由を説明します。
  • 両方の種類の性能を個別に最適化するのではなくバランスさせる必要がある場合に、適合率と再現率の調和平均としてF1スコアを導入します。

あなたは機械学習モデルを訓練して、何かが二値であることを予測しました。詐欺か詐欺でないか、解約するか継続するか、病気か健康か。そこで、すべてのデータサイエンティストが直面する疑問がやってきます。本当に良いのだろうか?

ここで評価が登場します。そして問題点が1つあります——多くの人は間違ったやり方をします。精度(accuracy)で止めて「勝ち」と宣言し、そのままデプロイするのです。するとモデルは本番でうまく機能しません。データやユースケースについての重要な何かを見落としているからです。

このガイドでは、評価のためのツールキットをすべて紹介します。指標、曲線、そしてそれぞれに込められた考え方です。最後まで読めば、何を、なぜ測るべきかを正確に理解できるようになります。

混同行列: それが本当に伝えてくれること

指標の前に数字があります。数字の前に、混同行列があります——混同行列は、あなたのモデルが行ったことをすべて分解するシンプルな2x2の表です。

  • 真陽性(TP): あなたのモデルが「はい」と言い、それが正しかった。
  • 偽陽性(FP): あなたのモデルが「はい」と言ったが、それが誤りだった。
  • 真陰性(TN): あなたのモデルが「いいえ」と言い、それが正しかった。
  • 偽陰性(FN): あなたのモデルが「いいえ」と言ったが、それが誤りだった。

以上です。この4つの数字の上に、他のすべての計算(数式)が乗っているだけです。ただし、あなたの課題にとってどの間違いが重要なのかを理解することは極めて重要です。詐欺検知では、偽陽性(正当な取引にフラグを立ててしまう)の方が厄介です。偽陰性(本当の詐欺を見逃す)はお金がかかります。医療スクリーニングでは、コストは逆になります。

混同行列は、あなたのユースケースに対して、モデルが適切な種類のミスをしているかどうかを教えてくれます。

精度は罠

おそらくこの話は聞いたことがあるでしょうが、繰り返す価値があります。クラスの偏りがあるなら、精度(accuracy)は無価値です。

精度 = (TP + TN) / (TP + TN + FP + FN)

もしデータの99%が実際には陰性だとしたら、「常に陰性を予測する」モデルは99%の精度を持つことになり、まったく役に立ちません。正のクラスを一切検出できていないからです。

だからこそ、混同行列の特定のセルに焦点を当てる指標が必要なのです。

適合率・再現率、そしてF1スコア

この3つの指標があちこちで登場するのは、実際に何かを教えてくれるからです。

  • 適合率(Precision) = TP / (TP + FP)。モデルが「陽性」と判定したケースのうち、実際に陽性だった割合はどれくらいか?適合率が高いほど、誤警報(偽陽性)が少ないことを意味します。
  • 再現率(Recall) = TP / (TP + FN)。実際に陽性であるケースのうち、どれだけを検出できたか?再現率が高いほど、陽性を見逃していないことになります。
  • F1スコア = 2 x (Precision x Recall) / (Precision + Recall)。適合率と再現率の調和平均——両方を同じくらい重視する場合に有用です。

両方を完璧にすることはほぼありません。詐欺検知では、高い再現率(詐欺師を捕まえる)を優先し、いくらかの偽陽性(少数の顧客に迷惑をかけること)を受け入れるでしょう。スパムフィルタでは、高い適合率(正当なメールを削除しない)を優先し、スパムが紛れ込む可能性を受け入れます。

評価は、あなたのユースケースが必要としていることを反映すべきです。

ROC曲線とAUC: 全体像

ここからは見た目の話になります。ROC曲線は次の問いに答えます。意思決定の閾値を変えたら、真陽性率は偽陽性率に対してどう変わるのか?

横軸は偽陽性率です: FP / (FP + TN)。陰性ケースのうち、どれくらいを誤ってフラグ付けしたのか?

縦軸は真陽性率(別名: 再現率)です: TP / (TP + FN)。陽性ケースのうち、どれくらいを捕まえられたのか?

閾値を変えることで曲線上を移動します。片方の極では、すべてを「はい」と予測します——真陽性率は高いが、偽陽性率も高いです。もう片方では、すべてを「いいえ」と予測します——真陽性率も偽陽性率も低くなります。

曲線の下の面積(AUC)は、1つの数値を与えます。それは「ランダムに選んだ正のケースと負のケースについて、モデルが正の方を高い順位に並べる確率」です。AUCは0から1の範囲で、値が大きいほど良いです。0.5はランダムな当てずっぽうを意味します。

ROC曲線は、閾値ごとのモデル挙動を理解するのに優れていますが、偽陽性と偽陰性のコストがすべて同じであると仮定しています。しかし、それは現実にはめったにありません。

適合率-再現率曲線: ROCだけでは不十分なとき

適合率-再現率(PR)曲線は、縦軸に適合率、横軸に再現率を取ります。クラスが偏っている場合、ROC曲線よりも有用です。なぜなら、陽性クラスに焦点を当てるからです。

詐欺検知(99%が正当な取引)では、PR曲線が本当の物語を教えてくれます。再現率90%にしたいなら、適合率はどれくらいになる? ROC曲線では、その偏りは薄まってしまいます。なぜなら偽陽性率は、とても大きいクラスに対して測られるからです。

あるクラスが希少で、それがより重要である場合は、PR曲線を使ってください。

閾値の最適化: 現実のトレードオフを作る

あなたのモデルは0から1の確率を出力します。デフォルトでは、確率が0.5を超えていれば「陽性」と予測します。しかし0.5は恣意的です。多くの場合、問題に対して正しい閾値ではありません。

偽陽性が安く、偽陰性が高いコストなら、閾値を0.3に下げてください。より多くの陽性を捕まえられます(再現率が高くなる)が、より多くの誤警報を出します(適合率が低くなる)。偽陽性が高いコストなら、0.7に上げます。アラートは減るが、適合率は良くなります。

最適な閾値を見つけるには、さまざまな値をスイープして、現実世界でのコストを最小にするものを選びます。ここで重要になるのが、閾値分析です。

実践してみよう: 手順を追って

解約予測モデルを作ったとしましょう。過去の顧客データは1,000人で、そのうち150人が解約し、850人が継続します。訓練済みのモデルを実行すると、各顧客について確率が得られます。

  1. 現在の閾値(0.5)で混同行列を計算します。何件捕まえられましたか?何件の誤警報がありましたか?
  2. 指標を確認: 適合率は?再現率は?F1は?それらはあなたのビジネス目標と一致していますか?
  3. ROC曲線をプロット。 モデルはランダムより良さそうですか?
  4. 閾値の変更を検討。 維持(定着)がコスト高なら閾値を上げます。解約がコスト高なら下げます。
  5. キャリブレーションを確認。 モデルが「70%の確率」と言っているなら、それは現実でも実際に70%ですか?それとも自信過剰ですか?

これが評価です。単なる数値ではなく、モデルの強みと失敗を理解するためのプロセスです。

自分で試してみよう

これらの指標を試す最も簡単な方法は、自分のデータで実験してみることです。EvalBench は、ブラウザ上で完全に動作する無料ツールです。予測と正解(ground truth)を含むCSVをアップロードすれば、これらの指標、曲線、可視化がすべてすぐに得られます。サインアップ不要、クラウドへのデータアップロード不要。すべて手元のマシンに留まります。

作成した予測ファイルを手に取り、10分間、閾値をいじって、混同行列を読み、曲線がどう動くかを眺めてみてください。そうした実践的な理解は、どんな説明よりも価値があります。

あなたのモデルを評価する準備はできましたか? EvalBenchを無料で試す

広告