リモート開発メインのソフトウェア開発企業のエンジニアブログです

分類のための指標(PrecisionとRecall)の解説

指標はいろいろあって難しい

私が機械学習の勉強を始めた際に、モデルの性能を評価するための指標というものがあるのを知りました。
具体的に言うと、sckit-learnのclassification_reportです。

統計解析を学んだことのある人にとっては難しくないのかもしれませんが、機械学習を始めた人、あるいは何かとにかくデータを分析する必要がある人など、突然PrecisionとRecallなどを知った人のために、これらの概念をなるべくわかりやすく説明しようと思います。

上のような状況の人が多いのではないかと思っています。というのも、私自身統計学の入門書は読んだことはあるのですが、PrecisionとRecallといった単語は見たことはありませんでした。


まず、そもそも指標とはどのようなものがあるのか、というものを一覧できる情報源を持つと良いでしょう。

以下のwikipediaページが参考になりました。
統計学および機械学習の評価指標

今回の記事では、PrecisionとRecallまわり、すなわち分類モデルの指標のみを解説します。

混合行列

何かを予測するときは、「予測」と「真値」のデータがあるはずです。

予測および真値のデータ自体の次元は様々ありえますが、これ自体を1つの軸としてみてしまえば、「予測」と「真値」の2軸のデータと見れます。
ならば、予測と真値の情報を行列で表示するのが素直な情報の表示の仕方であることが理解できます。

これは、「混合行列(confusion matrix)」と呼ばれるものです。

簡単な例:

Image from Gyazo

この図では、写真に映っている果物を推定するようなモデルを想定しています。

結局の所、どのくらい予測が当たったのかというのは、この混合行列に全て情報は載っているわけです。

そして、以下から述べられる様々な指標は、この行列上の部分的な何かを表現してる数字なんだ、と捉えれば、理解がしやすいです。

細かい定義は各自で検索して貰ったほうが正確ですので、図とイメージを優先して示していきます。

精度(accuracy)

Image from Gyazo

これは一番理解がしやすい指標です。要は諸々の正解率です。

青色部分の合計を分母、赤色部分の合計を分子としたものです。 以下の図においても同様です。

すべてのデータのうち、正解しているものは行列の対角成分として現れるので、この図のようになります。

これは、モデルの出力全体に対して得られる指標です。

Moba Pro

PrecisionとRecall

PrecisionとRecallはとても単純な概念で、
「あるラベルごとの、混合行列上の行または列の上での正解率」です。
以下の図を見たほうが理解が速いでしょう。
accuracyと違うのは、これら2つの指標はラベルごとに値が存在するということです。「”りんご”のPrecision, “りんご”のRecall」などがあるということですね。

適合度(Precision)

Image from Gyazo

“りんご”と予測したもののうち、実際にあたっていた割合

再現度(Recall)

Image from Gyazo

“りんご”の真値のうち、ただしく予測された割合

補足

既存のweb上の文献でも、PrecisionとRecallの定義と解説は見つかるのですが、多くの場合二値分類で例示されています。
個人的には、これが理解の妨げになるのではないかと想像しています。
PrecisionやRecallは、あくまで分類の1ラベルごとに存在する概念だ、ということを覚えておくと、ややこしさが無くなりやすいと思います。

また、二値分類の際はTrue側を特にPrecisionとRecallと呼びます。

覚え方

PrecisionとRecall、どっちがどっちだっけ?となりやすいです。
私なりの覚え方を紹介します。

「適合」と「再現」という動詞の主語と目的語を考えます。

  • ○が○に適合する
  • ○が○を再現する

このとき、この穴に「動的なもの」と「静的なもの」を埋めるとしたら、こうなります。

  • 「動的なもの」が「静的なもの」に適合する
  • 「動的なもの」が「静的なもの」を再現する

文法としては「動的なもの」が主語ですが、もしも「適合度」「再現度」という割合を考えたときには、各々の分母にあたるものは

  • 適合度の分母は、動的なもの
  • 再現度の分母は、静的なもの

というイメージが適切であるように思います。

適合という言葉は、なにか自由に動くピースを特定の箇所にはめて、どのくらいピッタリハマったか、といった印象があります。
再現という言葉には、既に存在する静的な完成形に対して、どのくらい近づけるか、といったニュアンスがとれます。
(もしもこれが共感いただけないと、この覚え方は成立しません…諦めて暗記してください)

そして、この動的なものと静的なものは、真値と予測でいえば、当然真値が静的なもので、予測が動的なものといえます。

以上をまとめて

  • 適合度(Precision)→適合するのは動的なもの→分母が予測
  • 再現度(Recall)→再現したいのは静的なもの→分母が真値

という感じで私は覚えています。

F1スコア

これはPrecisionとRecallの調和平均です。両者はトレード・オフの関係にあるので、平均の数字も見ておこう、というのがこの指標の目的です。
なぜ”調和”平均なのか、というのは説明は省きます。(一言で言えば、平均を取りたい対象が割合を表す数字だからです)
補足ですが、調和平均の値は以下の図で示す分数と同じになります。

Image from Gyazo

まとめ

これ以外の指標も色々ありますが、予測と真値というペアのデータが存在する以上、混合行列を起点に考えるようにすれば、迷子になりにくいのではないかと思います。お役に立てたら幸いです。

また、当然ながらこれらの指標はなんのために見るのか、ということが大事なわけですが、そういったものは既に色々探せば見つけられると思うので、探してみてください。(私なりによりよい解説が思いつけば、また記事にしようかと思います)

← 前の投稿

MySQL で一意制約が削除できない

次の投稿 →

AWS の session token を簡単に管理する

コメントを残す