スポンサーリンク

異常値を含むデータのスケーリング方法 – ロバストスケーリングの活用

記事内に広告が含まれています。

データ分析や機械学習において、特徴量のスケーリング(標準化や正規化)は非常に重要です。

しかし、データに異常値(外れ値)が含まれている場合、一般的な標準化や正規化手法では適切にスケーリングできないことがあります。

そこで、異常値の影響を抑えながらデータをスケーリングする手法として、ロバストスケーリング(Robust Scaling) が利用されます。

スポンサーリンク

一般的なスケーリング手法とその問題点

Min-Maxスケーリング

Min-Maxスケーリングは、特徴量を 最小値0、最大値1の範囲に収める 方法です。

問題点:異常値があると、最小値と最大値が極端になり、スケーリングが大きく影響を受ける。

Zスコア標準化(標準化)

Zスコア標準化は、データの平均を0、標準偏差を1に変換する方法です。

( は平均、 は標準偏差)

問題点:異常値の影響で平均と標準偏差が歪むため、スケーリングのバランスが崩れることがある。

スポンサーリンク

ロバストスケーリングとは?

ロバストスケーリング(Robust Scaling)は、データの中央値(50%分位点)と四分位範囲(IQR)を利用してスケーリングする手法です。

具体的な変換式は以下の通りです。

$$X_{\text{scaled}} = \frac{X – \text{median}(X)}{IQR(X)}$$​

ここで、

  • median(X): データの中央値
  • IQR(X) = Q3 – Q1: 第3四分位(Q3)と第1四分位(Q1)の差(四分位範囲)

ロバストスケーリングのメリットは以下のとおりです。

  • 異常値の影響を受けにくい
  • データの中心(中央値)を基準にスケーリングするため、極端な値によるスケールの歪みを防ぐ

ロバストスケーリングのPython実装

実際にPythonでロバストスケーリングを適用する方法を紹介します。

ライブラリのインポート

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import RobustScaler

データの準備

異常値を含むサンプルデータを作成します。

data = np.array([[10], [12], [14], [16], [18], [20], [100]])  # 100が異常値

一般的な標準化(Zスコア)とロバストスケーリングの比較

from sklearn.preprocessing import StandardScaler

# 標準化(Zスコア)
scaler_standard = StandardScaler()
data_standardized = scaler_standard.fit_transform(data)

# ロバストスケーリング
scaler_robust = RobustScaler()
data_robust_scaled = scaler_robust.fit_transform(data)

# 結果の表示
print("標準化(Zスコア):", data_standardized.flatten())
print("ロバストスケーリング:", data_robust_scaled.flatten())

スケーリング結果の可視化

plt.figure(figsize=(8, 4))
plt.boxplot([data.flatten(), data_standardized.flatten(), data_robust_scaled.flatten()], labels=['Original', 'StandardScaler', 'RobustScaler'])
plt.title("スケーリング手法の比較")
plt.show()

ロバストスケーリングの適用ケース

ロバストスケーリングは、以下のような場合に特に有効です。

  • 金融データの前処理(株価や収入データなどは異常値が多い)
  • センサーデータ(ノイズの影響を受けやすい)
  • 医療データ(異常値が存在する可能性が高い)
  • マーケティングデータ(顧客の購買金額や滞在時間に大きな偏りがある)

まとめ

異常値を含むデータのスケーリングには、ロバストスケーリングが有効であることを説明しました。

  • 一般的なスケーリング手法(Min-MaxスケーリングやZスコア標準化)は異常値の影響を受けやすい。
  • ロバストスケーリングは、中央値と四分位範囲を用いるため、異常値に強い
  • Pythonの RobustScaler を使えば簡単に適用できる。

データの特性に応じて適切なスケーリング手法を選択することで、分析や機械学習モデルの精度向上が期待できます。

タイトルとURLをコピーしました