ちょっと話題の記事

【書評】「仕事ではじめる機械学習」を読んで、機械学習プロジェクトの大変さを知った夏

その(機械学習に対する)幻想をぶち殺す!!
2019.06.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも。DI部@大阪オフィスの玉井です。

仕事ではじめる機械学習という本を読んだので、久しぶりに書籍エントリを投下します。この本はとってもとってもとってもとってもとってもとっても大スキよ ダーリン I like you. ダーリン素晴らしいので、ぜひこの気持ちをみなさんに伝えたいと思いました。

この本を読もうと思った理由

今後、機械学習を扱う製品やサービスが増えてくるのではないか、と思ったから

現在、私は製品サポートエンジニアとして、データ分析に関係する製品やサービス(Tableauとか)のサポートや導入を行っています。機械学習は触れたことは一切ありません。また(少なくとも現時点では)機械学習エンジニアに転向する予定もありません。

ところで、データ分析関係の製品やサービスっていうのは、それはもうすごい勢いで色々なものがリリースされています。弊社ではTableauAlteryxといった製品を主として扱っていますが、それ以外にも色々あります(Lookerとか)。で、ここからは私の肌感覚でしかないのですが、今のところ下記の2種類は既に出まくりで戦国自体に突入してます。

  • データを可視化を助けてくれるもの
  • データの前処理を助けてくれるもの

そして、これから沢山でるのではないかと思っているのが「機械学習を助けてくれるもの」です。データサイエンティストでなくとも機械学習を扱うことができる的な製品が今後増えるのではないか、と個人的に思っています(すでにいくつかありますよね。DataRobotとか)。これらを弊社でも扱うことになるのか…については、エライ人達が判断するので、一兵卒ならぬ一平社員でしかない私はわかりかねますが、今後こういう製品が世に増えてくるにあたり、機械学習に関する基本的な知識が知っておいた方がいいだろう…という思いがあったため、この本を手に取りました。

また、業務でTableauの説明をしにお客様のところに訪問したら、話がどんどん機械学習の方に移っていった…ということがよくあります(同じデータ分析というカテゴリの話題なので)。そういった意味でも、機械学習の勉強をしておいて損はないと思っています。

同じ部署の同僚と機械学習の話がしたかったから

現在、大阪オフィスには、私と同じ部署の人間が1人だけいます。彼はバリバリの機械学習エンジニアなのですが、せっかく同じ大阪オフィスにいるので、機械学習の話とかもっとしたいじゃないですか。そのためには多少の知識が必要なので、この本を読んで勉強してみるか…という流れになりました。

私のスペック

  • 私立文系学部卒
  • 嫌いな科目は数学と英語
    • 高校のころ、この2科目は赤点が普通だった

機械学習どころかITエンジニアそのものに向いてないようなスペックですが、こんな私でも楽しく読むことができました(一部、こんな私では難しい章もありました。それは後述。)

書籍の概要

著者(敬称略)

  • 有賀康顕
  • 中山心太
  • 西林孝

目次

この書籍は2部構成となっています。一部は、「機械学習とは何なのか」「仕事(プロジェクト)にどうやって組み込むのか」といった解説が中心です。二部は、一部の内容を踏まえながら、実際に機械学習を使ったデータ分析(主にPythonを用います)を行ってみる…という実践的な章になっています。

一部

  1. 機械学習プロジェクトのはじめ方
  2. 機械学習で何ができる?
  3. 学習結果を評価しよう
  4. システムに機械学習を組み込む
  5. 学習のためのリソースを収集しよう
  6. 効果検証

二部

  1. 映画の推薦システムをつくる
  2. Kickstarterの分析、機械学習を使わないという選択肢
  3. Uplift Modelingによるマーケティング資源の効率化

扱っていること

・機械学習のプロジェクトをどのようにはじめるか
・機械学習と既存システムをどう連携するのか
・機械学習のデータをどのように集めるのか
・仮設をどのように立てて分析を進めるのか

機械学習を用いたシステムの開発は、通常のシステム開発(通常って何やねんって感じですが、ここでは機械学習以外の開発と捉えていただければ…)とどう違うのか、頭の中で整理がついていないエンジニアも多くいるのではないでしょうか。そんな方向けに、機械学習とはどういうものか、プロジェクトはどう進めるのか、システムにどう組み込むのか、といったことが丁寧に説明されています。

扱っていないこと

・機械学習の理論やアルゴリズム、特にディープラーニングについて
・プログラムの基礎
・微分積分、行列計算、確率計算などの高校卒業程度の数学

「機械学習を仕事でどう使うか」がテーマということもあって、理論に踏み込んだ話はほとんどでてきません(とはいえ、アルゴリズムの仕組みについて、最低限必要なことがわかりやすく書かれている章はあります)。また、いま話題のディープラーニングや強化学習などについても出てきません。伝統的な機械学習に焦点が絞られています。

