「Machine Learning Project Anti-Patterns」を読んだ感想

# 「Machine Learning Project Anti-Patterns」を読んだ感想
Pre-printである「Machine Learning Project Anti-Patterns」を献本頂いたので、レビューしたいと思います。あまり内容に深く触れると著作権的に怒られてしまうので、掻い摘んで個人的に面白かったりためになった所を紹介したいと思います（著作権確認済み）

＊いかがでしたか？は最後にかならず読んでね！

下記目次です

 0. はじめに
 1. プロジェクトの企画・提案
 2. 契約
 3. プロジェクトマネジメント
 4. 採用
 5. データ
 6. アルゴリズム
 7. モデル開発
 8.  評価・テスト
 9.  運用
 10.  おわりに

## 0. はじめに

> ガートナーの公表している「2020年のデータ／アナリティクス・テクノロジ・トレンド」[1] に記載されているように、**より賢く、速く、信頼の置けるAI** は今後キーとなるテクノロジーであろう。
> しばし一般的に誤解されがちなのはAIそれ自体がビジネス的に成功を収めている、ということである。Google, Facebook, Amazonのような成功を収めている企業はビジネスを行う上でのメトリックがすべてデジタル化されており、ビジネス上のKPIをすべて数値として管理、分析、改善しているからこそ成功を収めているわけである。またビジネスの基盤としては、広告・EC・物流等々の主たる莫大な収益源があり、その1%でも改善すれば数十数百億単位での流量が変わるからこそ多額の投資を行っているわけであり、闇雲にAIに投資したからと言って何倍ものリターンが返ってくる、というわけではない。いまこそ自分たちのビジネスに向き合い、データのデジタル化・計測・改善を行っていけるか、が鍵である。その際にはきっとAIはあなたの味方をしてくれるだろう。

良いこといいますね。ほんそれ。

> 本書では主に 1) 自社サービスへの機械学習活用、2) 機械学習を活用したプロダクトの提供、3) 機械学習受託開発 のそれぞれのビジネスやプロジェクトで起こりうるよくある課題とそれに対する学びや解決策を述べていきたいと思う。

ワクワクしますね

> なおAIと機械学習の区分や説明に関しては本書では扱わないし、読者がそういったものを知りたい層の人間でないことを祈っている。ターゲット層でない読者のレビューはサービス提供側の機械学習活用を阻害することは読者はご存知であろう。

責めてますねｗｗｗ



## 1. プロジェクトの企画・提案

> 私は現在、様々な会社の機械学習プロダクトやプロジェクトのアドバイザーをおこなっているが、経験上、プロジェクトは企画から間違っていることが多い。特に大筋は間違っていないが、実現する計画や手段がベストではないし悪手だ。もしかすると上司から「最先端のAIを使え」や「AIという項目で予算をとってある」とでも言われていのかもしれない。「賢者は歴史に学び、愚者は経験から学ぶ」という言葉もあるが、まだ機械学習のプロジェクトに関する歴史は浅いので、学習コストだと思って失敗を体験するのも今後の成長につながると思っているし、本書がそういった人々へ少しでも助けになれば良いと考えている。

著者、、、（涙

> 1.1. 機械学習の性質の理解
> 「精度担保、弊社ならできますよ」なんて言って案件を受注する営業は2016年までの旧世代の人類だ　〜ジョナサン・ホフリン〜

この本刺々しくて受けますね笑
アンチパターンの紹介では、最初にいくつか機械学習の失敗事例を取り上げて、その後に機械学習企画書アンチパターン（自社データ利活用、サービス企画）の紹介と解説って感じでした

> 1.4.3 差別・プライバシー

この章は色々考えさせられますね、MSの開発したチャットボットTay[2]の事例や、Snapchatのフィルターに対する批判[3]やAmazonのAI採用ツールにおける問題[4]などの事例とともに、データバイアス・公平性等に関することが乗ってました。日本でも結構事例として出てきてましたよね、、、
サービス提供前の事前のチェックリストなどが記載されてました。
（全部網羅するのは流石に難しいですが、、、）
機械学習を扱うお仕事では、知識ももちろんそうですが、想像力や倫理観ってかなり

> 1.6 通っても失敗する企画書

クソワロタｗ、100日後に死ぬプロジェクトですね。ゴール設計や探索の計画みたいなもの、自社のアセットなどなどの背景と企画の内容とオチが秀逸でした。

##  2. 契約

> 「悪魔は細部に宿る 」〜アメリカのことわざ〜

