RobustScaler

入門

3.3.4

RobustScaler

最終更新 2025-11-03 読了時間 1 分
まとめ
  • メディアンと四分位範囲(IQR)を用いて、外れ値に頑健なスケーリングを行う。
  • sklearn.preprocessing.RobustScalerfit_transform で変換し、quantile_range で IQR の範囲を調整する。
  • 極端な外れ値が含まれるデータで、スケールが歪まない正規化を行いたいときに使う。
  • 標準化(StandardScaler)や Min-Max 正規化の概念を先に学ぶと理解がスムーズです
<p><b>RobustScaler</b> はメディアン(第 50 パーセンタイル)と四分位範囲 \(IQR = Q_3 - Q_1\) を用いてスケーリングします。極端な外れ値が存在してもスケールが大きく歪まない点が特徴です。</p>

1. 定義 #

観測値 (x)、メディアン (m = \operatorname{median}(x))、IQR に対し、

$$ z = \frac{x - m}{\operatorname{IQR}} $$

と変換します。quantile_range=(q_1, q_3) を変更すると IQR の定義域を調整できます。

2. Pythonで計算 #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import RobustScaler

rng = np.random.default_rng(5)
clean = rng.normal(loc=50, scale=5, size=400)
outliers = np.array([120, 150, 8, 4, 160])
data = np.concatenate([clean, outliers])

scaler = RobustScaler(quantile_range=(25, 75))
scaled = scaler.fit_transform(data.reshape(-1, 1)).ravel()

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].boxplot(data, vert=False, showfliers=True)
axes[0].set_title("変換前(外れ値あり)")
axes[0].set_xlabel("値")

axes[1].boxplot(scaled, vert=False, showfliers=True)
axes[1].set_title("RobustScaler 適用後")
axes[1].set_xlabel("スケーリング後の値")

plt.tight_layout()
plt.show()

実装例の図

3. 他のスケーラーとの比較 #

スケーラー中心化スケール基準外れ値耐性
StandardScaler平均標準偏差低い
MinMaxScaler最小値max − min低い
RobustScalerメディアンIQR高い

外れ値が多いデータではStandardScalerの平均と標準偏差が歪みやすいため、RobustScalerが第一候補になります。

4. quantile_rangeの調整 #

デフォルトは(25, 75)ですが、範囲を広げると外れ値の影響を受けやすく、狭めるとデータの中心付近だけでスケーリングします。

1
2
3
4
5
# IQR を狭める例
scaler_narrow = RobustScaler(quantile_range=(10, 90))

# IQR を広げる例
scaler_wide = RobustScaler(quantile_range=(5, 95))

一般に(25, 75)で十分ですが、外れ値が極端に多い場合は(10, 90)を試すとよいでしょう。

5. 実務でのポイント #

  • quantile_range を狭めると外れ値の影響をさらに抑えられますが、極端に狭い範囲では情報が失われやすいので注意してください。
  • with_centering=False を指定すると中心化せずにスケーリングのみ行えます。疎行列でメディアンを引くとスパース性が失われるケースで有効です。
  • 学習データで fit した scaler を推論時に transform するのが基本です。デプロイ時には学習済み scaler を必ず一緒に保存します。
  • RobustScaler の後にさらに StandardScaler を重ねる必要は通常ありません。データ分布とモデル特性に合わせ、どのスケーリングが適切かを選択しましょう。

まとめ #

  • RobustScalerはメディアンとIQRを用いたスケーリングで、外れ値に強い。
  • StandardScalerやMinMaxScalerで結果が歪む場合の代替手段として有効。
  • 疎行列ではwith_centering=Falseを指定してスパース性を保つ。
  • StandardScaler — 平均と標準偏差によるスケーリング
  • MinMaxScaler — 最小値・最大値によるスケーリング