『Kaggleで勝つデータ分析の技術』
https://gyazo.com/cb73edaf815a7e3ed51199261aef5402
2019/10/9
第1章 分析コンペとは?
1.1 分析コンペって何?
1.1.1 何をするものか
1.1.2 予測結果の提出と順位表(Leaderboard)
1.1.3 チームでの参加
1.1.4 入賞賞金・特典
1.2 分析コンペのプラットフォーム
1.2.2 Rankings(ランキング・称号制度)
1.2.3 Kernel
1.2.4 Discussion
1.2.5 Datasets
1.2.6 API
1.2.7 Newsfeed
1.2.8 開催された分析コンペの種類と具体例
1.2.9 分析コンペのフォーマット
1.3 分析コンペに参加してから終わるまで
1.3.1 分析コンペに参加
1.3.2 規約に同意
1.3.3 データをダウンロード
1.3.4 予測値の作成
1.3.5 予測値の提出
1.3.6 Public Leaderboardをチェック
1.3.7 最終予測値を選ぶ
1.3.8 Private Leaderboardをチェック
1.4 分析コンペに参加する意義
1.4.1 賞金を得る
1.4.2 称号やランキングを得る
1.4.3 実データを用いた分析の経験・技術を得る
1.4.4 データサイエンティストとのつながりを得る
1.4.5 就業機会を得る
1.5 上位を目指すためのポイント
1.5.1 タスクと評価指標
1.5.2 特徴量の作成
1.5.3 モデルの作成
1.5.4 モデルの評価
1.5.5 モデルのチューニング
1.5.6 アンサンブル
1.5.7 分析コンペの流れ
Column 計算リソース
第2章 タスクと評価指標
2.1 分析コンペにおけるタスクの種類
2.1.1 回帰タスク
2.1.2 分類タスク
2.1.3 レコメンデーション
2.1.4 その他のタスク
2.2 分析コンペのデータセット
2.2.1 テーブルデータ
2.2.2 外部データ
2.2.3 時系列データ
2.2.4 画像や自然言語などのデータ
2.3 評価指標
2.3.1 評価指標(evaluation metrics)とは
2.3.2 回帰における評価指標
2.3.3 二値分類における評価指標〜正例か負例かを予測値とする場合 2.3.4 二値分類における評価指標〜正例である確率を予測値とする場合
2.3.5 多クラス分類における評価指標
2.3.6 レコメンデーションにおける評価指標
2.4 評価指標と目的関数
2.4.1 評価指標と目的関数の違い
2.4.2 カスタム評価指標とカスタム目的関数
2.5 評価指標の最適化
2.5.1 評価指標の最適化のアプローチ
2.5.2 閾値の最適化
2.5.3 閾値の最適化をout-of-foldで行うべきか?
Column out-of-foldとは?
2.5.4 予測確率とその調整
2.6 評価指標の最適化の例
2.6.1 balanced accuracyの最適化
2.6.2 mean-F1における閾値の最適化
2.6.3 quadratic weighted kappaにおける閾値の最適化
2.6.4 カスタム目的関数での評価指標の近似によるMAEの最適化
2.6.5 MCCのPR-AUCによる近似とモデル選択
2.7 リーク(data leakage)
2.7.1 予測に有用な情報が想定外に漏れている意味でのリーク
2.7.2 バリデーションの枠組みの誤りという意味でのリーク
第3章 特徴量の作成
3.1 本章の構成
3.2 モデルと特徴量
3.2.1 モデルと特徴量
3.2.2 ベースラインとなる特徴量
3.2.3 決定木の気持ちになって考える
3.3 欠損値の扱い
3.3.2 欠損値を代表値で埋める
3.3.3 欠損値を他の変数から予測する
3.3.4 欠損値から新たな特徴量を作成する
3.3.5 データ上の欠損の認識
3.4 数値変数の変換
3.4.1 標準化(standardization)
Column データ全体の数値を利用して変換を行うときに,学習データのみを使うか,テストデータも使うか
3.4.2 Min-Maxスケーリング
3.4.3 非線形変換
3.4.4 clipping
3.4.5 binning
3.4.6 順位への変換
3.4.7 RankGauss
3.5 カテゴリ変数の変換
3.5.7 順序変数の扱い
3.5.8 カテゴリ変数の値の意味を抽出する
3.6 日付・時刻を表す変数の変換
3.6.1 日付・時刻を表す変数の変換のポイント
3.6.2 日付・時刻を表す変数の変換による特徴量
3.7 変数の組み合わせ
3.8 他のテーブルの結合
3.9 集約して統計量をとる
3.9.1 単純な統計量をとる
3.9.2 時間的な統計量をとる
3.9.3 条件を絞る
3.9.4 集計する単位を変える
3.9.5 ユーザ側でなく,アイテム側に注目する
3.10 時系列データの扱い
3.10.1 時系列データとは?
3.10.2 予測する時点より過去の情報のみを使う
3.10.3 ワイドフォーマットとロングフォーマット
3.10.4 ラグ特徴量
3.10.5 時点と紐付いた特徴量を作る
3.10.6 予測に使えるデータの期間
3.11 次元削減・教師なし学習による特徴量
3.11.3 Latent Dirichlet Allocation(LDA) 3.11.4 線形判別分析(LDA)
3.11.6 オートエンコーダ
3.11.7 クラスタリング
3.12 その他のテクニック
3.12.1 背景にあるメカニズムから考える
3.12.2 レコード間の関係性に注目する
3.12.3 相対値に注目する
3.12.4 位置情報に注目する
3.12.5 自然言語処理の手法
3.12.6 自然言語処理の手法の応用
3.12.7 トピックモデルの応用によるカテゴリ変数の変換
3.12.8 画像特徴量を扱う手法
3.12.9 decision tree feature transformation
3.12.10 匿名化されたデータの変換前の値を推測する
3.12.11 データの誤りを修正する
3.13 分析コンペにおける特徴量の作成の例
3.13.1 Kaggleの「Recruit Restaurant Visitor Forecasting」
3.13.2 Kaggleの「Santander Product Recommendation」
3.13.3 Kaggleの「Instacart Market Basket Analysis」
3.13.4 KDD Cup 2015
3.13.5 分析コンペにおけるその他のテクニックの例
第4章 モデルの作成
4.1 モデルとは何か?
4.1.1 モデルとは何か?
4.1.2 モデル作成の流れ
4.1.3 モデルに関連する用語とポイント
4.2 分析コンペで使われるモデル
4.3 GBDT(勾配ブースティング木)
4.3.2 GBDTの特徴
4.3.3 GBDTの主なライブラリ
4.3.4 GBDTの実装
Column xgboostのアルゴリズムの解説
4.4 ニューラルネット
4.4.1 ニューラルネットの概要
4.4.2 ニューラルネットの特徴
4.4.3 ニューラルネットの主なライブラリ
4.4.4 ニューラルネットの実装
4.4.5 kerasの使い方のポイント
4.4.6 参考になるソリューション - 多層パーセプトロン
4.4.7 参考になるソリューション - 最近のニューラルネットの発展
4.5 線形モデル
4.5.1 線形モデルの概要
4.5.2 線形モデルの特徴
4.5.3 線形モデルの主なライブラリ
4.5.4 線形モデルの実装
4.5.5 線形モデルの使い方のポイント
4.6 その他のモデル
4.6.1 k近傍法(k-nearest neighbor algorithm,kNN_) 4.6.3 Extremely Randomized Trees(ERT) 4.6.4 Regularized Greedy Forest(RGF) 4.6.5 Field-aware Factorization Machines(FFM) 4.7 モデルのその他のポイントとテクニック
4.7.3 目的変数に1対1で対応するテーブルでない場合
4.7.4 pseudo labeling
Column 分析コンペ用のクラスやフォルダの構成
第5章 モデルの評価
5.1 モデルの評価とは?
5.2 バリデーションの手法
5.2.1 hold-out法
5.2.2 クロスバリデーション
5.2.3 stratified k-fold
5.2.4 group k-fold
5.2.5 leave-one-out
5.3 時系列データのバリデーション手法
5.3.1 時系列データのhold-out法
5.3.2 時系列データのクロスバリデーション(時系列に沿って行う方法)
5.3.3 時系列データのクロスバリデーション(単純に時間で分割する方法)
5.3.4 時系列データのバリデーションの注意点
5.3.5 Kaggleの「Recruit Restaurant Visitor Forecasting」
5.3.6 Kaggleの「Santander Product Recommendation」
5.4 バリデーションのポイントとテクニック
5.4.1 バリデーションを行う目的
5.4.2 学習データとテストデータの分割をまねる
5.4.3 学習データとテストデータの分布が違う場合
5.4.4 Leaderboardの情報を利用する
5.4.5 バリデーションデータやPublic Leaderboardへの過剰な適合
5.4.6 クロスバリデーションのfoldごとに特徴量を作り直す
5.4.7 使える学習データを増やす
第6章 モデルのチューニング
6.1 パラメータチューニング
6.1.1 ハイパーパラメータの探索手法
6.1.2 パラメータチューニングで設定すること
6.1.3 パラメータチューニングのポイント
6.1.4 ベイズ最適化でのパラメータ探索
6.1.5 GBDTのパラメータおよびそのチューニング
Column xgboostの具体的なパラメータチューニングの方法
6.1.6 ニューラルネットのパラメータおよびそのチューニング
Column 多層パーセプトロンの具体的なパラメータチューニングの方法
6.1.7 線形モデルのパラメータおよびそのチューニング
6.2 特徴選択および特徴量の重要度
6.2.1 単変量統計を用いる方法
6.2.2 特徴量の重要度を用いる方法
6.2.3 反復して探索する方法
6.3 クラスの分布が偏っている場合
Column ベイズ最適化およびTPEのアルゴリズム
7.1 アンサンブルとは?
7.2 シンプルなアンサンブル手法
7.2.1 平均,加重平均
7.2.2 多数決,重みづけ多数決
7.2.3 注意点とその他のテクニック
7.3.1 スタッキングの概要
7.3.2 特徴量作成の方法としてのスタッキング
7.3.3 スタッキングの実装
7.3.4 スタッキングのポイント
7.3.5 hold-outデータへの予測値を用いたアンサンブル
7.4 どんなモデルをアンサンブルすると良いか?
7.4.1 多様なモデルを使う
7.4.2 ハイパーパラメータを変える
7.4.3 特徴量を変える
7.4.4 問題のとらえ方を変える
7.4.5 スタッキングに含めるモデルの選択
7.5 分析コンペにおけるアンサンブルの例
7.5.1 Kaggleの「Otto Group Product Classification Challenge」
7.5.2 Kaggleの「Home Depot Product Search Relevance」
7.5.3 Kaggleの「Home Credit Default Risk」
付 録
A.1 分析コンペの参考資料
A.2 参考文献
A.3 本書で参照した分析コンペ
索引
著者プロフィール