よくあるシステム開発の契約書で機械学習の案件を受注してしまった事例や、自社サービスを展開していて機械学習を活用したが実は規約違反だった問題、などの事例が挙げられていました。たしかにこういう項目見落とすよねとか、事例ベースでわかりやすかったです。すべての項目を網羅しているわけではなかったので、ちゃんと気をつけるポイント気をつけましょうね、って感じでした。日本においても経産省がガイドライン[5]を出しているから、最低限読んでおいたほうがいいよ、とか、利用規約作るときは先々のことも考えつつ、顧客のプライバシーを侵害したりリスクをメリット以上に追いすぎないようにね、っていうアドバイスが書いてありました。


## 3. プロジェクトマネジメント

> 「君、アジャイルの意味分かって使ってる？」〜某有名機械学習プロダクトオーナー〜

この章分厚い、、、分厚すぎる、、、（PDFでよかった）
著者は言いたいことがいっぱいあるみたいですね、、、ｗ

> 3.1 一般的なシステム開発と機械学習システムとのプロジェクトの違い

ここはよく整理されていましたね、いくつか書籍も紹介されていました。

> 俗にPoCと呼ばれるフェーズでは、モデル開発にフォーカスをしがちであるが、仮説・検証項目・データの収集・不確定要素の列挙と対策などもう少し上段の設計ガキもであり、進行中に変わることが多い。プロジェクトを成功させるためには、きちんとチームで最終目標の認識を合わせ、万全の準備と柔軟な対応が求められる。大雨の中濁流を突き進むカヌーのように舵を取るようなものである。

ウンウンとうなずきながら読みました笑
プロジェクトの特徴がすごく整理されていて、他社との共同開発や事業提携とかの具体的なフェーズでこのフレーム使えそうだなと感じました。

> 3.4 不確実性を予測する

> 機械学習プロジェクトはいつも不確実である。「神はサイコロを振らない」というが、君たちが機械学習を活用するときにはすでに乱数という名のサイコロを振っているだろう。データの特性や、環境の変化は必ず起きるので、不確実性をなくすのではなく、不確実性にいつでも対応できる準備をすることが重要である。

ECの需要予測の失敗事例や、運用時におけるデータ欠如の事例など、機械学習はあらゆる例外に弱いので、例外が起きたときどうするか？ということが書いてありました。事例としてはアンチパターンというより、こういうこともあるよね、何が起きるかわからないし機械学習を信じきるのではなくオペレーションを回しながら改善していくのを前提に考えましょう、運用しているMLロジックも書き換えることもあるから、プロジェクトのバジェット内で想定できることの優先順位は決めておこう、って書いてありました（まぁこれは現実的に予測するのは難しい）

> 3.5 上司に舵を取られるな

ここも印象的ですね、途中からお上の声が入ったりとか、そういうときにどうするかとか。ちゃんとKPIや検証項目、金銭的RoIを設計できているかどうかみたいなのほんとむずい。

> ロジカルに説明しても理解されないのであれば、最良の選択は君が転職することだ。

まぁ機械学習に限らずですねｗ


## 4. 採用
ここまで書いてくれるんだーって感じですね（本書はビジネス書ではないので、採用の詳細は割愛するが、最低限プロジェクトチームの役割を考えようとのこと）。
データサイエンティスト・MLエンジニア・データエンジニア・リサーチャー等々きちんと役割や期待、いま自社のプロジェクト・プロダクトにどんなスキルが必要なのか、いない場合はどう補完して行くのか、みたいなことの概要が書いてある感じです。プロジェクトのメンバー構成による失敗事例も2こほど書いてあった。

## 5. データ整備
> “Garbage in, garbage out“ 〜コンピューターサイエンスの分野における概念〜

ここは必読ですね。データの偏りの発生、収集トレンドの発生、データ欠損の話や環境の変化（物理・デジタル）などの事例が書いてありました。

> 実際のビジネスの環境で機械学習のプロジェクトを行ったことがある人ならわかると思うが、実際の環境は実にノイジーで偏りがある。当初の企画で立てた仮説はここで覆されることもあるだろう。

わかりみx10000

データ整備の重要性やデータ整備の期間の考え方とかも整理されてていいですね。

> 誤解されがちな点ではあるが、”機械学習のためにデータを取得する”のではなく、自社ビジネスのメトリックをデジタル化するための手段としてデータ整備を行う、と考えたほうがいいだろう。

まじそれ。今流行りのDXの観点で言ってもこれが当てはまりますね。

## 6. アルゴリズム
割愛

## 7. モデル開発

> 7.1. 前処理の重要性

