猿でもわかるAIプログラミングシリーズ 🐵💻 AIにおける「教師あり」と「教師なし」の違いって何？

 
## AIにおける「教師あり」と「教師なし」の違いって何？〜実務で使い分けるための思考法と実装例〜

---

## 1. はじめに：機械学習、結局どれを選べばいいの？

AIや機械学習のプロジェクトに携わっていると、よく聞かれるのがこの質問：

> 「教師あり学習」と「教師なし学習」ってどう違うの？
> そして、どちらを選べばいいの？

現場の実務でも、「とりあえずscikit-learnで試してみたけど、しっくりこない」ということ、ありますよね。
本記事では、両者の**理論的な違い**に加え、**Pythonコードを用いた実装例**と、**現場での選定ポイント**を交えながら、徹底的にわかりやすく解説します！

---

## 2. 概要：教師あり vs 教師なし 〜概念の違い〜

| 分類     | 教師あり学習（Supervised Learning）   | 教師なし学習（Unsupervised Learning）   |
| ------ | ----------------------------- | ------------------------------- |
| データ    | 入力 + 正解ラベルあり                  | 入力のみ（ラベルなし）                     |
| 目的     | 予測・分類・回帰                      | パターン抽出・構造発見                     |
| 代表的な手法 | 決定木、SVM、ロジスティック回帰、ニューラルネットワーク | K-Means、主成分分析（PCA）、t-SNE、自己符号化器 |

**ポイント**：

* ラベル（正解）があるかどうかが、両者の大きな違い。
* 教師ありは「答えを当てに行く」学習。
* 教師なしは「隠れた構造を見つけに行く」探索。

---

## 3. 実践で学ぶ！Pythonでの具体的な実装例

今回は分かりやすく、以下のデータを用いてそれぞれの学習方法を試してみます：

* 教師あり：Titanicの生存予測（Kaggleでおなじみ）
* 教師なし：Irisのクラスタリング（有名な花のデータ）

### 🧪 3.1 教師あり学習の例：Titanic生存予測

```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# データ読み込み
df = pd.read_csv('https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')
X = df[['Pclass', 'Sex', 'Age', 'Fare']].copy()
X['Sex'] = X['Sex'].map({'male': 0, 'female': 1})
X['Age'] = X['Age'].fillna(X['Age'].mean())
y = df['Survived']

# 分割・学習
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression()
model.fit(X_train, y_train)

# 評価
y_pred = model.predict(X_test)
print("Accuracy: {:.2f}".format(accuracy_score(y_test, y_pred)))
```

### 🧪 3.2 教師なし学習の例：Irisクラスタリング

```python
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# データ読み込み
iris = load_iris()
X = iris.data

# KMeansクラスタリング
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)

# 結果の可視化
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis')
plt.title("KMeansによるクラスタリング")
plt.xlabel("Sepal Length")
plt.ylabel("Sepal Width")
plt.show()
```

---

## 4. 実務Tips：どちらを使えばいい？どう使い分ける？

### ✅ 教師ありが向いているケース

* 売上予測、顧客離脱予測、需要予測など、**明確な出力がある**場合
* 学習用に十分な**ラベル付きデータが揃っている**場合

### ✅ 教師なしが向いているケース

* データを分類したいが**答えがない**、**未知のパターンを発見したい**場合
* 特徴抽出、前処理、異常検知（Anomaly Detection）など

### ❌ よくある失敗

* ラベルなしなのに教師ありを無理やり使う
* 教師なしを使って得られたクラスタを「正解」と勘違いする
* 教師なし結果をそのまま意思決定に使ってしまう（→補助的に使うのが吉）

---

## 5. 応用：半教師あり学習、自己教師あり学習とは？

最近注目されているのが、両者の中間に位置する手法：

### 📌 半教師あり学習（Semi-supervised Learning）

* ラベル付きデータが少ないけど、ラベルなしデータが大量にあるときに有効。
* pseudo-labelingやconsistency regularizationが代表例。

### 📌 自己教師あり学習（Self-supervised Learning）

* 画像認識や自然言語処理でブレイク中。
* 「自分で自分にラベルをつけて学習」→BERTやSimCLRなど。

---

## 6. まとめ：違いを理解して、技術を「選べる人」になる

| 観点     | 教師あり          | 教師なし      |
| ------ | ------------- | --------- |
| 精度     | 高い（ラベルが正しければ） | 解釈が難しいが柔軟 |
| 用途     | 明確な目標予測       | パターン探索・分析 |
| 必要なデータ | ラベル付き         | ラベル不要     |

**AI開発において一番重要なのは「適材適所」**。
アルゴリズムの種類を知っているだけでなく、**“なぜそれを選ぶのか”という理由を持てること**が、実務における差別化になります。

---

## 📎 参考リンク

* [scikit-learn 教師あり学習ドキュメント](https://scikit-learn.org/stable/supervised_learning.html)
* [教師なし学習（Unsupervised Learning）ガイド](https://scikit-learn.org/stable/modules/clustering.html)
* [Semi-supervised Learning 実践例（Kaggle）](https://www.kaggle.com/competitions/titanic/discussion/229104)