今さら聞けない機械学習

こちらのイベントで説明した内容を抜粋しています。

https://www.databricks.com/p/webinar/jp-mlops-beginner-series

# データサイエンスのプロセス

機械学習がどういうものかを説明する前に、機械学習が適用されるデータサイエンスのプロセスを説明します。
![Screen Shot 2022-08-18 at 8.47.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/9689643a-8e43-0885-5180-433c92909bca.png)

- **質問**：データサイエンスのプロセスは何かしらの「質問(この広告キャンペーンはどの層をターゲットにしたらいいのか？など)」からスタートします。
- **仮説**：質問に対して仮説を立てます(20代にWeb広告を打てばコンバージョンが上がるはず)。
- **実験・分析**：仮説を検証するために実験・分析を行います。
- **結果の分析・解釈**：分析結果をさらに分析、解釈します。
- **結果の提供・コミュニケーション**：経営層などのステークホルダーに対して結果を提供し、コミュニケーションを取ることでアクションにつなげます。

## データサイエンスとは

データサイエンスでは、様々なデータから知見を抽出するために3つのスキルが求められます。
![Screen Shot 2022-08-18 at 8.52.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/24491076-afa9-aba5-f423-2aa60cfd04ce.png)

- コンピューターサイエンス
- 応用統計学
- ドメイン知識

これらが重なり合う領域がデータサイエンスです。そして、ここで機械学習が登場します。

> データサイエンスは、特定ドメインにおいて知見を抽出し、適用するための科学的なプロセスでデータを活用することを目的とした、ドメイン知識、応用統計学、コンピューターサイエンス、そして、**機械学習**から構成される複数の学問分野にまたがる領域です。

:::note info
**注意**
上の図には機械学習は記載されていませんが、領域横断で活用する技術と捉えてください。
:::

## データサイエンスプロジェクトにおける留意点

企業においてデータサイエンスはプロジェクトの中で活用されることが一般的であり、このデータサイエンスプロジェクトを成功に導くためには注意すべき点がいくつか存在します。
![Screen Shot 2022-08-18 at 8.55.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1dfa9aaf-effa-ae89-6ba1-f38b0b3e8dbd.png)

- **実世界の問題のフレーミング**: プロジェクトのスコープ、ひいては機械学習を適用する領域を明確に定義する必要があります。
- **計測可能な実世界の目標**: 定量的に計測可能な目標をターゲットしてプロジェクトを推進します。この計測可能なアウトプットを生み出すために機械学習を活用します。
- **制約、ベースライン**: プロジェクトのアウトプットを活用する際に生じる制約、達成すべきベースラインに留意しながらアウトプットをまとめていきます。
- **ソリューション全体の継続的計測**: 一度アウトプットして終わりではなく、ビジネスの継続性に合わせてデータサイエンスのアウトプット(ソリューション)を計測可能にしておく必要があります。

# 機械学習とは

上で触れた通り、機械学習はデータサイエンスで用いられる応用統計学とコンピューターサイエンスを組み合わせた技術です。
![Screen Shot 2022-08-18 at 9.02.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/13de0a40-6852-9b07-3020-ded830756fef.png)

> **機械学習(Machine Learning)**
タスクを実行するために、コンピュータに対して明示的にプログラムを行うのではなく、機械学習においてはコンピュータがタスクの実行方法を学習します。

機械学習の詳細に入る前に「機械学習ではない」明示的なプログラミングの例を見てみます。

今日雨が降るかどうかを予測する問題を考えてみます。プログラミングをするケースでは、もし「雲量が80%」で「湿度が60%」であれば「雨」である、という条件を列挙することになりますが、**これは機械学習ではありません。**
![Screen Shot 2022-08-18 at 9.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/556a3315-5128-891e-359f-783347ce1e46.png)

機械学習では、**明示的にタスクをプログラムすることなし**にコンピューターがタスクの実施方法を学習します。以下の例では、雲量と湿度から雨の確率を予測します。この予測の方法自体をコンピューターがデータから学習するのが機械学習です。
![Screen Shot 2022-08-18 at 9.06.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ca4e66b5-390a-3bcd-d235-e711d2bd377e.png)