> 読者は「たかが前処理」と思うかもしれないが、前処理によってプロジェクトの失敗を引き起こすものもある。もしこのミスに気づかずに実証実験を行った場合、あなたのプロジェクトは前処理のおかけで失敗し、原因を突き止めることも困難となるだろう。前処理は広義にも捉えられるし、狭義にも捉えられる。本章では著者の体験も交えて前処理のアンチパターンと解決策を述べる。

重量級の重み

> 例えば著者の狭義での体験を述べよう（その方が体感しやすいだろう）。学習時と推論時で同じデータでも出力が違うのだ。画像データを読み込み際に学習にはOpenCV、推論にPILを使ったとき、出力結果が異なる、という体験をしたことがある。これは圧縮形式や読み込み形式の違い、RGB/BGRの違いや、デフォルトオプションなどそういったことに起因する。また、学習時と推論時でプログラミング言語やプラットフォームを帰る場合もあるだろう。学習モデルを圧縮してC++やGOなどの言語に移植したいケースを考えたときにも同等の問題が発生する場合がある。機械学習のプロジェクトは担当を分けて複数人で開発することも多いため、こういった事象に対する対策も行っておくべきであろう。

あるある、あるある、涙なしには読めない。自分自身も何時間このデバッグに費やしたことかって体験あります。

## 8. 評価・テスト
> 「ぜんぜんわからない 俺たちは雰囲気で機械学習をやっている」〜日本のインターネット・ミーム〜

これも結構勉強になりました、事例が本当なのかどうかはわかりませんが、シナリオとしてはあり得る、、、
あと機械学習エンジニアがテストを書かない問題ね、ML vs Opsね、あるよね

> 8.1. 適切な評価

> ROC曲線や、Confusion Matrixを眺めるだけで安心してはいけない。きちんとビジネス上のKPIをどう評価するまでの道のりを考えることもまたあなたの仕事である。盲目的に数値を上げたとしても、それが役に立つと言い切るにはまだ時間がかかるだろう。

重い、重すぎるお言葉、、、

> 8.3. アルゴリズムはOSSでなんとかなる

> 近年の技術のオープンかの流れは素晴らしいものだ。最新の論文はArxivに投稿され、slidesliveやYoutubeなどのストリーミングサービスで国際会議の発表も聴講・閲覧できる時代である。最先端の技術はOSSのフレームワークとして日々進化し続けており、GoogleやFacebook、Microsoft、Airbnb、Uberなどの名だたる企業がOSSコミュニティーのオーガナイズ・コミット・スポンサーなどを行っている。また最先端の研究もgithubにアップロードされており、誰でも手軽にアクセスできる。しかしそれがあなたのビジネスで活用できるかどうかは別問題だ。活用するためにはそれ相応の知識・能力・理解が必要である。もしあなたがgithubにアップロードされているコードを解読・活用したことないのであればいち早くトライするべきだ。サンプルコードから脱却し、手元にあるデータを活用用と思ったその瞬間、私がこれから述べる苦悩はすぐに理解できるだろう。

実に短絡的な例だけど、自分のデータを1から学習させたことない人からしたらそうなのかもしれない笑
公開されていてもそのままでは動かない、ある程度の知識が必要、細部の調整が大変、そもそもバックグラウンドの知識がないと扱えないこと、なども書いてありました。例だとプロジェクトやOSS活用の見積もりの甘さなんかも取り上げられていますね、事前調査期間を設けましょうとか、実際に用途に活用可能か、とか。

ライセンスの種類や確認と界隈では有名なYOLOのライセンス[6]も（ネタで）取り上げられていましたｗ


> 8.7.  機械学習はテストが難しいのでできません

要約: 甘えるな、あとから痛い目にあうのは君だよ

> 8.8. 機械学習エンジニアのコードは汚い？

Jupyter書いて「はい、完成」の事例が書いてありましたｗ（Jupyterの実行順序で結果変わる人あるあるｗｗ
 機械学習エンジニアのバックグラウンのにもよるし、コード管理や実験管理、再現性の担保もチームのお仕事、ほんとそれ。 機械学習エンジニアを攻め立てるのでなく、チームとしてどう仕事するかの心構えが書いてあってハートフルでした。


## 9.  運用
> 「全部ぼくのターン！」〜とあるデータサイエンティストの嘆き〜

ネタ好きだなぁ笑

> ガートナーの予測[]によると、2022年までにAIプロジェクトの85%が、データ、アルゴリズム、またはそれらを管理するチームの偏りが原因で誤った結果をもたらすと予測している。私の経験上においても、機械学習のプロジェクトの70-80%は実証実験まで行かず、実証実験をクリアできるプロジェクトも半数以下である。

