マルチクラスやマルチラベルの評価指標では、average 引数で「macro」「micro」「weighted」「samples」などの平均化戦略を選択できます。それぞれの意味を理解し、用途に応じて正しく選択しましょう。
1. 平均化戦略の概要 #
| average | 計算方法 | 特徴 |
|---|---|---|
micro | 全サンプルの TP/FP/FN を合算して計算 | サンプル数の多いクラスが優先される |
macro | クラスごとの指標を単純平均 | すべてのクラスを同じ重みで扱う |
weighted | クラスごとの指標をサンプル数で重み付け平均 | クラス不均衡を反映しつつ、極端なクラスの影響を抑える |
samples | マルチラベル用。サンプル単位で平均 | 1 サンプルに複数ラベルがある場合に有効 |
2. Python での指定方法 #
from sklearn.metrics import precision_score, recall_score, f1_score
for avg in ["micro", "macro", "weighted"]:
f1 = f1_score(y_true, y_pred, average=avg)
print(avg, f1)
デフォルトでは二値分類は average="binary"、多クラスでは average="weighted"(一部関数は None)になります。希望する平均化戦略を明示的に指定すると安心です。
3. 使い分けの指針 #
- micro:全体の正解率に近い感覚。大規模データで平均的な性能を素早く確認したいとき。
- macro:少数派クラスを重視。各クラスを公平に扱いたいとき。
- weighted:クラス比を反映しつつ、少数派の指標も見たいとき。実務でのバランス指標として使いやすい。
- samples:マルチラベルでサンプル単位の平均が欲しいとき(例:1 件のニュース記事ごとのタグ一致度)。
4. 注意点とベストプラクティス #
- Macro 平均だけを見ていると、実際に出現頻度の高いクラスのパフォーマンスが把握しづらい。Macro と Weighted を併用するのがおすすめ。
- Micro 平均はクラス不均衡で多数派に引きずられやすいため、混同行列やクラス別スコアも必ず確認する。
- レポートでは平均化戦略を明記し、意思決定者が数字を誤解しないようにする。
まとめ #
averageパラメータによって指標の意味が大きく変わるため、目的に合わせて使い分ける。- Macro はクラス平等、Micro は全体重視、Weighted は実務バランス、Samples はマルチラベル用。
- 複数の平均化結果を併記し、モデルの性能を多角的に判断しよう。