”仕事で始める機械学習”の要点をまとめてみたらとても良い入門書だった

最近、販売された仕事で始める機械学習を買ったので、購入を考えられている方や機械学習を始めたいと思っている方に読んで、参考になればと思います。

この記事の目的と全体の流れ

ただ読むのと、アウトプット(ブログに書く)前提で読むのとはインプットの質が違うということがわかったので、ブログに書きながら理解していく形を取ります。

全体の流れとしては、章の要約。あぁこの内容知ってるなって人は買わずに済むし、わからないこと多いという人は購入を検討して頂ければ。(出版関係者でもなければ、アフィリエイトなどの営利目的でもなく、いち消費者としての個人的意見になります。 ご了承ください。)

結論から言うと(書評)

いままでのオライリーのデータサイエンス本だと英語から翻訳したのでわかりにくい日本語が非常にうっとうしいのですが、
この本は、日本の方が書かれており、日本語スムーズに理解できます。

また、非常に論理立てられて書かれてあるので、めちゃスムーズに頭に入ってきます。誰にでも(ML初めて見る人を除く)わかるようにかかれており機械学習初心者には最高の一冊です。

ほめるだけなのはあれなので、1つはわかりやすく説明するイコール専門性は他の参考書で学習してください形式なので中級者にはもの足りないかもしれません。あと、コードがあまりでてきません。ビジネス書としても捉れるかも。

レベルについて、本の中で書かれているのは、CourseraのMachine Learningコースを受けたり、ゼロから作るDeep Learningを読んだあとの2冊目として読んでいただければと書かれていますので、自分のレベル感とはマッチしてました。

この本で扱っている内容は、正式にはこう書かれています。

本書では、機械学習やデータ分析の道具をどのようにビジネスに生かしていけば良いのか、また不確実性が高いと言われている機械学習プロジェクトの進め方について 整理しています。 
本書はもともと、機械学習の初学者向けに書いた文章からはじまりました。入門者のために書きはじ めたのですが、実際には理論を軽めにしたソフトウェアエンジニア向けの実践的なカタログのような形 になっています。 アルゴリズムの話などは他の書籍でも数多く取り上げられているので、本書ではプロジェクトのはじ め方や、システム構成、学習のためのリソースの収集方法など、読者が「実際どうするの?」と気にな るであろう点を中心にしています。

機械学習を現場でどう使っていくかの道筋がわかる1冊となっています(個人的に)

目次

では、この流れで見ていきます
()内にはその章のひとことでまとめた表現を入れています。

  1. 機械学習プロジェクトのはじめ方(実際のプロジェクトの進め方)
  2. 機械学習で何ができるか(アルゴリズム紹介)
  3. 学習結果を評価しよう(アルゴリズムごとの評価の仕方)
  4. システムに機械学習を組み込む(実装前のシステム設計の仕方)
  5. 学習のためのリソースを収集しよう(データセットの使い方)
  6. 効果検証(検証・検定・ABテスト より実務的(ビジネス的))

ここまでの理論ベースが第1章となっています。第2章(7.映画の推薦システムを作る、8.Kickstarterの分析、機械学習を使わないという選択肢、9.Uplift Modelingによるマーケティング資源の効率化)は実際に機械学習システムを作りながら解説する内容となっており、実践も基礎も学べる非常に優れた技術書だと思います。

以下、ほとんど丸写しのように見えますが、わかりやすさ重視のため、引用させていただきました。(営利目的ではありません)

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

機械学習は普通のソフトウェア開発より手戻りが発生する場合が多いです。ですので、ポイントを抑えることが大事です。

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

実際の機械学習は以下のように進めていきます。

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

もっと大まかにすると、
①解きたい課題を機械学習で解ける問題設定に落とし込む(1,2)

②解くための道具選びと前処理(3,4,5,6)

③モデルの作成(7)

④サービスへの組み込み(8)

特に最初の2つの課題設定と前処理が重要です。

機械学習のシステム開発は、実際には試行錯誤を繰り返す作業になりま す。特に、上記の4から7は試してみては変更して、という作業を何度も繰り返すことにな

まずは、「機械学習でこういう課題を解決した」という事例を見た時に、「どういったアルゴリズムで 解決したか」「どのようなデータを特徴量として使っているか」「機械学習部分をどのように組み込んで いるか」ということを意識して調べると良いでしょう。

実システムにおける機械学習の問題点への対処法

予測性能のみを追い求めてモデルの苦心が難しくなりやすく、システムの複雑性が上がってメンテナンス性が低下しがちであり、変化に追従しづらいといえます。

この問題には、以下のポイントが重要です。

・ 人手でゴールドスタンダードを用意して、予測性能モニタリングをする(1,2,4)

・ 予測モデルをモジュール化してアルゴリズムのABテストが出来るようになる(2)

・ モデルのバージョン管理をして、いつでも切り戻し可能にする(4,5)

・ データ処理のパイプリアンごとに保存する(3,5)

