Help us understand the problem. What is going on with this article?

F値に関するメモ

F値は$2\frac{P*R}{P+R}$で定義される値である.

このF値,機械学習や統計で広く用いられる指標であり,情報処理を専門にされない方でも目にされることも多いと思う.しかし例えば次のような疑問が浮かぶ.
- 何故2倍するのか?
- R+Pで割るのは何を意味してるのか?
- R+Pが0になる場合はないのか?
F値は論文でも頻出する割に全然理解を得れてない.なんかイヤだ.もっと分かりやすい解釈が欲しい.そんな(個人的な)動機を背景に,このメモをまとめている.

要約

略記: Precision(P), Recall(R), True Positive(TP), False Negative(FN), False Positive(FP)とする.

  • F値は$F=2\frac{P*R}{P+R}$で定義される値.
  • 1つの解釈は$F = \frac{2}{\frac{1}{P}+\frac{1}{R}}$と変形し,PとRの調和平均と捉えること.
  • 本記事は$F = \frac{TP}{TP+\frac{1}{2}(FP+FN)}$ と表現する.
  • 上記の表現だと次の解釈ができる
    • 予測が正しくないデータ数FPとFNの平均がTPに割り込んだ値がF値.
    • (これが今回のメインで,直感的に分かりやすい気がする)
    • 他にも,FP+FN=0でF=1,TP=0でF=0,が見やすい.
    • (特にF=0になる場合は元の形式・調和平均共に見辛い気がする)(また,元形式ではP+R=0・調和平均ではP*R=0の場合の解釈が面倒)

細かい内容

定義

F値の定義を確認する.
表記は朱鷺の杜Wiki-F値を参照し,次のように表記する

真のラベル 予測ラベル 表記
 正 True Positive (TP)
 負 False Negative (FN)
 正 False Positive (FP)
 負 True Negative (TN)

モデルの学習結果としては
- TPとTNが大きい方が嬉しい
- FPやFNが小さい方が嬉しい
名前からも分かるように,前者は真のラベルと予測レベルが一致しているためTrueがついていて,後者は2つのラベルが一致していないためFalseがついている.なのでTが頭に付いてる数値が増えると嬉しい.

上記の記号を用い,PrecisionとRecallを次で定義する.

Precision = \frac{TP}{TP+FP},  \ \ Recall = \frac{TP}{TP+FN}

簡単のため以降ではP=Precision, R=Recallとする.
この時,次で定義される値がF値(もしくはF1値)と呼ばれるものになる.

F = 2\frac{P*R}{P+R}

F値の性質

F値の利点は,おそらくだが,PrecisionとRecallという2つの指標を1つにまとめる所が大きい.(違うという意見もあるかもだけど,その議論は本記事の趣旨ではない)
例えば新しくモデルを提案としても,指標が2つある場合,どちらかは勝ってるけどどちらかは負けてる状況が生じうる.そこでF値は両者のスコアを用い,全体としての良さらしさを反映した何かのスカラを定義することで,モデルの優劣を議論しやすくできる.

また以下の性質により,F値は“全体としての良さらしさを反映”するのに好ましい性質を持っている.

F値は次の範囲に含まれる.

0 \leq F \leq 1

機械学習/統計モデルとしては,
- 1に近づく方がより良い精度
- 0に近づく方がより悪い精度
であることを意味し,特に予測誤り(FP+FN)が0の時に1に,真の正のラベル(TP)を全て間違えた場合に0になる.

しかしこの性質が直感的でなく,個人的には理解し辛い.例えば次のような疑問が浮かぶ.
- 何故分子(或いは全体)を2倍するの?
- R+Pで割るってつまりは何を意味してるの?
F値は論文でも頻出する割に,全然理解を得れてない.なんかイヤだ.もっと分かりやすい解釈が欲しい.そんな動機でこれをまとめてる.

まずは一般的な解釈を振り返る.

一般的な解釈

wikipediaにもPrecisionとRecallに関するページがあるが,情報量が多すぎてゴチャゴチャしててつらい.今

A=TP+FP,  \ \ B = TP+FN

とする.つまりAは予測したラベルが正のデータ数であり,Bは真のラベルが正のデータ数を意味する.これを用いればPrecisionとRecallは次になる.

P = \frac{TP}{A}, \ \ R = \frac{TP}{B}

代入しただけだが,上記のAとBの解釈に基づけば,
- Precisionは正と予測したデータの正解率
- Recallは真の正のラベルの何割を正確に予測できたか
になる.
この解釈はPとRに関するものであり,F値の構成要素に関するものでしかない.しかし,これに次の調和平均的な解釈を組み合わせることでF値に関する解釈になる.

調和平均的な解釈

次のブログでは,どう組み合わせたかに対して調和平均からの解釈を与えている.あらびき日記-F値に調和平均を使う理由(再).基本的には,次の形

F = \frac{2}{\frac{1}{P}+\frac{1}{R}}

に注目し,F値はPrecisionとRecallの調和平均,という視点が与えられている.これはwikipediaより丁寧でとてもありがたい.しかし,今回は別の解釈を与える.

F値の解釈:間違ったデータ数の影響

次の式変形を行う(というかこれがこの記事の全て)

まずF値は次式で定義される.

F = \frac{2P*R}{P+R}

この分母と分子をそれぞれ次のように変形する.

P*R = \frac{TP}{A} * \frac{TP}{B} = TP * \frac{TP}{A*B} \\
P+R = \frac{TP}{A}+\frac{TP}{B}  = (B+A) * \frac{TP}{A*B}

F値に代入すると$\frac{TP}{A*B}$がそれぞれ打ち消され,またAとBを戻せば

F = \frac{2TP}{A+B} = \frac{2TP}{(TP+FP)+(TP+FN)}

となり,式を整えて次を得る.これが目的の形式になる.

F =  \frac{TP}{TP+\frac{1}{2}(FP+FN)}  

FP+FNは,(両方の頭にFが付くとおり),間違ったラベル予測をしたデータの総数を表す.C=FP+FNとすれば,C=0でF値は1になる.C!=0の場合では,C/2が分母に足されている.

この形式に基づけば,間違って予測したデータ数が0ならF値は1, 0でないならそれを1/2して分母に足して影響を見る.それがF値といえる.
(なぜ二倍するのか→算術平均のため)
(なぜR+Pで割るのか→平均を分母に足すため)


注: 細かい間違いが含まれているかもしれないです.その時はご指摘いただければ幸いです.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした