【Python】データマイニング分析とクリーニング - 外れ値(外れ値)の処理方法まとめ


この記事へのリンク: https://blog.csdn.net/weixin_47058355/article/details/129949060?spm=1001.2014.3001.5501

序文

外れ値処理の重要性は、データ分析の精度と信頼性を向上させることです。外れ値は平均や分散などのデータの統計的特性に影響を与えることが多く、誤った結論や予測につながります。さらに、外れ値はモデルのフィッティング効果を妨げ、データを説明するモデルの能力を弱める可能性があります。
したがって、データ分析タスクでは、通常、データの品質と正確性をできる限り確保するために外れ値に対処する必要があります。一般的に使用される外れ値の処理方法には、外れ値の削除、外れ値の置換、外れ値の欠損値としての処理などが含まれます。データの種類とタスクの要件に応じて、特定のメソッドを選択して実装する必要があります。この記事では、kaggle: Portal
にある Titanic データセットを使用します。

1. 外れ値を特定する

1.1 箱ひげ図の外れ値の処理

箱ひげ図 (箱ひげ図) は、データの分布を表示するために使用されるグラフであり、データ内の外れ値を効果的に検出できます。箱ひげ図は、最小値、下位四分位 (Q1)、中央値 (Q2)、上位四分位 (Q3)、最大値の 5 つの数値点で構成されます。
箱ひげ図では、ボックスの上端と下端はそれぞれデータの上位四分位 (Q3) と下位四分位 (Q1) を表し、ボックス内の線分はデータの中央値 (Q2) を表します。ボックスの上部と下部は「ひげ」と呼ばれる 2 本の線分で結ばれており、通常はデータセット内の外れ値ではない最大値と最小値まで伸びています。
データに外れ値がある場合、それらの外れ値は他のデータ ポイントから離れた別個のポイントとしてプロットされます。箱ひげ図を見ると、これらの外れ値がデータ ポイントの正規分布に従っていないため、つまり「ひげ」の外側にあるため、簡単に特定できます。これが箱ひげ図で外れ値を検出する方法です。
IQR (四分位範囲) は四分位範囲を指し、データの上位四分位 (Q3) と下位四分位 (Q1) の間の距離です。外れ値の検出に箱ひげ図を使用する場合、通常、外れ値のしきい値範囲は IQR に基づいて決定されます。

具体的には、外れ値のしきい値は次の式を使用して計算できます。

上限: Q3 + 1.5 * IQR 下限: Q1 - 1.5 * IQR データ ポイントが下限より小さいか、上限より大きい場合、そのデータ ポイントは外れ値とみなされます。

たとえば、次のようなデータのセットがあるとします: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22
]。計算すると、Q1=5、Q2=11、Q3=17となり、IQR=12(すなわち17-5)となる。上式によると、下限は-11、上限は33となります。したがって、このデータセット内の -11 未満の値または 33 を超える値は外れ値とみなされます。

IQR を使用して外れ値を検出することで、データ内の外れ値をより正確に特定し、特定の分布形状に過度に依存するリスクを回避できます。

#封装好的函数 可以随意调用
def outliers_proc(data, col_name, scale=1.5):
    """
            data:接收pandas数据格式
            col_name: pandas列名
            scale: 尺度
    """
    data_col = data[col_name]
    Q1 = data_col.quantile(0.25) # 0.25分位数
    Q3 = data_col.quantile(0.75)  # 0,75分位数
    IQR = Q3 - Q1
    data_col[data_col < Q1 - (scale * IQR)] = Q1 - (scale * IQR)
    data_col[data_col > Q3 + (scale * IQR)] = Q3 + (scale * IQR)
    return data[col_name]
data['Fare'] = outliers_proc(data, 'Fare')
print(data['Fare'].max())
data['Fare']

ここに画像の説明を挿入
ここに画像の説明を挿入

さらに、データは箱ひげ図として視覚化することもできます。

import matplotlib.pyplot as plt
import numpy as np

# 绘制箱线图
fig, ax = plt.subplots()
ax.boxplot(data['Fare'])

# 添加标题和标签
ax.set_title('Box Plot')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')

# 显示图形
plt.show()

ここに画像の説明を挿入

1.2 3α原則

正規分布の 3α 原理は、正規分布する確率変数の場合、観測値の約 68% が平均プラスまたはマイナス標準偏差の間に収まり、観測値の約 95% が平均プラスまたはマイナス 2 標準偏差の間に収まることを意味します。観測値の約 99.7% は、平均プラスマイナス 3 標準偏差の間に収まります。このルールは、データ ポイントが異常か外れ値かを判断するために使用できます。データ ポイントの値が平均からプラスまたはマイナス 3 標準偏差の範囲外にある場合、そのデータ ポイントは異常値または異常値とみなされます。

def find_anomalies(random_data):
    random_data_std = random_data.std()
    random_data_mean = random_data.mean()
    anomaly_cut_off = random_data_std * 3

    lower_limit  = random_data_mean - anomaly_cut_off 
    upper_limit = random_data_mean + anomaly_cut_off

    random_data[random_data <lower_limit] = lower_limit
    random_data[random_data >upper_limit] = upper_limit

    return random_data
find_anomalies(data['Fare'])
print(data['Fare'].max())
data['Fare']

ここに画像の説明を挿入

1.3ボックスコックス

1964 年にボックスとコックスによって提案された変換により、情報を失うことなく、線形回帰モデルが線形性、独立性、等分散性、正規性を満たすことができます。実際のデータはこれら 4 つの特性に完全に適合しないことが多く、ほとんどのデータ統計ではデータが正規分布していることが必要です (ピアソン相関係数など)。したがって、boxcox を通じてデータ形式を変更することができます。
この列のデータはすべて 0 より大きく、0 以下にすることはできません。そうでない場合は、エラーが報告されます。データは正である必要があります。
ここに画像の説明を挿入

from scipy.stats import boxcox
data['Fare']=data['Fare']+1
boxcox_transformed_data = boxcox(data['Fare'])
boxcox_transformed_data

ここに画像の説明を挿入

2. 外れ値の処理

2.1 打ち切り手法

打ち切り方法は、外れ値のしきい値より大きい数値が最大しきい値となり、外れ値のしきい値より小さい数値が最小しきい値になります。たとえば、前に書いた箱ひげ図は打ち切り手法です。

2.2 単一変数の置換

外れ値のしきい値を超えるものは、最大値、最小値、平均値、最頻値などの単一の変数に置き換えられます。

2.3 欠損値への置換

外れ値のしきい値の外側にあるものはすべて欠損値に置き換えられ、これらの欠損値は欠損値の充填方法によって埋められます。

要約する

箱ひげ図を使って外れ値を検出して欠損値に置き換えたり、閾値を超えた値を置き換えて欠損値を埋めるなど、識別方法や処理方法を自由に組み合わせることができます。この記事が役に立った場合は、「いいね」を押してコメントを追加してください。コメント欄での交換歓迎です。

おすすめ

転載: blog.csdn.net/weixin_47058355/article/details/129949060