4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

精度99%の罠:偽陽性・偽陰性から学ぶ、機械学習の評価指標入門

4
Last updated at Posted at 2025-12-08

機械学習を勉強し始めると、最初に出てくる評価指標はたいてい 「精度 (Accuracy)」 です。

$$\text{Accuracy} = \frac{\text{正しく当てた数}}{\text{全体のデータ数}}$$

意味も分かりやすいし、「とりあえず精度が高ければ良さそう」と思いがちです。
ただ、実務でモデルを作り始めると、こんなことが起きます。

「モデルの精度は 98%。グラフもきれい。
なのに現場の人から『いや、それだと困るんだよね…』と言われる」

よくあるのが、こんなパターンです。

  1. 不正利用は全体の 1% しかない
  2. モデルが「全部、正常です」と予測して 精度 99% を叩き出す
  3. 数字だけ見れば「すごいモデル」だが、不正を1件も見つけていない

このギャップの根本は、「精度」という1つの指標だけでモデルを評価してしまっていることにあります。

この記事では、このモヤモヤを解消するために、実務でよく出てくる評価指標を解説します。

ゆるく(数式は最低限)
用語と意味は丁寧に
どんなミスをしてほしくないかという視点で

扱う指標は以下の通りです。

  • Accuracy (正解率)
  • Precision (適合率)
  • Recall (再現率)
  • F1-score
  • ROC / AUC

共通の「お題」:クレジットカードの不正検知

話を分かりやすくするため、最後まで同じシナリオを使います。

  • タスク: クレジットカードの不正利用を検知する
  • データ: 1000 件の取引ログ
    • 正常取引: 980 件
    • 不正取引: 20 件(全体の2%)

ここに対して、わざと極端な2つのモデルを登場させます。

モデルA:ぜんぶ「正常」と予測するやつ

すべての取引に対して「正常です」とだけ言うモデル。不正は1件も当てません。

  • Accuracy: $980 \div 1000 = 0.98$ (98%)
  • 数字だけ見れば超高性能に見えます。

モデルB:不正はかなり当てるけど、誤検知も多いやつ

  • 不正20件のうち、18件を「不正」と当てる

  • 正常980件のうち、100件を誤って「不正」と判定する

  • Accuracy: $(18 + 880) \div 1000 = 0.898$ (約90%)

Accuracyだけを見ると、モデルA(98%)の方がモデルB(90%)より優秀に見えます。

でも「不正を見つけたい」という目的からすると、不正をスルーするモデルAは役に立ちません。

このズレを整理するために、まずは4つの用語を押さえましょう。


混同行列と4つの用語

機械学習の2クラス分類では、よくこの表(混同行列)が出てきます。

実際のクラス
陽性 (不正) 陰性 (正常)
予測クラス
(モデルの出力)
陽性 TP
(真陽性)
FP
(偽陽性)
陰性 FN
(偽陰性)
TN
(真陰性)

今回のシナリオでは 「陽性=不正」「陰性=正常」 とします。

1. 真陽性 (TP: True Positive)

「実際に陽性で、モデルも陽性と予測した」

  • 今回の例:「本当に不正な取引を、不正と正しく検知できた」
  • イメージ:スパムメールをちゃんと「スパム」と判定できた。ナイス正解。

2. 偽陽性 (FP: False Positive)

「実際は陰性なのに、モデルが陽性と予測してしまった」

  • 今回の例:「本当は正常な取引なのに、不正と誤判定した」
  • イメージ:普通のメールなのに、スパムフォルダに入ってしまった。「オオカミ少年」的な誤報・空振りです。

3. 偽陰性 (FN: False Negative)

「実際は陽性なのに、モデルが陰性と予測してしまった」

  • 今回の例:「本当は不正なのに、正常として見逃してしまった」
  • イメージ:"がん"があるのに、検査で「異常なし」と出てしまった。見逃しのケースで、タスクによっては一番致命的になります。

4. 真陰性 (TN: True Negative)

「実際に陰性で、モデルも陰性と予測した」

  • 今回の例:「本当に正常な取引を、正常と判定できた」
  • イメージ:平和な日常。何も起きないのが正しいパターン。

各指標の解説と「性格」

Accuracy (正解率):とりあえずみんなが見る「平均点くん」

