Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「Kaggleで勝つデータ分析の技術」輪読&勉強会 第2章/kaggle_book_pt2

meow
November 12, 2019

「Kaggleで勝つデータ分析の技術」輪読&勉強会 第2章/kaggle_book_pt2

2019年11月22日追記: Quadratic Weighted Kappaに関して、著者様ご自身による補足説明記事↓をいただきました。感謝申し上げます。
https://note.mu/maxwell/n/n2f3d7c6476d9

==
2019年11月12日(火)にコワーキングスペース秋葉原Weeybleにて開催された、『「Kaggleで勝つデータ分析の技術」輪読&勉強会 #初回 (1章/2章)』で発表した資料です。第2章を担当しました。

https://weeyble-data.connpass.com/event/154533/

meow

November 12, 2019
Tweet

More Decks by meow

Other Decks in Technology

Transcript

  1. 私とKaggle  Kaggle歴  0日。やったことないです。  なぜ発表者に?  たのまれた 

    「こんないい加減な奴が発表しているのは許せん」と 義憤に駆られた方、次回再度2章を扱っていただいても 構いません
  2. 2.1 分析コンペにおけるタスクの種類① 1. 回帰タスク(連続値の予測) 1. データから数値を予測する 1. ものの値段、店の来客数など 2. 分類タスク(クラスラベルの予測)

    1. 二値分類 1. 2種類のラベルのどちらかを予測 (+その時の確率) 2. 多クラス分類 1. マルチ(多)クラス分類 1. 1つの“サンプルに対してどれかのクラス1つに対して割り当てる” 2. マルチ(多)ラベル分類 1. “多クラス問題から「サンプルに対してクラスは1つ」という制約を取り 除”く https://speakerdeck.com/brainpadpr/ basics-of-analysis-modeling?slide=33 参考: 1つの画像が複数のクラスに属する場合(Multi-label)の画像分類 - Qiita https://qiita.com/koshian2/items/ab5e0c68a257585d7c6f 図: https://prakhartechviz.blogspot.com/2019/ 02/multi-label-classification-python.html ※分類タスクは事後確率への 回帰タスクと捉える事もできる
  3. 2.1 分析コンペにおけるタスクの種類② 3. レコメンデーション  ユーザが購入しそうな商品や広告を予測 4. その他 1. 物体検出

     画像から物体の外枠を推定 2. (セマンティック)セグメンテーション  画像から物体をピクセルレベルで 推定 http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html amazonの例
  4. 2.2 分析コンペのデータセット 1. テーブル(構造化)データ 1. 表形式のデータ 2. 分析したい情報が1列ごとに区分けされている 2. 外部データ

    1. コンペで提供されている以外のデータセット 2. たいていは使用許可されないが、ドメインに基づく知識はモデルに 組み込むことができる 3. (時)系列データ 1. 株価、時間ごとの来客数など、サンプル間で関連がありそうなもの 4. 画像や自然言語(文章)などのデータ  冒頭p. ivにて書籍で扱わないことを宣言している
  5. 2.3.2 回帰タスクにおける評価指標  RMSE(Root Mean Squared Error)  よく使われる。2乗項があるため、外れ値の影響を受けやすい。 

    低いほど良いモデル  RMSLE(RMS Logarithmic Error)  yが大きな値を取る時  低いほど良いモデル = 1 =1 ( − )2 N: レコード数 i: レコードのインデックス : i番目のレコードに対するモデルの真の値 : i番目のレコードに対するモデルの予測値 L = 1 =1 (log 1 + − log 1 + )2 ※1を足しているのは が0で、 log 0 = −∞になるのをを防ぐため
  6. 2.3.2 回帰タスクにおける評価指標  MAE(Mean Absolite Error)  RMSEと比べて外れ値に強い  低いほど良いモデル

     決定係数(R^2)  回帰分析の当てはまりの良さを表す  高いほど良いモデル = 1 =1 − 2 = 1 − =1 ( − )2 =1 ( − )2 = 1 =1
  7. 2.3.3 二値分類における評価指標 正例or負例の場合  混同行列(confusion matrix)  モデルが予測したレコードが真値はどうだったのかを分けた表  この行列の値から様々な指標を計算できる(後述)

     accuracy, error rate  accuracy: 当てに行ったものが総数に対して正解している割合  異常検知のように正例or負例のデータ比が偏っている場合は指標とし て参考にならない  例: 100つあるデータのうち、99つが正常(正例)で1つが(負例)の場合、 すべて正例と予測してもAccuracy 99%と高い値になってしまう 真値は正例 真値は負例 正例と予測 8 2 負例と予測 4 10
  8. Precision, Recall o o o o o o o o

    o o x x x x x x x x x x x x x x 前ページの混同行列を図にした。 評価データセット内に正例oと負例xがそれぞれ12つあるとする o o x x
  9. Precision, Recall o o o o o o o o

    o o x x x x x x x x x x x x x x 評価データセットをモデルに正例か負例か当てさせる。 すると、青枠内のレコードを正例と予測した o o x x
  10. Precision, Recall o o o o o o o o

    o o x x x x x x x x x x x x x x この時、正例と予測した10つのレコードのうち、 実際に当たっていたのは8つ すなわち、Precisionは8/10=0.8 Precisionは、誤検知の少なさととれる o o x x
  11. Precision, Recall, F1-Score o o o o o o o

    o o o x x x x x x x x x x x x x x 一方で12つすべての正例のうち、モデルが正例と予測できたのは 破線枠の8つ。すなわち、Recallは8/12=0.6666… Recallは見逃しの少なさを表している o o x x
  12. F1-Score(F値) o o o o o o o o o

    o x x x x x x x x x x x x x x 定義式から F1-ScoreはPrecisionとRecallの調和平均である。 2*0.8*0.6666/(0.8 + 0.6666) = 0.7272
  13. 二値分類のその他の評価指標  MCC(Matthews Correlation Coefficient;マシューズ相関係 数) p.72  使われる頻度は高くない 

    量が不均衡な評価データに対して、適切に性能を評価できる  “マシューズ相関係数は混同行列の相関みたいなもので、 完璧に当てることができた理想のテーブルと予測結果の テーブルがどれくらい一致しているかを見ています。”  マシューズ相関係数とは - Matthews Correlation Coefficient –より  https://blog.datarobot.com/jp/matthews-correlation-coefficient
  14. 2.3.4 二値分類における評価指標 正例である確率の予測(p.72)  まぐれでもあたるときがあるので、どれくらい自信をもっ て当てにいっているかを確かめる  → 当てる時の(事後)確率でモデルの性能を測る 

    問題設定  正例のラベルを1、負例のラベルを0に割り当てる  モデルの出力は正例である確率にする  真の値が正例の時は、1に近い確率を出してほしい
  15. 2.3.4 二値分類における評価指標 正例である確率の予測(p.72)  log loss(cross entropy)  値が小さいほど良い 

    例えば レコードが正例で、それを0.9(正例に近い)と予測した場合 -log(0.9)=0.105  一方、0.1(負例に近い)と予測した場合 -log(0.1)=2.303  このlogの値の平均を取る = − 1 1 ( log + (1 − ) log(1 − ))
  16. 2.3.5 多クラス分類における評価指標(p.78)  multi-class accuracy  予測したものが正解だったレコード数をすべてのレコード数で 割った値  multi-class

    logloss  Mはクラス数  真値ラベルを1、それ以外を0としたときの、モデルの事後確率を下 記の式で評価する − 1 1 1 , log , 理想的には、真の値のインデックスに1が立っていてほしい [1,0,0], [0,0,1], [0,1,0],…のように
  17. 2.3.5 多クラス分類における評価指標(p.81)  quadratic weighted kappa  クラス間に順序関係がある場合に使用  例)

    映画の評価を1~3のレーティングで表したもの  , は ( − )2。ランクが離れるほど、ペナルティ大。  完全な予測で1,ランダムで0,それより悪い場合は負値 = 1 − , , , , , , ↓予測→真値 c=1 c=2 c=3 total c=1 10 5 5 20 c=2 5 35 0 40 c=3 15 0 25 40 total 30 40 30 100 ↓予測→真値 c=1 c=2 c=3 total c=1 20*30/100 20*40/100 … 20 c=2 30*40/100 … … 40 c=3 … … … 40 total 30 40 30 100 , ,
  18. 2.3.6 レコメンデーションタスクに おける評価指標(p.84)  MAP@K(Mean Average Precision @ K) 

    推薦結果をK番目まで順位をだした時の順番の正確さ  Avg Precisionは下記URLを参照  MAP(Mean Average Precision)という指標の意味 - 具体例で学ぶ数学  https://mathwords.net/meanap  コードで殴ったほうが早い気がする @ = 1 =1 1 ( , ) =1 ()
  19. 2.4 評価指標と目的関数(p.87)  評価指標  タスクにおけるモデルの性能を測る指標  目的関数  モデルの学習をする際に最適化する関数

     モデルを学習する時は、評価指標が良くなるように最適化 をしたい  そのため、目的関数=評価関数としたい
  20.  しかし、目的関数は微分できる必要があるなどの制約があ る  例えば、正解率だった場合、取る値が離散的になりやすい  モデル学習は「重みパラメータを少し増減させた時、目的 関数がどう変化するか」という勾配が必要なため、離散的 だと、勾配が0になってしまう 

    そのため、評価指標と目的関数を異なるものにすることが ある 2.4 評価指標と目的関数(p.87) w w 離散的 目的関数 連続的 目的関数 wをちょっと移動すれば、目的関数が どう振る舞うかわかる(すなわち微分)ので 最適化しやすい wを動かしても、 目的関数が変わらない(勾配0) ので最適化しにくい
  21. 2.5 評価指標の最適化(p.90)  評価指標の最適化のアプローチ  単にモデリング  評価指標=目的関数として使用できる時(RMSE, loglossなど) 

    評価指標を最適化  目的関数は別のものを使用した後で、後処理で評価指標用に値を変換 する  閾値(ハイパーパラメータ)の最適化  …など
  22. 2.5.3 閾値の最適化とout-of-fold(p.92)  out-of-fold: 学習データセットからデータを一部除外する こと  除外したデータを擬似の評価データセットとして閾値を決 める 

    データセットによっては、train用、評価(test)用の他、閾値(ハイ パーパラメータ)を最適化するためのvalidation用が提供されている こともある
  23. 2.5.4 予測確率の調整(p.95)  モデルの予測確率が評価指標に直結する場合、予測確率を チューニングしたい 1. 予測値をn乗する(n: 0.9~1.1) 2. 0や1に近い確率を出さないようにする

     log0=-∞なので、0に近いものは0.1に置換する、など。 3. スタッキング(モデルの出力を別のモデルの入力にする)  2つ目のモデルに妥当な確率を予測させる 4. CalibratedClassifierCV(scikit-learnモジュール)の使用 1. たしかに右図(p.97の元図)を見ると、0に近い値を補正している https://scikit-learn.org/0.21/auto_examples/ calibration/plot_calibration_multiclass.html
  24. train dataset test dataset 2-7 リーク(data leakage)(p.107)  ニュアンスとしては、テストデータの情報が学習データ中に 混入(漏れる)した、的な感じ。

     本来、学習データとテストデータは独立していないといけない  リークよりもleakageの方が通称として通っている気がする  leakageには2種類あり、データ提供者側のミスと、データサ イエンティスト(kaggler)側のミスがある
  25. 2-7 リーク(data leakage)(p.107)  データのleakage(コンペ主催者側のミス) の場合  使うことが想定されていない有益な情報が使える  例

    1. テストデータが学習データに入っている 2. テストデータの特徴量に予測対象の値が入っている  (参考) “「正答率100%」になってしまう機械学習モデルの 例を挙げてみる” / 渋谷駅前で働くデータサイエンティストのブログ  https://tjo.hatenablog.com/entry/2016/01/27/235620  テニス四大大会データセット: 目的変数は勝敗  使える特徴量として「対戦カードのプレイヤー双方の名前」があった  一方の選手側からみた勝敗がtrainで、もう一方の選手からみた勝敗が testに入っている可能性があった
  26. 2-7 リーク(data leakage)(p.109)  Cross Validation時のleakage(kaggler側のミス)  分割単位を間違えたために、CV時は高いスコアが不当に出てしまった  時系列データのときにやらかしてしまいやすい

     時間方向に切ってしまい、未来のデータが学習データに含まれていた  下図において、trainで①、③、testで②とか  参考 ”ディープラーニングで気候変動を予測(京大論文の追試) - Qiita”  https://qiita.com/takedarts/items/e4dffa6f1946361d2098  各年度からランダムにpickしてtrain,test分割したのではないか疑惑 1 2 3 4 5 6 t ① ② ③
  27. 参考文献 1. 分析の基礎(モデリング)/ Basics of analysis ~modeling~  https://speakerdeck.com/brainpadpr/basics-of-analysis- modeling

     ブレインパッド社の新卒研修資料 2. “ゼロから作るDeep Learning”, 斎藤 康毅著, O'Reilly 3. “DeepCreamPyで学ぶモザイク除去~アソコもAIもディー プにラーニング~”, koshian2著, 技術書典6  https://note.mu/koshian2/n/naa60d5c9ebba