Outliers

고은서·2023년 12월 17일
0

Data Preprocessing

목록 보기
3/10
post-thumbnail

5. 이상치 처리

5.1 이상치

5.1.1 이상치란?

  • 일부 관측치의 값이 전체 데이터의 범위에서 크게 벗어난 극단적인 값을 갖는 것
  • 분산을 과도하게 증가시켜 검정력, 예측력 등 통계적 특성을 악화시킴
  • 전체 데이터수가 많으면, 이상치의 영향이 감소함

5.1.2 이상치 발생원인

  • 데이터 입력 오류
    - 데이터를 수집하는 과정에서 발생할 수 있는 에러
    - 전체 데이터의 분포를 보면 쉽게 발견 가능
  • 측정 오류
    - 데이터를 측정하는 과정에서 발생하는 에러
  • 실험 오류
    - 실험조건이 동일하지 않은 경우 발생
  • 고의적인 이상값
    - 자기 보고식 측정(Self Reported Measure)에서 나타나는 에러
    - 정확하게 기입한 값이 이상값으로 보일 수 있음
  • 표본추출 에러
    - 데이터를 샘플링(Sampling)하는 과정에서 나타나는 에러

5.2 이상치 검출

5.2.1 이상치 검출 방법

  • 개별 데이터 관찰
    - 전체 데이터의 추이나 특이 사항을 관찰하여 이상값 검출
  • 통계 기법(값) 이용
    - 통계 지표 데이터(평균, 중앙값, 최빈값)와 데이터 분산도(범위, 분산)를 활용한 이상값 검출
  • 시각화 이용
    - 확률 밀도 함수, 히스토그램, 시계열 차트 등
  • 머신 러닝 기법 이용
    - 데이터 군집화를 통한 이상값 검출
    - 주어진 데이터를 K개의 클러스터로 묶고, 각 클러스터와 거리 차이의 분산을 최소화하는 방식의
    • K-평균 군집화 알고리즘 등이 있음

5.2.2 단변량 이상치 검출 방법

변수가 하나인 단변량(univariate) 데이터에서 이상치 기준을 정하여 이상치를 탐색하고 검정(test)

표준화 점수

  • 일관된 비율로 이상치를 탐색할 수 있음
  • |Z| > 3 이면 이상치로 간주
  • 수정된 표준화 점수: 데이터의 수가 적은 경우 적합함

사분위수 범위

  • Q1 - 1.5 IQR보다 작거나 Q3+1.5 IQR보다 큰 경우 이상치로 간주
  • 일반적으로 BOXPLOT을 이용할 때 사용한느 방법

5.2.3 단변량 이상치 검출 실습

import warnings

# hide warnings
warnings.filterwarnings("ignore")

import pandas as pd
from scipy.stats import t, zscore


df = pd.DataFrame({'x':[4, 5, 6, 2, 12, 4, 3, 1, 2, 3, 23, 5, 3]})

Z-score를 이용한 이상치 검출

z = zscore(df.x)
print('Z-score Outliers:', df.x[(z<-3)|(z>3)].values)

IQR 이용한 이상치 검출

# seaborn boxplot 이용
import seaborn as sns
sns.boxplot(df.x)

# pandas를 이용
Q1 = df.x.quantile(0.25)
Q3 = df.x.quantile(0.75)
IQR = Q3 - Q1
ols = df.x[(df.x < (Q1 - 1.5 * IQR))|(df.x > (Q3 + 1.5 * IQR))]
print('IQR Outliers 1:', ols.values)

# scikit_posthocs 이용
import scikit_posthocs as sp
print('IQR Outliers 2:', sp.outliers_iqr(df.x, ret = 'outliers'))

Grubb's test 이용한 이상치 검출

  • 모집단이 정규 분포를 만족하는 단변량 자료에서 하나의 이상치를 검정하는 방법
  • 가설: H0(이상치가 없다), H1(이상치가 하나는 있다)
  • 검정통계량
# Grubb's test(ESD test)
# scikit_posthocs 이용
import scikit_posthocs as sp

# outliers_grubbs는 inliers를 반환
inliers = sp.outliers_grubbs(df.x)
outliers = df.x[(df.x<inliers.min())|(df.x>inliers.max())]

print('Grubb\'s Outliers:', outliers.values)

Grubb's test 이용한 이상치 검출

  • 모집단이 정규 분포를 만족하는 단변량 자료에서 하나의 이상치를 검정하는 방법
  • 가설: H0(이상치가 없다), H1(이상치가 하나는 있다)
  • 검정통계량

5.2.4 다변량 이상치 검출 기법

5.2.4 다변량 이상치 검출 실습

5.3 이상치 처리

포함(inclusion)

  • 데이터 세트에 이상치를 그대로 유지
  • 이상현상의 파악이 목적인 경우 주로 사용

수정(correction)

  • 이상치가 오류임이 판정될 경우 올바른 값으로 수정
  • 거의 발생하지 않음

제거(deletion)

  • 결측값으로 대체 후 결측값 처리
  • 데이터의 손실이 발생 → 자유도의 감소 → 통계적 검정력 저하
  • 표본의 수가 충분하고 결측값이 10-15% 이내일 때에는 결측값을 제거한 후 분석하여도 결과에 크게 영향을 주지 않음
  • 일반적인 추세를 구하는 것이 목적일 경우 사용

교체(replacement)

  • 표본 평균과 같은 대표값이나 극단값으로 교체
  • 대표값으로 교체할 경우 → 잔차 변동의 왜곡이 발생 → 잘못된 통계적 결론 유도
  • 모수 추정 시 편향(bias) 발생
  • 일반적으로 선호하는 방법

조정(accomodation)

  • 이상치는 그대로 유지하나 비모수 통계와 같이 이상치에 영향이 적은 방법을 적용

변환(transformation)

  • 이상값에 자연로그를 취해서 값을 감소시킴

데이터 분리(data splitting)

  • 이상값이 많을 경우에 사용하는 방법으로 서로 다른 그룹으로 통계적인 분석을 실행하여 처리
  • 각각의 그룹에 대해서 통계적인 모형을 생성하고, 결과를 결합하는 방법을 사용함
profile
cities and data

0개의 댓글

관련 채용 정보