# 判別分析についてわかりやすく解説！Pythonで実装してみよう！

> 当サイト【スタビジ】の本記事では、多変量解析の一種である判別分析について解説していきます！考え方や事例を説明した後、Pythonで実装していきます！

- URL: https://toukei-lab.com/discriminant-analysis
- 公開: 2023.09.15 / 更新: 2025.07.14
- サイト: スタビジ（https://toukei-lab.com）

:::talk{who="umatan"}
当サイト【スタビジ】の本記事では、多変量解析の一種である判別分析について解説していきます！考え方や事例を説明した後、Pythonで実装していきます！
:::

こんにちは！スタビジ編集部です！

多変量解析の一種である判別分析。

その名の通り、**過去のデータを使って未知のデータを判別（分類）する手法**です。

<mark>古典的でシンプルな手法ではありますが、様々な場で活用することができます！</mark>

この記事では、そんな判別分析の特徴とPythonでの実装を見ていきたいと思います。

以下のYoutube動画でも分かりやすく解説しているので併せてチェックしてみてください！

::youtube{#gknEMsWvi1Q}

## 判別分析とは

![Content](/wp-content/uploads/2017/11/Content-amico.png)

判別分析とは、**過去のデータを使って未知のデータを分類する手法**です。

具体的には、過去データからグループの境界線を求め、その線を元に未知データを分類していきます。

![判別分析　概要](/wp-content/uploads/2023/09/discriminant-analysis_line.jpg)

:::talk{who="robotan"}
じゃあその境界線っていうのはどうやって決めるの？
:::

:::talk{who="umatan"}
例を用いて説明していくよ！ただ数式も出てくるから、概要だけを掴みたい人はイラストを見てもらえれば大丈夫！
:::

あるりんご農家が、**A、Bという2種類のりんご（母集団A、母集団Bとする）を栽培しています。**

また、その2種類のりんごは**見た目に全く差はないが、糖度（$x$）が異なる品種（Aの母平均$\mu_{A}$、Bの母平均$\mu_{B}$）**&#x3067;あるとします。

そして、**かごの底に残っていた1つのりんご（未知りんごとする）**&#x304C;どちらの品種かを判別したい状況にあるとしましょう。

![判別分析　りんごの例](/wp-content/uploads/2023/09/discriminant-analysis_apple.jpg)

そこでまず、<mark>りんごの糖度からそれぞれの母集団への距離</mark>として、[マハラノビス距離](/mahalanobis)の2乗を次のように定義します（$\sigma^2$は母分散で、母集団AとBで同じとする）。

$\displaystyle D_{A}^2= \frac{(x-\mu_{A})^2}{\sigma^2}$,　　　　　　$\displaystyle D_{B}^2= \frac{(x-\mu_{B})^2}{\sigma^2}$

すると、以下のように<mark>判別ルールを定めることができる</mark>わけです。

$D_{A}^2\leq D_{B}^2 \iff$ **母集団Aに属する** $\iff$ **品種Aのりんごである**

$D_{A}^2> D_{B}^2 \iff$ **母集団Bに属する** $\iff$ **品種Bのりんごである**

イメージはこんな感じ。

![判別分析　マハラノビス　イメージ](/wp-content/uploads/2023/09/discriminant-analysis_image.jpg)

また、上で定義したマハラノビス距離の2乗の値の差は

$\displaystyle D_{B}^2 – D_{A}^2 = \frac{2(\mu_{A}-\mu_{B})}{\sigma^2}\left(x  – \frac{\mu_{A}+\mu_{B}}{2}\right)$

と表すことができ、これを2で割った、

$\displaystyle z = \frac{D_{B}^2 – D_{A}^2}{2} = \frac{(\mu_{A}-\mu_{B})}{\sigma^2}\left(x – \frac{\mu_{A}+\mu_{B}}{2}\right)$

を**判別関数**と呼びます。

<mark>この**判別関数**が、判別分析における**境界線**となるわけです。</mark>

判別関数を用いると、先ほどの判別ルールも以下のように書き換えることができます。

$z\geq 0\iff D_{A}^2\leq D_{B}^2 \iff$ **母集団Aに属する** $\iff$ **品種Aのりんごである**

$z<0\iff D_{A}^2> D_{B}^2 \iff$ **母集団Bに属する** $\iff$ **品種Bのりんごである**

なお、$\mu_{A}$や$\mu_{B}$、$\sigma^2$は未知の値なので、過去のデータから推定します。

<mark>そして、その推定値とサンプルの値（未知りんごの糖度）を判別関数に代入して得られた値を基に、判別を行っていきます。</mark>

今回は糖度という一つの変数で判別することを考えていきましたが、複数の変数が観測されている場合も同様に考えていくことができます。

:::talk{who="robotan"}
マハラノビス距離を基に境界線を決めていくのが判別分析ってことだな！
:::

:::talk{who="umatan"}
そういうこと！
:::

## 判別分析のメリット

![Social strategy](/wp-content/uploads/2020/07/Social-strategy-amico.png)

判別分析のメリットは主に2つあります。

### 1. サンプルサイズの大小が精度に影響を与えにくい

上で説明したように、判別分析の理論はかなりシンプルなものです。

そのため、<mark>少ないデータしか手元にない場合に精度がガクッと落ちる、といったことは起こりにくいです。</mark>

最新の機械学習手法などに対して精度の面ではやや劣るかもしれませんが、少ないサンプルでも予測ができるというのは大きなメリットの1つです。

### 2. 多クラスの場合でも予測が可能

判別分析は、<mark>目的変数が多クラスの場合でも同様に予測を行うことができます。</mark>

2クラス分類のみしかできないという分析手法もいくつかある中、これだけシンプルな理論のもとで多クラス予測を行うことができるのは立派なメリットであると言えます。

## 判別分析を行う際の注意点

![Stories](/wp-content/uploads/2021/09/Bibliophile-amico-min-e1653727708894-1024x927.png)

判別分析を行う際、注意しなければならないことがあります。

それは、**<mark>目的変数が質的変数（カテゴリ変数）の場合のみ適用</mark>できる**ということです。

予測の対象が**量的変数**の場合は、**重回帰分析**などを用いるようにしましょう。

:::talk{who="umatan"}
質的変数、量的変数の違いについてはこちらをチェック！
:::

<https://toukei-lab.com/scale_of_measurement>

:::talk{who="robotan"}
ちなみに説明変数は量的変数じゃないとだめ？
:::

:::talk{who="umatan"}
いや、質的変数が混ざっていてもダミー変数化を行えば大丈夫だよ！
:::

## 判別分析の活用例

![Business Plan](/wp-content/uploads/2020/07/Business-Plan-amico-e1613688762889-1024x903.png)

ここでは2つの分野での活用例を紹介していきます。

### 1. マーケティング

よく判別分析が用いられるのがマーケティング関連のデータ。

以下のような場面で適用することができます。

:::box
**・アンケートデータを用いた顧客の満足度予測（満足・不満足）\
・顧客情報データを用いた商品購買予測（購入する・しない）\
・財務諸表データを用いた企業の倒産予測（倒産する・しない）**
:::

さらに予測だけでなく、予測にどの変数が効いているのかも把握できるので、<mark>マーケティング戦略を立てるのにも役立ちます。</mark>

マーケティングに関しては以下の記事で解説していますので参考にしてみてください！

<https://toukei-lab.com/marketing-study>

### 2. 医療

判別分析は医療分野でも用いられることが多いです。

:::box
**・検査結果データを用いた病気の有無の予測（ある・ない）\
・生活習慣データを用いた発がん可能性予測（発がんする・しない）\
・脳画像データを用いた統合失調症患者の判別（患者・健常者）**
:::

医療分野では<mark>大量のデータを集めることが難しいケースが多い</mark>ため、小サンプルでも精度が比較的変わりにくい判別分析が重宝されます。

## 判別分析をPythonでやってみよう

![](/wp-content/uploads/2018/09/goriIMGL9703_TP_V1-e1555747456954.jpg)

ここからは、Pythonで実際に判別分析をやっていきます。

<mark>分析の目的は、未知データの予測を行うこと！</mark>

以下の流れで分析を進めていきます。

:::box
**1. ライブラリのインストール\
2\. データの準備\
3\. データの加工\
4\. 判別分析の実行\
5\. 予測結果の評価**
:::

### 1. ライブラリのインストール

今回はscikit-learnの[LinearDiscriminantAnalysis(LDA)](https://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html#sklearn.discriminant_analysis.LinearDiscriminantAnalysis.get_params)を使って判別分析を行っていきます。

分析で使用する他のモジュール等もここで全てimportしておきます。

```python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.metrics import acccuracy_score, recall_score, precision_score,f1_score
```

### 2. データの準備

データはscikit-learnが提供している[ワインデータ](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_wine.html)を使用します。

```python
#ワインデータセットの読み込み
df = datasets.load_wine(as_frame=True).frame
df
```

![判別分析　ワインデータ](/wp-content/uploads/2023/09/discriminant-analysis_winedata.jpg)

アルコール濃度やリンゴ酸濃度、ワインの種類など計14変数のデータセットとなっています。

**目的変数をワインの種類、説明変数をその他の変数**として判別分析を行っていきます。

サンプルサイズは178です。

### 3. データの加工

今回の目的は未知データの予測のため、既存のデータセットを**訓練データ**と**テストデータ（未知データとして用いる）**&#x306B;分割します。

比率は、<mark>訓練データ\:テストデータ = 7\:3</mark>です。

```python
#訓練データとテストデータに分ける
x, y = df.iloc[:, :-1].values, df.iloc[:, -1].values
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, stratify=y)  #訓練データ：テストデータ = 7:3で分割
```

### 4. 判別分析の実行

訓練データを用いて判別関数（モデル）を作成し、テストデータの予測を行います。

```python
#判別分析の実行
#訓練データを用いて判別関数を作成
LDA = LinearDiscriminantAnalysis()
LDA.fit(x_train, y_train)

#テストデータの予測
y_pred = LDA.predict(x_test)
print(y_pred)
```

![判別分析　予測値](/wp-content/uploads/2023/09/discriminant-analysis_y_pred.jpg)

y_predに、ワインの種類を予測した結果（0,1,2）が格納されていることがわかります。

### 5. 予測結果の評価

最後に、予測結果の評価を行います。

<mark>正解率、適合率、再現率、f1（F値）の4つで評価を行います。</mark>

:::talk{who="umatan"}
各評価指標についてはこちらをチェック！
:::

<https://toukei-lab.com/confusion_matrix>

```python
#評価指標の算出
print("Accuracy:",accuracy_score(y_test,y_pred))
print("Recall:",recall_score(y_test,y_pred,average='macro'))
print("Presicion:",precision_score(y_test,y_pred,average='macro'))
print("F-measure:",f1_score(y_test,y_pred,average='macro'))
```

![判別分析　評価指標](/wp-content/uploads/2023/09/discriminant-analysis_score.jpg)

<mark>どの評価指標も1に近く、とても高い精度で予測を行うことができていますね。</mark>

余裕のある方は、判別関数の[偏回帰係数](/coefficient)の値から「どの変数が予測に影響を与えているか」を考察してみましょう！

:::talk{who="umatan"}
LDA.coef\_ で判別関数の各偏回帰係数を確認することができるよ！
:::

## まとめ

ここまでご覧いただきありがとうございました！

本記事では、**判別分析の概要からPythonでの実装方法**まで解説していきました。

<mark>判別分析は、様々な場で活用することのできる手法です。</mark>

未知データを分類することはもちろん、手法の理論を知っておくことで他の分類手法の理解が容易になります。

複数の変数が観測されているデータが手元にあり、分類を行いたい場合は積極的に**判別**__分&#x6790;__&#x3092;行っていきましょう！

また、今回分析に用いたPythonについて勉強したい方は以下の記事を参考にしてみてください！

<https://toukei-lab.com/python-learn>

さらに詳しくAIやデータサイエンスの勉強がしたい！という方は当サイト「スタビジ」が提供する[スタビジアカデミー](https://toukei-lab.com/achademy/)というサービスで体系的に学ぶことが可能ですので是非参考にしてみてください！

:::box
**AIデータサイエンス特化スクール「スタアカ」**

![スタアカ（スタビジアカデミー）のトップページ](/wp-content/uploads/2026/10/achademy-top.jpg)
:::

<table class="table">
<tbody>
<tr>
<th>【価格】</th>
<td>ライトプラン：1,280円/月（全コースが受講し放題）<br>
プレミアムプラン：129,800円（通常149,800円・買い切り）</td>
</tr>
<tr>
<th>【オススメ度】</th>
<td><span class="stars" role="img" aria-label="5点中5点" data-value="5"></span></td>
</tr>
<tr>
<th>【サポート体制】</th>
<td><span class="stars" role="img" aria-label="5点中4点" data-value="4"></span></td>
</tr>
<tr>
<th>【受講形式】</th>
<td>オンライン形式</td>
</tr>
<tr>
<th>【学習範囲】</th>
<td>統計学・機械学習・ディープラーニングを網羅的に学ぶ<br>
生成AI（LLM・RAG・プロンプトエンジニアリング）を学ぶ<br>
SQLとPythonを組み合わせて実データを使った様々なワークを行う<br>
実践的なビジネスフレームワークを学ぶ<br>
マーケティングの実行プラン策定</td>
</tr>
</tbody>
</table>

データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「[スタアカ](https://toukei-lab.com/achademy/)」！！

当メディアが運営するスクールです。

月額1,280円のライトプランで、統計学から機械学習・生成AIまで全コースが受講し放題です！

<mark>プレミアムプランでは、24時間以内の質問対応と現役データサイエンティストとの1on1（30分×4回）を実施します！</mark>

カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください！

他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。

<mark>そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコース</mark>になっています！

Pythonが初めての人でも学べるようなカリキュラムにしておりますので是非チェックしてみてください！

ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったりする盛りだくさんの内容になってます！

:::box
**・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析**\
**・世界最大手小売企業のウォルマートの実データを用いた需要予測**\
**・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定**\
**・生成AIのAPIを使ってチャットボットやAIエージェントを作る**
:::

::button[スタアカの受講はこちら]{href="https://toukei-lab.com/achademy/" note="＼今すぐ試す／"}