多クラス分類における F値: macro-F1 & micro-F1

1 min read読了の目安(約1400字

論文を読んでいて macro-F1 という評価指標をよく目にするのですが、あまり馴染みがなかったので、整理することにしました。

通常の二値分類におけるF値

こちらはすでに日本語による解説が充実しているかと思いますが、改めて自分の理解のために書いておきます。

実際に陽性 実際に陰性
予測で陽性 5 1
予測で陰性 2 2

上のような数値例で考えます。

Recall(再現率)

実際に陽性のものをどれほど予測で検出(再現)できたかを意味します。
上の例だと、5 / (5 + 2) = 約 71.4 % です。

Precision(適合率)

陽性の予測のうち、実際に陽性のものをどの程度含んでいるかを意味します。
上の例だと、5 / (5 + 1) = 約 83.3 % です。

F1(F値)

Recall と Precision の調和平均です。
上の例だと、2 * 0.714 * 0.833 / (0.714 + 0.833) = 約 76.9 % です。

多クラス分類におけるF値

ここからが本題です。

実際に和食 実際に洋食 実際に中華
予測で和食 4 6 3
予測で洋食 1 2 0
予測で中華 1 2 6

上のような数値例で考えます。

macro-F1

macro-F1では、まずそれぞれのクラスについて、そのクラスを陽性、それ以外のクラス全てを陰性として考えて、そのクラスにおける F1 を考えます。その後、クラスごとにそれぞれ求まった F1 の平均をとります。

例えば、和食について、

実際に和食 実際に和食以外
予測で和食 4 9
予測で和食以外 2 10

です。このデータについて、再現率は 4 / (4 + 2) = 66.7 %、適合率は 4 / (4 + 9) = 30.8% であり、F1 を計算すると 42.1 % になります。このようにして和食に関する F1 が求まりました。
同様に、洋食に関する F1 は 30.8%、中華に関する F1 は 66.7 % と計算できます。
よって、最終的な macro-F1 は

(42.1% + 30.8% + 66.7%) / 3 = 46.5%

と求まります。

なお、macro-F1 の亜種として weighted-F1 というのもあります。これは、最終的に F1 を求める際に単純に平均を取るのではなく、あらかじめ決めた重みに従って重み付けされた平均を求めるという指標です。特定のクラスの分類精度が他のクラスより重要な場合などに使えます。

micro-F1

micro-F1 の方が計算は簡単です。これは単純に、全予測のうち正しく予測できたものの割合です(つまり、accuracy と実質的に同じです)。

今回の例だと、
(4 + 2 + 6) / (4 + 6 + 3 + 1 + 2 + 0 + 1 + 2 + 6) = 48.0 %
と求まります。