Hippocampus's Garden

Under the sea, in the hippocampus's garden...

書評『Kaggleで勝つデータ分析の技術』 | Hippocampus's Garden

書評『Kaggleで勝つデータ分析の技術』

December 29, 2020  |  5 min read  |  1,139 views

  • このエントリーをはてなブックマークに追加

はじめに

Kaggleで勝つデータ分析の技術』(門脇大輔, 阪田隆司, 保坂桂, 平松雄司 著,技術評論社,2019年)を読んだので,まとめと感想を書きます.

本書は,Kaggleないしデータ分析コンペに関する書籍としてはおそらく邦訳を含めても日本初で,それまでKaggleのKernelやDiscussion,個人ブログなどに散在していたデータ分析の集合知や暗黙知を一冊にまとめることを試みた野心的な参考書です.分析コンペの経験がない初心者はもちろん,ある程度経験のある人でも知識を体系化したり抜け漏れを発見したりするのに役立つと思われます.

本書に関するブログ記事はすでに多数存在します.著者の一人である門脇氏は自身のブログでその魅力を語っています.また,読者としてはu++氏ばんくし氏nyker_goto氏らが発売当時に書評を書いています.このような状況なので,この記事は新規の内容をほとんど含まないであろうことを最初に宣言しておきます.また,私はKaggle Noviceなので,やはり上に挙げたような記事の方が信頼性が高いということも付言しておきます.

まとめ+α

総評としては,比較的新しい知識や,理論付けがなされていないものの分析コンペでは頻繁に用いられるテクニックといった,従来のデータ分析や機械学習の教科書には書かれていなかった内容が書籍の形でまとめられているのは非常に貴重であり,これだけでも一読の価値があると思います.また,バリデーションの方法,勾配ブースティング木,アンサンブルなどのトピックにページ数が割かれている一方で,コンペに臨む上ですぐには必要にならない理論的な側面や実用的な見地から優先順位の低いトピックは大胆に省略されています.むしろ,概念の直感的な理解や,「コンペでどう使うか」といった点に主眼が置かれており,まさに「Kaggleで勝つための本」と言えるでしょう.章どうしの依存関係が少ないので,知識を補強したい部分だけ読むという読み方をするのにもよさそうです.

留意点を挙げるとすれば,本書はテーブルコンペのみを扱っているという点は購入前に注意しておく必要があります.最近のKaggleではテーブルコンペはむしろ珍しく,画像や自然言語などの非構造化データを扱うコンペの方が多いです.また,全体を通してコード付きで解説してありますが,pandasやscikit-learnの基本的な使い方については事前に知っておく必要があるでしょう.

第1章 分析コンペとは?

本書は分析コンペ未経験の人にも向けて書かれているので,「分析コンペとは何か」の説明から始まります.Public / Private Leaderboard (LB)の仕組みやKaggleのKernel,参加登録から予測値の提出までの一連の流れなどについて書かれています.

第2章 タスクと評価指標

第2章ではタスク(回帰,分類,物体検出など)と評価指標(RMSE,AUC,MAP@Kなど)の説明に56ページも割いています.この時点で,従来の「データ分析の教科書」とはかなり異なるということがわかると思います.というのも,Kaggleは与えられた評価指標に対してモデルないし予測値の優劣を競うコンペなので,評価指標の性質をよく理解して,必要であれば予測値のキャリブレーションをしたり目的関数を自作したりするといった工夫が効くことがあるからです.実際,2.6.4では実例が紹介されており,「評価指標をMAEとするコンペで,xgboostは内部に目的関数の二階微分(MAEだと0になる)で割るという操作を含むので,MAEを目的関数にとることができない(近似関数を自作する必要がある)」ということがあったそうです.

第3章 特徴量の作成

第3章は,データ分析にかける時間の大部分を占めるとも言われる特徴量エンジニアリングないし前処理を扱います.104ページと,本書でもっとも長い章です.欠損値処理,カテゴリ変数の変換(one-hot encodingtarget encodingembeddingなど),日付・時刻を表す変数の変換,時系列特徴量といった基本的な処理や,PCAやbag-of-wordsを使った特徴量の作成方法を幅広く解説しています.また,過去のコンペで勝敗を左右した特徴量の事例も紹介しています.

第4章 モデルの作成

第4章は,Kaggleでよく使われる機械学習アルゴリズムを紹介します.分析コンペという利用目的を想定しているので,勾配ブースティング木(GBDT)の解説にかなりの比重が置かれています(一方,SVMは名前すら登場しません).GBDTの主要なライブラリであるxgboost / lightgbm / catboostの違いについても書かれており,GBDTの日本語の解説としては知る限りでもっとも詳しい資料だと感じました.ニューラルネットについてはkerasの簡単な使い方を説明しています.

第5章 モデルの評価

モデルの改善と評価のサイクルを何度も回していると,徐々に手元のデータやPublic LBのデータに過適合していってしまいます.Public LBでどれほど予測精度が高くても,Private LBで予測精度が悪くては意味がありません.したがってKaggleでは,いかに過適合を防いで限られたデータで汎化性能を高めるかが非常に重要です.本章では,ホールドアウト法交差検証法といった基本的なバリデーションの手法に加えて,訓練データとテストデータの分割方法に関する考察やadversarial validationという「Kaggleらしい」手法の紹介をしています.

第6章 モデルのチューニング

信頼できる評価プロセスができたら,ハイパーパラメータチューニングによってさらに精度を向上できるでしょう.ここでは,手動チューニング,グリッドサーチ,ベイズ最適化(c.f. optuna)といった方法が紹介されています.暗黙知になりがちなGBDTの手動チューニングの方法についても,筆者自身の方法が紹介されています.

また,特徴量の取捨選択を行うのも精度向上につながるかもしれません.ここでは,特徴量選択に使える統計量や決定木の特徴量重要度について解説しています.

第7章 アンサンブル

第7章は,本書でもっとも特徴的な部分とも言える「モデルのアンサンブル」の解説です.アンサンブルについては理論に根ざした方法論があるわけではないのでほとんどの参考書では扱われていない印象がありますが,Kaggleの上位解法には不可欠な要素ということで,本書の最後に取り上げられています.「こうするとうまくいくことが多い」という経験的な知識ではありますが,自分で闇雲に試すよりもこのような指針を頭に入れてから臨んだ方が効率的だと思います.


  • このエントリーをはてなブックマークに追加
[object Object]

Written by Shion Honda. If you like this, please share!

Shion Honda

Hippocampus's Garden © 2024, Shion Honda. Built with Gatsby