オライリーから「仕事ではじめる機械学習 第2版」を出版しました

仕事ではじめる機械学習 第2版 表紙
Table of Contents

4/23に「仕事ではじめる機械学習 第2版」をtokorotenさんとhagino3000さんとともに出版しました。 電子版は、Kindleでは購入できない 1 のでぜひオライリー・ジャパンのサイトからDRMフリーのPDF、EPUBをご購入ください。

仕事ではじめる機械学習 第2版 amazon.co.jp

コードは今回はGitHubとGoogle Colaboratoryにあります。詳しくは、GitHubのレポジトリをご覧ください。

https://github.com/oreilly-japan/ml-at-work

なお、第一版のコードは1st-editionタグにあります。

同人誌や初版のEbookが出た2017年から4年の歳月を経て、この度改訂版を出すこととなりました。

皆さまのおかげでAmazonの書籍ランキングでも、予約のタイミングなのに10位になったこともあったそうです。ありがたい限りです。

[2021/04/26追記]
ジュンク堂書店池袋本店とEbookの販売でも1位を獲得したようです。ありがたや〜


[/追記]

改訂版の見どころ

おかげさまで、第1版も非常に好評をいただいて、紙版が出てから3年間地道に応援いただいていました。 今回、改訂にあたって古くなった情報を見直したり、新しく書き直し、追加したりと様々行いました。 その結果、約1/3が新たに執筆されたページとなり、厚さも前回よりかなり分厚くなっています。

大きな違いは初版の目次と比較していただいてもわかるかとは思いますが、以下のポイントが大きな変更点になります。

  • 機械学習基盤とML Opsの章の追加 (chezou)
  • 効果検証の章の大幅改訂(hagino3000)
  • 退職予測をテーマに予測モデルの解釈をする (tokoroten)
  • オンライン広告における機械学習モデルの役割と運用 (hagino3000)
  • エンジニア向けの数式を少なくしたバンディットアルゴリズム解説 (tokoroten)

おすすめの読み方

帯には「上司に機械学習でいい感じにしてくれと言われたら」とありますが、それに対する直接的な答えは残念ながら書かれてはいませんが、そこに至るまでの足がかりとなる情報がコンパクトにまとまっているかなと思います。 著者3名それぞれが「実務でそれいるの?」というツッコミをしながらの執筆は、楽しくも辛くも 2 ありました。

読み方としては色々あると思いますが、まずは肩肘張らずに難しいところは飛ばしてざっと読んでいただいて、後で困ったら辞書のように引っ張り出して更に別の文献にあたって深堀りする、という読み方が良いのではないかなと思います。 私は前回のときからの縛りで極力数式を使わないように書いていますが、tokorotenはその中間、hagino3000さんは数式は他の二人より多め、とバラエティに富んでいます。

もしかしたら、経験が少ないうちは気にならなかったことも、あとから見返してみるとわかるようになることもあるかもしれません。 初版の読者さんの中では、大学を出て実務の支えになったという声も聞き、嬉しくなりました。

どんな業務でも書籍の理想的な状態と実務の泥臭い部分のギャップというものはあるかと思います。そうした溝を埋めるのに本書が助けになれば嬉しいです。

おまけ:目次

オライリー・ジャパンのサイトに行くのも面倒くさいという方のために、以下目次です。

目次
まえがき

第I部

1章 機械学習プロジェクトのはじめ方
    1.1 機械学習はどのように使われるのか
    1.2 機械学習プロジェクトの流れ
        1.2.1 ビジネス課題を機械学習の課題に定式化する
        1.2.2 類似の課題を、論文を中心にサーベイする
        1.2.3 機械学習をしなくて良い方法を考える
        1.2.4 システム設計を考える
        1.2.5 特徴量、教師データとログの設計をする
        1.2.6 実データの収集と前処理をする
        1.2.7 探索的データ分析とアルゴリズムを選定する
        1.2.8 学習、パラメータチューニング
        1.2.9 システムに組み込む
    1.3 実システムにおける機械学習の問題点への対処方法
        1.3.1 人手でゴールドスタンダードを用意して、予測性能のモニタリングをする
        1.3.2 予測モデルをモジュール化してアルゴリズムのA/Bテストができるようにする
        1.3.3 モデルのバージョン管理をして、いつでも切り戻し可能にする
        1.3.4 データ処理のパイプラインごと保存する
        1.3.5 開発/本番環境の言語/フレームワークを揃える
    1.4 機械学習を含めたシステムを成功させるには
    1.5 この章のまとめ