書籍を読んで

(いい意味で)機械学習に対する幻想を砕いてくれる

機械学習は「なんかいい感じの結果を勝手に出してくれる夢のような技術」ではないことを思い知らせてくれる本だと思います。

機械学習自体の解説ももちろんありますが、その機械学習を実務でどうやって使っていくのか、どういう段取りを踏む必要があるのか、といったことが学べます。これらを理解することで、機械学習を使うための前準備の重要性と、機械学習を実装した後の運用フェーズまで考えておく計画性が非常に大事であることに気付けます。

エンジニアのみならず、機械学習に対してぼんやりした印象しか抱けてない人全員にオススメできます。

すごく気に入った章

  • 1章 機械学習プロジェクトのはじめ方
  • 4章 システムに機械学習を組み込む
  • 8章 Kickstarterの分析、機械学習を使わないという選択肢

「機械学習を使うとはどういうことか」がすごく理解できた章でした。「機械学習を使わなくて良い方法を考える」ということを実践できる8章は、他の機械学習関連書籍ではなかなか見ることのできない内容だと思います。超オススメ。

あと何回か読み込まないと理解できないと思った章

  • 2章 機械学習で何ができる?
  • 7章 映画の推薦システムをつくる
  • 9章 Uplift Modelingによるマーケティング資源の効率化

2章は概念は理解できるのですが、各アルゴリズムの数式を伴った解説は、一読しただけでは私では理解できませんでした。昨今は、便利なライブラリや各種プロダクトの登場によって、そこまで細かいこと知らなくて使えるっちゃ使える技術になってきており、「データサイエンティストに俺はなる」とか宣言していないければ、そこまで踏み込まなくて良い気もするのですが、やっぱり理解できた方がカッコいいですよね

7章と9章は実際に機械学習を実装する章ですが、コードは一式提供されているのですが、やはりその中でどういった処理を行っているのかについて理解するためには、2章同様もう少し勉強が必要だと感じております。

章毎の概要と私の個人的なメモ

私の個人的なメモは、読んで字の如く私の個人的なメモです。個人的なメモもブログに載せちゃうのが私のスタイルなんです。(基本的には書籍内に紹介されている参考文献などをメモってます)

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

見出し

  1. 機械学習はどのように使われるのか
  2. 機械学習プロジェクトの流れ
  3. 実システムにおける機械学習の問題点への対処方法
  4. 機械学習を含めたシステムを成功させるのは
  5. この章のまとめ

まだ読んでないアナタに紹介したいところ

一発目にして、この書籍で私が一番好きな章です。

この章では、そもそも機械学習とは何なのかという根本的な部分と、機械学習を使ったプロジェクトの進め方について説明しています。エンジニアだけでなく、「AI使ってなんかいい感じにしたい〜」と漠然に考えている事業者の方も気になっているテーマがいきなり襲ってきます。で、この章で一番大事なことはズバリこれではないでしょうか。

機械学習をしないで良い方法を考える!!!!!!!

機械学習に限らず、データ分析においてまずはじめに行うことは「問題を定式化する」「分析の目的をハッキリさせる」です。これは皆さん「ですよね」という感想でしょう。しかし、問題をハッキリさせた次に行うことは「機械学習をしないで良い方法を考える」!マジで!

書籍を読んでもらえれば分かると思うのですが、機械学習は「ボタンぽちっ」で全部解決してくれるような夢技術ではなく、実際に活用するまでに検討するべき事項がたくさんあります。さらに、機械学習を含んだシステムは、他のシステム以上に技術的負債が溜まりやすい等、相応のリスクもあります。

いまここで目指すべきなのは、最初に定式化した「問題」の解決であって、機械学習を使うことではありません(手段と目的が〜ってやつですね)。後者が目的になってしまってるプロジェクト、身に覚えはありませんか?問題の解決にあたり、機械学習を使わないで済むならそれに越したことはないのです。まずは「機械学習をしないで良い方法」を考えましょう。

また、上記とあわせて響いたのが下記。

では、どのようなビジネス上の課題に対して機械学習を利用すれば良いのでしょうか?私は以下の条件を満たす必要があると考えます。

・大量のデータに対して、高速に安定して判断を求める必要がある
・予測結果には、一定数の間違いが含まれることが許容できる

特に重要なのは後者でしょう。100%正解できる機械学習なんて存在しません。必ず発生する誤りを、運用でどうカバーするかを、セットで考える必要があります。

さらに下記も重要です。

では、機械学習を含めたプロダクトをビジネスとして成功させる上で重要になるのはどのようなチームでしょうか?私は以下の4者が重要だと考えます。

  1. プロダクトに関するドメイン知識を持った人
  2. 統計や機械学習に明るい人
  3. データ分析基盤を作れるエンジニアリング能力のある人
  4. 失敗しても構わないとリスクを取ってくれる責任者

