yuki-uchidaの雑思考

Webエンジニアとして学んだことを記事にしてます

副業データサイエンティストが5年間で読んだ本

この記事について

バックグラウンド

本業はTypeScriptを主に書いているWebエンジニアで社会人5年目。副業ではデータサイエンティスト/機械学習エンジニアをやっていてこちらも5年目。

この記事を書いた理由

最近読んだ「科学的根拠に基づく最高の勉強法」という本の中に、「思い出す頻度が高ければ高いほど定着する」という話があった。 なので、読んだ本の内容を思い出し定着させるきっかけとするためにこの記事を書いている。

紹介する本のラインナップについて

統計や機械学習の理論をガチガチにするのは難しいと判断して、理論寄りの書籍は非常に少ない。PRML機械学習プロフェッショナルシリーズなどの本についても、読んだ本もあるが、最近はほとんど諦めて読んでいない。

なので、紹介する本を読んだら優秀なデータサイエンティスト/機械学習エンジニアになれるというわけではないので注意してほしい。あくまで自分が副業でデータ分析案件に関わっている中で、必要な知識を得ていったらこのようなラインナップになった。 (PRMLやら機械学習プロフェッショナルシリーズは業務から遠いがジワジワと効いてくるタイプの本なので、読みたいとは思っているが、今後のキャリアを考えたときにここに投資するべき悩んで動けていない)

また、そこまで印象に残っていなかったり、エンジニアリング全般の書籍、プロダクトデザイン・マネジメント的な本は除外している。

読んだ本

Pythonで始める機械学習

この本は、学生の頃に読んでいた本で、機械学習系の本で一番ヨレヨレになっている。

当時はscikit-learnが鬼門で扱いが難しいなと感じていた。今ではデータの型とか一次ドキュメント読んでエラーの理由が理解できるようになったが、昔はそうではなくて、この本を進める中でもエラーにめちゃくちゃ悩まされた。しかし説明している内容は非常に良く纏まっていたと思う。 自然言語処理でよく使うBag-of-wordsについては「プログラミングで文章を処理するときはこうやって文字のまとまりを作るのか」と非常に興味深かった。

この次の書籍の「達人データサイエンティストによる理論と実装」と似たような内容なのでどちらかでもよいが、複数冊あると「重なるトピックは重要」だとわかるので、そういった意味でも複数冊勉強した。定着にもなってよかった。

達人データサイエンティストによる理論と実装

この本は、大学生の頃から新卒一年目くらいの間に読んだはず(その時は第二版だった)。この記事を書くために5年ぶりくらいに開いたが、絶対に必要な知識が纏まっているなと感じたので、機械学習の入門したい人にはお勧め。

ロジスティック回帰やサポートベクトルマシン(SVM)、決定木などの非常に有名で強力なアルゴリズムを学ぶのに非常に役になった。また。データの前処理(欠損値処理・カテゴリカルデータの処理)やパラメータチューニング、アンサンブル学習など、今でも前提知識として必要な内容だと思うので、入門としては非常に良かったと思う。

Tensorflowを使って畳み込みニューラルネットワーク(CNN)やリカレントニューラルネットワークを動かすチュートリアルもあり、深層学習入門としても有効だった。

詳解ディープラーニング / つくりながら学ぶ!PyTorchによる発展ディープラーニング

「詳解ディープラーニング」も、大学生の頃から新卒一年目くらいの間に読んだはず(その時は第一版だった)。学生の頃はこの本が非常にわかりやすくて重宝していたのを覚えている。 この本でKerasを学んで卒論を書いたし、インターン中にも何度も読み返した。最近ではKerasではなくPyTorchが普及していると思うが、第二版ではPyTorchも採用されていてそこは安心して良さそうだ。ただし、第二版も2019年出版なので、情報としてはかなり古いかもしれない。

深層学習で必要な線形代数に関する内容も軽く含まれていて、ニューラルネットワークから始まり、ディープニューラルネットワークに進む。 学習の効率化のためのドロップアウトや学習率の探索、Early StoppingやBatch Normalizationなどによって深層学習モデルの精度が上がっていくのが非常に面白かった。

また、当時はとしてはかなり応用的な話題だった「Attension」や「Encoder-Decoder」についても踏み込んでいて、入門から応用までカバーしていたので、当時は「今後どうやって勉強していけばよいのか」を考えるうえでもかなり解像度を高くしてくれた書籍だった。

