解説
AIの「確信99%」は正解率99%?予測の確率と実際の割合を照合しよう
同じ正解率80%でも、予測確率80%と99%は同じ説明ではない。架空の二値分類で、正解率と確率の校正を分けて確認。

AIの結果に「確信度99%」と書かれていたら、百回のうち九十九回は正しいと考えてよいのかな。数字の見た目だけでは、その解釈を裏付けられないよ。
このページでは、数値の確率を返す二値分類器を想定し、予測と実際の割合を照合する。二値分類は「対象である・対象でない」の二つへ分けること。架空の十件とPython 3.12の計算だけを使い、実際のAIモデルや利用者のデータは扱わないよ。
正解率と、確率の意味は違う
正解率は、分類結果が実際の答えに合った件数の割合。一方、予測確率は、例えば「対象である確率が0.8」という出力だよ。
確率の校正が良い分類器なら、対象である確率が0.8付近と予測された例を多く集めたとき、その約80%が実際に対象である、という関係を期待する。校正とは、この数値と実際の割合の対応を考えることなんだ。
一件の結果が正解だっただけで、その一件の0.8という数字を正しい確率だと確認できるわけではないよ。
同じ八件正解でも、出している確率は違う
架空の十件の答えを「対象が八件、対象外が二件」とする。AとBはどちらも全件を対象と分類するけれど、確率の数値だけが違うと考えよう。
| 架空の出力 | 対象と予測する確率 | 分類の正解率 | 実際に対象だった割合 |
|---|---|---|---|
| A | 全件0.80 | 80% | 80% |
| B | 全件0.99 | 80% | 80% |
分類の正誤だけなら両方同じ。一方、この十件のまとまりでは、Aの0.80は観測された割合と一致し、Bの0.99はそれより大きい。
Pythonで二つの見方を計算する
from decimal import Decimal
answers = [1] * 8 + [0] * 2
observed = Decimal(sum(answers)) / Decimal(len(answers))
for name, probability in [('A', Decimal('0.80')), ('B', Decimal('0.99'))]:
predicted = probability >= Decimal('0.5')
correct = sum(predicted == bool(answer) for answer in answers)
accuracy = Decimal(correct) / Decimal(len(answers))
print(name, accuracy, probability, observed)
表示はAが0.8・0.80・0.8、Bが0.8・0.99・0.8となる。最初が正解率、次が出した確率、最後が実際に対象だった割合だよ。分類のしきい値は0.5以上を対象とする、という今回の条件に固定している。
十件の一致だけで、全体へ保証しない
これは違いを知るための小さな例。十件だけでAが将来も校正されていると認定したり、Bの全体的な性能が低いと結論したりはしないでね。
実際には、同じ使い方を代表するデータ、十分な件数、確率帯ごとの観測割合などを確認する。0.8付近だけ合っても、0.2付近が合うとは限らないし、対象の分布が変われば対応も変わり得るよ。
また、確率の数値を変える調整と、分類の正解率を上げることも同じではない。どの指標を何の目的で確認したかを分けて残そう。
文章で自己申告した「自信」とも区別する
この例で参考にした公式資料は、分類器の確率予測の説明。生成AIへ「自信をパーセントで書いて」と頼んだ文章を、そのまま校正済み確率とみなす根拠にはならないよ。
その数値を自動承認などの判断へ使いたいなら、まず出力の定義と、実際の正誤との対応を独立したデータで確かめたい。未確認の数字にしきい値だけ付けても、判断の信頼性は保証できないんだ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。