この中で一番大事な人は(私は)4番だと思いました。

これは、機械学習がリスクの大きい投資だということを認識した上で、それでも機械学習を使わないとできない価値を生み出すことに背中を押してくれる存在です。

書籍を読み進めていけばわかりますが、機械学習を実務で開発・運用していくには、多くのことを検討して詰めていく必要があります。失敗する可能性も大いにあるでしょう。そういったリスクを承知した上でGOサインを出す責任者はとても重要ではないでしょうか。

…何ひとつ 《危険性(リスク)》等 背負わないままで 何かが叶う等…

私の個人的なメモ

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

目次

  1. どのアルゴリズムを選ぶべきか?
  2. 分類
  3. 回帰
  4. クラスタリング・次元削減
  5. その他
  6. この章のまとめ

まだ読んでないアナタに紹介したいところ

この章は機械学習でできることについて、いくつかアルゴリズムを紹介しながら説明しています。

ここも、ちゃんと読めば読むほど、機械学習が「なんかいい感じにしてくれる夢技術」ではないことがわかります。正解データと入力データの組み合わせで学習して、未知のデータを2つクラス(または多クラス)に分ける分類、もしくは未知のデータから連続値を予測する回帰など、できること自体はシンプルであることがわかります。

ただし、各アルゴリズムの仕組みの解説は、数学がショボすぎる私にはなかなか手強いです。ここはもう少し読み込みが必要だと感じました(あと、もう少し基本的な数学の知識)。

私の個人的なメモ

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

目次

  1. 分類の評価行列
  2. 回帰の評価
  3. 機械学習を組み込んだシステムのA/Bテスト
  4. この章のまとめ

まだ読んでないアナタに紹介したいところ

この章では、各アルゴリズムで学習した結果をどう見ればいいか説明しています。「このデータで学習したモデルは、どれだけ精度があるのか」を確かめるわけですね。

2クラスに分ける分類の場合、予測して正解したデータ数を、予測した全データ数で割れば正解率が出ますが、これだけで評価するのはダメです。ほとんどのデータは偏りがあるため、例えば、全部同じ値に判断しても正解率が高くなる可能性があります。

正解率ではなく、適合率と再現率という2つの値で評価すること、どちらの値を優先するかは要件によるということ、2値のバランスを表すF値という指標があるということ、などについて学ぶことができます。また、これらを検討するにあたり、混同行列という考え方についての説明もなされています。

私の個人的なメモ

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

目次

  1. システムに機械学習を含める流れ
  2. システム設計
  3. ログ設計
  4. この章のまとめ

まだ読んでないアナタに紹介したいところ

この章では、機械学習で一番多い教師あり学習をシステムに組み込む場合のシステム設計について説明しています。

私が1章の次に好きなのがこの章です。この章を読み終えた感想が「機械学習のシステム構築は大変だなあ。学習側のサーバーだけでも色々検討事項がありそうなのに、さらにAPIサーバーまで立てるとなると、いくらクラウドでも考えることが多そう」みたいな感じで、インフラ側がすごく大変になるんだろうなという感想を抱いたんですね。

次にそこで思ったのが、「こういう時に、Amazon SageMakerとかAlteryx Promoteを使うのか!」でした。ぶっちゃけ今までこれらのサービスがどう役立つのかサッパリわかってなかったのですが、この章で機械学習システムの設計まわりの概要がわかったことで「この部分はこのサービスを使って代用できるなあ」とかがわかるようになりました。これは個人的にすごく大きいことでした。

「Sagemakerにデプロイしたモデルは予測用のエンドポイントの作成まで行ってくれる」の便利さがやっとわかる…。

私の個人的なメモ

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

目次

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

まだ読んでないアナタに紹介したいところ

この章は学習用のデータをどう集めるか、ということが説明されています。

私は既存システムのログとかを使うくらいの発想しかなかったのですが、公開されているデータを利用→自分で作成→同僚に入力してもらう→クラウドソーシングで頼む→システムのユーザーを頼る、と、データ生成のために頼るものの規模が大きくなっていくのが面白かったです。

これらの作業を楽にしてくれるAWSサービスとしてはAmazon SageMaker Ground Truthがあるかと思います。

余談ですが、他人にデータ入力を頼むために、データ入力に関する仕様等をちゃんと整理しておく必要がある(データの粒度等を揃えるため。ひいてはデータの質のため)という部分は、前職でやってたニューロマーケティングの実査を思い出しました(質の高い脳波を取得するため、実査のルールをちゃんと整理して被験者に説明する必要があったため)。

私の個人的なメモ

6章 効果検証

目次

  1. 効果検証の概要
  2. 仮説検定の枠組み
  3. 仮説検定の注意点
  4. 因果効果の推定
  5. A/Bテスト
  6. この章のまとめ