この書籍は既に情報が古くなっていそうなので、今だとこちらの書籍のほうが良いかも。 残念なら自分は最後まで読み切れていないが、「OpenPoseによる姿勢推定」「GANによる画像生成」「Transformerによる感情分析」など、面白いユースケースごとに章が分かれていて、少なくとも読んだ範囲では良書っぽかった。解説もかなりわかりやすい。

データビジュアライゼーションの基礎

この本は、「データの見せ方・伝え方」を学べる本で、一度は読んでおいた方が良いなと思って読み始めた本。

データ分析関連の仕事をやる上で、「適切な可視化方法を扱える」ことは大きな強みになる。 機械学習エンジニアの場合は、精度改善をするためだったり、データの特性を理解するために様々なアプローチで可視化する必要があるし、データサイエンティストの場合は、ユーザー情報やらビジネス的な数値をを可視化して他人に見せる必要が出てくる。

グラフにも非常に多くの種類があり、棒グラフ・円グラフやヒストグラム、散布図以外の可視化も沢山行うことになる。箱ひげ図・バイオリンプロット・エラーバー・ツリーマップ・パラレルセットなど、飛び道具的な可視化方法も知っておくとかなり役立つ。これらは知っておけばパッと出てくるが、知らないと知っている可視化手法をこねくり回して時間をかけてしまうからだ。

「データ分析では必携!」というほどではないが、手元に置いてあるとたまーに仕事が数時間短縮できるかも。

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

機械学習をやる上では特徴エンジニアリングや評価指標・パラメータチューニングに関する書籍は持っておいた方が良い。 この本は2019年出版なので、もしかしたらもっと良い本があるかもしれないが、当時はほとんどKaggleの本がなかったので重宝した。

出版当時と今を比較しても、LightGBMやxgboost, CatBoostなどのライブラリで使えるGradient Boosting Decesion Tree(GDBT)が強いままなので、Kaggleで必要な知識が昔とは違うわけではなさそう(Kagglerじゃなくて、Kaggleのソリューションを参考にするくらいの人間だが、多分そう)。であればこの本の価値は今でも十分あると思う。

ところで、データ分析コンペの知識が昔と比べて大きく変わってるわけじゃない(2019年前後で流行ってたアルゴリズムを使っても勝負になる)のを考えると、競技プログラミングみたいに一分野として固まってきたのかなぁという気がしている。昔は「Auto MLとかが出てきて全部やってくれるようになるの?」とか思っていたが、今のところはそうではなさそうだ。

機械学習のための特徴量エンジニアリング

機械学習の精度を上げるためのテクニックが纏まっている本。非常に薄いので読み物としても軽く楽しめた。

自然言語処理では文章の中で重要な単語の重みと高めるためにTF-IDFという技術を使ったり、ストップワードを定義して無駄な単語を除去することがある。こういった自然言語処理での細かいアプローチだったり、カテゴリ変数のエンコーディング方法、次元削減の方法など、特徴量をいい感じにする手法が多く載っている。

個人的に推薦システムが好きなので、協調フィルタリングに関する情報が載っていて面白かった。この本読んでから映画の推薦機能とか試したりした覚えがある。

今となってはここまで細かい手法を書籍で学ぶ必要があるかは怪しいところ。当時はあまりここまで細かい特徴量エンジニアリング手法に踏み込んだ書籍はなかったのでとても良い本だったと思うが、今では新たな特徴量エンジニアリングの書籍も出ているようなので、そちらを検討してもよいかも。

AIアルゴリズムマーケティング

この本は推薦システムの勉強をしていた時に読んだ。あまり期待せずに読んだのだが、実際にはめちゃくちゃ面白かった。

Spotifyのレコメンデーション機能に感動して、漠然と推薦システムが好きだったが、この本の「レコメンデーションサービスのカギとなるビジネス目標として適合率だけではなく、ユーザーからの目新しさや意外性、多様性も考慮する必要がある」という記載をみて「そうそう、意外性とか多様性が考慮されてるレコメンドは面白いんだよ」と気づくことができた。 この本を読んでから、RecSysという推薦システムのトップカンファレンスの論文読んだり、論文読み会に参加したりしたので、レコメンデーション機能の面白さを教えてくれた本だと思っている。

