リモートで機械学習研修をやりました

# 概要

社内の新卒研修で機械学習の研修を2020年5月に実施しましたので、それにあたって検討したあれこれをまとめました。
同じようなことをやろうとしている人の参考になれば。

関連の記事として[リモートでPythonデータ分析研修をやりました](https://qiita.com/calderarie/items/d2570b164d6935d6cfba)も興味があればどうぞ。

# 勉強会の概要

## 参加者

弊社の新入社員が対象。
文理、プログラミング経験はばらばら。

ただし、自分の[Pythonの研修](https://qiita.com/calderarie/items/d2570b164d6935d6cfba)を受けているので、Pythonはある程度できます。

## 目標について

研修を行う目的は、機械学習を使った業務を遂行できるようになることです。これを達成するために、より具体的な目標を以下のように設定しました。

- 基本的なアルゴリズムの枠組みを理解する
    - 概念的な理解をすることで、適切な使い方をできるようになってほしい
- pandasによるデータ加工、scikit-learnを用いたモデル学習・推論・評価、matplotlibによる可視化といった基本的な操作ができる
    - この辺りはPythonを使った機械学習では避けられない
    - 逆にこの辺りを理解すれば、他のライブラリは比較的習得が容易だと判断

## 環境

[Pythonの研修](https://qiita.com/calderarie/items/d2570b164d6935d6cfba)と同様に、Anacondaを利用することとしました。

アカウントがあれば初心者でもすぐに利用できるgoogle colabも検討しましたが、ただ触ってみることが目的ではなく実業務で使うことを考えると、自分でインストールし環境を見える化した方が理解が深まると考えたためです。


## 研修カリキュラム


以下のようなコンテンツで進めました。

1. オリエンテーション
    - 研修の概要
        - 進め方や受講者側が意識すべきこと
    - 機械学習とは？
    - ビジネス上で活用するメリット
    - [課題] 実ビジネス上の機械学習の導入事例に関するレポート
1. 機械学習の概要
    - 機械学習を使った業務の進め方
    - アルゴリズム
        - 教師あり学習と教師なし学習
    - 評価
        - 評価指標
        - 過学習と汎化
        - 交差検証
    - チューニング
        - 特徴量設計
        - ハイパーパラメータ
    - [課題]
        - Pandasとmatplotlib

1. 教師あり学習
    - アルゴリズム
        - 線形回帰
        - ロジスティック回帰
        - 決定木
    - 各種テクニック
        - 不均衡データの扱い
        - カテゴリ変数の取り扱い
        - 汎化（正則化、剪定）
        - 特徴量重要度
    - [課題]
        - アンスコムのデータの線形回帰
        - 正則化
        - 不均衡データの学習
        - クロスバリデーションとグリッドサーチ

1. 教師なし学習
    - アルゴリズム
        - PCA
        - Kmeans
    - 各種テクニック
        - 正規化
    - [課題]
        - PCAの性質
        - k-means++とエルボー法
        - 教師なし学習の正規化
1. 発展的話題
    - アンサンブル学習
    - ニューラルネットワーク
    - 機械学習の解釈性
    - AutoML
    - MLOps
    - [演習] 機械学習導入是非に関するディベート
        - [機械学習の研修にディベートを盛り込んだら相性が良さそうだった件](https://qiita.com/calderarie/items/accbdbc879dada9e1b40)

研修では、機械学習についての講義を行い、課題を通して理解を深めていきます。

## 準備時に考慮したこと

- 知っておくべきことが膨大なので、その中から経験的に理解しておくべきだと判断した項目をピックアップしました
    - 実データではまりやすい課題を取り扱っていると思います
    - 主観に基づくものなので、異論はあるかもしれません
- 機械学習アルゴリズムについては、数式は最低限しか利用しませんでした
    - シンプルな手法しか使ってないのもありますが、説明にほとんど数式を使いません
    - 概念的に理解しておけば別途学習できるだろうという判断
    - 数式に基づく理解が不要といっている訳ではない
- 講義中の説明だけでなく、事象を理解するための課題を作成しました
    - 例えば教師あり学習の不均衡データの取り扱いについて、陥りやすい課題を実際に評価を行いながら対応してもらいます
    - 気の利いたデータが(知る限り)なかったので、課題の作成は超苦労ポイント

- 最後の研修で、機械学習の導入時に留意すべきことを考えてもらい、ディベートで討論してもらう演習を行いました
    - 詳細は別の記事（[機械学習の研修にディベートを盛り込んだら相性が良さそうだった件](https://qiita.com/calderarie/items/accbdbc879dada9e1b40)）に記載しています


## 進め方で工夫したこと

おおよそ[Pythonの研修](https://qiita.com/calderarie/items/d2570b164d6935d6cfba)と同じです。

- コロナで現地開催するのは現実的でないご時世なので、研修自体はオンラインビデオ会議ツールを使って、リモートにて行いました
    - オンサイトと異なり、反応から理解度がどの程度か分かりにくいので、適宜質問を促す等する
    - 資料自体を見やすいよう大きめのフォントで簡素に作成する
- 資料に添えたサンプルコードを実際に実行したり、関連資料を紹介しながら説明しました
- Slackで質問用チャンネルを用意し、講義中・講義外共に質問しやすい仕組みを用意しました

# 資料と課題について

資料は時間のなさもあり、口頭説明が前提になっているような独り歩きできない内容なので、公開は控えます。

課題については、中身を一部整理して後日公開するつもりです。
前述の通り、機械学習の細かい挙動やテクニックを理解するのに最適なデータを用意するのは非常に苦労したので、出来は粗いですが誰かの参考になればと思っています。


# 反省点

- 資料のストーリーが準備不足であった
    - 色々詰め込んだものの、それらを繋ぎ合わせる流れが甘かったです
    - トピックとして理解はできたとしても、実際の作業の中でどのように考えていくかという流れが伝わりにくかった気がします

- 課題において、モデル構築の基礎的な実践内容が薄くなってしまった
    - まず「データ加工→モデル学習→評価」といった一連のプロセスから覚えるべきですが、細かいテクニックについて課題に盛り込んだ結果、この辺りが疎かになってしまいました
    - これは研修の時間と課題のボリューム感を鑑みた結果なのですが、優先度を見誤りました
    - 課題に盛り込まないにしても、サンプルコードを複数提示するくらいはするべきでした

# 最後に

機械学習の研修については、内容の全般に粗い部分があったので、講義を受ける社員たちに申し訳なかったです。
一通り講義をやってみた中でも、見直したいところが多かったので、次の機会があれば諸々修正したいです。


機械学習で覚えるべき点が非常に多く、内容の取捨選択や課題の設計に苦労したというのはありますが、もうちょっと事前に全体的に見直しておけばよかったと思います。