🐡

なぜ分類問題のLBでLogLossではなくF1を使うか

2024/01/20に公開

なぜ分類問題のLBでLogLossではなくF1を使うか

TL; DR

  • モデルの予測値はケースによって現実でのその後の扱い方が異なる
  • 分類問題では対応の有無を決定するために0か1で予測を使用することが多い
  • 0か1かの予測を評価する際は、分類問題の場合はLogLossよりF1が望ましいことが多い
  • よって、分類問題のLBではLogLossではなくF1を使われることが多い

予測値の扱い方とは何か

ケース: 異常検出

よくある異常検出のケースで考えてみます。

ラベルが[0, 0, 0, 0, 0, 0, 0, 0, 0, 1](0が9個、1が1個)とします。以下の予測値を出すモデルが2つあったとして、どちらが現実で使った際に役立つでしょう?

  1. [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.6]
  2. [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.09]

指標による優劣の判断

まずは指標による優劣の判断を見てみます。

LogLossではモデル2が優れている

1のLogLossは0.51、2のLogLossは0.34であるため、2の方が優れたモデルと判定されます。

F1ではモデル1が優れている

1のF1は閾値0.5で1、2のF1は任意の閾値で0であるため、1の方が優れたモデルと判定されます。

指標により優劣の判断は異なる

上記より、指標により優劣の判断は変わりそうです。では、どちらがより「現実で役立つ」ことを示す指標になりそうでしょうか。

現実での活用方法を通して検討してみます。

現実でのモデルの使用方法

異常検知では大体のケースで以下のように使用されます。

図の通り、異常の判定後に対応が2つに分かれます。任意の確率の予測に対する対応はすべて正常か異常かの2通りの対応に振り分ける必要があります。

もし仮に人を介在させる場合、以下の通りになります。ここでは、正常か異常か判別が難しいものを再検査しています。

この場合の対応は3パターンですが、いずれにせよ確率を3通りのいずれかに振り分ける必要があります。

機械学習モデルの予測値は、異常検知では対応のパターンという形の離散値で扱われます。そのため、ここでは離散値での性能の良さを知りたいことになります。

現実でのモデル使用による評価

話をもとの評価の優劣に戻します。

ラベルが[0, 0, 0, 0, 0, 0, 0, 0, 0, 1](0が9個、1が1個)とします。以下の予測値を出すモデルが2つあったとして、どちらが現実で使った際に役立つでしょう?

  1. [0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.6]
  2. [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.09]

前述の通り、機械学習モデルの予測値はその後どう活用するか? が大事で、異常検知のケースでは答えは1です。

1のモデルはある閾値(例えば0.5)で異常と正常を正確に区別できます。2のモデルは任意の閾値ですべて正常、または異常とみなされ異常と正常を正確に区別できません。

確率的な予測をしたところで確率的な対応は行えないため、予測値は離散的な値にした時の性能が良い方、つまりF1で評価した際に優れた方がより役立つモデルになります。

LBでは現実で役立つモデルがより上位に来てほしいため、対応が0/1である場合は大抵のケースでLogLossよりF1がより優れた指標となります。

ケース: 馬券購入

例外のケースとして、予測値をそのまま使用せず、意思決定する際の情報として使用するケースがあります。このような場合では、予測値に歪みが少ないことを高く評価したいため、F1よりLogLossの方が優れていることが多いです。

具体例としては馬券の購入などがあります。馬券にはオッズ(1単位掛けた場合に何単位返ってくるか)があること、上位の順位の組合せで掛けられることから、最大値や閾値などで馬券を購入することは最適とは限りません。例えば以下の勝率とオッズのケースを考えます。

  • 勝率: [0.1, 0.3, 0.6]
  • オッズ: [10.0, 3.5, 1.6]

この場合、1単位掛けた場合の期待値はそれぞれ[0.1 * 10.0, 0.3 * 3.5, 0.6 * 1.6] = [1.0, 1.05, 0.96]であり、回収率(儲けること)を目的とする場合は勝率が2番目に高い対象を採用します。

