Pythonで異常値の検出と処理を行う手法

Pythonは、データ解析や機械学習のための多くのライブラリと便利な機能を提供しています。中でも、異常値(外れ値)の検出と処理は多くの場面で非常に重要です。この記事では、Pythonを用いて異常値の検出とその処理を行う基本的なテクニックと応用例について詳しく解説します。

目次

異常値とは

異常値(外れ値)とは、一般的なデータとは異なる極端な値のことを指します。これらは、データ解析や機械学習の精度を低下させる可能性があるため、適切に処理する必要があります。

基本的な検出手法

Z-スコア法

Z-スコアは、データセット内の各データポイントが平均からどれだけ離れているかを示す指標です。

import numpy as np
from scipy import stats

# データセット
data = np.array([1, 2, 2, 2, 3, 1, 1, 15, 2, 2, 2, 3, 1, 1, 2])

# Z-スコアを計算
z_scores = np.abs(stats.zscore(data))

# 閾値より大きいデータを異常値として検出
outliers = np.where(z_scores > 3)

注意点

Z-スコア法は、データが正規分布に従っている場合に最も有効です。正規分布に従っていない場合、この方法は不適切な結果を生む可能性があります。

IQR法(四分位範囲法)

IQR(Interquartile Range)法は、第一四分位数(Q1)と第三四分位数(Q3)を用いて異常値を検出します。

# IQRを計算
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
# 閾値を設定して異常値を検出
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = np.where((data < lower_bound) | (data > upper_bound))

注意点

IQR法は、データが正規分布に従っていない場合でも有用ですが、データの分布に偏りがある場合は注意が必要です。

異常値の処理方法

値の修正

異常値を平均値や中央値で置き換える方法です。

# 異常値をデータセットの平均値で置き換える
data[outliers] = np.mean(data)

値の削除

異常値をデータセットから削除する方法です。

# 異常値を削除
data = np.delete(data, outliers)

応用例

時系列データでの異常値検出

時系列データにおいても、突然の値の変動(スパイク)が発生する可能性があります。このような場合には、移動平均を用いて異常値を検出できます。

import pandas as pd

# 時系列データ(サンプル)
time_series_data = pd.Series([1, 2, 3, 4, 100, 6, 7, 8, 9])

# 移動平均を計算
rolling_mean = time_series_data.rolling(window=3).mean()

# 異常値の検出(移動平均と実際の値との差が大きい場合)
outliers = np.where(abs(time_series_data - rolling_mean) > 20)

テキストデータでの異常値検出

テキストデータにおいては、TF-IDF(Term Frequency-Inverse Document Frequency)を用いて異常値を検出することができます。

from sklearn.feature_extraction.text import TfidfVectorizer
# テキストデータ(サンプル)
docs = ["apple orange banana", "apple banana", "orange banana", "outlier outlier outlier"]
# TF-IDFで特徴ベクトルを生成
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(docs)
# 各ドキュメントのベクトルの平均を計算
mean_vec = np.mean(X.toarray(), axis=0)
# 異常値を検出(平均ベクトルとのコサイン類似度が低い場合)
outliers = np.where(np.dot(X.toarray(), mean_vec) < 0.5)

まとめ

異常値の

検出と処理は、データ分析や機械学習において重要なステップです。Z-スコア法やIQR法など、基本的な検出手法から応用例まで幅広く解説しました。この知識を活用して、より高精度なデータ解析を行ってください。

コメント

コメントする

目次