규범을 넘어서: 이상값의 세계 탐색
이상치가 데이터 과학자를 긴장하게 만드는 방법

이상값은 데이터 집합의 대부분의 지점에서 비정상적인 거리에 있는 지점입니다. 머신 러닝 문제 해결에 대해 자세히 알아보기 전에 필요하지 않은 이상값을 제거하는 것이 핵심 단계입니다. 아웃라이어의 근원에 대해 논의해 봅시다.
이상값의 일반적인 원인
- 데이터 입력 오류(인간 오류)
- 실험적 오류
- 측정 오류(기기 오류)
- 샘플링 오류(다양한/잘못된 소스에서 데이터 추출)
- 의도적 오류(탐지 방법을 테스트하기 위해 생성된 더미 이상값)
- 자연 오차(오류가 아님, 데이터의 참신함)
1. IQR(사분위 범위)
IQR은 데이터 세트의 중간 50%입니다. 세 번째 사분위수와 첫 번째 사분위수(Q3 — Q1) 사이의 값 범위입니다
. 데이터 세트를 사분위수로 나누어 변동성을 측정하는 데 사용됩니다. 사분위수는 데이터가 오름차순으로 정렬된 경우 데이터를 4개 부분으로 나누는 값입니다.
IQR = Q3 — Q1
Q1 = 1사분위수(하위 25% 데이터를 나누는 25번째 백분위수)
Q2 = 2사분위수(중앙값은 50번째 백분위수)
Q3 = 3사분위수(상위 25%를 나누는 75번째 백분위수) 데이터의 %)
참고 : 백분율과 백분위수는 서로 다른 두 가지입니다. 25번째 백분위수가 8이면 단순히 데이터의 25%가 8 미만임을 의미합니다. 75번째 백분위수가 40이면 단순히 데이터의 75%가 40 미만임을 의미합니다.
데이터 값 < Q1–1.5(IQR) 또는 데이터 값 > Q3+1.5(IQR)이면 이상값으로 처리됩니다.

#Python code for finding outliers
import numpy as np
data = [1,4,6,3,500,24,53]
sort_data = np.sort(data)
Q1 = np.percentile(data,25)
Q3 = np.percentile(data,75)
IQR = Q3-Q1
low_limit = Q1 - 1.5(IQR)
upper_limit = Q3 + 1.5(IQR)
outlier = []
for i in data:
if(i>upper_limit or i<low_limit):
outlier.append()
return outlier
데이터 포인트가 평균에서 얼마나 떨어져 있는지 알려주는 표준 점수라고도 합니다. 데이터 포인트가 표준 편차의 평균에서 얼마나 벗어나는지 알려줍니다. 데이터가 정규 분포를 따르는 경우 데이터가 3 표준 편차까지 99.7%의 점을 포함한다는 것을 알고 있습니다. 양쪽에서 이상값을 그 이상으로 계산할 수 있습니다.
따라서 z-score가 2.5이면 평균보다 2.5 표준편차가 높다고 하고 -2.5이면 평균보다 2.5 표준편차가 낮다고 합니다. 따라서 우리는 z-score가 각각의 값이 떨어진다는 것을 의미하는 위 또는 아래의 표준편차가 없다는 결론을 내릴 수 있습니다.
z-score의 주요 이점은 얼마나 많은 값이 이상치인지를 %로 알려준다는 것입니다.
Z 점수 = (x-μ)/σ
x는 표본의 관측치
x̄는 표본의 관측치의 평균
σ는 표본의 관측치의 표준 편차

3. 데이터 정렬 및 극단값 보기
이것은 데이터를 정렬할 수 있는 기본 방법입니다. 그런 다음 극단값을 찾으면 이상값이 됩니다.
예를 들어 나이는 4,6,9,2,10,12,102로 지정되었습니다.
1단계: 데이터 정렬: 2, 4,6,9,12,102
2단계: 우리가 볼 수 있는 극단값 지정 102는 극단값이므로 이상치가 될 수 있습니다.
4. 산점도, 박스플롯 플로팅
- Scatterplot : 두 변수 사이에 패턴이 있는지 확인할 수 있는 훌륭한 지표입니다. 숫자 데이터를 쌍으로 만들거나 두 변수 간의 관계를 결정할 때 사용됩니다. 하지만 이것뿐만 아니라 이상치 탐지에도 사용할 수 있습니다.
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv("heart.csv")
fig,ax = plt.subplots(figsize = (10,6))
# Scatter with positive examples
pos = ax.scatter(df.age[df.target==1], df.thalach[df.target == 1], color="salmon", label="Heart Disease")
# Scatter with negative examples
neg = ax.scatter(df.age[df.target==0], df.thalach[df.target == 0], color="lightblue", label="No Heart Disease")
#customization
plt.title("Max heart rate in comparison to age")
plt.xlabel("Age")
plt.ylabel("Max heart rate")
plt.legend()
plt.show()
Visualization of Scatter plot
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv("diabetes.csv")
#visualazing each feature to detect the presence of outliers
fig, axis = plt.subplots(nrows=1, ncols=8, figsize=(16, 6))
sns.boxplot(data=df[['Pregnancies']], ax=axis[0]);
sns.boxplot(data=df[['Glucose']], ax=axis[1]);
sns.boxplot(data=df[['BloodPressure']],ax=axis[2]);
sns.boxplot(data=df[['SkinThickness']], ax=axis[3]);
sns.boxplot(data=df[['Insulin']], ax=axis[4]);
sns.boxplot(data=df[['BMI']], ax=axis[5]);
sns.boxplot(data=df[['DiabetesPedigreeFunction']],ax=axis[6]);
sns.boxplot(data=df[['Age']], ax=axis[7]);
Visualization of Boxplot
읽어 주셔서 감사합니다! 이 작품을 즐겼고 내 작품을 더 읽고 싶다면 Medium에서 나를 팔로우하는 것을 고려하십시오. 앞으로 더 많은 정보를 공유할 수 있기를 기대합니다.