u++の備忘録

【書評】『Kaggleで勝つデータ分析の技術』(技術評論社)

限定の先行販売*1で紙版を入手した『Kaggleで勝つデータ分析の技術』(技術評論社)を読みました。なお電子版をご恵贈いただく予定です。

gihyo.jp

10月7日の発売を待たずして Amazon*2のベストセラー1位になるなど、注目を集めています。

f:id:upura:20190929113055p:plain

既に著者の一人である threecourse さんは、執筆者視点で見どころを紹介しています*3

本記事では一人の読者、そして Kaggler の視点で書評を記します。なお私は既に1年以上 Kaggle に取り組んでおり、一定程度の知識を有している視点からの書評になります*4

本書の魅力

本書の魅力をあえて3つ挙げるとすると、次の通りです。

  1. データ分析コンペのテーブルデータコンペに注力して書かれた「教科書」である
  2. 技法のみならず筆者および関係者の実体験に基づいた集合知言語化されている
  3. コードが公開されている

1. データ分析コンペのテーブルデータコンペに注力して書かれた「教科書」である

私の知る限り、これまでデータ分析コンペ(以降、簡単のため「Kaggle」と置き換えます)に注力して執筆された日本語の書籍はありませんでした。多くの方は、次のような英語や日本語で書かれた情報を断片的に集めながら、Kaggleに関する知見を蓄えてきたように感じています。

  • discussion に投稿された上位入賞者の解法
  • Kaggle Days や Kaggle Tokyo Meetup での発表資料
  • ブログ記事
  • Twitter や kaggler-ja での議論

Kaggle に限らない観点で言えば、広く機械学習全般を扱っている書籍や、特徴量エンジニアリングなど一部の話題に関する書籍は存在しました。

  • 『Machine Learning実践の極意』*5
  • 機械学習のための特徴量エンジニアリング』*6
  • 『前処理大全』*7

しかし、機械学習全般の話題は、Kaggle 特有のワークフローと必ずしも一致しません。また特徴量エンジニアリングは Kaggle のワークフローの中で非常に重要では有りつつも一部分に過ぎません*8

本書は、Kaggleのテーブルデータコンペに焦点を当てた、体系的かつ網羅的な教科書になっています。異様なほど細かい粒度で書かれた目次を見ると、その網羅性が理解できるかと思います。

章立ては次の通りです。

  • 第1章 分析コンペとは?
  • 第2章 タスクと評価指標
  • 第3章 特徴量の作成
  • 第4章 モデルの作成
  • 第5章 モデルの評価
  • 第6章 モデルのチューニング
  • 第7章 アンサンブル

いずれも、機械学習教師あり学習モデルを扱う上で大切な話題がまとまっています。本書が特徴的なのは、これらの話題の全てが「Kaggleで勝つ」、すなわち「未知のデータセットに対する汎化性能を上げる」という目的のもとで執筆されている点です。

例えば、第2章の「タスクと評価指標」は一般的な書籍ならば一通りの数式や特徴を解説したところで終わりがちですが、本書ではより具体的に次のような話題を取り上げています。

  • 機械学習アルゴリズムで最適化する指標と、実際に目的となる指標の違い
  • コンペ特有の「カスタム評価指標」の扱い方(xgboost のコードの提示)
  • 評価指標を最適化するための閾値の決め方
  • 過去コンペでの実例の紹介

第3章の「target encoding」や第7章の「スタッキング」などは、近年の Kaggle では定石の一つとなりつつも、書籍の形で掲載されている例はほとんどないように思います。このような Kaggle 観点で効果的な技法に紙幅を割き、時に図を交えながら丁寧に解説しているのは本書の大きな魅力です。

第4章では、テーブルデータコンペでのニューラルネットの活用方法にも触れています。近年の Kaggle では画像・テキストコンペだけでなくテーブルデータコンペでもニューラルネットが解法の一つとして用いられています*9。第6章ではハイパーパラメータ調整の文脈で「hyperopt を用いた多層パーセプトロンのチューニング」の解説・ソースコードも掲載されていました。想像以上に新しい傾向を踏まえた内容で、正直なところ驚きました。

その他、随所に Kaggle の知見の体系化を試みている点も評価したいです。例えば第3章の「特徴量の作成」では、作成方法や性質に応じて次のように特徴量エンジニアリングを分類して解説しています。

  • モデルを意識した特徴量の作成
  • 欠損値の処理、数値変数の変換、カテゴリ変数の変換
  • 他のテーブルの結合、集約して統計量をとる
  • 時系列データ
  • 次元削減・教師なし学習
  • 特徴量を作るアイデア

