de:code 2019 AI54...de:code 2019 AI54 機械学習プロジェクトの進め方:...

Post on 29-Jul-2020

0 views 0 download

Transcript of de:code 2019 AI54...de:code 2019 AI54 機械学習プロジェクトの進め方:...

de:code 2019 AI54

機械学習プロジェクトの進め方:

よくある課題と現場での対処法

株式会社ブレインパッド アナリティクスサービス本部 副本部長

太田 満久

Mitsuhisa Ota

• Deputy General Manager @ BrainPad Inc.

• Google Developers Expert (ML)

• Organizer of TensorFlow User Group.

• A Steering Committee of MLSE

• A Committee of JDLA

はじめに

Agenda

1. 機械学習プロジェクトの概要

2. 各フェーズ毎の課題と現場での対応方法

3. まとめ

機械学習プロジェクトの概要

機械学習とは

(機械学習モデル)

答え

ルールはコーディングで作る

ルールはデータから作る

プロジェクトとは

プロジェクトとは、独自のプロダクト、サービス、所産を創造するために実施する有期性のある業務

機械学習プロジェクトの一般的な流れ

解くべきビジネス課題を決定し、その解決方法をデザインすること

機械学習モデルを構築し、精度などの性能を検証する

所定のビジネスKPIが達成可能かどうかを検証する

PoCで行われた結果をもとに、システムを開発する

システムの管理やバックアップ、不具合対応などを行う

企画

PoC

実地試験

開発

運用

具体例: 食品工場における不良品検知

✓ 対象とする食品や不良の種類、評価方法を決定する✓ 想定する手法やシステムの全体像を描く

✓ データの取得方法、アノテーション方法などを決定する✓ 機械学習モデルを構築し、評価する

✓ End-to-End で動作する小さなシステムを構築する✓ 現地(工場)に出向き、使ってもらってフィードバックを得る

✓ フィードバックをもとに業務フローを確認する✓ 要件を整理し、システムを開発する

✓ 日々のサポートを行う

企画

PoC

実地試験

開発

運用

具体例2: レコメンドロジックの改修

✓ 取り組みたい課題・仮説を設定する✓ 想定する手法の全体像を描く

✓ データをもとに、利用するアルゴリズムを決定する✓ 機械学習モデルを構築し、オフライン評価を実施する

✓ 構築した機械学習モデルを本番環境へデプロイする✓ A/Bテストなどに基づき、ビジネスKPI(CVRなど)を評価する

✓ 必要に応じてリファクタリングを実施

✓ 機械学習モデルの精度とビジネスKPIの監視を行う✓ 日々のサポートを行う

企画

PoC

実地試験

開発

運用

参考: 各フェーズと検証項目

開発

・運

参考: 機械学習プロジェクトに必要な人材

✓ プロジェクトの目的や目標、優先順位の決定を行う✓ 受託開発の場合は顧客側が担う

✓ プロジェクトを遂行させる

✓ 機械学習タスクへの落とし込みやモデルの構築・評価を行う

✓ システム設計や実装・運用を担う

各フェーズの詳細とよくある課題

企画フェーズ

企画フェーズの詳細

解くべきビジネス課題を決定し、その解決方法をデザインすること

1. 解くべきビジネス課題の決定

2. ビジネスKPIの設定

3. 利用可能なデータの選定と一次評価(データ件数やデータの種類の把握)

4. 機械学習タスクへの落とし込みとアルゴリズムの候補出し

5. 機械学習タスクの評価指標(精度指標)の決定

6. コストの概算見積もりと体制の確保

企画フェーズでよくある課題

1. 設定したビジネス課題(=プロジェクトの目的)が不適切

2. コスト見積もりが不適切

3. ビジネス課題の解決策として機械学習に固執してしまう

4. 機械学習タスクの評価指標が曖昧になっている

企画フェーズでよくある課題1

設定したビジネス課題(プロジェクトの目的)が不適切

1. ビジネスサイドが機械学習に関して知識不足のため、何ができるのかわからない

➢ 実現不可能な夢を語ってしまう

➢ 目的の設定も分析・システムサイドに投げようとする

2. プロジェクトオーナーと実際のユーザーの所属が異なり、正しい課題認識ができていない

企画フェーズでよくある課題1

設定したビジネス課題(プロジェクトの目的)が不適切

