- 作者: 有賀康顕,中山心太,西林孝
- 出版社/メーカー: オライリージャパン
- 発売日: 2018/01/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
良書だと思います。
どのような本?
「機械学習本」というと、機械学習の理論の話やTensorFlowのようなフレームワークにフォーカスした本を思い浮かべることが多いと思います。それに対し、本書は「仕事で使う」という観点から機械学習プロジェクトに進めていくためのノウハウが語られています。
実際に機械学習プロジェクトで持続可能な成果を出すためには、本書で触れられているようなシステム設計や運用に関する知識も非常に重要です。
参考になった点
主に「1.2.2 機械学習をしなくて良い方法を考える」「1.3 実システムにおける機械学習の問題点への対処法」「4.2 システム設計」「6章 効果検証」が面白かったです。
機械学習を使わないことを恐れない
「1.2.2 機械学習をしなくて良い方法を考える」では機械学習を用いるシステム構築の難しさが触れられています。具体的には以下の問題点が紹介されています。
- 確率的な処理があるため自動テストがしにくい
- 長期運用しているとトレンドの変化などで入力の傾向が変化する
- 処理のパイプラインが複雑になる
- データの依存関係が複雑になる
- 実験コードやパラメータが残りやすい
- 開発と本番の言語/フレームワークがバラバラになりやすい
これらの点から、例えば簡単なルールベースの実装でビジネス上の目標を達成できるシステムが構築できるのであれば、機械学習を用いないほうが技術的負債が蓄積しにくくなり長期的な運用が容易になります。
たった2ページだけの節ですが、ここで触れられている機械学習ありのシステム構築が難しい理由は常に念頭に置いておく価値があると思います。プロダクトをリリースしてビジネス上の目標を達成することが目的で、機械学習はそのための道具のひとつなのであって、機械学習を使うこと自体が目的であるべきではありません。
機械学習を導入したシステムの問題点を対処する
「1.3 実システムにおける機械学習の問題点への対処法」では、機械学習を導入することが正式に決まったプロジェクトにおいて、上述の機械学習システムの問題点に対処するためのポイントが触れられています。
- 人手でゴールドスタンダードを用意して、予測性能のモニタリングをする
- 予測モデルをモジュール化してアルゴリズムのA/Bテストができるようにする
- モデルのバージョンを管理して、いつでも切り戻し可能にする
- データ処理のパイプラインごと保存する
- 開発/本番環境の言語/フレームワークは揃える
これらの中にはプロジェクトの早い段階で計画しておかないと後から着手することが難しいものもあるため、機械学習プロジェクトを始める時点で検討しておくことが重要です。
学習・予測用システムの設計パターンを知る
「4.2 システム設計」では、学習と予測の各フェーズのシステム構成パターンと、それぞれの長所・短所について触れています。
- バッチ処理で学習+予測結果をWebアプリケーションで直接算出する(リアルタイム処理で予測)
- バッチ処理で学習+予測結果をAPI経由で利用する(リアルタイム処理で予測)
- バッチ処理で学習+予測結果をDB経由で利用する(バッチ処理で予測)
- リアルタイム処理で学習する
おそらく小規模サービスの場合や予測処理が重すぎない場合は1か2の設計を思い浮かべる場合が多いと思います。しかし、Webアプリケーションと機械学習モデルを疎結合にしつつ予測のレイテンシーを抑えたい場合は、3のようにバッチ処理で予測結果をDBに格納し、WebアプリケーションでDB内の予測結果を利用する方法が非常に有効です。ただし、バッチ予測中に出てこなかった入力データに対しても何らかの予測結果を出したい場合は、DBのkeyのフォーマットやlookup方法の工夫が必要になります。
リリースしたシステムの効果検証を適切に行う
「6章 効果検証」では、リリースしたシステムによってもたらされた効果を検証するための手法や注意点が紹介されています。
機械学習モデルを作る過程でのモデルの評価指標(precision、recall、F値、AUC等)とは異なり、機械学習モデルのリリースによる利益貢献などビジネス上の効果はオフラインで検証することが非常に困難です。そのため、リリース後のユーザーの行動ログなどを基に、仮設検定、因果推論、A/Bテストなどを利用して効果を検証する必要があります。
ただし、「A/Bテストなど逐次データが得られる場合に標本を変えながら仮説検定を繰り返してしまうと無益な施策でもいつか有意差が出てしまう」「強い季節性を持っているログから因果推論を行う場合はリリース前後のデータをそのままできない」など、誤った効果検証結果を導き得る落とし穴が存在するため、注意が必要です。
もっとカバーして欲しかった点
第Ⅱ部のケーススタディは参考にはなるのですが、プロジェクト初期段階でのデータ分析や機械学習用データセットの構築、機械学習モデルの構築といった内容に重点が置かれていて、欲を言えば本番環境での導入・運用や効果検証についてもう少し具体的な話が触れられていると良かったかなと思います。
例えば予測結果をDB経由で利用する話、モニタリングの方法、A/Bテストを実施する上で必要なフレームワークの実装やログ設計、観測されたコンバージョンレートに基づく利益貢献の仮説検定や因果推論などがある程度具体例を交えて紹介されているともっと面白かったと思います。
まとめ
機械学習を用いるシステムは機械学習なしのシステム以上に運用が難しく、Googleが公開している機械学習プロジェクトのベストプラクティス集 "Rules of Machine Learning: Best Practices for ML Engineering" でも、一番最初に出てくるルールは "Rule #1: Don’t be afraid to launch a product without machine learning"(機械学習なしでプロダクトをローンチすることを恐れるな)とあるほどです。それでも機械学習を使わざるを得ないようなシステムに取り組む場合、本書に載っているノウハウは機械学習プロジェクトを進めていく上できっと役に立つと思います。
本書は220ページ程と比較的コンパクトで読みやすいですが、その分浅く広くなところもあるので、もっと深く知りたいトピックに関しては本書で紹介されている参考文献を参照してみようと思っています。