機械学習入門！ 偉い人から「AIで何かいい感じにやっといてよ！」って言われたら

ひょんなことから、これまで無縁だった**AI/ML**系のお仕事に巡り合うこととなったので、AIとか無縁だった普通のクラウドエンジニアが機械学習やっていき！で色々調べだした際のことはじめナレッジを残しておきます。


# まずは有識者に相談してみた

幸いなことに社内にAI/ML技術に関するコミュニティが存在していたため、そちらの運営メンバー（@Synoharaさんほか） へ相談に駆け込むことに。

今回の案件経緯は超雑に言うと **「特定の人力業務をAIで何かいい感じにしたい（白目）」** 風の要件だったのですが、そもそも機械学習を活用するにあたっての基本的なアプローチを教えてくれました。

- まず最初は **「機械学習を使わずに済ませられないか」** から考えてみるのがよい。

- 適当なデータをどんどんAIに取り込んでも、役に立たないデータしか出てこない **（ガベージイン・ガベージアウト）**

- AWSなどクラウドをはじめ、機械学習ソリューションは多数存在するが、どの製品を使うかよりまずは業務要件をヒアリングして深掘りし、**人力でやったらどうなるか**というプロセスを具体化してみるのがよい。

- 機械学習でとりうるアルゴリズムは多種あるため、今回の業務要件に**類似した案件事例**を探してみるのがよい。それを元にアプローチを絞り込む。具体的な製品選定はそれから。

AIド素人のワイにとってはまさに目から鱗！
そして上記のような基本的なアプローチを学ぶのにうってつけのバイブルがあるよということで、オライリー社の「仕事ではじめる機械学習」という書籍を勧めていただきました。

https://www.amazon.co.jp/仕事ではじめる機械学習-第2版-有賀-康顕/dp/4873119472/ref=pd_lpo_1?pd_rd_i=4873119472&psc=1

→ 早速オライリーeBookを購入しました。特に書籍の序盤で基本的なアプローチが十分学べるということで、そこから学んだエッセンスを本記事にアウトプットしていきます。


# オライリー「仕事ではじめる機械学習」から学んだエッセンス

### 機械学習がよく使われる用途は？

「未知のデータに対して過去の経験を元に機械が予測する」のが王道パターン。

- 教師あり学習：あらかじめ既知のデータからモデル（入出力の関係性）を獲得する **←これがよく使われる**
- 教師なし学習：本番利用時の入力データからデータ構造を獲得する
- 強化学習：経験をもとに試行錯誤し行動戦略を獲得する
- etc.

![スクリーンショット 2022-06-29 20.01.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/3d73c5f8-ca28-0fcd-ad66-7cc5d548b71e.png)


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

課題を公式に落とし込む：
**（重要。人間が正解できない課題はAIにも解けない！）**
1. 仕事の課題を機械学習の課題に当てはめる
2. 似たような事例を探す
3. 機械学習を使わなくてよい方法を考える

道具選びと前処理：
**（重要。大量データは下処理しないと性能が出ない！）**
4. システム設計を考える
5. 特徴量、教師データ、ログを設計する
6. 実データを集めて前処理する

モデルの作成：
7. 探索的データ分析を行い、アルゴリズムを選定する
8. 学習、パラメーターをチューニングする

実装：
9. システムに実装する
10. 予測精度や実業務の指標をモニタリングする
![スクリーンショット 2022-06-29 20.06.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/1a7c8d47-09f9-c4f2-b7f0-ff1c291df598.png)
※「AIで何かいい感じにやっといてよ！」な上司に困らないためのポイント
- 機械学習で解ける範囲/解けない範囲を線引きすること
- 泥臭いデータの下処理をがんばれること

![スクリーンショット 2022-06-29 20.03.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/053969bc-0bc5-ee8a-318a-d2abecd55678.png)


### 仕事の課題 → 機械学習の公式への当てはめかた

- プロジェクトの目的と解き方をセットで考えること。目的が曖昧だったり、すぐにアクションが起こせない問題設定は良くない例。

- 業務上の課題をブレイクダウンし、 **「xxxするためにxxxを行う。そのために機械学習を活用する」** といった具体的なアクションに落とし込む。

- その際、予測モデルとは別に業務上のKPIを定めておくとよい。

![スクリーンショット 2022-06-29 20.03.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/bdc3d8e4-e012-13f4-791e-da2717907c82.png)


### 機械学習を使わなくてよい方法を考える

機械学習は技術的負債となりやすいため、安易に使うのは禁物！
以下のような弱点をしっかり理解しておくこと。

- 確率的な処理があるため自動テストがしづらい。
テストでは見つけられなかった危険な出力が本番で発生してしまう可能性もある（例：Googleフォトが黒人の写真をゴリラと認識してしまった…等）

- 時間が経つとトレンドが変化し入力データの傾向が変わる。
トレンドの変化に対応するためには予測モデルのメンテナンスが必要になる。

また、以下の特徴によりメンテナンス負荷も高くなってしまう。
- 処理パイプラインやデータの依存関係が複雑になる
- 実験用のコードやパラメーターが残ってしまいやすい
- 本番/開発それぞれの環境で言語やフレームワークが分かれがち

![スクリーンショット 2022-06-29 20.04.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/387906d5-e5e0-be31-3aaa-1fae2db67959.png)
じゃあ逆に、どんな課題ならAIにうってつけなのか？

- 大量のデータに対して、高速に安定した判断をしたい
- 多少間違った結果が混じってしまっても問題ない

![スクリーンショット 2022-06-29 20.04.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/4bd85b1a-eafb-565c-d472-04d2095e69db.png)
→ これらの条件が整っていれば、まずMVP（スモールスタートできる最小限のプロダクト）を作ってみる。まずはMVPを検証することで、大掛かりなシステム構築の手戻りリスクを緩和することが可能。


# おわりに

ここまで読んでみたら、機械学習に興味がでてきた方もいるのではないでしょうか？

ぜひお近くの本屋で手に取ってみたり、電子書籍がお好きな方はオライリーのeBookで買ってみることをオススメします。
EPUB＆PDF形式でダウンロードできますので、iPhoneやMacのBooksアプリで快適に読むことができ、私もKindleより気に入っています。

https://www.oreilly.co.jp/books/9784873119472/