まだ読んでないアナタに紹介したいところ

この章では、機械学習を組み込んだ結果、実際のところ効果は出たのかどうか?ということを検証する方法について説明しています。3章はモデルの性能の評価に関する章でしたが、6章は実際に解決したい課題(収益は上がったのか?など)に効果が出ているかどうか、という点が違います。

手法として、仮説検定、因果推定(ルービンの因果モデル)の2つの説明があります。中身の説明でだけでなく、それぞれの注意点やデメリットなども合わせて説明してあり、万能な効果検証の手法は無く、あくまで要件に合ったものを選択する必要があることも学べます。また、システム上で実際に検証する方法としてA/Bテストの段取りについても説明されています。

私の個人的なメモ

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

目次

  1. シナリオ
  2. 推薦システムをもっと知ろう
  3. MovieLensのデータの傾向を見る
  4. 推薦システムの実装
  5. この章のまとめ

まだ読んでないアナタに紹介したいところ

この章から実際に機械学習をやってみる実践的な部となります。この章はMovieLensというサービスのデータを使って、映画のレコメンデーションをやってみようという内容です。

実践部分だけでなく、推薦システムのアルゴリズムの説明もなされています。ちなみに、実際に使うのはFactorization Machinesというアルゴリズムです。

コード自体は全部提供されているので、Python自体の知識はそこまで不要なのですが、やはり推薦のアルゴリズムを理解はド素人の私では一朝一夕ではできないため、この章は何度か読み込む必要があると感じています。あと「やってみた」エントリも書いてみたいです。いつか。

私の個人的なメモ

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

目次

  1. KickstarterのAPIを調査する
  2. Kickstarterのクローラを作成する
  3. JSONデータをCSVに変換する
  4. Excelで軽く眺めてみる
  5. ピボットテーブルでいろいろと眺めてみる
  6. 達成したのにキャンセルされたプロジェクトを見てみる
  7. 国別に見てみる
  8. レポートを作る
  9. 今後行いたいこと
  10. おわりに

まだ読んでないアナタに紹介したいところ

1章、4章の次に好きな章です。

機械学習を使わないでデータ分析プロジェクトを一通りやってみた…という章です。ちゃんとスライドでレポートまで行います。また、(あえてかどうか不明ですが)明確な分析目的は無しで、とりあえずデータを取得して見てみる→そこから知見を得るという、探索的なデータ分析が行われています。ちなみに特殊な技術はほとんど使っておらず、Pythonでデータをクローリングした後は、全部Excelで分析しています。

私は前職(の後半)でこの章に近い業務を行っていたこともあり「もっとこの章はやく読んどけばよかった!!!!」ってなりました。

この章を読めば、機械学習を使わずとも、この程度は分析することができるということが理解できます。抱えている目的が明確に機械学習を必要としているものではない場合、まずはこういった泥臭い分析を行うべきである…っていう個人的な考えが、この章を読んでさらに強くなりました。

ちなみにこの章もやってみたエントリを書きたいと思います。いつか。

私の個人的なメモ

とくになし

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

目次

  1. Uplift Modelingの四象限のセグメント
  2. A/Bテストの拡張を通じたUplift Modelingの概要
  3. Uplift Modelingのためのデータセットを生成
  4. 2つの予測モデルを利用したUplift Modeling
  5. Uplift Modelingの評価方法、AUUC
  6. 実践的な問題での活用
  7. Uplift Modelingを本番投入するには
  8. この章のまとめ

まだ読んでないアナタに紹介したいところ

Uplift Modelingの紹介と実装を行う章です。Uplift Modelingとは「○○という施策を、誰に行えば成果が上がるのか?」ということを分析します。「この薬はどういった患者に効くのか」「この広告はどういったユーザーに出すべきなのか」といった問いに答えることができる分析といえるでしょう。

例えば2つのバナー広告をA/Bテストしたとして、Bの方が反応率が高かったから、今後はBを採用していく…という話がよく聞くと思います。でも、もしかしたら男女で結果が変わるかもしれません。というわけで今度は性別で分けてA/Bテストを行ったところ、男性はAが、女性はBが効果的ということがわかりました。性別によって広告を出し分けるようにすれば、より広告効果の向上が期待できそうですね。では、性別以外の要素は関係ないのでしょうか。住所、年齢、その他諸々…多くの特徴量を一つ一つ人力で確かめていくのは非現実的ですよね。こういうときにUplift Modelingを使うと、特徴量を踏まえた分析を行うことができます。

しかし、実際に実装するとなると、7章と同じく、なかなかベースの知識が不足しており、こちらも色々と勉強して読み込みが必要と感じています。

私の個人的なメモ

おわりに

十数年ぶりに超真面目に本を読みました。