・ 開発/本番環境の言語/フレームワークは揃える(6)

機械学習を含めたシステムを成功させるには

機械学習のプロダクトをビジネスとして成功させるには以下の4者が重要になります。

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

わかりやすいスライドがありました。

機械学習プロジェクトの進め方と流れのまとめ

・解くべき問題の仮説を立て、MVPを作りコンセプトの検証を最優先する

・機械学習しないことを恐れない

・機械学習に適している問題設定かを見極める

・予測性能とKPIの両方のモニタリングし、継続してカイゼンを続ける

どのアルゴリズムを選ぶべきか

大まかに特徴を抑えたいと思います。

分類

正解となる離散的なカテゴリ(クラス)と入力データの組み合わせで学習し、未知のデータからクラスを予測する

回帰

正解となる数値の入力データの組み合わせで学習し、未知のデータから連続値を予測する

クラスタリング

データを何かしたの基準でグルーピングする

次元削減

高次元のデータを可視化や計算量削減などのために低次元にマッピングする

その他

推薦

ユーザが好みそうなアイテムや、閲覧しているアイテムに類似しているアイテムを提示する

異常検知

不審なアクセスなど普段とは違う挙動を検知する

頻出パターンマイニング

データ中に高頻度に出現するパターンを抽出する

強化学習

囲碁や将棋のような局所的いは正解が不明瞭な環境で、とるべき行動の方針を学習する

どれを使うか迷ったときはScikit-learnのサイトのフローチャートを使います

分類

分類は教師あり学習の1つで、予測対象はカテゴリなどです。例えば、メールがスパムかどうかや画像にどんな物体が写っているかなどのりサン地で狂言できるものを予測する場合に分類のモデルを作ります。有名なアルゴリズムは以下があります。

  • パーセプトロン
  • ロジステック回帰(Logistic Regression)
  • SVM(Support Vector Machine)
  • ニューラルネットワーク
  • k-NN(k-Nearest Neighbor Method)
  • 決定木(Decision Tree)
  • GBDT(Gradient Boost Decision Tree)

回帰

回帰は、教師あり学習の1つで、ある入力データから連続地を予測します。例えば、電力消費量やWebサイトのアクセス数など、連続地で表現できる値を予測したい場合にモデルを学習します。回帰の各アルゴリズムについて見ていきます。

  • 線形回帰、多項式回帰
  • Lasso回帰、Ridge回帰、Elastic Net
  • 回帰木
  • SVR(Support Vector Regression)

クラスタリング

クラスタリングとは教師なし学習の1つで、主にデータの傾向をつかむために使われます。

  • k-meansはシンプルにデータの傾向を見ることんよく使われます
  • 階層的クラスタリング
  • 次元削減(手法として、主成分分析(PCA)・最近ではt-SNEも人気)

その他

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

学習結果を評価する

システムに機械学習を組み込んだときに、最初から満足できる結果が出ることはまれです。満足できる結果かどうかをどうやって図るかの評価方法について説明します。

分類の評価

例として、スパム分類をとり、4つの指標を見ていきます。

  • 正解率(Accuracy)
  • 適合率(Precision)
  • 再現率(Recall)
  • F値(F-measure)

また、これらを考える上で重要な3つの概念を見ます。

  • 混同行列(Confusion Matrix)
  • マイクロ平均、マクロ平均

回帰の評価

  • 平均二乗和誤差
  • 決定係数

機械学習を組み込んだシステムのA/Bテスト

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

システムを機械学習に含める流れ

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

この中でも「システム設計」「ログ設計」について述べます

システム設計

今回は最も使われる教師あり学習について述べます。分類や回帰の場合、学習と予測の2つのフェーズがあります。さらに学習のタイミングに酔って、バッチ処理での学習とリアルタイム処理での学習という二種類タイミングがあります。

バッチ処理で学習を行う3つの予測パターンとリアルタイム処理のパターンについて構成を見ていきましょう。

  1. バッチ処理で学習 + 予測結果をWebアプリケーションで直接参シュルする(リアルタイム処理で予測)
  2. バッチ処理で学習 + 予測結果をAPI経由で利用する(リアルタイム処理で予測)
  3. バッチ処理で学習 + 予測結果をDB経由で利用する(バッチ処理で予測)
  4. リアルタイム処理で学習する
出典:仕事で始める機械学習

ログ設計

ログ設定は特徴量を決めるための重要なポイントです。例えば、複数の自社で展開するWebサービスごとにユーザIDが異なる場合、CookieなどにUUIDを仕込んでIDの名寄せを試みるなどする必要があります。
ここでは、どこにあるどういった情報を利用し、教師データに活用するかについての概要を説明します。

特徴量や教師データに使いうる情報

特徴量や教師データに使えそうな情報としては3つ大きくあります。

  1. ユーザー情報(登録したときの情報)
  2. コンテンツ情報(ブログに於ける記事や商品自身の情報)
  3. ユーザ行動ログ(アクセスログ)