これまで Kaggle に関する体系的な文献は多くなく、今回の執筆に当たっては著者らの多くの議論や試行錯誤があったように感じます。

2. 技法のみならず筆者および関係者の実体験に基づいた集合知言語化されている

本書の著者4名は、いずれも Kaggle の経験が豊富な方々です。

本書では「Author's Opinion」やコラムという形で、時に Kaggler の間でさえ議論が残る話題についても著者の見解が掲載されています。Kaggle では「理論的な根拠が不明瞭だが特定の場合には効果を発揮するとされる技法」や「機械学習の分野で著名ではあるが、あまり使われない技法」などが存在します。また「ハイパーパラメータのチューニング方法」など、明確な正解が存在しない話題への言及もあります。

こういった Kaggle 特有の「暗黙知」の明文化に取り組んでいる点で、非常に貴重な書籍と言えるでしょう。

暗黙知の収集に当たっては、過去の具体的なコンペを例に取りながら、discussionからKaggle Tokyo Meetupの発表資料まで、広く文献が引用されています。特徴量エンジニアリングやアンサンブルなどの話題ごとに、上位入賞者の知見が盛り込まれています。単純に読み物としても面白いですし、コンペで行き詰まった際にアイディアを求めるような使い方も考えられそうです。

3. コードが公開されている

本書では、Python のサンプルコードが随所に掲載されています。現時点では未公開ですが、GitHub リポジトリにて公開される予定の模様です。

Kaggle には「Kernel」と呼ばれる、ユーザが自身のソースコードを公開できるプラットフォームが存在します*10。世界中のデータサイエンティストが公開しているソースコードは非常に有益なのですが、一方で玉石混淆な面があるのも事実です。

本書に付属のソースコードには、次のような特徴があり、大いに有効活用できそうです。

  1. 書籍の解説と対応しているソースコードで、本文と照らし合わせて双方向で理解が深まる
  2. Kaggle で実績を挙げている著者らが実際に使っているソースコードである
  3. 本文だけでなくソースコードもレビューの過程を経ており、信頼性が高い
  4. コメントが日本語で付与されている

ソースコード絡みで言及すると、個人的には第4章の終わりに掲載されたthreecourseさんの「分析コンペ用のクラスやフォルダの構成」が興味深かったです。適度に抽象化された Model クラスや Runner クラスを作成しており、自分なりの機械学習プロジェクト設計を進める上で非常に参考になりました。

どんな人に本書はお勧めか

本書は、大きく次の2パターンの方々にお勧めできると思います。

  1. Kaggleに取り組んだ経験があり、更に上位を目指したい方
  2. 実務で機械学習教師あり学習モデルを扱っており、Kaggleの知見を取り入れたい方

Kaggleに取り組んだ経験があり、更に上位を目指したい方

前者は、まさに私も対象読者です。本記事で上述した通り、本書には Kaggle で役立つ話題が豊富に掲載されています。上位を目指すに当たって、非常に有用な書籍になっています。ある程度 Kaggle に取り組んできた経験がある方だと既に知っている話も少なくないかとは思いますが、本書を通じて自分の理解の「答え合わせ」ができる意味合いも大きいです。

また「知ってたつもり」の技法でも、いくつか意外な気づきもありました。例えば「out-of-fold」です。これは Kaggle で広く使われる有名なデータセットの分割方法ですが、閾値の最適化や特徴量生成など、思いのほか様々な場面で適用すべき可能性がある考え方だと認識を改めました。

第2章の「MCCのPR-AUCによる近似とモデル選択」や第6章の「ベイズ最適化およびTPEのアルゴリズム」など、これまで知らなかった・避けてきた数学的な議論を含んだ話もありました。新たに得た知見も多く、ぜひ次回以降の Kaggle で活用していきたいと考えています。本書全般に言えますが、Kaggle に実際に取り組んで試行錯誤や四苦八苦した経験がある人ほど、実感を持って楽しめる書籍になっていると思います。

実務で機械学習教師あり学習モデルを扱っており、Kaggleの知見を取り入れたい方

後者について、本書には一般の機械学習の技術書にはない技法も多く掲載されています。特に Kaggle 特有の「未知のデータセットに対する汎化性能を上げる」という観点では、特徴量エンジニアリングや機械学習モデルのチューニングなど、必ずしも理論立っていない暗黙知も含めて興味深い知見が得られるのではないかと思います。