機械学習で用いる機械学習アルゴリズムはデータから学習を行います。
![Screen Shot 2022-08-18 at 9.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c14036a9-f983-6346-7b9b-541ba5112511.png)

機械学習のメリットには以下のようなものがあります。

- より精度の高い予測：上述したような条件の列挙では精度に限界があります。
- 大量のデータ(行数)への対応：大量データに対する条件の列挙は非現実的です。
- 大量の特徴量(列数)への対応：同上です。
- 人の負荷の削減：同上です。

## 機械学習のワークフロー

![Screen Shot 2022-08-18 at 9.10.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/42db5c5c-13c1-d0df-2a1b-684ab10ef855.png)

- **データ探索**：機械学習で使用するデータの傾向を把握します。
- **データクレンジング**：データの欠損などに対応します。
- **特徴量エンジニアリング**：機械学習で用いる特徴量を生成します。
- **モデル開発**：モデルにデータを学習させます。
- **モデル評価**：学習した結果得られるモデルの精度などを評価します。
- **モデルデプロイメント**：モデルを本番環境に配備して活用します。

機械学習ワークフローとデータサイエンスプロセスの関係は以下のようになります。
![Screen Shot 2022-08-18 at 9.11.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3fe8021e-eb14-ef29-6576-b78cebff4964.png)

## 機械学習の分類

機械学習にはいくつかのタイプがあります。

- **教師あり学習**：機械学習モデルに対して「教師データ(何が正解かを示すラベルデータ)」を与えて学習を行わせる機械学習です。
    ![Screen Shot 2022-08-18 at 9.16.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d9f66388-d05f-fe5b-2995-e44781c2cbbf.png)
    教師あり学習の例には以下のようなものがあります。
    - どのくらいの雨量になるのか？
    - いつ在庫切れが起きるのか？
    - 患者に対してこの治療法は有効か？
    - 立候補者は何票獲得するのか？
- **教師なし学習**：「教師データ」なしに機械学習モデルはデータから学習を行います。
    ![Screen Shot 2022-08-18 at 9.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/01e9fc86-1b77-a18b-7382-8cbd249d3ccd.png)
    教師なし学習の例には以下のようなものがあります。
    - 購買行動に基づいて顧客をグルーピングできるか？
    - 症状に基づいて患者をグルーピングできるか？
    - 他のトランザクションと異なる不正行為と思われる
    - トランザクションを特定することができるか？

### 教師あり学習

ここでは教師あり学習の「分類」と「回帰」を説明します。

#### 分類問題

上述した雨の予測においてもいくつかのパターンがあります。「雨が降る」、「雨が降らない」の2つのクラスのどちらからを予測する場合「分類(Classification)」問題となります。

**分類**は教師あり学習のサブセットであり、モデルは**事前定義済みのクラス**の中から**どのクラス**であるのかを予測しようとします。
![Screen Shot 2022-08-18 at 9.24.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a30ad2b0-ed3e-9fcb-a67c-14e678aeb649.png)

分類の例には以下のようなものがあります。

- **誰が**選挙に勝つかを予測できるか？
- **どのチーム**がサッカーの試合に勝つかを予測できるか？
- 画像の中にあるのが**どの果物**であるかを予測できるか？

#### 回帰問題

「どのくらいの量の雨が降るのか」を予測する場合、ラベルの値を予測する「回帰(Regression)」問題となります。

**回帰**は教師あり学習のサブセットであり、モデルは
**連続的なラベルの値**に基づき**定量的な値**を予測しようとします。
![Screen Shot 2022-08-18 at 9.26.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8272df84-05a0-ad7d-945b-3b1c6fcd96f3.png)

回帰の例には以下のようなものがあります。

- 候補者が**何票獲得**するのかを予測できるか？
- 試合でサッカーチームが**何点獲得**するのかを予測できるか？

### 教師なし学習

「教師なし学習」はラベルが存在しない場合でも、データ間の関係性の理解に活用することができます。

教師なし学習では、アルゴリズムは**既存のラベルなしに入力データ間の関係性**を理解しようとします。
![Screen Shot 2022-08-18 at 9.27.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/670dcd2e-e97f-7b2e-bc03-2abcd82394da.png)