ログを保持する場所

  • 分散RDBMSに格納する
  • 分散処理基盤HadoopクラスターのHDFSに格納する
  • オブジェクトストレージに格納する

最近はAmazon RedshiftやGoogle BigQueryなどのフルマネージドなクラウド分散DBがあります。

・クラウドストレージ 
— Amazon S3
 — Google Cloud Storage
 — Microsoft Azure BLOB Storage

・マネージド分散DB 
— Amazon Redshift
 — Google BigQuery
 — Treasure Data

ログを設計する上で注意点

・必要そうなユーザー情報、コンテンツ情報については設計時に設定すべき

・データの変更履歴を保存する/データ量が多いので放棄したため教師データがない

・システム開発・運用・分析する人が別れているとデータ設計できないことがある

・ログ形式の変化 サービスに追加機能をくわえた場合にログ形式が変化することがある

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

学習のためのリソースの取得方法

教師あり学習に欠かせない教師データに含まれる情報は2つあります。

  • 入力:アクセスログなどから抽出した特徴量
  • 出力:分類ラベルや予測値

特徴量については試行錯誤になるので、出力のラベルや値は以下のような方法で付与できます。

  • サービスの中にログ取得の仕組みを用意してそこから抽出する(完全に自動)
  • コンテンツなどを人が見て付与する(人力で行う)
  • 機械的に情報を付与して、人手で確認する(自動+人力)

ここでは、教師データを作るのは誰かという観点から説明を進めていきます。

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

公開されたデータセットやモデルを活用する際に、気にすべき点があります。

  • モデルやデータは商用利用可能なライセンスか?
  • 学習済みモデルやデータセットを自分のドメイン(自分たちが運用するシステムサービス)に適用できるか?

2つ目は、半教師あり学習や転移学習があります。画像の物体認識を行うタスクでは、転移学習を用い、既存の学習 モデルに自分の解きたい画像の正解データセットを追加することで、少ない追加コストで目的の画像 を認識するモデルを学習できることが知られています。

僕の一番好きなドラマにSilicon Valleyというものがあって、作中に登場したホットドッグ判定機もこれでつくれます。Jian-yang意外と優秀w

効果検証

効果検証の概要

効果検証とは、ある施策によってもたらされた降下を推定することです。例えば、広告表示1000回あたり収益が新機能によってどれだけ増えたかなどです。

効果検証までの流れ

  1. 問題定義
  2. 仮説設定
  3. アクション(開発)
  4. 効果検証

オフラインで検証しにくいポイント

  • 経済効果 Netflixのレコメンドシステムでは解約率の低下と10億ドル/年の効果が合ったといいます。
  • ログを経由した副作用 レコメンドしたログを取ることになるので、それを防ぐための実装にコストがかかるといわれています。

仮説検検定の枠組み

仮説検定は効果検証のベースとなるもので、母集団に有意な差があることを標本を使って確認する手法です。基本的な例があります。

  • コインは歪んでいるか
  • 二群の歩比率の差の検定

偽陽性と偽陰性:p値が事前に定めた有意水準を下回った場合に帰無仮説を棄却するのが仮説検定の枠組みです。しかし、まれにしかおこらないことがおこったから帰無仮説を棄却する以上、帰無仮説が真であったとしても有意水準の確率で誤って帰無仮説を棄却してしまいます。誤った発見を偽陽性、逆に本当は有意差があるのに帰無仮説を棄却しないケースを偽陰性と呼びます。仮説検定では検定力を検定結果の評価に利用します。

検定力は 1ー有意差があるのに有意差がないと判断する確率 で表します。

仮説検定の注意点

  • 繰り返し検定をしてしまう
  • 有意差とビジネスインパクト:推定量のばらつきを表す標準誤差が標本サイズの増大に従って小さくなる。標本のサイズを増やしていけばわずかなさでも有意差となります。Webサービスだとデータはすぐ貯まるので、重要なのは有意差があるという事とビジネス上のインパクトは別である点です。
  • 複数の検定を同時に行う(多重検定)

因果効果の推定

  • ルービンの因果モデル(平均処置効果(ATE)=E(Y1-Y0)=E(Y1)-E(Y0))
  • セレクションバイアス(E(Y1|介入あり)-E(Y0|介入なし))
  • ランダム化比較試験(Randomized Controlled Trial (RCT))
  • 過去との比較は難しい

ABテスト

  1. 2群の抽出と標本サイズ
  2. AAテスト
  3. 片方に介入
  4. 結果の確認
  5. テスト終了

というところで第1章は終わりです。

要点だけしか書いていませんので、深く読みたいなとぜひ購入してみたください。

リンクをのせておきます。(アフィリエイトでもなんでもないです)

よもやま

発売が2017/10/20(正式には知らない)だとして、書いたのが10/28なので結構書くの早かったんだと書き終わってから知る(アーリーアダプター的なことをしようとしたわけではなかったんです)

関連記事

作者の方のMedium

他の方の書評