KAGGLEでどこから手を付けていいか分からず学ぶことが多すぎてまとめてみた

# Googleで「KAGGLE」で検索し1ページ目（公式、Wikipedia除く）
|タイトル|著者|記事日時|特徴|初心者のToDo|
|:--|:--|:--|:--|:--|
|[Kaggleとは？機械学習初心者が知っておくべき3つの使い方](https://www.codexa.net/what-is-kaggle/)|Codexaチーム|2017-11-22|初心者向け|カーネルをやれ|
|[Kaggleを始める人に役に立つ記事](https://qiita.com/jeayoon/items/17d24a43c1b71bc37337)|@jeayoon|2019-05-16|初心者向け     |-|
|[Kaggle参戦記 〜入門からExpert獲得までの半年間の記録 & お役立ち資料まとめ〜](https://naotaka1128.hatenadiary.jp/entry/kaggle-challenge-story)|naotaka1128 Expert|2019-01-15|詳細 *1)にまとめ||
|[KaggleでSilver取るためにどういう段階を踏んでいけばよいですか？](https://note.mu/currypurin/n/n6a3c2bfd27c0)|カレーちゃん🍛専業kaggler（たまにSilver）|2019-01-15|初心者向け|カーネルの理解、改良|
|[Kaggle Titanic やってみた感想](https://mizchi.hatenablog.com/entry/2019/02/08/183056)|mizchi|2019-02-08|Titanicの紹介|-|
|[最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング](https://www.slideshare.net/mlm_kansai/kaggle-138546659)|mlm_kansai|2019-03-27|特徴量エンジニアリングについて詳細 *2)にまとめ|-|
|[機械学習の勉強歴が半年の初心者が、 Kaggle で銅メダルを取得した話](https://www.topgate.co.jp/kaggle-bronze-report-jigsaw)|株式会社トップゲートのエンジニア（Brond）|2019-02-27|詳しめ *3)にまとめ|性能の良い分類器、出力のアンサンブル|

## 上記の方々の推奨本

* 2票（naotaka1128、カレーちゃん）[[第2版]Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 (impress top gear)](https://amzn.to/2RXJd1j)
    * <a href="https://www.amazon.co.jp/gp/product/4295003379/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=aokikenichi-22&linkId=f1c4a74323ff785de5dc2b6708ba9a78&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4295003379&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4295003379" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
* 1票（naotaka1128）[PythonとKerasによるディープラーニング](https://amzn.to/2Jm8A8Q)
    * <a href="https://www.amazon.co.jp/Python%E3%81%A8Keras%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-Francois-Chollet/dp/4839964262/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=Python%E3%81%A8Keras%E3%81%AB%E3%82%88%E3%82%8B%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0&qid=1562475313&s=books&sr=1-1&linkCode=li2&tag=aokikenichi-22&linkId=12cf542bd9028e62462df9240c830084&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4839964262&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4839964262" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
* 1票（naotaka1128）[scikit-learnとTensorFlowによる実践機械学習](https://amzn.to/2JGicvF)
    * <a href="https://www.amazon.co.jp/scikit-learn%E3%81%A8TensorFlow%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-Aur%C3%A9lien-G%C3%A9ron/dp/4873118344/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=scikit-learn%E3%81%A8TensorFlow%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92&qid=1562475289&s=books&sr=1-1&linkCode=li2&tag=aokikenichi-22&linkId=16b52b660e287476fb197448fca324a0&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118344&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4873118344" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
* 1票（mlm_kansai）[機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践 (オライリー・ジャパン)](https://amzn.to/2JghCp8)
    * <a href="https://www.amazon.co.jp/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0-%E2%80%95%E3%81%9D%E3%81%AE%E5%8E%9F%E7%90%86%E3%81%A8Python%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5-%E3%82%AA%E3%83%A9%E3%82%A4%E3%83%AA%E3%83%BC%E3%83%BB%E3%82%B8%E3%83%A3%E3%83%91%E3%83%B3-Alice-Zheng/dp/4873118689/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E7%89%B9%E5%BE%B4%E9%87%8F%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%83%AA%E3%83%B3%E3%82%B0&qid=1562475207&s=books&sr=1-1&linkCode=li2&tag=aokikenichi-22&linkId=9fd90fb517ebd1a189fb79efdcfba1cf&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4873118689&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4873118689" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />










# 記事の概要

## Kaggle参戦記 〜入門からExpert獲得までの半年間の記録 & お役立ち資料まとめ〜 *1)
* 特徴量エンジニアリング
    * 次元削減系 LDA、PCA、tSNE
    * [Kaggle TalkingData Fraud Detection コンペの解法まとめ(基本編)](https://www.rco.recruit.co.jp/career/engineer/blog/kaggle_talkingdata_basic/)
        * 「カテゴリー変数を組み合わせて特徴量を量産してLightGBMにぶち込む」
    * [Kaggle TalkingData Fraud Detection コンペの解法まとめ(応用編)](https://www.rco.recruit.co.jp/career/engineer/blog/kaggle_talkingdata_advanced/)
        * もはや常識 random seed average
            * 予測モデルを複数作ってそれらの平均を最終的な予測とするensembleという手法がkaggleでは常識となっています。
            * お手軽な手法としてrandom seed averageといういうのがあります。それは、モデルを訓練する際にランダム性がある場合にランダムシード値を変えて複数モデルを作りそれの単純平均をとる
        * Negative Down Sampling
            * 判別で目的変数が不均衡な場合、多い方のデータを捨てる
* 特徴量選択
    * [ランダムフォレストと検定を用いた特徴量選択手法Boruta](https://aotamasaki.hatenablog.com/entry/2019/01/05/195813)
        * 特徴量選択とは
            * コンペでは精度のみが重視されるがビジネス上は説明変数の特定が重要視される
            * ただ、モデルの学習や推論が高速化されたり、過学習しづらくなったり、結果判別の精度が良くなったりもする
        * 既存の手法の特徴
            * ランダムフォレスト
                * どれぐらいの特徴量重要度があったら重要だと言えるのかがイマイチ
                * ランダム性から訓練するたびに特徴量重要度が変動する
            * Forward selectionやBackward eliminationと言ったステップワイズな方法
                * 計算量が多い
                * 選んだ特徴量が過学習する
            * lasso
                * 選んだ特徴量が過学習する
        * Boruta
            * ニセの特徴量を作って重要度を比較する
* アンサンブル
    * [KAGGLE ENSEMBLE GUIDE](https://mlwave.com/kaggle-ensembling-guide/) アンサンブルのバイブル
* ブレンド


## 最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング *2)
trainデータ、testデータ、Private testデータ間での乖離が大きいコンペが増えている → 単純にtrain, testで学習検証しただけではだめ → 特徴量エンジニアリング

* 特徴量エンジニアリング
    * Target Encoding
        * カテゴリ変数をそのカテゴリにおけるTargetの平均値で置き換える
        * カテゴリ変数のレベルが多い場合に使う
    * テーブル間の集約
        * 集約し、sumやaverage
        * トランザクション側のデータが多い場合
    * 四則演算
        * GBDTは差や比率を直接表現できない
        * 意味が明確な連続値がある場合
    * サブモデルによる特徴量
        * 重要な特徴量の予測
        * トランザクションレベルの予測

## 機械学習の勉強歴が半年の初心者が、 Kaggle で銅メダルを取得した話 *3)
* 性能の良い分類器を使う
    * アンサンブル学習系
    * 深層学習系
* 複数の予測値のブレンド
    * 多数決、平均
* 感度解析
    * 複数の予測値のブレンドだが重み付け

# まとめ、気付き（つか無知の反省）
* 特徴量エンジニアリング
    * 思いつく限りたくさん作ってlightGBM（が軽いので）放り込んじまえ!?
    * 不均衡データ
        * Negative Down Sampling
            * その発想はなかった！って感じ
* 特徴量選択
    * Boruta知らなんだ
* アンサンブル
    * [KAGGLE ENSEMBLE GUIDE](https://mlwave.com/kaggle-ensembling-guide/) アンサンブルのバイブル、知らなんだ、、、
* ブレンド
    * 複数のアルゴリズムの結果で多数決、平均するのってそれも「アンサンブル」と思っていたが「ブレンド」と言うらしい

# 上記記事にはないが（わたしの見落としかも）関連する手法
* 不均衡データのときに目的変数の少ない側のデータを増やすもの
* データ生成
    * 判別データにて、均衡したデータでもデータ生成で精度が良くなるという事例もある
    * 連続値の場合もデータ生成手法がある
* 共変量シフト
    * trainとtestで説明変数に偏りがある場合の対応

# 補足的な資料
* 欠測値補完
    * 欠測値データを除去していたり平均値を埋めていたりではKAGGLEでは勝てない。
    * [欠測データ処理: Rによる単一代入法と多重代入法 (統計学One Point) ](https://amzn.to/2lhsAkR)
        * <a href="https://www.amazon.co.jp/%E6%AC%A0%E6%B8%AC%E3%83%87%E3%83%BC%E3%82%BF%E5%87%A6%E7%90%86-R%E3%81%AB%E3%82%88%E3%82%8B%E5%8D%98%E4%B8%80%E4%BB%A3%E5%85%A5%E6%B3%95%E3%81%A8%E5%A4%9A%E9%87%8D%E4%BB%A3%E5%85%A5%E6%B3%95-%E7%B5%B1%E8%A8%88%E5%AD%A6One-%E9%AB%98%E6%A9%8B-%E5%B0%86%E5%AE%9C/dp/4320112563/ref=as_li_ss_il?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E6%AC%A0%E6%B8%AC%E5%80%A4&qid=1563073759&s=gateway&sr=8-2&linkCode=li2&tag=aokikenichi-22&linkId=547e7a6d0635dd0b8df1b6e2bc8a8e52&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4320112563&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4320112563" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
        * Rによる実例があり分かりやすい。


* 不均衡データ対策
    * [【ML Tech RPT. 】第4回 不均衡データ学習 (Learning from Imbalanced Data) を学ぶ(1)](https://buildersbox.corp-sansan.com/entry/2019/03/05/110000)
        * 日本語で読める資料の中では一番詳しくまとまっていると思う
    * 判別でのSMOTE
        * 『[前処理大全](https://amzn.to/2KfTbJ1)』
            * <a href="https://www.amazon.co.jp/%E5%89%8D%E5%87%A6%E7%90%86%E5%A4%A7%E5%85%A8-%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AESQL-Python%E5%AE%9F%E8%B7%B5%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E6%9C%AC%E6%A9%8B-%E6%99%BA%E5%85%89/dp/4774196479/ref=as_li_ss_il?ie=UTF8&linkCode=li2&tag=aokikenichi-22&linkId=53a53ba644e09109203b1fad54616e6a&language=ja_JP" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4774196479&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=aokikenichi-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=aokikenichi-22&language=ja_JP&l=li2&o=9&a=4774196479" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
                * RとPythonによりSMOTEの解説がある。SMOTEのみでなく前処理について詳しい解説があり、必須の書だと思う。
    * 回帰でのSMOTERegressについての本は見つけていない
        * [smoteRegress: SMOTE algorithm for imbalanced regression problems](https://rdrr.io/cran/UBL/man/smoteRegress.html)
            * ライブラリの解説記事程度しかなさそう