Kaggleで勝つデータ分析の技術

[表紙]Kaggleで勝つデータ分析の技術

紙版発売
電子版発売

B5変形判/424ページ

定価3,608円(本体3,280円+税10%)

ISBN 978-4-297-10843-4

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

データサイエンスの認知の高まりとともに,データ分析に関するコンペティションが多数開催されるようになってきました。最も有名なコンペティションプラットフォームであるKaggleにおけるプレイヤー数は10万人を超え,多くのエンジニアが自分の腕を試すためにコンペティションに参加しています。分析コンペでは,実際のデータを扱うため,機械学習の解説書にはあまり載っていないような手法やテクニックが数多く活用されています。これらを理解し自身で使えるようにしておくことはコンペだけでなく,実務でのモデル構築において非常に役に立ちます。
そこでこれらのテクニックや事例を多くの人に知っていただくために,現時点で最新のものを整理して本書にまとめました。特徴量の作り方,バリデーション,パラメータチューニングなどについて,一般的な書籍ではあまり言及されない暗黙知やポイントについて記述しています。分析コンペにこれから参加してみたい方,あるいはもっと上を目指したい方だけでなく,実務で予測モデルの精度を上げたいという方にも参考になる情報が多いでしょう。

こんな方におすすめ

  • Kaggle をはじめたい方、データ分析者、データサイエンティスト

この書籍に関連する記事があります!

データ分析コンペとは
データサイエンスの認知の高まりとともに,データ分析のコンペティションが多数開催されるようになってきました。

目次

第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 本書で参照した分析コンペ
  • 索引
  • 著者プロフィール

著者プロフィール

門脇大輔(かどわきだいすけ)

京都大学総合人間学部卒業後,生命保険会社でアクチュアリーとして10年ほど商品開発・リスク管理などに従事した後,Kaggleに出会ったことをきっかけにキャリアを放り出してKaggleや競技プログラミングで学んだ技術でお仕事をするようになった。
Kaggle Competitions Master(Walmart Recruiting II: Sales in Stormy Weather 優勝,Coupon Purchase Prediction 3位),日本アクチュアリー会正会員

Kaggle:https://www.kaggle.com/threecourse
Twitter:@threecourse

本書の4章,6章,7章および1章,2章,3章,5章の一部を執筆。


阪田隆司(さかたりゅうじ)

2012年に京都大学大学院修了後,国内電機メーカーに入社。以来,データサイエンティストおよび研究員として従事。仕事柄,データサイエンス・機械学習に興味を持ち,2014年よりKaggleを始め,2019年にKaggle Competitions Grandmasterとなる。

Kaggle:https://www.kaggle.com/rsakata
Twitter:@sakata_ryuji

本書の3章,5章を執筆。


保坂桂佑(ほさかけいすけ)

東京大学大学院総合文化研究科広域科学専攻で天体シミュレーションの研究で修士号を取得後,データ分析のコンサルティング企業で,10年近く企業のデータ分析支援に携わった。その後大手Webサービス企業に入社し,データ活用の推進に携わったあと,現在はデータサイエンティストや機械学習エンジニアの育成,マネジメントに従事。プライベートでは子育てに専念中。Kaggle Competitions Expert

Kaggle:https://www.kaggle.com/hskksk
Twitter:@free_skier

本書の1章,および6章の一部を執筆。


平松雄司(ひらまつゆうじ)

東京大学理学部物理学科卒業,同大学大学院理学研究科物理学専攻修了後,国内電機大手に就職した後,金融業界へと転身し,金融システム会社にてデリバティブクオンツ,国内大手損保グループにてリスクアクチュアリー業務に携わった。現在は,アクサ生命保険株式会社にてシニアデータサイエンティストとして社内のデータ分析の促進に従事。また,東京大学へ研究員としても出向中で,医療データの分析・研究を行っている。日本アクチュアリー会準会員。Kaggleを本格的に始めたのは2016年頃からであり,2018年にKaggle CompetitionsMasterとなっている。くまのぬいぐるみが好きでたまらない。

Kaggle:https://www.kaggle.com/maxwell110
Twitter:@Maxwell_110

本書の2章,および7章の一部を執筆。