機械学習プロジェクトの進め方：『Machine Learning Yearning』13-14章（スタンフォード大学Andrew Ng教授）

現在、AIや機械学習界隈で最も有名なスタンフォード大学のAndrew Ng教授が、「Machine Learning Yearning」というオンライン書籍を執筆中です。2018年4月に、そのドラフト版（1-22章）がオンラインで公開中です。この投稿では、いち早く翻訳を進めています。

http://www.mlyearning.org/
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/188414/741778bb-9523-9feb-736b-6bd5aedc42e6.png)

この本は、機械学習プロジェクトの構築方法を提供します。また、機械学習アルゴリズムを教えるのではなく、機械学習アルゴリズムが機能する方法に焦点を当てています。

本投稿は、**13-14章**の翻訳になります。少しづつ翻訳していきます。※翻訳違っていたらご指摘ください。
本書籍は、とても読みやすく、かつ各章短めに記載されています。

##### **1～5章の翻訳**
[【Draft版公開】Machine Learning Yearning 1～5章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/2096b8806a20c8ca52be)

##### **6章の翻訳**
[【Draft版公開】Machine Learning Yearning 6章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/8ddf5f01a33bb049a907)

##### **7-8章の翻訳**
[【Draft版公開】Machine Learning Yearning 7～8章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/94a73dcba8bdde25e48b)

##### **9-10章の翻訳**
[【Draft版公開】Machine Learning Yearning 9～10章 by stanford大学Andrew Ng教授](https://qiita.com/Ishio/items/f074a6609ae034762150)

##### **11-12章の翻訳**
[【Draft版公開】Machine Learning Yearning 11～12章 by stanford大学Andrew Ng教授]
(https://qiita.com/Ishio/items/35c756e073a1f2f1d244)

## **13. Build your first system quickly, then iterate（まずは基本的なシステムを素早く構築し、それを繰り返すことから始める）** 
あなたは新たなEメールのスパム対策システムを構築したいと考えています。チームはいくつかのアイデアを持っています。

* 例えば「ハニーポット（囮の仕組み）」を設置し、スマムメールの巨大な訓練データを収集する。この方法は、意図的に偽りのメールアドレスを既知のスパマーに送信します。これにより、あなたは自動的にこれらの囮アドレスに送信するスパムメッセージを収集することができます。
* 電子メールのテキストコンテンツを理解する機能を開発する。
* メッセージが通過したインターネットサーバ群を表すEメールヘッダーの特徴を理解する機能を開発する。
* などなど

私はこれまでアンチスパム対策に徹底的に取り組んできましたが、これらの方向性の1つを選ぶのは、なかなか至難の業です。この領域の専門家であれば、まずますそれは難しくなります。

だから、完璧なシステムを設計して構築しようとしないでください。代わりに、数日で素早く基礎的なシステムを素早く構築し訓練させてください。この基礎的なシステムが、あなたが構築可能な「5本の指に入る」システムとはかけ離れたものだとしても、基本的なシステムがどのように機能するかを把握することは非常に価値あることです。時間を投資するべき最も有望な方向を示す手がかりを、素早く見つけられるでしょう。次のいくつかの章では、これらの手がかりを掴む方法について解説します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/979313f6-c431-44df-493a-5cd97c529b8f.png)

## **14. Error analysis: Look at dev set examples to evaluate ideas（エラー分析：アイデアを評価するために開発セットのサンプルを手作業で検査する）** 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/188414/bd552843-7bee-8453-1e49-485ec36411b9.png)

あなたは猫のアプリを操作すると、猫と間違って認識するいくつかの犬の画像のサンプルがあることに気づきます。いくつかの犬は猫のように見えるのです！
チームメンバーは、犬の画像をよりよく認識させるサードパーティ製のソフトウェアを組み込むことを提案しています。これらの変更には1カ月を必要とすることがわかっており、チームメンバーは非常に熱心です。この話を進めるように依頼するべきでしょうか。

このタスクに1カ月をつぎ込む前に、実際にどれくらいシステムの正解率が向上するかを最初に評価することを推奨します。そして、これが1カ月の開発期間の価値があるか、もしくは他の仕事を優先させるべきかを、より合理的に意思決定できるでしょう。具体的には、次に挙げることです。

1.  あなたのシステムが誤分類をした100件の開発セットのサンプルを集めてください。つまり、システムでエラーが発生したサンプルです。

2. これらのサンプル画像を人手で確認し、どれくらいが犬の画像であるかを数えてください。

誤分類したサンプルを探すプロセスは、**エラー分析（Error Analysis）**と呼ばれます。この例では、誤分類された画像のうち、たった5%が犬の画像であった場合、どんなにシステムのアルゴリズムを改善して犬の画像に対するパフォーマンスを改善したとしても、5%以上のエラーを取り除くことはできないでしょう。言い換えると、5%は提案内容が手助けできる「天井（最大可能量）」です。したがって、システム全体で90%の正解率（10%がError）であるとき、この提案内容による改善は、最大でも90.5%の正解率（もしくは、9.5%のError）をもたらすでしょう。

対照的に、50%の誤分類が犬の画像であることが判明すると、提案内容による改善が、大きな影響を及ぼすであろうことにより確信を持つことができます。正解率が90%から95%に向上する可能性があります。
数を数えるこの単純なエラー分析の手順は、犬画像に関するサードパーティソフトウェアを組み込むことの価値を素早く推定することが可能な方法です。この投資をするべきかの意思決定をするために、定量的な基準が得られます。
エラー分析は、複数の異なる有望な方向性があるときに、意思決定を手助けします。私はエラー分析に躊躇する多くのエンジニアに出会ってきました。エンジニアにとって、そのアイデアが投資に値するかどうかの疑問よりも、アイデアに飛び込んで実装をすることは、時にとてもエキサイティングに感じるでしょう。しかし、これはよくある過ちです。チームが1カ月を過ごした結果、ほんの少しの利益にしかつながらないことを悟るだけかもしれません。
手作業で100件のサンプルを検査することは、それほど時間はかかりません。イメージ毎に1分かかるとしても、2時間以内で完了します。この2時間の努力が、その後の1カ月の無駄な努力を省くことに繋がります。

エラー分析とは、あなたのアルゴリズムが誤分類した開発セットのサンプルを検査する手順のことです。エラーの根本原因を明らかにすることができます。これは、今回の例のように、プロジェクトの優先順位付けに役立ちます。そして私たちが次に議論をするべき新しい方向性へと導きます。次のいくつかの章では、エラー分析を行うためのベストプラクティスについて説明します。