F1スコア
F1 Score
F1スコアは、機械学習における重要な評価指標であり、適合率と再現率の調和平均を表します。偽陽性と偽陰性のバランスを取るため、不均衡なデータセットに最適です。
F1スコアとは?
F1スコアは、機械学習における基本的な評価指標であり、適合率と再現率の調和平均を表します。単に全体的な正解予測を測定する正解率とは異なり、F1スコアは偽陽性を避けること(適合率)と真陽性を捉えること(再現率)のトレードオフをバランスさせることで、モデルの有効性を定量化します。このバランスにより、F1は不均衡なクラスを持つ分類問題において好まれる指標となっています。特に、陽性ケースと陰性ケースの間で誤分類のコストが大きく異なる場合に有効です。
F1スコアは0(最悪)から1(最良)の範囲で、1は完璧な適合率と再現率を示します。その価値は、一方の指標で高いパフォーマンスを達成しながら他方を犠牲にするモデルにペナルティを与える点にあります。100%の適合率を持つが10%の再現率しかないモデルは、完璧な適合率にもかかわらず低いF1スコアを受け取り、その実用性の限界が明らかになります。この特性により、F1は詐欺検出、医療診断、コンテンツモデレーションなど、偽陽性と偽陰性の両方が重大な結果をもたらす実世界のアプリケーションで特に価値があります。
分類タスクがバランスの取れた学術データセットから不均衡な実世界の問題へと進化するにつれて、F1スコアはますます重要になっています。これは正解率の根本的な限界に対処します:95%のケースが陰性であるデータセットでは、すべてを陰性と予測するモデルは95%の正解率を達成しますが、実用性はゼロです。F1スコアはこのような失敗を露呈させ、本番環境でモデルを評価する際に不可欠なものとなっています。
基礎の理解
混同行列
分類評価は混同行列から始まります。これは実際の分類と予測された分類を表にしたものです:
| 予測陽性 | 予測陰性 | |
|---|---|---|
| 実際陽性 | 真陽性(TP) | 偽陰性(FN) |
| 実際陰性 | 偽陽性(FP) | 真陰性(TN) |
真陽性(TP): 正しく予測された陽性インスタンス
偽陽性(FP): 陰性インスタンスを誤って陽性と予測
偽陰性(FN): 陽性インスタンスを誤って陰性と予測
真陰性(TN): 正しく予測された陰性インスタンス
適合率と再現率
適合率は陽性予測の正確さを測定します:
式: 適合率 = TP / (TP + FP)
解釈: すべての予測陽性のうち、実際に陽性である割合は? 高い適合率は誤報が少ないことを意味します。
再現率(感度、真陽性率)は陽性検出の完全性を測定します:
式: 再現率 = TP / (TP + FN)
解釈: すべての実際の陽性のうち、モデルが識別した割合は? 高い再現率は見逃しが少ないことを意味します。
正解率の罠
正解率 = (TP + TN) / (TP + FP + TN + FN)
不均衡なデータセットでは、正解率は誤解を招きます。詐欺率が1%のデータセットで、すべてのトランザクションを「詐欺なし」と予測する詐欺検出モデルは99%の正解率を達成しますが、価値はゼロです。適合率と再現率はこの失敗を明らかにし、F1はそれを定量化します。
数学的定義
F1スコアは適合率と再現率の調和平均を計算します:
F1 = 2 × (適合率 × 再現率) / (適合率 + 再現率)
調和平均は極端な値にペナルティを与えます。適合率または再現率のいずれかがゼロに近づくと、他方の指標の値に関係なくF1もゼロに近づきます。高いF1スコアを得るには両方が高くなければなりません。
混同行列を直接使用する代替式:
F1 = (2 × TP) / (2 × TP + FP + FN)
計算例:
適合率 = 0.8、再現率 = 0.6の場合:
F1 = 2 × (0.8 × 0.6) / (0.8 + 0.6) = 2 × 0.48 / 1.4 ≈ 0.686
F1の変種
F-betaスコア
F-betaスコアは、適合率と再現率に異なる重みを付けることでF1を一般化します:
F_β = (1 + β²) × (適合率 × 再現率) / (β² × 適合率 + 再現率)
β = 1: 等しい重み(標準F1)
β > 1: 再現率を重視(例: 医療スクリーニングのF2)
β < 1: 適合率を重視(例: スパム検出のF0.5)
使用ケースはドメインによって異なります。医療診断は多くの場合、再現率を優先し(偽陽性があっても全ての疾患を捉える)、スパムフィルタリングは適合率を優先する場合があります(正当なメールのブロックを避ける)。
多クラス平均化
複数のクラスを持つ問題では、いくつかの集約戦略が存在します:
マクロ平均: クラスごとにF1を計算し、平均します。サイズに関係なくすべてのクラスを平等に扱います。
マイクロ平均: クラス全体でTP、FP、FNを集約し、グローバルF1を計算します。クラス頻度で重み付けされます。
加重平均: クラスサポート(真のインスタンス数)で重み付けされたクラスごとのF1スコアの平均。
クラスごと: 集約せずに各クラスのF1を報告し、最大の詳細を提供します。
戦略の選択は、すべてのクラスが等しく重要か(マクロ)、頻繁なクラスのパフォーマンスがより重要か(マイクロ/加重)によって異なります。
Pythonでの実装
基本的なF1計算
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 2, 2, 2, 1, 0, 2, 1, 0]
y_pred = [0, 0, 2, 2, 1, 2, 1, 0, 1, 2, 1]
# クラスごとのF1
f1_per_class = f1_score(y_true, y_pred, average=None)
# 平均化戦略
f1_micro = f1_score(y_true, y_pred, average='micro')
f1_macro = f1_score(y_true, y_pred, average='macro')
f1_weighted = f1_score(y_true, y_pred, average='weighted')
print(f"Per-class F1: {f1_per_class}")
print(f"Micro-average: {f1_micro:.3f}")
print(f"Macro-average: {f1_macro:.3f}")
print(f"Weighted-average: {f1_weighted:.3f}")
F-beta計算
from sklearn.metrics import fbeta_score
# F2スコア(再現率を重視)
f2 = fbeta_score(y_true, y_pred, average='macro', beta=2)
print(f"F2 score: {f2:.3f}")
# F0.5スコア(適合率を重視)
f05 = fbeta_score(y_true, y_pred, average='macro', beta=0.5)
print(f"F0.5 score: {f05:.3f}")
分類レポート
from sklearn.metrics import classification_report
print(classification_report(y_true, y_pred))
これにより、各クラスの適合率、再現率、F1、サポートを示す包括的なレポートが生成されます。
実世界のアプリケーション
医療診断
医療スクリーニングは、誤報を管理しながら、すべての真のケースを捉えること(高い再現率)を優先します。F1はこれらの懸念をバランスさせますが、陽性診断を見逃すことが深刻な結果をもたらす場合はF2が好まれる場合があります。
詐欺検出
金融詐欺はまれです(多くの場合、トランザクションの1%未満)。モデルは、アナリストを誤報で圧倒することなく(適合率)、詐欺を捉える(再現率)必要があります。F1は両方の指標に注意を払うことを保証します。
スパムフィルタリング
メールフィルターは、スパムをブロックすること(再現率)と正当なメールのブロックを避けること(適合率)のバランスを取ります。偽陽性(本物のメールをブロック)は、偽陰性(スパムを通す)よりもコストが高いことが多いです。
コンテンツモデレーション
AIチャットボットや有害コンテンツを検出するプラットフォームは、同様のトレードオフに直面します。過度に積極的なフィルタリング(高い再現率、低い適合率)は無害なコンテンツを検閲します。消極的すぎるフィルタリング(高い適合率、低い再現率)は有害なコンテンツを通します。
大規模言語モデルの評価
F1は、構造化抽出タスクにおけるLLMの精度を評価し、モデルがプロンプトから正しいラベルを抽出する能力を測定し、幻覚情報を避けます。
制限と代替手段を使用すべき場合
F1の制限
等しい重み付けの仮定
F1は適合率と再現率を等しく扱います。一方が大幅に重要な場合、F-betaまたは個別の指標がより良い評価を提供します。
真陰性への非感受性
F1はTNを無視するため、陰性クラスのパフォーマンスが重要な場合、情報量が少なくなります。
解釈の複雑さ
同一のF1スコアは、大きく異なる適合率/再現率の組み合わせから生じます。常に両方の基礎となる指標を調べてください。
深刻な不均衡への不適切さ
極めてまれな陽性の場合、貧弱なモデルでも妥当なF1スコアを達成します。代わりに適合率-再現率曲線またはROC-AUCを検討してください。
代替指標
再現率を優先: 再現率を直接使用するか、F2スコアを使用
適合率を優先: 適合率を直接使用するか、F0.5スコアを使用
ランキング評価: ROC-AUCまたは適合率-再現率AUCを使用
コスト重視アプリケーション: ビジネスへの影響を反映するカスタムコスト行列を使用
ベストプラクティス
ドメインコンテキストが重要
指標を選択する前に、偽陽性と偽陰性のビジネスコストを理解してください。F1は両方がほぼ等しく重要な場合に機能します。
構成要素を調べる
F1と一緒に常に適合率と再現率を確認してください。同一のF1スコアは重要なパフォーマンスの違いを隠す可能性があります。
複数の指標を検討
包括的な評価のために、F1を他の指標(正解率、ROC-AUC、適合率-再現率曲線)と一緒に使用してください。
閾値分析
確率ベースの分類器の場合、分類閾値全体でF1がどのように変化するかを分析して、最適な動作点を見つけてください。
交差検証
複数のデータ分割でF1を計算して、パフォーマンスの安定性を評価し、特定のテストセットへの過学習を避けてください。
重要なポイント
F1スコアは、適合率と再現率をバランスさせる単一の指標を提供し、不均衡なデータセットでの分類モデルの評価に非常に価値があります。一方の指標で高いパフォーマンスを達成しながら他方を犠牲にするモデルにペナルティを与え、正解率だけでは見えない実用的な制限を明らかにします。F-betaのような変種はドメイン固有の重み付けを可能にし、多クラス平均化戦略は複雑な分類問題を処理します。scikit-learnを通じた実装は簡単ですが、F1を解釈するにはその制限を理解し、基礎となる適合率と再現率を調べる必要があります。偽陽性と偽陰性の両方が重大なコストをもたらす場合、F1はデータセットの特性ではなくモデルのパフォーマンスに基づいた原則的な評価アプローチを提供します。
参考文献
- V7 Labs: F1 Score in Machine Learning
- GeeksforGeeks: F1 Score in Machine Learning
- KDnuggets: Confusion Matrix, Precision, and Recall Explained
- Google Developers: Classification Metrics
- Towards Data Science: Performance Metrics
- Permetrics: F-Beta Score
- scikit-learn: f1_score Documentation
- Arize: Understanding and Applying F1 Score
- ScienceDirect: Fraud Detection in Healthcare
- Galileo AI: F1 Score in AI Evaluation
- Wikipedia: F-score
- scikit-learn: Model Evaluation Guide
関連用語
AIにおける継続学習
AIにおける継続学習を探求します。システムが忘却することなく段階的に適応し知識を獲得できるようにする技術です。そのプロセス、破滅的忘却などの課題、実世界での応用について理解を深めます。...