1. ビジネスサイドが機械学習に関して知識不足のため、何ができるのかわからない

✓ ワークショップ形式で、ビジネス課題の設定をサポートする

✓ わかりやすい機械学習に関する資料を共有する

✓ 過去事例や過去実績をもとにしたコミュニケーションを心がける

2. プロジェクトオーナーと実際のユーザーの所属が異なり、正しい課題認識ができていない

✓ 具体的な業務フローの議論をすることで、ユーザーの存在を意識してもらう

✓ ユーザーを巻き込むことができる人を探す

企画フェーズでよくある課題2

コスト見積もりが不適切

1. 企画の時点で、開発・運用のコストまで精緻に見積もろうとする

➢ PoC前の段階では不確実性が高く、バッファを見込むため見積もりが膨れ上がりがち

2. 開発エンジニアの関与が薄い

➢ 開発エンジニアでなければ気づけないポイントを見逃してしまう

企画フェーズでよくある課題2

コスト見積もりが不適切

1. 企画の時点で、開発・運用のコストまで精緻に見積もろうとする

✓ 各フェーズごとに契約を区切り、開発・運用の詳細な見積もりはPoCのあとで行うよう

にする

2. 開発エンジニアの関与が薄い

✓ 企画フェーズから開発エンジニアの関与を増やす

企画フェーズでよくある課題3

ビジネス課題の解決策として機械学習に固執してしまう

1. 企画フェーズに開発エンジニアが入っていない

➢ 分析官・機械学習エンジニアは機械学習を使うバイアスがかかりがち

2. 機械学習に過度の期待をしてしまう

➢ 実際には機械学習を含む様々な手法の組み合わせでビジネス課題を解決すればよい

が、機械学習が万能なように思っていると、なかなか他の手段が思いつかない

企画フェーズでよくある課題3

ビジネス課題の解決策として機械学習に固執してしまう

1. 企画フェーズに開発エンジニアが入っていない

✓ 企画フェーズから開発エンジニアの関与を増やす

2. 機械学習に過度の期待をしてしまう

✓ わかりやすい機械学習に関する資料を共有し、限界を知ってもらう

✓ 機械学習と技術的負債に関する話を共有する

企画フェーズでよくある課題4

不適切な精度指標を設定してしまう

1. 精度指標に関する知識不足

➢ 「精度」という言葉の表す意味合いがビジネスサイドと分析サイドで違っていて、合意が

取れていないのに合意が取れたと誤認識してしまう

2. データの概要を把握していない

➢ 全体のデータ件数、ラベル毎の数に偏りがあるか、欠損値の有無などがわからないため

に、不適切であることに気が付かない

企画フェーズでよくある課題4

不適切な精度指標を設定してしまう

1. 精度指標に関する知識不足

➢ 精度指標の計算方法と、選んだ精度指標の特性について共有する

➢ ビジネスサイドにわかりやすい精度指標をつくる

2. データの概要を把握していない

➢ 企画フェーズの段階でサンプルデータを受領して、概要を把握する

PoCフェーズ

PoCフェーズの詳細

機械学習モデルを構築し、評価すること

1. データの準備(必要に応じてカイブデータの取得やデータベースへのインポートを行う)

2. 探索的データ分析を通じてデータを理解する

3. 機械学習モデルを構築し、企画フェーズで設定した評価指標で評価する

4. 必要に応じて機械学習モデルのチューニングを実施する

PoCフェーズでよくある課題

1. PoCがいつまでも終わらない

2. データの品質が良くない・不備がある

3. 不適切なモデルの評価に気づけない

4. コードの品質が良くない・説明変数の加工コードのスパゲッティー化

PoCフェーズでよくある課題1

PoCがいつまでも終わらない

1. 必要な精度が明確になっていない

➢ 人間は必ずミスをするが、人間の代替にもかかわらず100%を求められる

2. 想定していた精度を得られなかった場合のアクションを用意していない

➢ 精度を上げる以外の選択肢がなくなってしまう

PoCフェーズでよくある課題1

PoCがいつまでも終わらない

1. 必要な精度が明確になっていない

➢ ベースラインとして機械学習を導入しなかった場合にどうなるのかを考える

2. 想定していた精度を得られなかった場合のアクションを用意していない

➢ 事前に代替案を用意しておくか、潔く企画フェーズに戻る

