데이터 분석 과정 및 결과에서 영향을 미쳐 분석 결과 및 의사 결정의 왜곡을 불러일으킬 수 있음
| 오류데이터 | 실제 데이터 |
|---|---|
| 센서 혹은 시스템 오류로 인해 잘못된 값을 수집 | 극단적 관측치로 인해 일반적 관측범위를 벗어남 |

| Z-Score | IQR(Interquartile Range) |
|---|---|
| 해당 데이터가 평균으로부터 얼마의 표준편차 만큼 벗어나있는지를 의미 | 시분위수 개념 기반의 이상치 판단 방안으로 데이터 흩어짐정도를 기반으로 이상치를 정의 |
| 일반적으로 -3 이하 3이상 Z값 관측치는 이상치로 정의 | Min, Max 범위를 벗어난 관측치는 이상치로 정의 |

import numpy as np
import pandas as pd
Z-Score 수식
- Z = (x-mean)/(std.dev)
- Z = (해당 관측치 - 관측치 변수 평균)/ 관측치 변수의 표준편차)
# Z-score 컬럼 생성
click_copy['z-score'] = (click_copy['num_click'] = np.mean(click_copy['num_click'])) / np.std(click_copy['num_click'])
click_copy.head()
#원본데이터 확인
click_copy.describe()
#이상치 처리하기 - 삭제
#이상치 제거 후 데이터 차원 확인
click_copy = click_copy[(click_copy['z-score'] < 3) & (click_copy['z_score'] > -3) ]
click_copy.info()
#z-score의 min,max 가 절대값 3을 초과하지않는 것을 확인
click_copy.describe()
Scipy 내 z-score 함수
from scipy.state import zscore
click_copy = click_data.copy()
click_copy['z-score'] = zscore(click_copy['num_click'])
click_copy = click_copy[(click_copy['z_score'] < 3 ) & (click_copy['z_score'] > -3) ]
print(click-copy.shape) #기존 결과와 동일
q1 = click_copy['num_click'].quantile(0.25)
q3 = click_copy['num_click'].quantile(0.75)
#IQR 구하기
iqr = q3 - q1
#이상치 제거하기
#원데이터 복사
click_copy = click_copy[ (click_copy['num_click'] > (q1 - 1.5*iqr)) & (click_copy['num_click'] < (q3 + 1.5*iqr)) ]
click_copy.describe()
#데이터 확인
print(np.shape(click_copy))
#이상치 대체
#원데이터 복사
#대체 기준 정의
max_click = 1000
#정의된 기준으로 대체후 비교를 위해 기존거 복사
colick_copy['new_num_click'] = click_copy['num_click']
#이상치 대체
click_copy.loc[click_copy['new_num_click'] > max_click, 'new_num_click'] = max_click
click_copy.describe()
click_copy.info()