📚 背景知識(読んでから問題へ)
「ばらつき」を数値で表す
前回コードで計算した分散・標準偏差を、今日は なぜそう定義されているのか の視点で理解する。
分散(Variance)とは?
データが「平均からどれだけ離れているか」を数値化したもの。
データ: [2, 4, 4, 4, 5, 5, 7, 9]
平均: 5
各データの「ズレ」:
2-5 = -3
4-5 = -1
4-5 = -1
4-5 = -1
5-5 = 0
5-5 = 0
7-5 = +2
9-5 = +4
全部足すと 0 になる(プラスとマイナスが打ち消し合う)。
→ 解決策: ズレを2乗してから足す
(-3)² + (-1)² + (-1)² + (-1)² + 0² + 0² + 2² + 4²
= 9 + 1 + 1 + 1 + 0 + 0 + 4 + 16 = 32
分散 = 32 ÷ 8 = 4.0
標準偏差(Standard Deviation)とは?
分散は「2乗した単位」になっている(点数なら「点²」)。
→ 元の単位に戻すために√(平方根)をとる のが標準偏差。
標準偏差 = √4.0 = 2.0
「データは平均から平均して±2.0ほどばらついている」と読める。
正規分布との関係
データが釣り鐘型(正規分布)に近い場合:
- 平均 ± 1σ(標準偏差)の範囲に 約68% のデータが含まれる
- 平均 ± 2σ の範囲に 約95% が含まれる
- 平均 ± 3σ の範囲に 約99.7% が含まれる
→ 3σから外れたデータ = 外れ値 として扱うことが多い(3σルール)
IQR法(外れ値検出のもう1つの方法)
IQR = Q3(75パーセンタイル)- Q1(25パーセンタイル)
下限 = Q1 - 1.5 × IQR
上限 = Q3 + 1.5 × IQR
この範囲を超えたデータ = 外れ値
3σルールより正規分布を仮定しないため、Kaggleではこちらがよく使われる。
📝 問題
以下の4つの問題に答えてください(コードではなく「言葉・概念」で答える問題です)。
Q1. データ A と データ B がある。
データA: [10, 10, 10, 10, 10]
データB: [5, 8, 10, 12, 15]
2つの平均は同じ(10)です。
分散・標準偏差はどちらが大きい? またその理由を1文で説明してください。
Q2. 「分散は標準偏差の2乗である」← この文は正しい?間違い?
理由も答えてください。
Q3. 30人の生徒のテストスコアがあり、平均=70点、標準偏差=10点とする。
3σルールを使うと、「外れ値の疑いがある」のはどの範囲のスコアか?
Q4. 以下のどちらの方法が「外れ値検出」に適しているか理由とともに答えてください。
- 方法X: 3σルール(平均 ± 3標準偏差)
- 方法Y: IQR法(Q1 - 1.5×IQR 〜 Q3 + 1.5×IQR)
判断の根拠: データが右に大きく偏った(歪んだ)分布(例: 収入データ)の場合。
🔍 ヒント(段階的開示)
ヒント1(方向性)
Q1は「ばらつきの大きさ」を考える。全員が同じ値 vs バラバラな値。
Q2は「標準偏差と分散の定義の順序」を思い出す。
Q3は「平均 ± 3σ」に70と10を代入するだけ。
Q4は「3σルールが前提とすること」を考える。
ヒント2(アプローチ)
- Q1: データAは全員が平均から「ズレ0」。データBは平均から離れたデータがある。
- Q2:
分散 = 標準偏差²が正しいのか、標準偏差 = 分散²が正しいのかを考える。 - Q3: 70 - 3×10 = ? / 70 + 3×10 = ?
- Q4: 3σルールは「正規分布(釣り鐘型)」を前提とする。歪んだデータには何が起きるか?
ヒント3(ほぼ答えに近い誘導)
- Q1: データAの分散は0(全員同じ値)、データBの分散は > 0。
- Q2: 「標準偏差 = √分散」なので「分散 = 標準偏差²」→ 問題文の言い方は正しい。
- Q3: 40点未満 or 100点超が外れ値の疑い。
- Q4: 歪んだ分布では3σルールが「外れ値でないものを外れ値と判定」しやすい → IQR法が適切。
✅ 模範解答
Q1.
データBの方が分散・標準偏差が大きい。
理由: データAは全員が平均10と同じ値なので「ズレ」が0、つまりばらつきが全くない(分散=0)。データBは5〜15まで散らばっているため、ズレの2乗和が大きくなる。
Q2.
正しい。
定義: 標準偏差 = √分散 → 両辺を2乗すると 分散 = 標準偏差²
Q3.
外れ値の疑いがある範囲: 40点未満 または 100点超
- 下限: 70 - 3×10 = 40
- 上限: 70 + 3×10 = 100
Q4.
方法Y(IQR法)が適切。
理由: 3σルールは正規分布(左右対称の釣り鐘型)を前提としている。収入データのような右歪みの分布では「平均が右に引っ張られる」ため、3σルールを使うと正常なデータを外れ値と誤判定しやすい。IQR法は中央50%のデータ(Q1〜Q3)を基準にするため、分布の形状に依存しない。
🪜 Step-by-Step 解説
import numpy as np
A = [10, 10, 10, 10, 10]
B = [5, 8, 10, 12, 15]
print(np.var(A)) # → 0.0
print(np.var(B)) # → 10.0
print(np.std(B)) # → 3.16...
「ばらつきゼロ」は分散=0で完璧に表現できる。
std_B = np.std(B) # 3.162...
var_B = np.var(B) # 10.0
print(std_B ** 2) # → 10.0 (= var_B) ✓
print(var_B ** 0.5) # → 3.162... (= std_B) ✓
mean = 70
std = 10
lower = mean - 3 * std # 40
upper = mean + 3 * std # 100
print(f"外れ値候補: {lower}点未満 または {upper}点超")
import numpy as np
# 右歪みの収入データ(万円)
income = [200, 250, 300, 320, 350, 400, 450, 500, 600, 5000] # 5000は外れ値
# 3σルール
mean = np.mean(income) # 837万円(外れ値に引っ張られる)
std = np.std(income)
print(f"3σ上限: {mean + 3*std:.0f}万円") # 非常に大きな値になる
# IQR法
q1 = np.percentile(income, 25) # 306.25
q3 = np.percentile(income, 75) # 487.5
iqr = q3 - q1
lower = q1 - 1.5 * iqr # 31.25
upper = q3 + 1.5 * iqr # 762.5
print(f"IQR上限: {upper:.1f}万円") # 5000は外れ値として検出
📐 数学・統計の補足(文系向け)
なぜ「2乗」してから「√」するの?
これは「符号を消してから元に戻す」という操作。
- 絶対値(||)を使う方法もあるが、絶対値は微分できないためMLでは都合が悪い
- 2乗なら微分できる → アルゴリズムで計算しやすい
- という理由で「2乗して√」が標準になった
σ(シグマ)って何?
σ = sigma(ギリシャ文字)= 標準偏差の記号。
「1σ = 標準偏差1個分の距離」という意味で使う。
「3σ外れ」=「平均から標準偏差3個分以上離れている」。
🏆 Kaggleでの実践的な使い方
import pandas as pd
import numpy as np
df = pd.read_csv('train.csv')
# 数値カラムの外れ値をIQR法で検出
def detect_outliers_iqr(series):
q1 = series.quantile(0.25)
q3 = series.quantile(0.75)
iqr = q3 - q1
lower = q1 - 1.5 * iqr
upper = q3 + 1.5 * iqr
return series[(series < lower) | (series > upper)]
# SalePrice列の外れ値を確認(House Pricesコンペ)
outliers = detect_outliers_iqr(df['SalePrice'])
print(f"外れ値の件数: {len(outliers)}")
print(outliers)
Kaggleでの判断基準:
- 外れ値を削除すべきか残すべきかはドメイン知識で判断
- テストデータにも外れ値がある場合は削除せず、変換(log変換など)で対処することが多い
- EDAで外れ値のパターンを可視化してから判断するのが鉄則
⚠️ よくある誤解・ミス
| 誤解・ミス | なぜ起こるか | 正しい理解 |
|---|---|---|
| 「外れ値は必ず削除する」 | 外れ値=ノイズと思い込む | テストデータにも外れ値があればモデルに含める必要がある |
| 標準偏差と分散を混同 | どちらも「ばらつき」の指標 | 分散=標準偏差²。単位が元データと同じなのは標準偏差 |
| 3σルールを全データに適用 | 簡単だから | 歪んだ分布にはIQR法を使う |
| 分散が小さい=良いデータ | 直感 | ケース次第。特徴量の分散が小さすぎると予測に使えない(低分散フィルタリング) |
🚀 次のステップ
- 発展: log変換で外れ値の影響を減らす方法(House PricesのSalePriceで実践)
- 次回予告: 確率の基礎(確率とは何か / 同様に確からしい)へ進む(テーマ3)