➢ 人間の作業の完全な置き換えを目指すのは極力避ける

PoCフェーズでよくある課題2

データの品質が良くない・不備がある

1. 企画フェーズでデータの概要を把握していない

➢ データの不備に気づくのが遅れる

2. 与えられたデータのみでPoCを進めようとする

➢ 「Garbage In Garbage Out」 なので良い結果が得られない

PoCフェーズでよくある課題2

データの品質が良くない・不備がある

1. 企画フェーズでデータの概要を把握していない

➢ 企画フェーズでサンプルデータをつかって概要を把握しておく

2. 与えられたデータのみでPoCを進めようとする

➢ 潔く企画フェーズに戻る

PoCフェーズでよくある課題3

不適切なモデルの評価に気づけない

1. データの定義を把握していない

➢ 変数の定義が曖昧で、使ってはいけない変数を使ってしまう

➢ データの分割方法を間違えてしまう(リークが発生する)

2. 分析官の知識不足

➢ アサインされた分析官の不得意な領域の場合に、問題に気づけない可能性がある

PoCフェーズでよくある課題3

不適切なモデルの評価に気づけない

1. データの定義を把握していない

➢ データ受領・データ確認の期間を取る

➢ データ確認の期間中は特に、顧客との密なコミュニケーションを心がける

2. 分析官の知識不足

➢ 該当領域に詳しい専門家による分析設計のレビューを行う

PoCフェーズでよくある課題4

不適切なモデルの評価に気づけない

1. 説明変数加工処理が複雑になりがち

➢ 精度を求めるには、色々な説明変数を試す必要があり、処理が徐々に複雑になる

➢ 試行錯誤のうちに、不要なコードも紛れ込んでしまう

2. PoCフェーズは本質的に試行錯誤の繰り返しとなる

➢ 試行錯誤を多く回すために、コードの綺麗さよりもコーディング時間の短縮が重視される

➢ テストを書く時間が惜しいという意識が働いてしまう

コードの品質が良くない・説明変数の加工コードのスパゲッティー化

PoCフェーズでよくある課題4

不適切なモデルの評価に気づけない

1. 説明変数加工処理が複雑になりがち

➢ 精度の目標値を定め、不必要な精度の追求は避けるよう心がける

2. PoCフェーズは本質的に試行錯誤の繰り返しとなる

➢ PoCの段階は開発エンジニアがコーディングのサポートをする。

➢ CI環境を事前に構築し、ルールを決めておく

コードの品質が良くない・説明変数の加工コードのスパゲッティー化

実地試験フェーズ

実地試験フェーズの詳細

所定のビジネスKPIが達成可能かどうかを検証すること

1. プロトタイプの開発

2. 業務の一部への機械学習の組み込み

3. ビジネスKPIの検証

実地試験フェーズでよくある課題

1. 使ってもらえない

2. 担当者が変わってコミュニケーションコストがかかる

3. 必要以上に作り込み、コストと時間がかかる

4. 効果がよくわからない

実地試験フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. ユーザーにメリットを提供していない

➢ 少なからず業務フローを変える必要があるため、積極的なメリットが必要

➢ 「あなたの人件費を削減します」に積極的に協力する人はいない

2. 現状の業務フローが十分に考慮されず、学習コストが高い

➢ ユーザーにとって実地試験は、通常業務に加えての追加の業務であり、時間をさけない

3. 信頼されていない

➢ 信頼されていないと、ユーザーにとっては「よくわからないものが天から降ってきた」と映る

使ってもらえない

実地試験フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. ユーザーにメリットを提供していない

✓ 企画フェーズから、ユーザー側の人を巻き込む

✓ 社内調整の得意な人を巻き込む(巻き込める人を巻き込む)

2. 現状の業務フローが十分に考慮されず、学習コストが高い

✓ 確認したい項目を整理して、大掛かりな取り組みにしないよう心がける

3. 信頼されていない

✓ 現場に出向いて仲良くする

使ってもらえない

実地試験フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. 機械学習の検証は先行開発やシステム部門が担うことが多いが、実地検証以降は現場

の協力が不可欠

➢ 担当者が変わると今までの取り組み内容をすべて説明し直さなければいけない

➢ 温度感や方向性も変わってしまうことがある

担当者が変わってコミュニケーションコストがかかる

