正解率(Accuracy)の
計算式と目安
分類モデルの出来を聞かれて、真っ先に出てくる数字が正解率(Accuracy)です。全件のうち当たった割合なので説明しやすく、どの評価ライブラリにも用意されています。
ところが、スパム判定や不正検知のように陽性が数%しかないデータでは、何も学んでいないモデルでも正解率が高く出ます。正解率をそのまま信じてよい場面と、別の物差しが要る場面を、具体的な件数の例と判定ツールで切り分けます。
正解率の良し悪しは、まず全件を多い方のクラスと答えたときの正解率(多数派ベースライン)を超えたかどうかで判断します。陽性が5%のデータなら、ベースラインは95%です。この水準からの上積みと、陽性・陰性それぞれの当たりやすさを確かめてから、正解率を評価に使うのがおすすめです。クラスの偏りが大きいときは、バランス正解率やMCCも並べて報告しましょう。
- 正解率(Accuracy):全件のうち、予測が当たった割合。
- 多数派ベースライン:全件を多い方のクラスと答えたときの正解率。モデルが何も学ばなくても出せる水準。
- バランス正解率(Balanced Accuracy):陽性と陰性それぞれの当たりやすさ(再現率と特異度)の平均。
- MCC(マシューズ相関係数):混同行列の4マスすべてを使う −1〜1 の指標。0がランダム予測と同じ水準。
01.正解率の計算式と求め方|混同行列の対角線の合計
正解率は、混同行列の4マスのうち、当たった2マスを足して全件で割った値です。陽性を陽性と当てた真陽性(TP)と、陰性を陰性と当てた真陰性(TN)が当たりで、見逃し(FN)と空振り(FP)が外れです。
図:正解率は「当たった2マス」の合計を全件で割る
問い合わせ1,000件(うち実際のスパム50件)にスパム判定モデルをかけた例。オレンジで囲んだ2マスが当たりで、残りの2マスが外れ。
32
真陽性(TP)
スパムをスパムと当てた
18
偽陰性(FN)
見逃し
8
偽陽性(FP)
空振り
942
真陰性(TN)
通常を通常と当てた
正解率=(TP+TN)÷ 全件
(32+942)÷ 1,000 = 0.974。1,000件のうち974件が当たった。
誤分類率=(FP+FN)÷ 全件=1 − 正解率
(8+18)÷ 1,000 = 0.026。外れた26件の割合。
scikit-learn の正解率の説明でも、accuracy_score は正しく予測できた件数の割合として定義されています。外れの割合は誤分類率と呼び、1から正解率を引いた値になります。テストの正答率と同じく「正しく答えた数 ÷ 全体の数」なので、計算そのものに迷う要素はありません。
ただし、出てきた数字の読み方には注意が要ります。上の例の0.974は、1,000件のうち974件が当たったことを示すだけです。974件の内訳を見ると、942件は通常の問い合わせを通常と当てた分です。スパムを当てた分は32件にすぎません。
02.正解率が当てにならない場面|陽性が少ないデータ
多数派ベースラインとの比較
陽性が少ないデータでは、全件を陰性と答えるだけで正解率が高く出ます。Google の Machine Learning Crash Course(日本語版)は、片方のクラスが1%しかないデータでは、常に陰性と予測する役に立たないモデルでも正解率が99%になると説明しています。同じ資料は、不均衡なデータセットでは正解率を使わず、別の指標を検討するよう勧めています。
この「全件を多い方と答えたときの正解率」を、本記事では多数派ベースラインと呼びます。スパムが50件の例なら、全件を通常と答えれば950件が当たるので、ベースラインは95%です。
図:3つのモデルの正解率の差|何もしないモデルでも95%
同じ1,000件(うちスパム50件)に3つのモデルをかけた例です。差が数ポイントしかないため、棒は正解率の90%〜100%だけを拡大しています。縦線の95%は、全件を通常と答えるだけで届く正解率です。下の点は、外れた1件ずつを表します。
全件を通常と答えるモデルスパムを1件も拾わない・拾えたスパム 0/50件
95.0%95%との差 ±0.0ポイント(基準そのもの)
外れ 50件/1,000件中(5.0%)=20件に1件を外す内訳:見逃し50件・空振り0件
スパム判定モデル空振りを抑えたしきい値・拾えたスパム 32/50件
97.4%95%との差 +2.4ポイント
外れ 26件/1,000件中(2.6%)=約38件に1件を外す内訳:見逃し18件・空振り8件
見逃しを減らしたモデルしきい値を下げて広く拾う・拾えたスパム 45/50件
93.5%95%との差 −1.5ポイント
外れ 65件/1,000件中(6.5%)=約15件に1件を外す内訳:見逃し5件・空振り60件
スパム判定モデルの正解率は97.4%ですが、ベースラインからの上積みは2.4ポイントです。全件を通常と答えるモデルは、スパムを1件も拾わないのに95.0%を取ります。正解率の数字の大半は、多い方のクラスを当てた分でできています。
正解率の順位と実力の逆転
3つ目のモデル(見逃しを減らしたモデル)は、スパム50件のうち45件を拾います。その代わり空振りが60件に増えるため、正解率は93.5%にとどまります。正解率で並べると、スパムを1件も拾わないモデルも下回り、3つの中で最下位です。
見逃しを重く見る業務なら、このモデルが3つの中で最も役に立つ可能性があります。正解率は見逃しと空振りを同じ1件として数えるので、どちらの誤りが重いかを反映できません。見逃しと空振りのコストからしきい値を決める手順は、別記事で詳しく扱っています。
適合率(Precision)と再現率(Recall)の違いと覚え方
ベン図で適合率と再現率の違いを図解し、見逃しと空振りのコストからしきい値を逆算する手順を整理しています。
03.正解率の判定ツール|条件を動かして確かめる仕組み
陽性の割合、陽性を当てる割合(再現率)、陰性を当てる割合(特異度)を動かすと、正解率とベースラインがどう動くかを確かめられます。ツールは、正解率・適合率・再現率・特異度の4指標を組み合わせた評価(4指標のクロス評価)もあわせて出します。「手元の混同行列を入れる」に切り替えれば、自分のモデルの件数をそのまま入れて判定できます。
陽性の割合と、陽性・陰性それぞれを当てる割合を動かすと、正解率を多数派ベースライン(全件を多い方と答えたときの正解率)と比べ、評価に使ってよいかを判定します。計算はブラウザ内で行い、サーバーには送信しません。
※ 例の数値は仕組みを説明するための仮の設定です。
この例の読み方:正解率97.4%のうち94.2ポイントは陰性の正解です。ベースラインの95%からの上積みは2.4ポイントで、ベースラインの誤りの約半分を減らしています。
件数が少ないと陽性が数件しか入らず、四捨五入による割合のずれが大きくなります。
見つけたい側(スパム・不正・解約など)が全体に占める割合
実際の陽性のうち、モデルが陽性と判定できた割合
実際の陰性のうち、モデルが陰性と判定できた割合
このモデルの正解率
97.4%
全件を陰性と答える
95.0%
ベースラインを上回り、陽性・陰性のどちらも半分以上を当てています。上積みの大きさは「ベースラインの誤りを何割減らしたか」で確かめてください。
灰色とオレンジ(正解)を足した長さが正解率です。縦線は全件を多い方のクラスと答えたときの正解率(ベースライン)で、正解の棒がこの線をどれだけ超えているかがモデルの上積みです。
陽性と判定したものの半分以上が本物で、本物の陽性も半分以上拾えています。どちらを伸ばすかは、見逃しと空振りのどちらが重いかで決めてください。
破線のランダム予測は、多数派ベースライン(全件を多い方と答えたときの正解率)とは別の物差しです。そのため正解率の行では、破線の値が多数派ベースラインと一致しません。
- ① 陽性・陰性の両方がある陽性50件・陰性950件
- ② ベースラインを超えた正解率 97.4% / ベースライン 95.0%
- ③ 両方のクラスを半分以上当てた再現率 64.0% / 特異度 99.2%
全件を陰性と答えたときの誤り(5.0%)のうち、48%を減らしています。
判定の仕組み
- 陽性か陰性の片方が0件なら「判定できません」とします。
- 正解率が多数派ベースライン(全件を多い方のクラスと答えたときの正解率)以下なら「ベースライン以下」とします。
- ベースラインを超えていても、陽性の再現率か陰性の特異度のどちらかが50%未満なら「片方のクラスを取りこぼしている」とします。
- どちらも満たせば「正解率を評価に使える状態」とします。
- ベースラインは、入力した件数(評価データ)で多い方のクラスを答えたときの正解率です。答えを1つに固定したモデルが出せる最高の値なので、判定は厳しめになります。学習データと評価データで多い方のクラスが逆なら、学習データの多数派で作るベースラインはこれより低くなります。
- 「評価に使える状態」でも、ベースラインの誤りを減らした割合が10%未満なら、上積みが小さいことを書き添えます。
4指標のクロス評価
- ランダム予測の値は、モデルと同じ件数を陽性と判定し、どれを陽性にするかだけをランダムに選んだときの期待値です。陽性と判定した割合を q、陽性の割合を p とすると、正解率 p×q+(1−p)×(1−q)、適合率 p、再現率 q、特異度 1−q になります。
- 適合率と再現率がそれぞれ50%以上かで4象限に分け、傾向と次に打つ手の目安を出します。
50%は編集部が置いた目安で、業務で求める水準ではありません。実際の水準は、見逃しと空振りのどちらが重いかから決めてください。
まず「全件を陰性と答えるモデル」を押し、陽性の割合のスライダーを左右に動かしてみてください。陽性の割合を小さくするほど、陽性を1件も当てていないのに正解率は100%に近づきます。次に「陽性が0.5%しかない検知」を押すと、正解率は99.6%と高くても、陽性の6割を見逃していることが分かります。
正解率の判定は、ベースラインを超えたかと、陽性・陰性のどちらも半分以上当てているかの2点で決めています。4指標のクロス評価では、各指標を、モデルと同じ件数をランダムに選んで陽性としたときの値(ランダム予測)と比べます。ランダム予測は、全件を多い方と答える多数派ベースラインとは別の物差しです。そのうえで、適合率と再現率の組み合わせから「慎重すぎ(見逃しが多い)」「拾いすぎ(空振りが多い)」といった傾向を示します。
どちらの判定でも、50%という基準は編集部が置いた目安です。業務で求める水準は、見逃しと空振りのどちらが重いかから決めましょう。
04.正解率の目安の決め方|ベースラインからの上積み
「正解率は何%あれば合格か」という問いに、データを問わない答えはありません。同じ90%でも、陽性の割合によって意味が正反対になるからです。
図:同じ「正解率90%」でも、陽性の割合で意味が変わる
灰色の棒が多数派ベースライン(全件を多い方と答えたときの正解率)、黒い線が正解率90%の位置。線が棒の先にあれば上積み、棒の中にあればベースライン以下。
| 陽性の割合 | 多数派ベースライン | 正解率90%との差 | ベースラインの誤りを減らした割合 |
|---|---|---|---|
| 50% | 50% | +40ポイント | 80% |
| 20% | 80% | +10ポイント | 50% |
| 10% | 90% | ±0ポイント | 0%(上積みなし) |
| 1% | 99% | −9ポイント | マイナス(ベースラインに届かない) |
目安を置くなら、正解率そのものではなく、ベースラインからどれだけ上積みしたかで見るのがおすすめです。物差しには「ベースラインの誤りを何割減らしたか」が使いやすく、(正解率 − ベースライン)÷(1 − ベースライン)で出せます。100%に近いほど誤りが少なく、0%ならベースラインと同じです。スパム判定モデルなら、ベースラインの誤り5%のうち2.4ポイントを減らしているので、約48%になります。
比べる相手は多数派ベースラインだけとは限りません。人手の判定や既存のルールが動いている業務なら、その正解率も並べます。新しいモデルを入れる価値は、いま動いている方法との差で決まるからです。
05.正解率を補う指標|バランス正解率とMCC
バランス正解率(Balanced Accuracy)
バランス正解率は、陽性の再現率と陰性の特異度を足して2で割った値です。scikit-learn のバランス正解率の説明によると、不均衡なデータで評価が水増しされるのを避けるための指標です。クラスが同数のデータでは、通常の正解率と同じ値になります。全件を多い方のクラスと答えるだけのモデルなら、2クラスのバランス正解率は50%になります。
3つのモデルのバランス正解率は、全件を通常と答えるモデルが50.0%、スパム判定モデルが81.6%、見逃しを減らしたモデルが91.8%です。正解率で最下位だったモデルが、バランス正解率では最も高くなります。
MCC(マシューズ相関係数)
MCCは、混同行列の4マスをすべて使う −1〜1 の指標で、(TP×TN − FP×FN)÷ √((TP+FP)(TP+FN)(TN+FP)(TN+FN))で計算します。1が完全な予測、0がランダム予測と同じ水準、−1が完全に逆の予測です。
Davide Chicco 氏と Giuseppe Jurman 氏は、2020年にBMC Genomics で発表した論文で、正解率とF1スコアは不均衡なデータで実力より高く出やすいと指摘しています。同じ論文は、4マスすべてで良い結果を出したときにだけMCCが高くなる点を挙げ、二値分類の評価ではMCCを優先するよう提案しています。スパム判定モデルのMCCは0.70、見逃しを減らしたモデルは0.59です。全件を通常と答えるモデルは、陽性と判定した件数が0のため分母が0になり、計算できません。
指標の使い分け
| 指標 | 全件を通常と答えるモデル | スパム判定モデル | 見逃しを減らしたモデル | 向く場面 |
|---|---|---|---|---|
| 正解率 | 95.0% | 97.4% | 93.5% | クラスが同程度で、見逃しと空振りの重さも同程度のとき |
| バランス正解率 | 50.0% | 81.6% | 91.8% | クラスが偏っていて、両方のクラスを同じ重さで見たいとき |
| MCC | 計算できない | 0.70 | 0.59 | 4マスすべてを1つの数字で評価したいとき。モデル同士の比較 |
| 再現率 | 0.0% | 64.0% | 90.0% | 見逃しを重く見るとき(不正検知・一次スクリーニングなど) |
どの指標も、1つだけで判断すると読み違えやすくなります。正解率を報告するときは、多数派ベースラインと、少ない方のクラスの再現率を並べるのがおすすめです。空振りと見逃しのどちらを重く見るかが決まっているなら、適合率・再現率とF1スコアで比べる方が業務の判断に直結します。
回帰のRMSE(二乗平均平方根誤差)や相関係数まで含めた評価指標の全体像は、別記事で整理しています。
予測モデル評価の指標と使い分け
分類・回帰・相関の3タスクごとに、どの評価指標を選ぶかを混同行列・ROC曲線の図解とともに整理しています。
06.多クラス分類の正解率|ベースラインとtop-k正解率
クラスが3つ以上でも、正解率の計算は同じです。対角線(予測と実際が一致したマス)の合計を全件で割ります。ベースラインは、最も件数の多いクラスの割合です。3クラスが900件・80件・20件なら、全件を最多のクラスと答えるだけで正解率は90%になります。
1件につき1クラスだけを予測する多クラス分類では、micro平均(全クラスの件数をまとめて計算する平均)の適合率・再現率・F1スコアは、いずれも正解率と同じ値になります。クラスごとの成績を見たいときは、macro平均(クラスごとの値の単純平均)を並べましょう。
候補を複数出せる用途では、top-k正解率も使われます。scikit-learn の top-k 正解率の説明によると、スコアの高い上位k個の候補に正解が入っていれば正解と数える指標で、k=1のときが通常の正解率です。おすすめ商品の表示や問い合わせの振り分け候補のように、人が最後に選ぶ運用なら、上位3件に正解が入るかの方が実態に合います。
07.Pythonでの計算|ベースラインと並べて出す手順
scikit-learn では、正解率と補助的な指標をそれぞれ1行で出せます。多数派ベースラインは、最も多いクラスを常に予測する DummyClassifier(strategy="most_frequent")を使えば同じ手順で出せます。
from sklearn.dummy import DummyClassifier
from sklearn.metrics import (
accuracy_score, balanced_accuracy_score, matthews_corrcoef, recall_score,
)
# 多数派ベースライン:学習データの最多クラスを常に予測する
baseline = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
y_base = baseline.predict(X_test)
y_pred = model.predict(X_test)
print("ベースライン正解率:", accuracy_score(y_test, y_base)) # 例: 0.950
print("モデルの正解率 :", accuracy_score(y_test, y_pred)) # 例: 0.974
print("バランス正解率 :", balanced_accuracy_score(y_test, y_pred)) # 例: 0.816
print("MCC :", matthews_corrcoef(y_test, y_pred)) # 例: 0.702
print("陽性の再現率 :", recall_score(y_test, y_pred, pos_label=1)) # 例: 0.640ベースラインは、評価用データではなく学習データの最多クラスで作りましょう。評価用データの答えを見てベースラインを決めると、本番で再現しない比較になります。上の判定ツールは学習データを受け取らないため、入力した件数の多い方でベースラインを出します。答えを1つに固定したモデルが出せる最高の値なので、多い方のクラスが学習データと同じなら一致し、逆なら判定は厳しめになります。
08.よくある質問(FAQ)
正解率と適合率の違いは何ですか?
分母が違います。正解率は全件を分母にして、陽性・陰性を問わず当たった割合を出します。適合率は陽性と予測した件数を分母にして、そのうち本当に陽性だった割合を出します。Google の Machine Learning Crash Course(日本語版)でも2つは別の指標として扱われ、同資料の訳では正解率を「精度」と呼んでいます。陽性が少ないデータでは、正解率が高くても適合率は低いことがよくあります。
機械学習の正解率の目安は何%ですか?
目安は、全件を多い方と答えたときの正解率(多数派ベースライン)からの上積みで置くのがおすすめです。陽性の割合が10%なら全件を陰性と答えるだけで90%になるため、同じ90%でも上積みはゼロで、どのデータにも通じる固定の数字はありません。クラスが偏っているときは、scikit-learn が不均衡データ向けに用意しているバランス正解率も並べると、多い方のクラスに頼った水増しに気づけます。
正解率と正答率は違いますか?
どちらも、正しく答えた数を全体の数で割った割合で、計算は同じです。機械学習の分野では、英語のAccuracyを正解率と訳すことが多く、scikit-learn の正解率の説明の accuracy_score も、正しく予測できた件数の割合を返します。ただし、テストの正答率と違って、モデルの正解率は「全件を同じ答えにする」だけで高く出ることがある点に注意が必要です。
正解率とMCCは、どちらを見ればよいですか?
両方を並べるのがおすすめです。正解率は説明しやすい一方で、クラスが偏ったデータでは高く出やすくなります。Chicco 氏と Jurman 氏の2020年の論文は、混同行列の4マスすべてで良い結果を出したときにだけMCCが高くなる点を挙げ、二値分類の評価ではMCCを優先するよう提案しています。報告では正解率に多数派ベースラインを添え、モデル同士の比較にはMCCを使うと、数字の読み違いを防げます。
09.まとめ
正解率は、混同行列の当たった2マスの合計を全件で割るだけの分かりやすい指標です。その反面、陽性が少ないデータでは多い方のクラスを当てた分で数字が膨らみ、何も学んでいないモデルでも高く出ます。正解率を読むときは多数派ベースラインと並べ、上積みと、少ない方のクラスの当たりやすさを確かめます。クラスの偏りが大きいときはバランス正解率やMCCを、見逃しと空振りの重さが違うときは適合率と再現率を並べると、数字の解釈がぶれません。
どの指標を報告の軸にするかは、モデルの性能そのものより「業務のどの誤りを重く見るか」で決まります。弊社でも、この評価の軸を現場と一緒に決めるところから支援しています。
分類モデルの評価指標の設計を伴走支援しています
弊社ではAIフル活用のデータ分析支援を提供しています。正解率をどう読むかの整理、ベースラインとの比較、見逃しと空振りのコストに基づく指標の選定まで、実データで伴走しながら整えています。お気軽にお問い合わせください。
データ分析・アルゴリズム 基礎知識集
一覧に戻る →全体像とカテゴリ早見
データの可視化
個別指標カテゴリ
- ›類似度・距離の指標の使い分け
- ›一致度・信頼性の指標の使い分け
- ›予測モデル評価の指標と使い分け
- ›適合率と再現率|しきい値で見逃しと空振りを調整する
- ›正解率|多数派ベースラインと比べて読む(この記事)
- ›確率較正(キャリブレーション)の基礎|事後較正・Vertex AI

