「仕事ではじめる機械学習」をざっくり読んだので感想やメモなど

仕事ではじめる機械学習を購入したので早速読んでみた。

知ってる箇所とか結構流したとこもあるので雑なメモです。

第Ⅱ部に関しては特に読んでないとこ多いのだが、手を動かさないと意味ないしまた休日にでもやってみます。

第Ⅰ部

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

  • まずは機械学習を使わないで解決できないか考える
    • 序盤でこの1文が出てきて信用できる本だとわかった
  • すぐに結果がでないことが多いのでそれに投資できる/させる調整が必要そう
  • 解くべき問題の仮設設定とMVP検証を必ずやる
  • 成功させるには以下のメンバーが必要
    • ドメイン知識のあるメンバー・機械学習する人・データエンジニア・失敗を恐れない理解有る責任者
  • テストがしずらいので継続的にモニタリングして性能の評価をするべし

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

  • p22のどのアルゴリズムを選ぶべきかのフローチャート図が便利
  • 分類・回帰・クラスタリング・その他のアルゴリズム
    • それぞれのアルゴリズムの簡単な仕組み・どういう用途で利用されることが多いか・sklearnではどのアルゴリズムが使えるかなどが数式を余り使わずシンプルにかつ簡潔になりすぎない程度にまとまっている
  • 個人的には強化学習に興味があるので本書は対象外ということで少し残念(本書の方向性としては業務でよく使われそうな案件を優先してると思うし仕方ないと思う。強化学習より絶対回帰とかの方が使いたい場面多いはず。)

下記のでかいトカゲ本を読むと2章&3章をさらに実践的に学べる気がする。たしか全編に渡ってscikit-learn使ってた記憶があるので。

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

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

モデル自体の評価

  • 正解率
    • 正解した値の数 / 全体の値の数
    • 余り使えない。データの偏りに左右されて正確に評価できない
  • 適合率
    • 実際の値の数 / 予測した値の数
    • 抜け漏れ > 誤り 重視のときはこの値を見る
    • スパム判定など
  • 再現率
    • 正解した値の数 / 実際の値の数
    • 誤り > 抜け漏れ 重視の時はこの値を見る
    • 発生件数が少ない病気の検診など
  • 混合行列
  • 適合率と再現率からF値
  • 分類はF値を見ること多い
  • 回帰は平均二乗誤差

完成したモデルでどれが一番ビジネスに効くかを評価

  • A/Bテスト
    • 6章で詳細
    • ここで教えてくれ…
  • 目的はビジネス上のKPI達成であることを忘れず

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

システム設計

  • 1)バッチ処理で学習+予測結果をWebアプリケーションで直接算出する(リアルタイム処理で予測)
    • 一番素朴なやつ
    • Djangoみたいなwebアプリフレームワーク内に学習のタスクとかも全部まとめちゃうみたいなイメージかな
  • 2) バッチ処理で学習+予測結果をAPI経由で利用する(リアルタイム処理で予測)
    • このパターンは使ったこと有る。mnistの学習結果をapiで叩いてcanvasに描画みたいなやつ作った
    • SaasのML APIを利用したりECSなどを利用してスケーリングを楽にすると良い
    • s3に学習結果を配置してlambda+api gatewayapi提供するパターンとかもある
  • 3) バッチ処理で学習+予測結果をDB経由で利用する(バッチ処理で予測)
    • 一番試しやすいパターン
    • 学習結果をDBに保存するので予測フェーズでの速度問題が発生しずらい
    • リアルタイム性が必要ない問題に使える
      • ECの推薦とか。あらかじめ日に1回実行すればokみたいなとき。
    • データ量の増加とモデルの学習頻度の設計をしっかり
    • Sparkで分散処理(Sparkよく知らんのであとで調べる)
  • 4) リアルタイム処理で学習をする
  • 表4-1 システム構成のパターンのまとめ便利

自分の個人用途だと、

  • Pythonで学習して結果をDBに突っ込むかPythonAPIサーバー作って提供する
  • 利用はSPAかRailsのアプリもしくはネイティブアプリで

という感じになりそうなので2 or 3かなー。

ログ設計

  • ログの格納場所はデータ量が増えがちなのでRDBだと不便なこと多い
  • 基本は「ログDBにデータを格納」→「SQLやEmbulkなどでデータを集計処理」の流れ
  • ログストレージにはSQLアクセス出来ると分析しやすい
    • Redshift,Bigquery
    • (Hadoop, S3) + (Hive, Impala, Presto, Athena)
    • EMR, Google Cloud Dataproc, Azure HDInsight

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

  • 教師あり学習の特徴量の作り方
  • 公開されてるデータセットから
  • 自作
  • 自分+他人の手を借りる
    • すぎゃーんさんがアイドルの顔分類をする時のデータ収集を効率化するためにラベル付けのためのbotwebサービスを作ってたがアレ
  • ラベリングは1人だと絶対死ぬから自分以外の人に手伝ってもらうかクラウドワークスみたいなサービスとか使わないと無理そう
  • ただアニメキャラの分類とかだと版権周りの処理とかどうなるのだろう。公にやりづらそう

第6章 効果検証

  • 機械学習に限らず、問題・仮説・施策実施・効果検証をしっかり設計定義しないとダメだよね。
  • ログの汚染問題
  • 仮説検定の話
    • p値とかあのへんの統計でよく出てくる用語と具体的なやり方をPythonで説明したり。理論的なとこの説明は省かれてるので数式は出てこないから苦手な人にはちょうど良さそう。
  • 知らなかった→ "2017年7月にp値の閾値を0.05から 0.005にすべきだという声明も発表されました”
  • 因果効果の推定
    • ルービンの因果モデル
    • ランダム化比較試験(RTC)
      • 知らなかったがブランドリフトの効果検証も可能らしい。深掘りしたい
    • A/Bテストの話
      • A/Bテストしてる施策の影響の入ったログを分離しないといけないのは機械学習特有の問題かも。普通のwebサービス機能のA/Bテストだとその辺気にしないし。

第Ⅱ部

以降は具体的なケースを手を動かして検証する内容。 自分はこれ以降の章はまだちゃんと読んでないが眺めた感じ7章は「集合知プログラミング」に似たような内容あった気がする

集合知プログラミング

集合知プログラミング

第7章 映画の推薦システム

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

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

参考文献

あとがき

こうした中で、本書の執筆に取り組み続けていたのは、何度も同僚から機械学習の似たような質問 を受ける度に、既存の理論寄りの書籍やハンズオン系の書籍ではカバーできていないけれど、業務の 中では皆知っているべきことがたくさんあるのではないか、と思い続けてきたからです (略) データ分析と向き合うこ とで私たちが暗黙的に経験として学んできた事がまだまだ知られていないのではないかと思いました。(p195)

とあるように実際に業務で機械学習を利用してきた方々の知恵が詰まった本になっていると感じた。実際理論的な部分は重要だし欠かせないのだけど、じゃあ実務で活用したいという時にどういうハマリどころがあるのかといった知見は理論書では学べない。結局そういう場合に0から業務で利用しようとすると彼らが踏んできたハマリどころを再度踏みながら四苦八苦するはめになる。本書を読むことで機械学習を実務で使ってみようという人が失敗することが減るように思うし非常に実用的な書籍だと感じた。 電子版の価格は2,052円とこの手の書籍にしては安いので"買い”だと思います。ただ、個人的にはkindleでも買えたらなと思ったのだけども。

www.oreilly.co.jp