実地試験フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. 機械学習の検証は先行開発やシステム部門が担うことが多いが、実地検証以降は現場

の協力が不可欠

✓ 企画フェーズから、ユーザー側の人を巻き込む

✓ 社内調整の得意な人を巻き込む(巻き込める人を巻き込む)

担当者が変わってコミュニケーションコストがかかる

実地試験フェーズでよくある課題3

不適切なモデルの評価に気づけない

1. 実地試験の目的が明確になっていない

➢ すべてを検証するには、全てを実装する必要がある

2. 実地検証と(本番)実装のフェーズをわけずに提案している

➢ 精度指標とビジネスKPIは別物にもかかわらず、ビジネスKPIの検証ができない

※ PoCの中でビジネスKPIまで検証できる場合は、本フェーズが不要に見えることもある

必要以上に作り込み、コストと時間がかかる

実地試験フェーズでよくある課題3

不適切なモデルの評価に気づけない

1. 実地試験の目的が明確になっていない

✓ PoCの後半に実地試験の目的や取り組み内容を絞り込む期間を設ける

✓ 目的の達成に必要な部分だけを実装する(ほぼなにも作らないこともある)

2. 実地検証と(本番)実装のフェーズをわけずに提案している

✓ フェーズをわけて提案する

必要以上に作り込み、コストと時間がかかる

実地試験フェーズでよくある課題4

不適切なモデルの評価に気づけない

1. 機械学習以外の外的な要因を考慮に入れていない

➢ PoCよりも本番環境に近いので、様々なノイズの影響を受ける可能性がある

2. 企画フェーズで精度指標とビジネスKPIが混同されている

➢ 機械学習モデルの精度指標とビジネスKPIは本来別物であるにもかかわらず、精度指

標をビジネスKPIのようにとりあつかってしまうと、実地試験で何を検証したら良いのかわ

からなくなってしまうことがある

効果がよくわからない

実地試験フェーズでよくある課題4

不適切なモデルの評価に気づけない

1. 機械学習以外の外的な要因を考慮に入れていない

✓ A/Bテストの設計などで、可能な限り外的な要因を取り除くよう心がける

2. 企画フェーズで精度指標とビジネスKPIが混同されている

✓ 企画フェーズにおいてKPI策定のためのワークショップを実施

効果がよくわからない

開発フェーズ

開発フェーズの詳細

PoCで行われた結果をもとに、システムを開発すること

1. データの種類・取得・管理方法の決定

2. 機械学習モデルの再構築(リファクタリング)

3. 機械学習モデルの更新頻度・更新方法の決定

4. その他システム開発

開発フェーズでよくある課題

1. 想定以上の開発コストと時間がかかる

2. 機械学習モデルの訓練時間が想定以上にかかる

3. PoC時点と比較して機械学習モデルの精度が下がる

4. 機械学習モデルのテスト・品質保証ができない

開発フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. 機械学習エンジニアに見積もりを依頼してしまう

➢ 機械学習以外の箇所の見積もりが甘くなりがち

2. PoCや実地試験がとてもうまく進んだ

➢ ほとんどできているという誤った印象を与えてしまう

➢ 「作り込まなくていいから早く使いたい」という圧力に屈してしまいがち

想定以上の開発コストと時間がかかる

機械学習はシステムのほんの一部

開発フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. 機械学習エンジニアに見積もりを依頼してしまう

✓ 企画フェーズで、各役割を明確化し、可視化しておく

✓ システム部分の見積もりは開発エンジニアが行う

2. PoCや実地試験がとてもうまく進んだ

✓ 機械学習はシステムのほんの一部、ということをずっと言い続ける

想定以上の開発コストと時間がかかる

開発フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. PoCや実地検証時と本番で環境が大きく違う

➢ データのおいてある場所が違うケースが多く、データロードの時間が

➢ PoCの段階ではデータをある程度整形して持つことが多いため、機械学習以外の部分

のパフォーマンスを見落としがち

2. コスト制約でリッチな環境を利用できない

機械学習モデルの訓練時間が想定以上にかかる

開発フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. PoCや実地検証時と本番で環境が大きく違う

➢ PoCもしくは実地検証の段階で、可能な限り本番環境と似た環境をつくり、パフォーマ

ンスの確認をする

2. コスト制約でリッチな環境を利用できない