2章 機械学習で何ができる?
    2.1 どのアルゴリズムを選ぶべきか?
    2.2 分類
        2.2.1 パーセプトロン
        2.2.2 ロジスティック回帰
        2.2.3 SVM
        2.2.4 ニューラルネットワーク
        2.2.5 k-NN
        2.2.6 決定木、ランダムフォレスト、GBDT
    2.3 回帰
        2.3.1 線形回帰の仕組み
    2.4 クラスタリング・次元削減
        2.4.1 クラスタリング
        2.4.2 次元削減
    2.5 その他
        2.5.1 推薦
        2.5.2 異常検知
        2.5.3 頻出パターンマイニング
        2.5.4 強化学習
    2.6 この章のまとめ

3章 学習結果を評価するには
    3.1 分類の評価
        3.1.1 正解率を使えば良いのか?
        3.1.2 データ数の偏りを考慮する適合率と再現率
        3.1.3 F値でバランスの良い性能を見る
        3.1.4 混同行列を知る
        3.1.5 多クラス分類の平均の取り方: マイクロ平均、マクロ平均
        3.1.6 ROC曲線とAUC
        3.1.7 分類モデルを比較する
    3.2 回帰の評価
        3.2.1 平均二乗誤差
        3.2.2 決定係数
    3.3 機械学習を組み込んだシステムのA/Bテスト
    3.4 この章のまとめ

4章 システムに機械学習を組み込む
    4.1 システムに機械学習を含める流れ
    4.2 システム設計
        4.2.1 混乱しやすい「バッチ処理」と「バッチ学習」
        4.2.2 バッチ処理で学習、予測、予測結果をDB経由でサービングする
        4.2.3 バッチ処理で学習、リアルタイム処理で予測、予測結果をAPI経由でサービングする
        4.2.4 バッチ処理で学習、エッジのリアルタイム処理で予測する
        4.2.5 リアルタイム処理で学習をする
        4.2.6 各パターンのまとめ
    4.3 教師データを取得するためのログ設計
        4.3.1 特徴量や教師データに使いうる情報
        4.3.2 ログを保持する場所
        4.3.3 ログを設計する上での注意点
    4.4 この章のまとめ

5章 学習のためのリソースを収集する
    5.1 学習のためのリソースの取得方法
    5.2 公開されたデータセットやモデルを活用する
    5.3 開発者自身が教師データを作る
    5.4 同僚や友人などにデータ入力してもらう
    5.5 クラウドソーシングを活用する
    5.6 サービスに組み込み、ユーザーに入力してもらう
    5.7 この章のまとめ

6章 継続的トレーニングをするための機械学習基盤
    6.1 機械学習システム特有の難しさ
        6.1.1 データサイエンティストvs ソフトウェアエンジニア
        6.1.2 同一の予測結果を得る難しさ
        6.1.3 継続的トレーニングとサービングの必要性
    6.2 継続的トレーニングとML Ops
        6.2.1 リリースのアジリティを上げるための機械学習基盤
        6.2.2 ML Ops:機械学習基盤におけるCI/CD/CTを目指す取り組み
    6.3 機械学習基盤のステップ
        6.3.1 共通の実験環境
        6.3.2 予測結果のサービング
        6.3.3 学習、予測共通の処理のパイプライン化
        6.3.4 モデルの継続的学習・デプロイ
    6.4 予測結果のサービングを継続し続けるために
        6.4.1 監視・モニタリング
        6.4.2 定期的なテスト
    6.5 この章のまとめ

7章 効果検証:機械学習にもとづいた施策の成果を判断する
    7.1 効果検証の概要
        7.1.1 ビジネス指標(メトリクス)を用いた施策の評価
        7.1.2 施策実行後の効果検証の重要性
        7.1.3 オフライン検証とオンライン検証
        7.1.4 指標の選定
    7.2 因果効果の推定
        7.2.1 相関関係と因果関係の区別
        7.2.2 ルービンの因果モデル
        7.2.3 セレクションバイアスによるみせかけの効果
        7.2.4 ランダム化比較試験
        7.2.5 過去との比較で判断するのは難しい
    7.3 仮説検定の枠組み
        7.3.1 なぜ仮説検定なのか
        7.3.2 コインは歪んでいるか
        7.3.3 獲得ユーザーの継続利用率の比較
        7.3.4 差の信頼区間を求める
        7.3.5 偽陽性と偽陰性
        7.3.6 p値ハック
    7.4 A/Bテストの設計と実施
        7.4.1 2 群の抽出と標本サイズ
        7.4.2 継続的なA/Bテストと終了判定
        7.4.3 A/Aテストによる均質さの確認
        7.4.4 施策同士の相互作用に注意
        7.4.5 A/Bテストの仕組み作り
    7.5 オフライン検証
        7.5.1 ビジネス指標を使った予測モデルの評価
        7.5.2 反実仮想の扱い
        7.5.3 Off Policy Evaluation
    7.6 A/Bテストができないとき
        7.6.1 観察データを使った効果検証
    7.7 この章のまとめ
    7.8 こぼれ話:絶対に成功するA/Bテスト、A/Bテストの母集団ハック
        7.8.1 母集団コントロールによるA/Bテストのハック
        7.8.2 休眠顧客へのアプローチ
        7.8.3 バックボタンハック
        7.8.4 母集団ハックを見抜く
        7.8.5 休眠顧客を使った低リスク実験による成功事例の積み上げ

