MachineLearning

【Kaggle本 : 第2章前半】「タスクと評価指標」を3分で確認する

Kaggle本 第2章 前半

 

こんにちは、はやたすです。

上記のツイートのとおりで、Kaggle本で勉強したことを、できるだけ分かりやすく書いていきたいと思います。

 

この記事の注意点

  • あたかも0からオリジナルで書いたような文体になっています
  • 数式は大学卒業以来のLatexを使いました。コマンド忘れすぎでした
  • 当たり前ですが、オリジナルを購入した方が良いです
  • Kaggle本は、控えめに言って神です

 

【概略】Kaggle本「第2章 : タスクと評価指標」の内容

 

Kaggle本の第二章で書かれていることは、次の3つです。

  • どんなタスクがあるか?
  • どんなモデルの評価指標があるか?
  • 評価指標を最適化するには、どうすれば良いか?

上記の内容が、かなり網羅的に書かれています。

これからKaggleを始める方もそうですが、純粋に機械学習の評価指標を体系的に学びたい人にとっても、かなり勉強になる内容になっていると思います。

 

Kaggleのタスクについて

 

Kaggleの分析コンペにおけるタスクは、大きく分けると次のようになっています。

  • 回帰タスク
  • 分類タスク
  • レコメンデーション
  • その他のタスク

これを順番に見ていこうと思います。

タスク1 : 回帰

 

回帰タスクは、ざっくり言うと「数値を予測する」ようなタスクです。

物の値段や、店舗への来客数などを予測するのが、回帰にあたりますね。

 

チュートリアルでよく見る『House Prices: Advanced Regression Techniques』なんかが、具体的な例になります。

住宅価格の予測 kaggle

※House Prices: Advanced Regression Techniquesは、`SalePrice=販売価格`を予測するコンペになっています。

 

タスク2 : 分類

 

2つ目のタスクが、分類になります。分類タスクについては、下記のように細分化されます。

  • 二値分類
  • 多クラス分類

 

二値分類

 

二値分類の場合は、「患者が病気にかかっているか否か」といった感じで、YESかNOかで判定を下せるような問題が該当します。

たとえば、「病気にかかっている」だったら”1″で、「病気にかかっていない」だったら”0″といった感じで、変数を数値化してあげることで分類していきます。

なお、上記のように0 or 1を判定する場合もあれば、0〜1の確率を表す数値で予測するようなコンペもあります。

 

具体的なコンペ

通称タイタニックと呼ばれている『Titanic: Machine Learning from Disaster』が、二値分類問題に該当します。

タイタニック kaggle

 

多クラス分類

 

分類タスクには、多クラスに分類する問題もあります。

複数のクラス(A,B,C,D)があったとき、レコード(ID:1,2,3)がどれか1つに属しているならマルチクラス分類です。

そうではなく、同時に複数のクラスに属していることがあるなら、マルチラベル分類になります。

IDマルチクラス分類の目的変数マルチクラス分類マルチラベル分類の目的変数マルチラベル分類
1AAAA
2CBB,CB,C
3DDA,DA

 

タスク3 : レコメンデーション

 

レコメンデーションは、ユーザーが購入しそうな商品などを予測するタスクです。

ユーザーが購入しそうな商品を複数個レコメンドするタスクを例にすると、「①購入する可能性を順位付けして予測するパターン」と「②順位を付けないで予測するパターン」があります。

 

「②順位を付けない」場合であれば、マルチラベル分類と同義になるし、「①順位を付ける」のであれば、各商品の購入確率を元に、上位の商品から予測値として使っていきます。

いずれにせよ、購入するか否かの二値分類問題ってことになりますね。

 

タスク4 : その他

 

その他にも、物体検出であったりセグメンテーションといった、ディープラーニングをゴリゴリに駆使したコンペもあります。

 

Kaggleの評価指標

 

Kaggleの分析コンペで使われる評価指標(=モデルの評価で使う値)についても、各タスクごとで書かれています。

  • 回帰における評価指標
  • 分類における評価指標

「Kaggleの」と言いつつ、実際に実務の中でも使われるような評価指標って感じですね。

 

回帰における評価指標

 

回帰タスクで使われる評価指標は、主に4つです。

 

回帰の評価指標① : RMSE

回帰タスクで、もっとも代表的なのがRMSE(Root Mean Squared Error)です。

「Root = 平方、Mean=平均、Squared=二乗、Error=誤差」で平均平方二乗誤差ですね。

RMSE

RMSEのポイントが、下記のとおり。

  • RMSEを最小化したときに求まる解 = 「誤差が正規分布に従う」という前提のもとで求まる最尤解
  • MAEと比較すると外れ値の影響を受けやすい
  • 外れ値を除く処理をしないと、外れ値に適合したモデルを作成することになる

 

回帰の評価指標② : RMSLE