教師なし学習の一例として「クラスタリング」があります。
![Screen Shot 2022-08-18 at 9.29.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a789a3ae-55bb-03ef-d69e-0e1d9e9223fc.png)

- 上の図では、類似するレコードには類似する特徴量が含まれます。
- 事前にクラスターの数を決めておく必要があります(アルゴリズムによります)。

教師なし学習にはこれ以外にも、時系列データから将来を予測する時系列予測なども存在します。

# Databricksで始める機械学習

Databricksであれば、上で触れた様々な機械学習をノートブックで簡単に実現することができ、得られた機械学習モデルを本格運用するとこまでをサポートします。
![Screen Shot 2022-08-18 at 9.34.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/91761070-0824-45dd-6caa-500cd00e1c52.png)
![Screen Shot 2022-08-18 at 9.34.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/32a83b4c-787a-51dd-9e34-1fd334c81b5e.png)

Databricksは機械学習の文脈では主に以下の機能を提供しています。

- **コラボレーティブなデータ探索ワークスペース**: ビルトインのデータ準備のための機能、ネイティブなビジュアライゼーションのサポート、機械学習に最適化されたランタイム(ソフトウェアパッケージ)
![Screen Shot 2022-08-18 at 9.40.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/ca8982d2-287d-3826-e73a-245d448b756d.png)
![Screen Shot 2022-08-18 at 9.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/5bc1ee2b-8fab-ebf8-3c1d-559c8d348e94.png)
![Screen Shot 2022-08-18 at 9.40.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/06dd22fd-5894-a444-bb08-03e718b58175.png)
- **実験環境**: 特徴量ストア、実験(モデルトレーニング)トラッキング、モデルを集中管理するモデルレジストリ
![Screen Shot 2022-08-18 at 9.40.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cb35d1ed-0dd0-a9a5-efe9-d4b071af6c01.png)
![Screen Shot 2022-08-18 at 9.40.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/adc0f6bc-9a87-d1a8-98c4-b041cb77d657.png)
![Screen Shot 2022-08-18 at 9.41.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/517343bd-ace5-3710-8852-982460199cea.png)
- **MLOps + DevOpsの本格運用**: Git連携、モデルサービング、モデルモニタリング
![Screen Shot 2022-08-18 at 9.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/32ee8c8b-5595-bf3c-db81-644a892e1088.png)
![Screen Shot 2022-08-18 at 9.41.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f312b591-87df-544a-cf78-26b36d058ded.png)
![Screen Shot 2022-08-18 at 9.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50003f27-b57a-361e-4208-45a089d6bbe0.png)

この他、Databricksでの機械学習に興味がある方はこちらの記事もご覧になってください。

- [Databricks AutoMLのサンプル集](https://qiita.com/taka_yayoi/items/e9e34a418c6acca3ab05)
- [Databricks AutoMLのご紹介 : 機械学習開発の自動化に対するガラスボックスアプローチ](https://qiita.com/taka_yayoi/items/3bf4f4e89990b299c6c9)
- [Databricks AutoMLのマニュアル](https://qiita.com/taka_yayoi/items/0ed860131a02aeade14f)
- [あなたの機械学習プロジェクトをDatabricks AutoMLでスーパーチャージしましょう](https://qiita.com/taka_yayoi/items/65ab0197c627df1b74b5)
- [Databricks機械学習ガイド](https://qiita.com/taka_yayoi/items/2d8ebdc9374696b24e0f)
- [Databricksにおける機械学習チュートリアル](https://qiita.com/taka_yayoi/items/5cfe319c14f2b985d441)
- [Databricksで機械学習を始めてみる](https://qiita.com/taka_yayoi/items/22f45cc82f6b5b1170ad)
- [機械学習エンジニアとしてDatabricksを使い始める](https://qiita.com/taka_yayoi/items/6750e2a74d532004c269)
- [Databricksにおける機械学習モデル構築のエンドツーエンドのサンプル](https://qiita.com/taka_yayoi/items/f48ccd35e0452611d81b)

# その他の「今さら聞けない」シリーズ

https://qiita.com/taka_yayoi/items/92ec880c7d7c6ce271d5

https://qiita.com/taka_yayoi/items/2e652c2796a8738acac8

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)