8章 機械学習のモデルを解釈する
    8.1 Google Colaboratory にインストールされているライブラリをバージョンアップする
    8.2 学習用のファイルをアップロードして確認する
    8.3 線形回帰の係数から原因を読み解く
    8.4 ロジスティック回帰の係数から原因を読み解く
    8.5 回帰係数のp値を求める
    8.6 決定木の可視化から原因を読み解く
    8.7 ランダムフォレストのFeature Importance の可視化
    8.8 SHAPによる寄与の可視化
    8.9 従業員満足度をSHAPで可視化する
    8.10 この章のまとめ

第II部

9章 Kickstarterの分析、機械学習を使わないという選択肢
    9.1 Kickstarter のAPIを調査する
    9.2 Kickstarter のクローラーを作成する
    9.3 JSONデータをCSVに変換する
    9.4 Excel で軽く眺めてみる
    9.5 ピボットテーブルで色々と眺めてみる
    9.6 達成したのにキャンセルされたプロジェクトを見てみる
    9.7 国別に見てみる
    9.8 レポートを作る
    9.9 今後行いたいこと
    9.10 この章のまとめ

10章 Uplift Modelingによるマーケティング資源の効率化
    10.1 Uplift Modelingの四象限のセグメント
    10.2 A/Bテストの拡張を通じたUplift Modelingの概要
    10.3 Uplift Modelingのためのデータセット生成
    10.4 2 つの予測モデルを利用したUplift Modeling
    10.5 Uplift Modelingの評価方法、AUUC
    10.6 実践的な問題での活用
    10.7 Uplift Modelingを本番投入するには
    10.8 この章のまとめ

11章 バンディットアルゴリズムによる強化学習入門
    11.1 バンディットアルゴリズムの用語の整理
    11.2 確率分布の考え方
    11.3 事後分布の考え方
    11.4 事後分布の信用区間上限を用いた実装例
    11.5 UCB1
    11.6 確率的なバンディットアルゴリズム
        11.6.1 Softmax 法
        11.6.2 Thompson Sampling 法
    11.7 各種バンディットアルゴリズムの比較
    11.8 文脈付き多腕バンディットのブートストラップ法による実装
    11.9 現実の問題での課題
        11.9.1 報酬が届くのに時間がかかる
        11.9.2 オフライン実験するためのログデータがバンディットによって偏っている
        11.9.3 有効なアームは流行の移り変わりで時間変化する
        11.9.4 最善なアームが最適ではないことがある、多様性の価値
        11.9.5 アームが途中から追加される
    11.10 バンディットアルゴリズムと、A/Bテスト、Uplift Modelingの関係性
    11.11 この章のまとめ

12章 オンライン広告における機械学習
    12.1 オンライン広告のビジネス設定
        12.1.1 広告枠の売買
        12.1.2 DSPの行動方策
        12.1.3 ファーストプライスオークションの特徴
        12.1.4 入札の流れ
    12.2 問題の定式化
        12.2.1 市場価格と勝率
        12.2.2 効用(Utility)
    12.3 予測の役割と実装
        12.3.1 オーディエンスのレスポンス予測
        12.3.2 勝率(市場価格)の予測
    12.4 広告配信ログの特徴
        12.4.1 フィードバックループ
        12.4.2 不均衡データ
        12.4.3 カーディナリティの大きなカテゴリ変数
        12.4.4 打ち切りデータ
    12.5 機械学習予測モデルの運用
        12.5.1 予測を外したときの対処
        12.5.2 継続的なモデルの訓練
    12.6 この章のまとめ

あとがき
参考文献
索引

  1. https://twitter.com/chezou/status/1385414782396747779 ↩︎

  2. (海外移住に出産に本業のデスマラッシュにと、全員なぜか締切と重なる様々な出来事があった) ↩︎

Aki Ariga
Aki Ariga
Staff Software Engineer

Interested in Machine Learning, ML Ops, and Data driven business. If you like my blog post, I’m glad if you can buy me a tea 😉

  Gift a cup of Tea

Related