推薦システムのサンプルコードが書いてあるわけではないので、実際に手を動かしたい人にはお勧めしない。次に紹介する「推薦システム実践入門」が良いだろう。

推薦システム実践入門

ずっと待ってた、もっと早く出てほしかった、推薦システムの入門ができるサンプルコード付きの書籍。

推薦システムを実現するためのモデル作成方法や、精度の評価方法が書かれていて、この本があればなんとかそれっぽい推薦システムを作ることができる。 深層学習が流行るまでは、推薦システムは協調フィルタリングが一般的で、コンテンツの情報を利用せず、「ユーザー属性が似ている人が好んでいるものを推薦する」仕組みが多かった(はず)。 しかし、最近はコンテンツ情報も含めて推薦システムを組んでいることも多いようだ。Spotifyも昔は協調フィルタリングで、ユーザー属性ベースの推薦をしていたが、ハイブリッドになったそうだ。

学生の頃に以下の記事を読んで、「なぜSpotifyの推薦システムが素晴らしいのか」がわかって感動した覚えがあるので非常に思い出深い。(Spotifyは音楽を好きにさせてくれたサービスで大好きだ) www.forbes.com

この本は協調フィルタリングだけではなくコンテンツベースの推薦機能についても記載されていたり、普通の機械学習モデルの評価には使わない推薦システム専用の評価方法であるMean Reciprocal Rankやnormalized Discounted Cumulative Gainなどもきちんと書かれていてとてもよい。

話は変わるが、推薦システムは人間が「その推薦を良いと感じたか」がベースとなっていて、結構「感情的」な世界だと思っている。

例えば、推薦結果に「なぜあなたにこの商品が合うのか」という文章を付与すると購入率が大きく向上するらしい。これは、人間が「その理由はともかくなんとなく納得できる」「自分のことを理解してくれているという感覚」が大きいと思う。これが自分の中では推薦システムの面白いところだなぁと思っているので、心理学的なアプローチで実装されている推薦システムがあったら面白いなーと。

A/Bテスト実践ガイド

通称カバ本。僕はあまり知らなかったが有名っぽい。 とある会社で推薦システムのA/Bテストやったときに読んだが、入門から実践までカバーしていて、A/Bテスト始めてやるなら絶対に読んだ方が良いなと思った本。

A/Bテストをどうやって開始して結果を分析すると良いのかがわかる。A/Bテストで初心者がよくハマる分析の罠とか、分析で必要な統計知識などが纏まっている。 最近はA/Bテストをやっていないので内容について忘れてきているが、また必要になったら必ず読み直すと思う。

実践的データ基盤への処方箋

所謂データ基盤を作る立場のエンジニアにお勧めしたい本。 機械学習やデータ分析をするのが普通になってきた昨今では、大量のデータを格納し、整理されたデータ基盤を構築しなければならない。格納されるデータも音声だったり画像だったりcsvだったりテキストだったりと、非常に多様だ。

データ基盤の以降は簡単にはできないので、膨れ上がるユースケースに対応するためには事前に綿密に検討されたデータ基盤が必要となる。

僕はそこまで大きなデータ基盤を作ったことがないので、この本で書かれていることの10%~20%くらいしか身についていないと思うが、データ基盤構築の上でどんな役割が必要がかとか、デザインパターンとかは軽く読んでおくだけでも脳内インデックスができてよいと思う。

その他に読んだ本

上記で挙げた以外にも、PythonSQL(Database)周りの本は結構読んだ。データを扱うエンジニアはPythonSQL(DB)からは逃れられないから読むしかない。

SQL系はミックさんの本をたくさん読んだり、DBスペシャリスト試験の勉強したりした。

Pythonに関する本ではロバストPythonが良かった。Pythonは動的型付けなこともあり、雑に書くと頑健なコードにならないので、mypyなどを使って型推論ができるようにしたくなる。型に詳しくない人は手元に置いておいて、たまに読み返すと価値がありそうだ。

ここまで読んだ本を列挙してみて「あれ?もっと読んでたはず・・・」と思ったのでもう一回部屋を見回してみたら、組織の本とかプロダクトマネジメントの本の方が多いことに気づいた。データサイエンティスト(というかデータアナリスト?)はビジネス指標をベースにビジネスチームと話をすることが多いのでビジネス方面の知識(もしくはコミュニケーション能力)が必要だったのかもしれない。