実務に活かす観点では「第5章 モデルの評価」も魅力的です。私は業務でも機械学習を扱っていますが、Kaggle で得られた知見のうち最も役立っているのはモデルの評価方法(validation)だと思っています*11

Kaggleでは未知のデータセットに対する性能を競いますが、最終的な順位決定に使われる「private LB」は最後の最後まで公開されません。そのためコンペ開催中は、手元で構築した検証用データセットに対する性能などを参考にモデルの構築を進めていきます。

f:id:upura:20181225141445p:plain

ここで、如何にして信頼に足る検証用データセットを構築するかが、最終的に良い結果を得るために求められます。まともな検証用データセットがないと、モデルを明後日の方向に改善してしまう可能性があるためです。

この考え方は Kaggle のみならず実務でも同様に重要だと思います。最終的に欲しいのはデプロイ後の性能で、手元のデータセットでどれだけ高い性能が出ていても意味はありません。

本書では様々な検証用データセットの構築方法を、Kaggle の過去コンペも題材にしつつ取り上げています。特に時系列データの検証手法を厚く解説している点や、構築に当たって気を付ける点を議論している点が素晴らしいと思います。

あまりお勧めしない読者

強いて挙げるとすれば「これからKaggleに入門するぞ」という方には、情報量が多すぎて必ずしもお勧めできない気はします。

本書では以下の要素が前提となる基本的な知識として示されています。もちろん必要に応じて文章や図による補足が登場しており、数式など一部の記述は飛ばしても十分楽しめる内容ではあると思います。

  • Pythonとそのパッケージの使い方
  • 機械学習の基本的な考え方
  • 微分や行列演算の基本的な考え方

一方で本当の初学者の方だと「どこまでの情報は理解できなくても問題ないか」がなかなか独りでは判断しづらいかもしれません。より手軽に Kaggle に入門したいという意味合いだと、例えば『kaggleのチュートリアル*12などの同人技術誌も選択肢に入ってくるでしょう。手前味噌ながら、私もQiitaにKaggle入門用の記事を公開しています*13

もちろん本書にも、第1章で丁寧にデータ分析コンペの概要や Kaggle の一連の流れ、参加する意義などが端的にまとまっています。本書に掲載されている内容が理解できるように、目標立てて勉強を重ねていく使い方も考えられるでしょう。

本書の「本書で何を扱わないか」にも記載がありますが、機械学習の理論やアルゴリズムを知りたい方には、本書はお勧めしません。また Kaggle の中でも画像・音声・自然言語を扱う具体的な技法については、ほとんど取り扱っていません。画像・音声・自然言語を扱う具体的な技法は研究の進度がテーブルデータに比べて非常に速く、書籍として取りまとめるのはかなり難易度が高いと感じています。

threecourse さんは自身のブログで反省点として「xgboostを使って説明している」ことを挙げていましたが、第4章できちんと実装含め「LightGBM」と「Catboost」を紹介しているので、個人的にはそこまで気になりませんでした。ただしこれは私が勾配ブースティング系の機械学習アルゴリズムにある程度詳しいからこその捉え方になっているかもしれません。

おわりに

本記事では、10月7日の発売の書籍『Kaggleで勝つデータ分析の技術』を書評しました。

日本でも Kaggle が注目度を高めている中で、題目に「Kaggle」を冠した書籍が遂に出たかという思いがあります。Kaggle を題材に商用出版の書籍を執筆するのは、特に次の3点で難しさを感じます。個人的な見解ですが、これらが今までなかなか Kaggle 関連の書籍が世に出てこなかった理由になると思っています。

  1. 機械学習分野の発展に伴い、技術の変遷が激しい
  2. 当然ながら「何にでも効く」技法は存在しないので、書きぶりが難しい
  3. 自分で Kaggle をする方が楽しい

「Kaggleで勝つデータ分析の技術」の公開は、著者自身が Kaggle で勝つ可能性を下げている点にも言及したいと思います。多くの時間を割いて難易度の高い書籍を執筆し、知見を共有してくださった著者の方々に深く感謝するとともに、本記事の結びとします。

f:id:upura:20191002142843p:plain

*1:

*2:https://www.amazon.co.jp/dp/4297108437

*3:threecourse.hatenablog.com

*4:kaggle.com

*5:book.impress.co.jp

*6:www.oreilly.co.jp

*7:gihyo.jp

*8:upura.hatenablog.com

*9:

www.slideshare.net

*10:www.kaggle.com

*11:

*12:note.mu

*13:qiita.com