目次
第1章 分析コンペとは?
- 1.1 分析コンペって何?
- 1.1.1 何をするものか
- 1.1.2 予測結果の提出と順位表(Leaderboard)
- 1.1.3 チームでの参加
- 1.1.4 入賞賞金・特典
- 1.2 分析コンペのプラットフォーム
- 1.2.1 Kaggle
- 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.1 欠損値のまま取り扱う
- 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.1 one-hot encoding
- 3.5.2 label encoding
- 3.5.3 feature hashing
- 3.5.4 frequency encoding
- 3.5.5 target encoding
- 3.5.6 embedding
- 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.1 主成分分析(PCA)
- 3.11.2 非負値行列因子分解(NMF)
- 3.11.3 Latent Dirichlet Allocation(LDA)
- 3.11.4 線形判別分析(LDA)
- 3.11.5 t-SNE,UMAP
- 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.1 GBDTの概要
- 4.3.2 GBDTの特徴
- 4.3.3 GBDTの主なライブラリ
- 4.3.4 GBDTの実装
- 4.3.5 xgboostの使い方のポイント
- 4.3.6 lightgbm
- 4.3.7 catboost
- 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.2 ランダムフォレスト(Random Forest,RF)
- 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.1 欠損値がある場合
- 4.7.2 特徴量の数が多い場合
- 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章 アンサンブル
- 7.1 アンサンブルとは?
- 7.2 シンプルなアンサンブル手法
- 7.2.1 平均,加重平均
- 7.2.2 多数決,重みづけ多数決
- 7.2.3 注意点とその他のテクニック
- 7.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 本書で参照した分析コンペ
- 索引
- 著者プロフィール