➢ PoCフェーズに戻り、より簡易的な手法を検討する

機械学習モデルの訓練時間が想定以上にかかる

開発フェーズでよくある課題3

PoC時点と比較して機械学習モデルの精度が下がる

1. PoCとデータが違う

➢ よかれとおもってデータのとり方を「改善」されることがあるが、必ずしも精度向上に寄与

するとは限らない

➢ 利用できるデータの期間がちがう、など細かい点がいろいろある

2. PoCとライブラリなどの環境が違う

➢ PoCで利用できたライブラリが利用可能とは限らない

➢ エッジに組み込む場合は機械学習モデルの圧縮が必要となる場合がある

開発フェーズでよくある課題3

PoC時点と比較して機械学習モデルの精度が下がる

1. PoCとデータが違う

✓ データ取得方法の変更の際には、必ずリスクを伝えるようにする

✓ データの管理方法、取得方法を明確にしておく

✓ (余力があれば)本番データで性能の高いモデルを探し出す

2. PoCとライブラリなどの環境が違う

✓ Dockerなどのコンテナ技術を活用する

✓ 機械学習モデルの圧縮などについては、PoCの段階で評価しておく

開発フェーズでよくある課題4

機械学習モデルのテスト・品質保証ができない

1. 機械学習モデルやデータの前処理のコード品質が低く、テストしづらい

2. 機械学習モデルの品質保証は未だ研究段階のテーマ

開発フェーズでよくある課題4

機械学習モデルのテスト・品質保証ができない

1. 機械学習モデルやデータの前処理のコード品質が低く、テストしづらい

✓ PoCの段階から開発エンジニアをかかわらせ、コードの品質を向上させる

✓ CI環境を布教する

2. 機械学習モデルの品質保証は未だ研究段階のテーマ

✓ 簡単なデータで機械学習モデルの挙動を確認する

✓ 機械学習の出力結果に人が介在できるような設計にする

運用フェーズ

運用フェーズの詳細

システムを安定的に稼働させること

1. ビジネスKPIの監視

2. 精度指標の監視

3. 機械学習モデルの管理・更新

4. その他システムの管理、バックアップ、不具合対応など

運用フェーズでよくある課題

1. データの管理が行き届かない

2. 機械学習モデルが想定外の挙動を示して対処できない

運用フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. 訓練に利用しているデータが管理外である

➢ 例1: 閲覧したURLをもとに商品のレコメンドを行っていたが、サイトのURL構造がいつの

間にかかわっていた

2. データ量の問題で、全てのデータを保存しておくことができない

➢ 顧客マスタなど、分析観点では履歴で残しておくことが望ましいが、必ずしもそうはなって

いない

データの管理が行き届かない

運用フェーズでよくある課題1

不適切なモデルの評価に気づけない

1. 訓練に利用しているデータが管理外である

✓ (顧客など)状況を把握している人との連携を密にとる

✓ 以上が起こった際の対応方法を明示しておく

2. データ量の問題で、全てのデータを保存しておくことができない

✓ できる範囲でがんばる

データの管理が行き届かない

運用フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. 訓練データに含まれないようなデータが入ってきている

➢ 機械学習はあくまで「例示による帰納的なプログラミング」なので、例示されていないもの

についてはめっぽう弱い

2. 想定外の挙動に対応する仕組みがない

機械学習モデルが想定外の挙動を示して対処できない

運用フェーズでよくある課題2

不適切なモデルの評価に気づけない

1. 訓練データに含まれないようなデータが入ってきている

✓ 入力データの監視をする(最近は専用のライブラリがで始めている)

2. 想定外の挙動に対応する仕組みがない

✓ 機械学習の出力を監視する

✓ 機械学習の出力をルールベースもしくは人が調整できるような設計を心がける

(機械学習モデルの出力をそのまま使わない)

機械学習モデルが想定外の挙動を示して対処できない

まとめ

© 2018 Microsoft Corporation. All rights reserved.

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

© 2019 BrainPad Inc. All rights reserved.

本情報の内容 (添付文書、リンク先などを含む) は、de:code 2019 開催日 (2019年5月29~30日) 時点のものであり、予告なく変更される場合があります。

本コンテンツの著作権、および本コンテンツ中に出てくる商標権、団体名、ロゴ、製品、サービスなどはそれぞれ、各権利保有者に帰属します。