$$\text{Accuracy} = \frac{TP + TN}{TP + FP + FN + TN}$$

  • モデルA: 98%
  • モデルB: 90%

これは、クラスごとの人数差が激しいとき(不均衡データ)には役に立たないことがあります。
「40人のクラスで、39人が100点、1人が0点でも、平均点は97.5点」になってしまい、0点の生徒が困っていることに気づけないのと似ています。

Precision (適合率):「当てたって言うならちゃんと当ててよ」係

「モデルが『陽性だよ』と言ったものの中で、何割が本当に陽性だったか」

$$\text{Precision} = \frac{TP}{TP + FP}$$

  • モデルB: $18 \div (18 + 100) \approx 15%$

モデルBは「不正だ!」と118回叫びましたが、本当に不正だったのは18回だけ。残りの100回は誤報(偽陽性)でした。

【どんな時に重視する?】

  • 誤検知(偽陽性)がウザいとき
  • 例:スパム判定(重要メールがスパムに入ると困る)、レコメンド(興味ない商品ばかり出ると困る)

Recall (再現率):「とにかく見逃すな」係

「実際に陽性だったもののうち、何割をちゃんと拾えているか」

$$\text{Recall} = \frac{TP}{TP + FN}$$

  • モデルB: $18 \div (18 + 2) = 90%$
  • モデルA: $0 \div (0 + 20) = 0%$

モデルAはここで脱落です。不正を検知する気がないことがバレました。

【どんな時に重視する?】

  • 見逃し(偽陰性)が怖いとき
  • 例:病気の発見、不正検知、火災報知器

F1-score:バランス係

PrecisionとRecallのバランスを見る指標です(調和平均)。

$$\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$$

  • モデルB: 約 26%
  • モデルA: 0%

Accuracyだけでは見えなかった「モデルBの方が(不正検知としては)マシである」ことが、数値として表れます。


ROC / AUC:「このモデル、伸びしろありそう?」を見る係

多くのモデルは「白か黒か」ではなく、「不正スコア 0.8」のような確率を出します。
「0.5以上なら陽性」とするか、「0.8以上なら陽性」とするかで、TPやFPの数は変わります。

この閾(しきい)値を動かしたときの性能変化を表したのが ROC曲線 です。

ダウンロード (1).png

  • AUC (Area Under the Curve): 曲線の下側の面積。
  • 1.0 に近いほど「良いモデル(伸びしろがある)」
  • 0.5 くらいだと「コイントス(運任せ)レベル」

今の閾値での一点突破を見るのがAccuracyやF1なら、AUCは「閾値を調整すれば化けるポテンシャルがあるか」を見る人事担当のような指標です。


まとめ:結局どれを見ればいいの?

指標 モデルA (全部正常) モデルB (そこそこ検知) 性格
Accuracy 98% 90% 平均点主義。不均衡データに弱い。
Precision - 15% 誤検知(オオカミ少年)を許さない。
Recall 0% 90% 見逃しを許さない。
F1-score 0% 26% バランス重視。

タスク別「重視すべき指標」早見表

タスク例 一番つらいミス 重視したい指標
がん検診・不正検知 見逃す (偽陰性) Recall (まずは発見)
スパムメール判定 重要メールが消える (偽陽性) Precision (誤判定NG)
検索エンジン 変なサイトが混ざる Precision / F1

明日からできる小さな一歩

  1. accuracy_score だけで満足しない。 必ず classification_report も一緒に出して Precision / Recall を確認する癖をつける。
  2. 「どんなミスが痛いか」を言語化する。 「見逃しが怖いのか」「誤報が怖いのか」を一言メモするだけで、見るべき指標が決まります。

データラーニングギルドとは?

データラーニングギルド は、株式会社データラーニングが運営する、
データサイエンスを中心とした学習者・現役データサイエンティスト・エンジニアのためのコミュニティです。

学びの共有・キャリア形成・横のつながりを大切にし、
勉強会、LT会、技術相談、キャリア支援、案件紹介など、
「データ領域で挑戦したい人を応援する活動」を幅広く行っています。

初心者から実務者まで、誰もが成長できる場づくりを目指しています。

🔗公式サイト:https://data-learning.com/guild

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?