未定の部屋

主にデータサイエンス関係の記事を書きます

Kaggle本

※2021年6月に書いた記事を再投稿したものになります

今回は、『Kaggleで勝つデータ分析の技術』という本を読んだので、概要と感想を書いていこうと思います。





購入動機

本のタイトルにもあるKaggleですが、これは分析コンペを開催している中で一番有名なプラットフォームですね。自分も存在は知っていたのですが、挑戦したことはありません。いつかやろうとは思っているのですが...

この本を買った目的ですが、「Kaggleを始めるため」ではなくPythonでモデルを作成したり評価したりする過程を実装してコードへの理解を深めるため」に買いました。というのも、今まで数理統計を勉強したりはじパタを読んでちょっと機械学習の原理を学んだりはしたのですが、プログラミングで実際に分析をした経験が乏しく、これから本格的に仕事をする上で確実にここがボトルネックになると思ったからです。一応、学生時代に前処理をするインターンはしていたのですがモデリングは本当に経験がなく、この本はちょうどその部分が豊富に書かれているので自分の需要にマッチしていました。


概要

ざっと内容に触れると、分析コンペとはどのようなものかという説明が最初にあり、その後実際の分析の流れを章に分けて説明している、といった感じです。分析の流れの説明として、どんな分析の種類(回帰なのか分類なのか、など)があってモデルや予測値をどう評価するのかといった話が最初にあり、その後以下の流れで章ごとに説明されています。

前処理

代表的なモデルの説明

モデルの評価方法

モデルのパラメータチューニング

複数のモデルを組み合わせる

それぞれの章ごとにPythonでのコードがgithub*1で配布されており、かなりのボリュームがあります。各章では本当に様々なトピックについて触れていて、ほとんどのトピックに対してコードがあるので実際に手を動かしながら理解することができます。分析の各フローの実装という面では相当網羅的かつ説明も分かりやすく、しっかりと読めば実務でも力になるような内容だと思います。

個人的に特に理解が進んだのがバリデーションの概念です。バリデーションはモデルを評価するときに使うテクニックで、学習データをすべて学習させるのではなく、一部を評価専用のデータ(=バリデーションデータ)として取っておいて、それ以外の学習データで作ったモデルをバリデーションデータで評価するというものです。こうすることでモデルの精度を確認することができます。学習データ全てを使ってモデルを作成すると、テストデータ(説明変数しか入ってなく、目的変数の情報がないデータ)で予測することはできますが、モデルの評価はできません。知ってる人からしたら超基本かもですが、バリデーションが精度の確認やモデルの改善のためにいかに重要かを実感できました。

他にも、実際にモデルを実装できたのがすごい良かったです。よく使われているモデルとして勾配ブースティング木とニューラルネットワークの説明と実装があり、今まで学んでこなかった内容だったので新たな学びが多かったです。余談ですが、ニューラルネットワークを実装するためにKerasとTensorflowの環境を作るのに苦労しました...今回はローカル環境にぶち込んでギリ回りましたが、バージョンの関係でKerasとTensorflowが競合する気配があったので、今度これらを使う時までに仮想環境を作ろうと思います。この辺も疎いので学ぶ必要がありますね...

感想

購入動機の方でも書きましたが、自分の知りたいことがたくさん書かれていたので、すごいためになりました。特に、実務という面で考えるとプログラミングを書く場面は必ずあるので、実践的な力がついたかなと思います。とはいえ、Kaggleで使うことを意識した内容なので、精度を上げることが最重視で解釈性はあまり考慮されていません。一方で実務では(業務によりますが)解釈性がかなり重視される傾向にあるので、精度をただ上げるだけではあまりビジネスに直結しないということを念頭に置く必要があると感じています。
あとこの本は参考資料が本当に充実していて、特にKaggleの上位ソリューションやコンペ関連の引用は激豊富なので、もしKaggleを始める場合は強い味方になりそうです。


本の内容とは関係ないですが、最近データエンジニアリング的なスキルの必要性をひしひしと感じています。プログラミングのスキルはもちろんのこと、その環境やコードの品質管理などの重要性も徐々に感じてきました。このあたりが整うとかなり業務が効率化されると思うので、土台となる環境についてはこの一年間のうちになるべく整えてしまいたいですね。とりあえず現時点で思いつくのは、
- Gitでコードの品質管理とコードチェックをスムーズにする
- 複雑な分析を要求されたときのためにdockerで専用の仮想環境を作れるようにする
- デバッグしやすいエディタを使う:具体的にはJupiter NotebookからVSCodeなどに移行する
このあたりでしょうか。実務をする中で他にも効率化できる部分は見つかってくると思うので、どんどん整えていきたいです。今後は分析のスキルだけでなくこういったエンジニアリング系のスキルも磨いていこうと思います。

ではでは。