How to Win a Data Science Competition Week3-01

Posted on 2019/10/05 in 機械学習 , Updated on: 2019/10/05

coursera の How to Win a Data Science Competition: Learn from Top Kagglers の Week 3 のまとめ。

Motivation

  • コンペにおいて重要な metric (評価指標) について
  • 色々な metric が用いられる理由は、各企業が特定の問題に最適な指標を自分たちで決定しているから
  • コンペにていいスコアを取得する = 良い metric score を取得する
  • metric の意味を理解して、効率よくスコアアップを目指そう
  • metric が異なれば、同じデータ/モデルを使用してもスコアは大きく異なることがある
  • metric を効率的にアップさせるには、ある種の直感も必要
  • そのためには、EDA は非常に重要
  • また、特殊な metric が使用される場合は、まずそれについて学ぼう

Regression metrics review 1

  • MSE (平均二乗誤差)
    • ターゲットと予測値誤差の二乗の平均
    • 最も一般的な評価指標
  • RMSE (平方根平均二乗誤差)
    • 平均二乗誤差の平方根
    • MSE最小 = RMSE最小
    • 一見 MSE と同じように思えるが、わずかな違いが、勾配ベースモデルにて生じる
    • MSE の勾配と RMSE の勾配が異なる => learning rate が異なる
  • R_squared
    • MSE や RMSE の絶対値でモデルの良し悪しは判断できない (あくまで相対値)
    • R_squared を使って一定のベースラインと比較できるようになる
    • MSE が 0 の時、R_squared は 1 に、逆に 1 の時は, 0 に。
  • MAE (平均絶対値誤差)
    • ターゲットと予測値の絶対誤差の平均
    • 重要な点として、大きな誤差にペナルティ(重み)を課さない
    • つまり MSE よりも外れ値に鈍感になる
    • MAE は金融業界で利用される。MAE なら105の誤差の比率は2倍だが、MSE では4倍
    • MAE は MSE より堅牢 (つまり異常値の影響が少ない)

Regression metrics review 2

  • target:10 に対して予測 9 と target:1000 に対して予測 999 はどちらも MSE は 1
  • 実際には、10に対して9 のほうが深刻な誤差である(10%)
  • しかし、MSE や MAE は絶対誤差で動作するので上記を区別することができない。
  • この問題に対応するために、相対誤差を考慮した指標が必要

Classification metrics review

分類問題における評価指標

  • Accuracy
    • 最も単純な評価指標
    • 値が大きいほど、モデルとして優れており、正しく分類される割合に等しい
    • 偏ったデータセットにおいては注意が必要
      • 猫10匹、犬10匹のデータにおいて、全て犬と予測すると Accuracy は 90% と高い値を出してしまう
      • この場合、本当は99%の精度まで高められる可能性を持っていても、最適化は難しい
  • Logarithmic loss
    • 分類するべきクラスに属する確率で評価する指標
    • 2値分類およびマルチクラス分類問題にて利用できる (計算式は異なる)
    • すべてのクラスに属する確率の合計は、常に 1
    • 間違った分類に対して大きなペナルティを課す
  • Area under ROC curve
  • Quadratic weighted Kappa
    • 重み付き誤差

General approaches for metrics optimization

損失(loss)と、評価指標(metric)の違いについて。また、metric の最適化へのアプローチの説明

  • metric は、モデルの品質を評価するために使用する関数
  • 分類タスクにおいては、モデルが正しいラベルを出力する頻度を最大化したい
  • しかし、精度を効率的に最適化する方法はわからない
  • 代わりに proxy loss function を使う。これは特定モデルに最適化が容易な評価関数
  • 損失関数は、モデルを最適化するために用いられる
  • metric は、モデルの結果に対する評価方法

  • metric の最適化アプローチ
    • いくつかの metric は直接最適化できる (MSE, Logloss)
    • 直接最適化できないもの : MSPE, MAPE, RMSLE..
      • XGBoost では、MSPE は直接最適化できないが、データをリサンプリングして、MSE で最適化できるようにするトリックがある(後述)
      • XGBoost では、カスタム損失関数を簡単に定義できる (例↓)
In [ ]:
# 予測とターゲット値を受け取り、モデルの予測に対して損失関数の1次および2次の導関数を
# 計算する単一の関数を実装

def logregobj(preds, dtrain):
    labels = dtrain.get_label()
    preds = 1.0 / (1.0 + np.exp(-preds))
    grad = preds - labels
    hess = preds * (1.0 - preds)
    return grad, hess
  • 適切な最適化方法や、カスタム損失関数を書くことは難しいのが現状
  • 便利な機能として、early stoppgin がある
    • モデルを設定、最適化できる損失関数を最適化し、検証セットで metric を監視する。そして、モデルが最適化され、metric にしたがってモデルがオーバーフィットし始めたら、トレーニングを停止する。