sklearn.metrics.classification_reportの結果の読み方を簡単に解説する

python

>>> from sklearn.metrics import classification_report
>>> print(classification_report([0, 0, 0, 1, 1, 1], [0, 0, 1, 1, 1, 1]))
             precision    recall  f1-score   support

          0       1.00      0.67      0.80         3
          1       0.75      1.00      0.86         3

avg / total       0.88      0.83      0.83         6

第1引数y_true(正解)が[0, 0, 0, 1, 1, 1], 第2引数y_pred(予測値)が[0, 0, 1, 1, 1, 1]の場合

  • 0だと予想したもの2つはすべて正解: 0のprecision(適合率)が1.00
  • 1だと予想したもの4つは、うち3つが正解: 1のprecisionが0.75
  • 正解が0だった3つのうち、正しく0だと予想されたものは2個: 0のrecall(再現率)が0.67
  • 正解が1だった3つのうち、すべてが正しく1だと予想されていた: 1のrecallが1.00
  • f1-scoreはprecisionとrecallの調和平均 see F値

不均衡データ python

>>> print(classification_report([0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 1, 1, 1]))
            precision    recall  f1-score   support

         0       1.00      0.88      0.93         8
         1       0.67      1.00      0.80         2

avg / total      0.93      0.90      0.91        10

>>> print(classification_report([0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]))
            precision    recall  f1-score   support

         0       0.89      1.00      0.94         8
         1       1.00      0.50      0.67         2

avg / total      0.91      0.90      0.89        10
  • 実際には10個の内2個だけが1

  • 前半

    • 3つ1だと予想した、うち2つが正解
    • 顧客が「本当は1のものを取りこぼしたくない」と思っているならこれは良い方法
      • それは「1のrecallが1.00であるから」と表現できる
    • 逆に「1だと予測したものは全部1であってほしい」と思っているならこれは悪い方法
      • それは「1のprecisionが0.67しかないから」と表現できる
  • 後半

    • 1個だけ1だと予想した
    • 顧客が「本当は1のものを取りこぼしたくない」と思っているならこれは悪い方法
      • それは「1のrecallが0.50しかないから」と表現できる
    • 逆に「1だと予測したものは全部1であってほしい」と思っているならこれは良い方法
      • それは「1のprecisionが1.00しかないから」と表現できる
  • 「本当は1のものを取りこぼしたくない」

    • 「1の石を割ると宝石が出て来て、10万で売れる。仕入れに1万掛かる」
      • 多少間違えてでも1の石を割ったらガッポリ儲かる
      • だから1っぽいものはどんどん教えてほしい
    • 3個1だと予想して2個が正解→3万払って、20万手に入れる。17万の儲け。
    • 1個1だと予想して1個正解→1万払って、10万手に入れる。9万の儲け。
  • 「1だと予測したものは全部1であってほしい」

    • 「1の石を割ると宝石が出て来て、10万で売れる。仕入れに9万掛かる」
      • ギリギリの商売なんで下手を打つと赤字になる
      • だから確実に1なものだけ教えてほしい
    • 3個1だと予想して2個が正解→27万払って、20万手に入れる。7万の損。
    • 1個1だと予想して1個正解→9万払って、10万手に入れる。1万の儲け。
  • ブレイクイーブンポイント

    • ロジスティック回帰ならデフォルト0.5の閾値を上下させることによって精度や再現率を調整できる。精度と再現率は逆方向に動く。閾値を調整して精度と再現率の値を一致させた場合の、精度のことをプレシジョン-リコール ブレイクイーブンポイントと呼ぶ。(情報検索の分野における用語)

#機械学習 #TODO ブレイクイーブンポイントについて書く http://ibisforest.org/index.php?F%E5%80%A4