AI技術の発展に伴い、AIモデルの性能を正確に評価することが重要になっています。モデルの評価には、正解率、適合率、再現率、F値などの指標が用いられます。これらの指標は、モデルがどの程度タスクを達成できているかを判断する上で役立ちます。
各評価指標の定義と使い分け
| 指標 | 定義 | 数式 | 特徴 | 適用例 |
|---|---|---|---|---|
| 正解率 | 全データのうち、モデルが正しく予測できたデータの割合 | (TP + TN) / (全データ数) | 直感的に理解しやすい。ただし、クラスの分布が不均衡な場合(例えば、スパムメールの判定など、スパムメールが少ない場合)は、高い正解率でも性能が良いとは限らない。 | 全体的な性能を大まかに把握したい場合 |
| 適合率 | モデルが「陽性」と予測したデータのうち、実際に陽性であったデータの割合 | TP / (TP + FP) | 偽陽性(実際は陰性なのに陽性と予測)を少なくしたい場合に重視。 | スパムメールフィルタ(スパムでないメールを誤ってスパムと判定することを避けたい場合) |
| 再現率 | 実際に「陽性」のデータのうち、モデルが正しく「陽性」と予測できたデータの割合 | TP / (TP + FN) | 偽陰性(実際は陽性なのに陰性と予測)を見逃したくない場合に重視。 | 医療診断(がん患者を早期発見するため、見逃しを減らしたい場合) |
| F値 | 適合率と再現率の調和平均 | 2 * (適合率 * 再現率) / (適合率 + 再現率) | 適合率と再現率のバランスを考慮したい場合に利用。どちらか一方だけが高くても、F値は高くならない。 | 適合率と再現率のどちらも重要なタスク(情報検索など) |
| 不均衡データにおいて有用な指標 |
ここで出てくる、TP, TN, FP, FN は以下の混同行列で定義されます。
混同行列 (Confusion Matrix)
| 予測:陽性 | 予測:陰性 | |
|---|---|---|
| 実際:陽性 | TP (True Positive) | FN (False Negative) |
| 実際:陰性 | FP (False Positive) | TN (True Negative) |
- TP (True Positive): 陽性と予測し、実際に陽性だったデータ
- TN (True Negative): 陰性と予測し、実際に陰性だったデータ
- FP (False Positive): 陽性と予測したが、実際は陰性だったデータ(偽陽性)
- FN (False Negative): 陰性と予測したが、実際は陽性だったデータ(偽陰性)
具体例による理解
あるECサイトで、商品のレコメンドを行うAIモデルを開発したとします。 過去の購買履歴に基づき、顧客が購入する可能性が高い商品を「購入する(陽性)」、そうでない物を「購入しない(陰性)」と予測します。
テストデータ100件に対し、モデルの予測結果と実際の購入履歴が以下のようになったとします。(混同行列の形で示します。)
| 予測:購入する | 予測:購入しない | |
|---|---|---|
| 実際:購入する | 40件(TP) | 20件(FN) |
| 実際:購入しない | 10件(FP) | 30件(TN) |
この場合、各指標は以下のように計算できます。
- 正解率: (40 + 30) / 100 = 0.7 (70%)
- 適合率: 40 / (40 + 10) = 0.8 (80%)
- 再現率: 40 / (40 + 20) = 0.67 (67%)
- F値: 2 * (0.8 * 0.67) / (0.8 + 0.67) = 0.73
この例では、モデルは70%の正解率を持ちます。適合率は80%であり、モデルが「購入する」と予測した商品のうち、実際に購入されたのは80%です。一方、再現率は67%であり、実際に購入された商品のうち、67%をモデルが正しく予測できていることを示します。そして、F値は0.73となり、適合率と再現率のバランスが取れた指標を提供します。
【補足】Pythonによる計算例
scikit-learnライブラリを使うと、混同行列から各指標を簡単に計算できます。
| 指標 | scikit-learn 関数 | 備考 |
|---|---|---|
| 混同行列 | sklearn.metrics.confusion_matrix(y_true, y_pred) |
混同行列を計算 |
sklearn.metrics.classification_report(y_true, y_pred) |
正解率、適合率、再現率、F値をまとめてレポートとして出力 | |
| 正解率 | sklearn.metrics.accuracy_score(y_true, y_pred) |
|
| 適合率 | sklearn.metrics.precision_score(y_true, y_pred) |
average パラメータで多クラス分類時の平均化方法を指定可能 (micro, macro, weighted など) |
| 再現率 | sklearn.metrics.recall_score(y_true, y_pred) |
average パラメータで多クラス分類時の平均化方法を指定可能 |
| F値 | sklearn.metrics.f1_score(y_true, y_pred) |
average パラメータで多クラス分類時の平均化方法を指定可能 |
y_true: 実際のラベル(正解データ)のリストまたは配列y_pred: モデルによる予測ラベルのリストまたは配列
サンプルコード
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score # 実際のラベルと予測ラベル y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 1] # 1: 陽性, 0: 陰性 y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0] # 混同行列の計算 cm = confusion_matrix(y_true, y_pred) print("Confusion Matrix:") print(cm) # 各指標の計算 accuracy = accuracy_score(y_true, y_pred) precision = precision_score(y_true, y_pred) recall = recall_score(y_true, y_pred) f1 = f1_score(y_true, y_pred) print(f"Accuracy: {accuracy:.2f}") print(f"Precision: {precision:.2f}") print(f"Recall: {recall:.2f}") print(f"F1 Score: {f1:.2f}")
まとめ
AIモデルの性能評価は、ビジネス上の課題や目的に応じて、適切な指標を選択することが重要です。 例えば、
- 顧客満足度向上のためには、レコメンドの精度(適合率)を高める
- 機会損失の最小化のためには、購入可能性のある商品を広く提案する(再現率を高める)
といった使い分けが考えられます。 また、複数の指標を組み合わせて総合的に評価することも有効です。 F値は、適合率と再現率のバランスを評価する際に役立ちます。 正解率だけでなく、適合率、再現率、F値を理解し、適切に活用することで、AIモデルの性能をより深く理解し、改善に繋げることができます。
最後にPythonによる機械学習の学習に利用できるUdemyサイトを紹介します。
[PR]