執筆体験記「Kaggleで磨く 機械学習の実践力」

# はじめに
こんにちは。(株) 日立製作所の [Lumada Data Science Lab.](https://www.hitachi.co.jp/products/it/lumada/about/ai/ldsl/index.html) の諸橋 政幸です。

プライベートな活動になりますが、「**Kaggleで磨く 機械学習の実践力**」というタイトルの本を執筆し、6月に無事発売しました。書籍の執筆という貴重な体験をしたこともあり、せっかくなので「執筆を通じて知ったこと／経験したこと」などを書きたいと思います。将来的に本を書きたいなと考えている方の参考になれば幸いです。
本記事では以下のことを書いています。

1. なぜ執筆することになった／したのか
2. 企画から発売までのプロセス
3. 執筆する際にどんなことで困ったか

# まずは本の紹介です！
興味を持った方は是非読んでみてください！書店にも並んでます！！

- [タイトル] **Kaggleで磨く 機械学習の実践力** -- 実務xコンペが鍛えたプロの手順
- [https://www.amazon.co.jp/dp/4865943269](https://www.amazon.co.jp/dp/4865943269)

<img width=700 alt="本の紹介.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323189/a944e66a-ddf5-337d-0ee4-ad962d08c707.png">

https://www.amazon.co.jp/dp/4865943269

# 1. なぜ執筆することになった／したのか
2021年に部署の人たちと仕事として[「実践 データ分析の教科書」](https://www.amazon.co.jp/dp/4865943005)という本を執筆し、その中のコラムでKaggleのことを書きました（「Kaggleは業務に役立つよ」みたいな話）。それを見た出版社の方から「Kaggleの本を書かないか」と声を掛けられたのがきっかけです。

ただ、「すでにいくつもKaggle本がある中，いまさら何で本書いたの？」と思った方も多いのではないかと思います。しかも有名なKaggle本があるし、、、
私自身もこの話をいただいたときに、正直そう思いました（笑）

それでも書くことにしたのは、Kaggleというと「勝負」「メダル」「順位」が気になる方も多いと思うけど、「それだけじゃないよ」「学習ツールとして優秀なんだよ」ということを伝えたかったからです。
ジュンク堂のポップにも書いたけど「Kaggleは最強の学習ツール」なんです。

<img width=500 alt="ポップ.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323189/9cbca767-a073-610d-b2e2-edd2a5c2da99.jpeg">

私自身、コンペを始めたきっかけは「称号やメダルを取るため」ではなく、「機械学習のスキルアップ」が目的だったので、これから機械学習を学びたいと思っている方、さらなるレベルアップを目指す方に**Kaggleを使った学習法**を広く知ってほしいと思っていました。
なので、それをやるための手順や考え方をまとめることで、そういう人たちの背中を押したい、躓きを少しでも減らしたいと思い、執筆を決意しました。

# 2. 企画から発売までのプロセス
次に、どんなプロセスを経て発売に至ったのかを簡単に説明します。大まかには下図のとおりです。

<img width=900 alt="プロセス.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323189/dfa32d92-b411-1e65-c5d4-d0b24cfd821e.png">

## フェーズ①：企画
まずは「コンセプト」「読者ターゲット」「類似書籍との違い」「前提スキル」といったところを具体化していって、最終的には章・節レベルの見出しと内容、ページ数までを決めていきます。いわゆる「まえがき」と「目次」にあたる部分です。
この企画書を出版社の企画会議にかけ、通過すると晴れて執筆にGOサインが出ます。
**ここが最初かつ最大の壁だと思います。**
本を書きたいと思っている方は出版社に企画書を持ち込んでみては如何でしょう。

## フェーズ②：執筆
企画段階の構想に沿って、とにかく地道に書いていくフェーズです。
とは言え、企画段階のメモレベルのものを、書籍レベルにしていくのは落とし込んでいくのはかなり苦労しました。
特に、Pythonスクリプトを交えて説明していく4章以降では、「説明したいことを具体化 ⇒ 分析の流れを作成 ⇒ それを踏まえた説明のシナリオを作成 ⇒ Pythonスクリプトを用意 ⇒ 説明文を書いていく」という作業をしていくのですが、これが結構大変でした。

前後の矛盾なく、Pythonスクリプトを使って説明でき、言いたいポイントをズラさないように、と気にしないといけないことがてんこ盛りです。
はじめからキッチリ書いていくのはかなり難易度が高いため、まずは「書き直す前提でひととおり書き切る」ことを初稿時の目標としました。たとえば、前章と矛盾が生じても前章に戻って書き直さず、そのことをメモを残しておくにとどめ、とにかく前に進める、そうやって全体を書いていくと全体像と問題がクッキリしてきます。私にとってはこの方法が合ってました。
ただ、書き直す前提で書き進めたこともあり、修正作業が初稿時と同じ、あるいはそれ以上かかってしまいました。一見無駄にも見えますが、結果的には効率的だったかなとは思います。

## フェーズ③：タイトル・表紙
タイトルや表紙は本文と違って出版社側のタスクでした。ただ、最終的には著者の意見も取り入れて決定するスタイルでした。
読者にとって、一番最初に目に入るのは「タイトルと表紙」です。ファーストインプレッションで言うと本文よりも重要ではないかと思います。何度も出版社と打合せをして決めました。

## フェーズ④：PR
どうやってPRしていくかについては、出版社の営業の方と一緒に議論して決めました。大半は出版社側のタスクとなりますが、著者のタスクも一部あります。
今回は、献本先の選定・依頼、講演イベントでの告知活動、手書きポップ作成、などを行ないました。書店でのイベントをすることもあるようですが、コロナ禍ということもあり今回は何もありませんでした。

# 3. 執筆する際にどんなことで困ったか
これらのプロセスを進める中で、いろいろな悩みや苦労がありました。たくさんあるので、いくつかにしぼって説明します。

## (1) 如何に読者ターゲットを広げるか
「読者ターゲット」は「購買数」に直結する重要な要素なので、広くすべきです。しかし、とにかく間口を広げて入門書にしてしまうと類似書籍がどうしても多くなります。一方、差別化のために何かに特化すると、対象読者が減ります。
トレードオフの関係にあるので、いい塩梅を見つけていくことになります。企画段階でかなり悩むところだと思います。

個人的には、潜在読者が多い方が重要な気がします。このため、間口を広げる＝入門書、にするのが手っ取り早いです。世の中に「XXXX入門」という本が多いのはこういうことなんだと、あらためて思いました。

## (2) どんなことを読者へ伝えたいか
最初にも書きましたが、「Kaggleを学習ツールとして利用すること」を本書のコンセプトとしています。

それに加えて、個人的な理念・方針として、「私が機械学習の勉強をはじめたころに、こんな本があったら良かったのにな」と思うものを書くことを心掛けました。
たとえば、「まずはベースラインを作ってその上で試行錯誤をする」「モデルはまずはLightGBMを使う」など分析をしている人からすると当たり前のことでも、始めたばかりの頃はそれが分かりません。特徴量エンジニアリングは確かに重要だけど、まずは「ベースライン作成」「バリデーション設計」が先だよ、ということを強調しました。事例のところもそこの説明を厚くしています。

このため、Kaggleで上位に入るためのテクニックを知りたい、と思っている方からすると期待には沿えないかと思います。そういうことも入れたいと思ってましたが、ページ数がものすごいことになりそうだったので本書では基礎的なところだけに絞っています。
もし第2弾があれば、そういうのも書きたいなと思ってます。

## (3) どうやって分析の実践例を説明していくか
4-6章では「titanicコンペ」を、7章では「Home Creditコンペ」、8章では「MLBコンペ」を題材にして実践例を書いています
しかし、100個の問題があれば100個の解法があり、100人のデータサイエンティストがいれば100個の解法があります。また、限られた紙面の中でどの部分をどうやって説明するかはかなり悩みました。

上位解法をベースに説明していっても良いのですが、それよりも基本となる「ベースラインの作成」のところをメインに書くことにしました。この部分なら、他の問題に取り組む際にも応用が効くし、機械学習の考え方の基本を知ることが重要だと思ったからです。

ちなみに、この実践例に載せるコンペは他にも、時系列予測であり「M5コンペ」と、位置推定コンペである「Indoorコンペ」を候補として挙げていました。
さらに言うと、これらのPythonスクリプトと説明文も作っていました。しかし、諸事情から泣く泣く丸ごとボツにしました。
今思うと、それらを含め、もっと多くのコンペを題材にして、問題の捉え方や、（悩んでいる点も含めて）アプローチ方法を書いても良かったなと思ったりしました。

## (4) 執筆のペース配分
週末の土日すべてを執筆に費やすという生活を続けていたにも関わらず、執筆だけで丸1年かかりました。
さらに最後の3ヶ月は、平日も仕事が終わってから喫茶店に行って閉店まで書くということを続けてやっと終わったという感じです。
喫茶店のコーヒー代だけでも、すごいかかってます（笑）

最初、出版社の方に言われたのは、「無理はしないペースで」ということでした。300ページも書くとなると、短期決戦ではムリで、マラソンみたいな長期的な心構えが必要になります。1日徹夜してどうにかなるものでは無いですしね。
当たり前ですが、普段は仕事をしているので、「ダブルワーク」しているような感覚でした。途中で時間が取れなくなって挫折する人がいても全くおかしくないよなと思いながらやってました。

これから書こうと思っている方は、出版社と相談して無理のない執筆計画を立てて進めればと思います。

## (5) ライブラリのバージョン問題
「書籍のスクリプトを書いて実行したけど動かなかった」「出力結果が書籍と違う」ということは、私自身、他の書籍で何度も経験しています。
Python絡みの本だと、地味にこれがたいへんです。

執筆中の1年間にも色々なライブラリがバージョンアップしていました。このため、印刷直前に全スクリプトのチェックをしました。その際にもいくつか判明しましたが、全て問題をクリアして満を持して発売となりました。

しかし！
最終稿から発売までの半月くらいの間に、Kaggle分析環境（Notebook）で一部ライブラリのバージョンが更新されてしまいました。。。
具体的には、4章で「pandas_profiling」というライブラリを使っているのですが、なんとそのimport時にエラーが出ます。。。
この問題は、バージョンを3.2.0に上げることで解決します。
```
# pandas_profilingをインポートする前に実行。
!pip install pandas_profiling==3.2.0

# アップデートしておくとインポートが成功します！
import pandas_profiling as pdp
```
読者の指摘ですぐに判明したので（ありがとうございます）、即座に出版社のHP上で対策方法を載せました。
この問題は、現時点でのKaggle環境で発生している問題なので、何とか早く解消してほしいです。

バージョン問題の回避策としては、出来るだけメジャーで安定したライブラリを使うくらいしか無いかなと思います。メジャーなライブラリでもバージョンアップによってスクリプトの互換性が無くなることあるので、運要素もありますね。
何かあったときに修正が出来ないのが書籍のコワイところですね。

## (6) 技術的な内容のチェック
論文の査読のようなものが存在しているのかなと思ったけど、そんなものありませんでした。
出版社にチェックできるような人がいたらその人が書けばいいわけで、よく考えるとそんなの無いですよね。
「本を書く」ということは、ある意味「その人が一番詳しい」わけなので。

ただ、やはり査読のようなことをしないと不安なので、職場の仲間や、一緒にコンペに出ている方にチェックをお願いしました。
今回、協力していただいた方々には、本当に頭が上がりません。
本を書く機会があったら私に声をかけてください。恩返ししますよ！！

# さいごに
本1冊を1人で書くのはかなりたいへんでしたが、おもしろい1年でした。
分析についての考え方を整理する機会にもなったし、自分自身にとっても非常にためになる経験でした。
本を書きたいなと思っている方は、出版社に企画を持ち込んでみては如何でしょうか。

私自身は良い本ができたと思っているので、「機械学習をはじめたいな」「分析コンペおもしろそうだな」と思った方は、是非この本とともにスタートしてみてください！

最後まで読んでいただきありがとうございました！