このように、予測値を判断の材料に使用する場合、勝率とオッズに応じて適切に馬券の買い方を決定する(最適化する)必要があります。そのため、確率に対して歪みが少ない予測値がより高く評価されるLogLossが優れています。ただし的中率(当たったか否か)を重視する場合は、予測結果は0または1で使用・評価されるのでF1で評価した方が良いかもしれません。

ではROC-AUCやPR-AUCはどうか?

ではROC-AUCやPR-AUCはどうでしょうか。

2値分類の場合、F1よりROC-AUCやPR-AUCの方が閾値に左右されないため、評価としては安定しています。また、正常・異常の予測値の大きさの前後に対しペナルティを与えるように働くため、0か1かの意思決定を行った場合の良さを測るのにも比較的適しています。

Kaggleなどの機械学習コンペティションでは、LB(Leader Board, 公式の評価)がF1であってもCV(Cross Validation, 手元の評価)ではROC-AUCやPR-AUCが採用される場合があります。また、異常検知などでサンプルに偏りがある場合、F1では少数サンプルの正誤1つで指標が大きく上下しますが、PR-AUCであればある程度頑健に評価できます。

では、ROC-AUCやPR-AUCはF1より必ず優れた指標でしょうか?

ビジネスを考慮できるスコアはどちらか?

確かに、ROC-AUCやPR-AUCはモデルの評価においては安定しており、F1より優れている点が多いと思います。一方で、F1(というより、F1を計算する際のConfusion Matrix)はビジネス面での評価で優れています。

複雑系でない場合、CVのTP/FP/FN/TFの割合により導入した際のビジネスの効果をある程度正確に測れます。

以下のように異常検知の流れとコストを仮定します。

また、この場合のConfusion Matrixが以下である場合を考えます。

確率 正常と判断 再検査または異常と判断
真に正常 0.95 0.04 0.99
真に異常 0.00 0.01 0.01
0.95 0.05 1

モデルのビジネス効果は以下のように予測できます。

機械学習モデルの導入前
  • 人のみが1単位をコスト10で判定
  • 総コストは1単位につきコスト1 x 10 = 10
機械学習モデルの導入後
  • モデルが1単位をコスト1で判定
    • うち、0.95単位を正常として判定
    • うち、0.05単位を再検査として判定
      • 人が0.05単位をコスト10で再判定
  • 総コストは1単位につき 1 x 1 + 0.05 x 10 = 1.5
機械学習モデルの効果の検討

1単位につき10 - 1.5 = 8.5だけコストが浮きます。このコストが機械学習モデルの開発や運用費用より高ければ、機械学習モデルを導入すればビジネス面で効果があると予測できます。

今回はTP, FP, FNは所与としましたが、現実にはTP, FP, FNにはトレードオフが存在します。そのため、運用時には実現可能なラインでの望ましいバランスを決定する必要があります。F1が高ければ高いほどより高いラインでバランスを取ることができるため、ビジネスのことを考慮するならば、ビジネス効果の予測や上記のトレードオフの折込などからROC-AUCやPR-AUCよりF1の方が適している場面が多いかと思います。

ただし、前述した通りF1は閾値の決定や少数のサンプルによりスコアが左右されやすいため、開発の序盤や継続的なモデルの性能の比較の際にはROC-AUCやPR-AUCが望ましいかもしれません。

この辺りは実社会での評価とモデルの評価にどう折り合いをつけるか、機械学習エンジニアのビジネス面での仕事かと思います。

まとめ

分類問題では、モデルの予測値と予測値の活用の仕方が異なる場合があります。

現実の問題では活用方法が対応の有無であるケースが多く、この場合は離散値で評価した方が適切であるため、LogLossよりF1が良く使われます。ただし対応の仕方を最適化する場合は予測値が最適化に使われるため、LogLossの方が優れています。

F1とLogLossのどちらを使うか、はたまた別の指標を使うかを考える際の一助になれば幸いです。

Discussion