周回遅れでIT業界デビューしたエンジニアのブログ

就職氷河期にモロにぶち当たり、人生で混迷を極めた末にIT業界に安寧を見出そうとしているアラフォーのお勉強日記です。

「仕事ではじめる機械学習」を読了しました。各章の要点と所感

こんにちは。少しずつ暖かくなってきましたね!
3月から新しい会社に移り、さっそく新しいプロジェクトに参画しています。

私にとってはちょっと前の話になりますが、3月までの課題のひとつ、「仕事ではじめる機械学習」を読了しましたので、本のポイントや響いた言葉などを書いておきたいと思います。

仕事ではじめる機械学習

仕事ではじめる機械学習

対象レベル

  • courseraの「Machine Learning」を修了された方
  • その他、機械学習に関する入門的な書籍やMOOCで勉強された方
  • 実務で機械学習を使ったプロダクトの導入に携わっている方
  • データ分析に携わっている方

全体の要点

  • 機械学習は技術的負債になりやすく、できる限りシンプルな枠組みで作る必要がある。
  • 導入後の評価・検証方法は? また、効果検証には統計学の知識が必要。
  • 学習データを用意する方法については十分検討するべき。
  • 上の3点について準備の仕方が悪いと、コストだけが一方的にふくらんでいく。
  • 統計学の知識がやっぱり必要。エンジニアであっても機械学習のプロダクト導入に携わるなら学ぶべき。
  • データ分析者にとって、利益貢献の説明+裏付けは非常に重要。

1章 機械学習プロジェクトのはじめ方

機械学習プロジェクトの流れ」と「機械学習の問題点への対処方法」の2点が重要だと思います。

機械学習プロジェクトの流れ

1. 問題を定式化する
2. 機械学習をしないで良い方法を考える
3. システム設計を考える
4. アルゴリズムを選定する
5. 特長量、教師データとログの設計をする
6. 前処理をする
7. 学習・パラメータチューニング
8. システムに組み込む

現在の機械学習の技術が日進月歩であることも含めて、「機械学習を組み込んで作られたプロダクトは技術的負債になりやすい」ことを意識する必要があると感じました。機械学習をしないで済む方法があれば、そっちのほうがいい、と私も思います。

機械学習の問題点への対処方法

1. 確率的な処理があるため自動テストがしにくい
2. 長期運用しているとトレンドの変化などで入力の傾向が変化する
3. 処理のパイプラインが複雑になる
4. データの依存関係が複雑になる
5. 実験コードとパラメータが残りやすい
6. 開発と本番の言語/フレームワークがバラバラになりやすい

作って終わりではないですし、複雑な仕組みを扱う以上、プロダクトとしての枠組みはできる限りシンプルにしないとですよね……。具体的にどういう対策を取るべきかは本書をご覧いただくとよいです。

2章 機械学習で何ができる?

1. 分類:パーセプトロン、ロジスティック回帰、SVM、ニューラルネットワーク、k近傍法、決定木、ランダムフォレスト、最急降下法
2. 回帰:線形回帰、多項式回帰、ラッソ回帰、リッジ回帰、エラスティックネット、回帰木、SVR
3. クラスタリング
4. 次元削減

他(推薦、異常検知、頻出パターンマイニング、強化学習)

アルゴリズムの選定の仕方が、フローチャートになっていて分かりやすいです。教師あり学習、教師なし学習が、それぞれどんな特徴があってどんなアルゴリズムがあるのかを把握しておくことが必要だと思いました。

3章 学習結果を評価しよう

1. 正解率(Accuracy)「正解した数÷予測した全データ数」
2. 適合率(Precision)正確性。「真陽性÷(真陽性+偽陽性)」
3. 再現率(Recall)網羅性。「真陽性÷(真陽性+偽陰性)」
4. F値(F-measure)適合率と再現率の調和平均

これらは比較的よく知られていると思いますが、それぞれどの点に注目すべきかが書かれています。性能改善では外せないキーワードなので意味をしっかり理解しておきたいです。

4章 システムに機械学習を組み込む

1. 一括学習+直接予測
2. 一括学習+API
3. 一括学習+DB
4. リアルタイム

バッチ処理でデータを取り込んでWebアプリケーションに反映させるのに、どういうシステムの組み方をすべきかがパターン別に解説されています。設計をするうえでどんな材料と構造で家を作るかと同じで、実務の上では効率を左右する特に重要な部分だと思います。図解付きなので理解しやすくてよいです!

また、見落とされがちですがログのとり方はその後のオペレーションを左右するので、機能と照らし合わせてしっかり作りこむべき。(テストの時も、ログの吐き方が悪くて苦労したり……)

5章 学習のためのリソースを収集しよう

1. 公開されたデータセットやモデルを活用する
2. 開発者自身が教師データを作る
3. 同僚や友人などにデータ入力してもらう
4. クラウドソーシングを活用する
5. サービスに組み込み、ユーザに入力してもらう

教師あり学習の場合、教師データを必要量確保する必要があるので、どのような方法でデータを作るかについて触れています。公開セットかサービス組み込みがよく使われそう。クラウドソーシングは質が良くなさそうなのでちょっと避けたいかな……? 実際はどうなんだろう。

6章 効果検証

問題定義 → 仮説設定 → 開発 → 効果検証

大事なのはビジネスにおいてどの程度のインパクトをもたらしたか。「利益をどれだけ押し上げたのか」という一文は見落とされがちですが一番大事だと思います。また、「利益貢献に関する説明」の裏付けとなる検証方法を身に着けておく必要があります。統計学ほんと大事。



ここからは実践編です。中身は見てのお楽しみ!!

7章 映画の推薦システムをつくる

協調フィルタリングを扱っています。courseraを受講された方なら、ははぁん、とちょっとニヤっとするかも。

8章 Kickstarterの分析、機械学習を使わないという選択肢

スクレイピングを駆使してのデータ取得と、取得データによるExcel分析を体験する章です。この章では特に、プレゼン用のパワポ資料が参考になります! こういう話の展開の仕方なら、なるほど!と理解が進みます。わかりやすいです。

9章 Uplift Modelingによるマーケティング資源の効率化

ここではランダム化比較試験、つまりA/Bテストを通したデータ分析を体験します。4パターンいるユーザーのうち、どの層に介入(働きかけ)をすれば売り上げが上がるのかについて説明がされています。一番難易度が高いですが理解できれば大きな武器になると思います。

所感

新しいプロジェクトに参画する前に読んでおいてよかったです。

機械学習を使ったプロダクトを作るエンジニアだけでなく、データ分析担当者の方も知っておくと、共通理解の部分が増えてプロジェクトが円滑に進みそうです。それくらい重要な本だと思います。

ぜひご一読ください!