4.3.8
F1 Score
まとめ
- F1 スコアは Precision と Recall の調和平均で陽性検出のバランスを測る指標です。
- 不均衡データを例に F1 と各構成要素を可視化し、しきい値調整の影響を確認します。
- Fβ スコアの使い分けや運用時の注意点を整理します。
- 適合率・再現率 の概念を先に学ぶと理解がスムーズです
1. 定義 #
適合率を \(P\)、再現率を \(R\) とすると F1 スコアは
$$ F_1 = 2 \cdot \frac{P \cdot R}{P + R} $$で表せます。より一般的な Fβ スコアは
$$ F_\beta = (1 + \beta^2) \cdot \frac{P \cdot R}{\beta^2 P + R} $$となり、\(\beta > 1\) で再現率を、\(\beta < 1\) で適合率をより重視します。
2. Python 3.13 での計算 #
| |
| |
classification_report ではクラス別の Precision / Recall / F1 がまとめて確認できます。
3. 閾値と F1 スコアの関係 #
確率出力 predict_proba を使えば、閾値を動かしたときに F1 がどう変わるかを可視化できます。
| |

閾値によって F1 は変動する。Recall を優先したい場合は閾値を下げて再計算する。
- F1 が最大になる閾値を探せば、Precision / Recall のバランスがもっとも良い点がわかります。
- Recall をさらに重視したい場合は F2 や F0.5 といった Fβ スコアで閾値を評価し直すと良いでしょう。
4. 多クラスでの平均化 #
scikit-learn の verage 引数を切り替えることで、多クラス問題でも F1 を集計できます。
- macro … クラスごとに F1 を計算し単純平均。クラス数が少なくても公平。
- weighted … クラスごとの F1 をサンプル数で加重平均。全体のバランスを保つ。
- micro … 混同行列を合算してから計算。クラス不均衡の影響を受けやすい点に注意。
| |
サンプル単位のマルチラベルでは verage=“samples” も利用できます。
まとめ #
- F1 スコアは適合率と再現率を同じ比重で評価する調和平均。閾値により大きく変動するので可視化して確認する。
- Fβ スコアを使えば、見逃し重視/誤検知重視など要件に応じて重み付けを変えられる。
- 多クラスやマルチラベルでは平均化方式を明示し、Precision / Recall / PR 曲線と併せて総合的にモデルの挙動を把握しよう。
閾値と F1 スコア #
閾値を動かして F1 スコア・適合率・再現率の変化を確認してください。
- 適合率・再現率 — F1 の構成要素
- 平均化戦略 — 多クラスでの集計方法
- MCC — 全セルを使う代替指標
- Focal Loss — 不均衡データ向けの損失関数