おおお、実に香ばしい
 
> 実証実験が成功し、運用に入ったところからが本番である。近年MLOpsという言葉が流行している通り、機械学習はビジネスオペレーションの再設計と組み込みが重要である。実際に運用するためには今まで論じてきたスキルに加えて、さらなるビジネスの知識やエンジニアリングの知識が必要だろう。

Uber[7]やAirbnb[8][9]の事例や、GoogleやAWSのインフラ周りの事例、既存システムとの共存や発展など盛り沢山でした。ビジネスインテリジェンスとして分析をきちんとしてアクションしていくことの重要性も記載されてました。

> もしあなたのプロジェクトが運用段階に入ったのならば称賛すべきことだ。おそらく、スタートアップが3年生き残れる確率に近い難易度であろう。ただまだ安心はできない、ここからが機械学習活用のスタートラインであり、会社へリターンをもたらす第一歩なのだから。まだまだ機械学習活用の具体的な成功事例は少ないが（企業のPRなどは無視して良い）君の機械学習プロジェクトが歴史に新たな1ページを刻むことを切に願っている。

いい締めくくりでした

## 10. おわりに

> 本書をレビューしてくれた、Abhi, Yaping, Fujimoto, Shirakawaや、アンチパターンである難関プロジェクトを一緒に完走してくれたTJ、古くから私のDeep Learningの経験を支えてくれたCaffe・Theanoや再現実験を可能にしてくれたDocker、事例として判定させられ続ける多くの犬や猫の画像に感謝を述べたい。


![ml-project-anti-patterns.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9294/66d24c4a-53c9-8f83-f8fd-69934f9c822d.png)

# いかがでしたか？

この書籍及び感想はフィクションであり、すべて私の妄想です。書籍が実際に出版されることはありません笑
こんな書籍があったらいいだろうなぁ、こんなことかいてありそうだなぁ、僕ならこう書くかなぁ、という妄想をお風呂でした上で、脳内で本を読み、感想を書きましたｗ（むしろ誰か書いてください）

みなさんの機械学習プロジェクトが、歴史に新たな1ページを刻むことを切に願っています笑


# 引用文献
 1. [ガートナー、2020年のデータ／アナリティクス・テクノロジ・トレンドのトップ10を発表](https://www.gartner.com/jp/newsroom/press-releases/pr-20200624)
 2.  [AI「Tay」を“最低なヤツ”にしたのは誰だ？ | WIRED.jp](https://wired.jp/2016/03/30/microsofts-teen-ai-turned-into-such-a-jerk/)
 3.  [HuffPost is now a part of Verizon Media](https://www.huffingtonpost.co.uk/2017/01/25/snapchat-filters-are-harming-black-womens-self-image_a_21658358/?guccounter=1&guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_sig=AQAAAMnF-ocIVyHa_hQAJLcJf-GjMJpwT0DCo14PZPR52NTU4i5NQw8rkM0Mf_geVdSCCxbnCCoUHh0kODH8m5t6LW9NV1IqnwMHggJySRnoXMiNENC0t2tkpzHTEz1KzUtXp9B1uzJcUyFb-9zW4FjRSvoky-Q-8JWx53EpFumFeuth)
 4.  [No surprise Amazon’s AI was biased against women, says Sandra Wachter - Business Insider](https://www.businessinsider.com/amazon-ai-biased-against-women-no-surprise-sandra-wachter-2018-10)
 5. [「AI・データの利用に関する契約ガイドライン 1.1版」を策定しました （METI/経済産業省）](https://www.meti.go.jp/press/2019/12/20191209001/20191209001.html)
 6. [darknet/LICENSE at master · pjreddie/darknet · GitHub](https://github.com/pjreddie/darknet/blob/master/LICENSE)
[Gartner Says Nearly Half of CIOs Are Planning to Deploy Artificial Intelligence](https://www.gartner.com/en/newsroom/press-releases/2018-02-13-gartner-says-nearly-half-of-cios-are-planning-to-deploy-artificial-intelligence)
 7. [Scaling Machine Learning at Uber with Michelangelo | Uber Engineering Blog](https://eng.uber.com/scaling-michelangelo/)
 8. [Scaling a Mature Data Pipeline — Managing Overhead - Airbnb Engineering & Data Science - Medium](https://medium.com/airbnb-engineering/scaling-a-mature-data-pipeline-managing-overhead-f34835cbc866)
 9. [From Data to Action With Airbnb Plus - Airbnb Engineering & Data Science - Medium](https://medium.com/airbnb-engineering/from-data-to-action-with-airbnb-plus-54f4d8f80361)