はじめに
数年前、社内の在庫需要を予測するモデルを scikit-learn で組んだ。やったことは単純で、集めたテーブルを RandomForestRegressor に流し込み、交差検証のスコアが 0.9 を超えたので満足して本番に出した。結果、稼働初週で予測が実需から大きくずれた。
原因は検証の切り方だった。時系列のデータをランダムにシャッフルして分割していたので、未来の情報が学習側に混ざっていた。スコアは最初から嘘をついていたわけだ。当時の自分はブログ記事とサンプルコードだけで組み立てていて、評価設計の基本が頭に入っていなかった。
断片的な記事は、目の前のエラーを消すのには強い。ただ「自分が今何を間違えているか」に気づく力は、あまりつかない。気づけない間違いはテストにも引っかからず、そのまま本番に出ていく。あの一件のあと、腰を据えて書籍で埋め直した。
ここで紹介するのは4冊。基礎の土台、理論の圧縮、深層学習の実装、本番運用の順に並べた。自分が実際に詰まった順番そのままである。日本語版が手に入るものを中心に選んでいる。
① Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎 — Andreas C. Müller, Sarah Guido
Müller は scikit-learn のコア開発者で、コロンビア大学で講師も務めた人物。共著の Guido は現場のデータサイエンティストだ。ライブラリを作っている側が書いた入門書という点で、説明の重心が独特である。
前半は教師あり学習のアルゴリズムを一つずつ回していく。線形モデル、決定木、ランダムフォレスト、カーネルSVM、それぞれが何に強くて何で崩れるかを、同じデータセットで比較しながら進む。スケーリングが効くモデルと効かないモデルの違いが、図で一目で分かる。
後半が自分には効いた。前処理とパイプライン、交差検証とグリッドサーチ、そして特徴量エンジニアリングの章だ。Pipeline に前処理を閉じ込めて GridSearchCV に渡す、という形がなぜ必要なのか。あの在庫予測で自分がやったリークは、まさにこの章が警告している典型例だった。
注意点として、深層学習はほとんど扱わない。原書が2016年なので、一部のAPIは現在の scikit-learn と差がある。概念の説明が主役なので読む価値は落ちないが、コードは最新ドキュメントと照らし合わせたほうがいい。
こんな人に: scikit-learn は書けるが、モデル選択と検証の根拠を人に説明できない人。
② 機械学習 100+ページ エッセンス — Andriy Burkov
Burkov は長年の実務家で、Gartner で機械学習チームを率いていた。研究と現場の両方を知っている人の筆致で、無駄がほとんどない。
Python の本ではなく、機械学習そのものの本だ。線形回帰からロジスティック回帰、SVM、決定木、勾配ブースティング、ニューラルネット、教師なし学習まで、薄さの割に射程が広い。数式は出てくるが、理解に必要な分だけに絞られている。
良さは密度と読み返しやすさにある。たとえばカーネルトリックや正則化の説明は要点だけが数ページに収まっていて、分かったつもりになっている箇所の穴をすぐ特定できる。自分は通勤で2周して、その後は辞書として開いている。
逆にコード例はほぼない。手を動かしながら覚えたい人の一冊目には向かない。①と並べて、概念の整理役として使うのが現実的だと思う。
こんな人に: 用語は使えるが、裏にある数式を一度まとめて棚卸ししたい人。
③ PythonとKerasによるディープラーニング — François Chollet
著者は Keras の作者で、Google のエンジニア。フレームワークの設計者が書いた解説なので、APIの背景にある思想まで透けて見える。
画像分類から始まり、テキスト、時系列と進む。CNN が何を見ているのか、RNN が系列をどう畳み込むのかを、数式よりも図とコードで押していく構成だ。活性化マップを可視化する章は、モデルの中身がブラックボックスに見えなくなる体験だった。
自分に刺さったのは、データが少ない状況をどう戦うかの議論。データ拡張、ドロップアウト、学習済みモデルの特徴抽出と微調整。業務で用意できる教師データは大抵足りないので、この順番で手を打つという判断基準が実務で何度も役に立った。
第1版なので Keras の書き方は現在と差がある。tf.keras 前提で読み替える手間はかかる。それでも設計の考え方は古びていない。
こんな人に: 深層学習のコードを自分の手で動かし、層の選び方の意図まで掴みたい人。
④ 機械学習エンジニアリング — Andriy Burkov
②と同じ Burkov の著作で、こちらはモデルの外側を扱う。プロジェクトの優先度付け、データ収集とラベル付け、特徴量の管理、デプロイ、監視、再学習までが一通り並ぶ。
精度を上げる話は最小限で、代わりに「なぜ本番で壊れるか」に紙面が割かれている。学習時と推論時で特徴量の計算が食い違う、分布が静かにずれていく、オフライン評価がビジネス指標と連動していない。自分が踏んだ地雷の大半がここに載っていた。
サービング形態の整理も実用的だ。バッチ、オンデマンド、デバイス上という選択肢を、レイテンシと運用コストの観点で比較してくれる。この判断を最初にやらないまま作り始めると、あとで作り直しになる。
アルゴリズムの解説はないので、①〜③を終えたあとに読むのが順序として正しい。MLOps の入り口を言葉で整理したい人には、現状これが一番まとまっている。
こんな人に: PoC は作れるのに、本番運用と監視でつまずいている人。
まとめ
| ステップ | 読む本 | 得られるもの |
|---|---|---|
| 1. 土台を作る | Pythonではじめる機械学習 | 前処理、検証設計、モデル比較の基準 |
| 2. 理論を締める | 機械学習 100+ページ エッセンス | 各手法の数式と仮定の整理 |
| 3. 深層学習を書く | PythonとKerasによるディープラーニング | CNN・RNN の実装と少量データ対策 |
| 4. 運用に乗せる | 機械学習エンジニアリング | デプロイ、監視、再学習の設計 |
今の課題から1冊を選ぶなら、こう考えればいい。
- サンプルコードは動くが数字の意味が説明できない → ①
- 手法名は知っているのに中身を聞かれると詰まる → ②
- 画像やテキストを扱う案件が降ってきた → ③
- 検証では良かったモデルが本番で劣化している → ④
- 独学で全体像から固めたい → ① から順に通す
4冊を並べて読んで分かったのは、精度を詰める知識と、壊れないものを作る知識が別物だということ。前者ばかり追っていた頃の自分に、④を先に渡してやりたい。