티스토리 뷰

카테고리 없음

이상치(Outlier)

루돌푸다요 2024. 3. 14. 16:54

이상치(Outlier) 란 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말해요 .

1. Extrems Studentized Deviation(ESD) 이용한 이상치 발견 

  • 데이터가 정규분포를 따른다고 가정할 떄, 평균에서 표준편차의 3배 이상 떨어진 값 
  • 모든 데이터가 정규 분포를 따르지 않을 수 있기 때문에 다음 상황에서는 제한됨 
    -데이터가 크게 비대칭 일 때 , 샘플 크기가 작을 경우 

2. IQR (inter Quantile Range) 를 이용한 이상치 발견 

  • ESD 와 동일하게 데이터가 비대칭적이거나 샘플사이즈가 작은 경우 제한됨 

Box plot : 데이터의 사분위 수를 포함하여 분포를 보여주는 시각화 그래프, 상자-수염 그림이라고도 함 

사분위 수 : 데이터를 순서에 따라 4등분 한 것 

  • 이상치 발견 방법 
    - ESD 를 이용한 처리 
더보기

import numpy as np

mean = np.mean(data)

std = np.std(data)

upper_limit = mean + 3*std

lower_limit =mean - 3*std 

 

  • IQR 을 이용한 처리 (box plot)
더보기

Q1 = df[' column'. quantile(0.25)

Q3 = df[' column'].quantile(0.75)

IQR = Q3 - Q1 

upper_limit = Q3 + 1.5*IQR

lower_limit = Q1 - 1.5*IQR

 

조건필터링을 통한 삭제(a.k.a boolean indexing) : df[df['column'] > limit_value]

더보기

이상치는 사실 주관적인 값입니다. 그 데이터를 삭제 할지 말지는 분석가가 결정할 몫입니다. 다만, 이상치는 도메인과 비즈니스 맥락에 따라 그 기준이 달라지며, 데이터 삭제 시 품질은 좋아 질 수 있지만 정보 손실을 동반하기 때문에 이상치 처리에 주의해야 합니다. 단지, 통계적 기준에 따라서 결정 할 수도 있다는 점 알아두세요 .

 

또한, 이상 탐자(Anomaly Detection) 이라는 이름으로 데이터에서 패턴을 다르게 보이는 개체 또는 자료를 찾는 방법으로도 발전 할 수 있습니다. 예를 들면 사기탐지, 사이버 보안 등 입니다. 

  • ESD 이상치 처리 

import numpy as np

mean = np.mean(data)

std = np.std(data)

upper_limit = mean + 3*std

lower_limit =mean - 3*std 

print(upper_limit, lower_limit)

 

 

tips_df['total_bill'].head(3)

cond = tips_df['total_bill'] > 46.4 

 

tips_df[cond]

 

  • IRQ 을 이용한 이상치 확인 (boxplot) 

sns.boxplot(tips_df['total_bill'] 

 

Q1 = df[' column'. quantile(0.25)

Q3 = df[' column'].quantile(0.75)

IQR = Q3 - Q1 

upper_limit = Q3 + 1.5*IQR

lower_limit = Q1 - 1.5*IQR

print(q1, q3, iqr, upper_limit2, lower_limit2) 

위 그래프 왼쪽 아래 모서리의 수치가 13.34 위에가 24.12 그 둘의 차이가 1.077 그리고 제일 위에 있는 수치가 40.29 제일 낮은 수치 -2.8

 

cond2 = (tips_df['total_bill'] > upper_limit2)

tips_df[cond2]