先ほどのRMSEにLが追加されたのが、RMSLEです。L=Logarithmicのことで、つまりRMSEでlogをとった形です。

RMSLE

RMSLEのポイントは、下記のとおり。

  • 目的変数が裾野思い分布を持っていて、何らかの変換しないと大きな値の影響が強い場合に使われる
  • 真の値と予測値の比率に着目したいときに使われる
  • logXとすると、y=0のときにlogX→-∞に発散するので、1+yとしてから対数を取る

 

回帰の評価指標③ : MAE

MAE(Mean Absolute Error)は、真の値と予測値の差に対して絶対値を取った後で平均を計算する指標です。

MAE

MAEのポイントが、下記のとおり。

  • 外れ値の影響を提言した形で評価できる
  • 予測値yによる微分が、真の値と同じときに不連続
  • 二次微分が常に0

 

回帰の評価指標④ : 決定係数

決定係数は、「モデルの当てはまりの良さ」をあらわします。

決定係数

決定係数が1に近づくほど、精度の高い予測ができているってことになります。

 

分類における評価指標

 

次に分類における評価指標ですが、分類に関しては、次の2パターンが考えられます。

  • 「正 or 負」を予測する二値分類
  • 正である確率を予測値とする二値分類

まずはイメージもつきやすい、「正 or 負」を予測する二値分類で使われる評価指標から見ていきましょう。

 

「正 or 負」を予測する二値分類

 

分類の評価指標① : Accuracy(正答率)

 

 

 

分類の評価指標② : error rate(誤答率)

 

 

分類の評価指標③ : precision(適合率)

 

 

分類の評価指標④ : recall(再現率)

 

 

分類の評価指標⑤ : F-値

 

 

分類の評価指標⑥ : MCC

 

正である確率を予測値とする二値分類

 

分類の評価指標⑦ : logloss

 

 

分類の評価指標⑧ : AUC

 

 

 

レコメンデーションにおける評価指標

 

レコメンデーションのコンペでよく使われるのが、MAP@Kです。

 

レコメンデーションにおける評価指標 : MAP@K

レコメンデーションでよく使われる評価指標がMAP@Kです。Mean Average Precision @Kの略ですね。

MAP@K

数式だけだと若干分かりにくいので、あるレコード(N=1)で、K=4の場合を考えてみます。

※N=1なので、Meanの部分がなくなるため、AP@4です。

 

AP@4

クラス(A,B,C,D)だとして、真の値のクラスがB,Dだったら、下記のようになります。

予測順位k予測値◯/×Pi(k)
1D1/1 = 1
2C×
3B2/3 = 0.67
4A×

上記の結果を用いると、次のように計算できますね。

MAP@4 precision

mは真の値のクラス数なので、m=2、Kが予測可能な個数なのでK=2です。そうすると、minをとったときは下記のようになります。

MAP@4 min

よって、これらを計算すると、MAP@4は下記のとおりです。

MAP@4

 

レコメンデーションに使われるMAP@Kに関しては、こんな感じで計算できます。

※ソースコード等は、MAP@K Pythonとかでググってみてください。Kaggle本ではサンプルコードがありますが、記載できませんm(_ _)m

 

評価指標と目的関数の違い

 

評価指標と目的関数の違いについては、下記のとおりです。

  • 目的関数 : モデルの「学習」において最適化される関数
  • 評価指標 :  モデルや予測値の性能を「評価」する指標

※僕の中では、目的関数=コスト関数、誤差関数評価指標=評価関数として、捉えています。

 

さらに深掘りしていくと、目的関数はモデルの学習において「パラメータの最適化」をしていく必要があり、決定木の分岐や線形モデルの追加・更新をおこなっていくので、微分可能である必要があり、つまるところ関数に「制限」があります。

対して、評価指標については、真の値と予測値から計算ができれば良いだけなので、特に「制約」がないです。

 

分析コンペだと、決められた評価指標がある

一般に評価指標の選択には特に制限がないですが、Kaggleではコンペごとに評価指標が定められています。

つまり、コンペごとに定められた評価指標を使った最適化が求められるってことですね。

 

そうなってくると、コンペごとで定められた評価指標と同じ関数を、そのまま目的関数で使ってあげれば、評価指標に対して最適化された予測値を出力できるモデルが作成できそうです。

 

とは言え、評価指標と目的関数が一致しない場合もアリ

基本的には「評価指標で使う関数 = 目的関数で使用する関数」でOKなのですが、ここが一致しない場合もあります。当然ながら。

そんなときには、評価関数や目的関数をカスタムしてあげればOKです。

※KerasとかXGBoostとか、それぞれの機械学習FWでカスタムできます。カスタム目的関数とかカスタム評価関数で検索してみてください。Kaggle本に例が載っていますが、転記はNGですm(_ _)m笑