Hippo's data
이상치(outlier) 처리하기 본문
오늘은 이상치를 처리하는 방법에 대해 알아보겠습니다
# 이상치(outlier)란?
데이터의 일반적인 범주에서 크게 벗어난 값들을 의미하는데요
그렇다면 데이터의 일반적인 범주에서 벗어났다고 할 수 있는 기준이 무엇이 있을까요?
1) Z-score 확인
신뢰구간 : 모수(모집단의 값)가 실제로 포함될 것으로 예측되는 범위
신뢰수준 : 신뢰구간에 실제 평균값이 포함될 확률
일반적으로 95%의 신뢰수준을 사용함 ( Z-scroe 1.96 기준 )
Z = ( X_i(i번째 값) - X의 평균 ) / 표준편차
코드로 구현 ( 신뢰수준 95% 이상인 데이터 확인 )
-> df[(abs((df['기준 변수'] - df['기준 변수'].mean())/df['기준 변수'].std())) > 1.96]
2) IQR(Inter Quartile Range)확인
#IQR => 제 3사분위(상위25%) - 제 1사분위(상위 75%)
이상치 > 제 3사분위 + IQR X 1.5
이상치 < 제 1사분위 + IQR X 1.5
코드로 구현
# 이상치를 대체하는 함수 만들기
def changeOutliers(data, column):
x=data.copy()
# Q1, Q3구하기
q1 = x[column].quantile(0.25)
q3 = x[column].quantile(0.75)
# 1.5 * IQR(Q3 - Q1)
iqr = 1.5 * (q3 - q1)
#이상치 대체값 설정하기
Min = 0
if (q1 - iqr) > 0 : Min=(q1 - iqr)
Max = q3 + iqr
# 이상치 대체 -> 최대값 or 최솟값으로
x.loc[(x[column] > Max), column]= Max
x.loc[(x[column] < Min), column]= Min
return(x)
3. 구간화(binning) 하기
-> 연속형 데이터를 구간으로 나누어 범주형으로 변경
1)cut 함수 -> 길이 동일하게
파라미터
bins : 구간화 지점 예) 0, 5, 10
labels : 구간화된 값의 이름
pd.cut(df['기준 변수'], bins = [0, 5, df['기준 변수'].max( ) ], labels =['A', 'B'])
2)qcut 함수 -> 개수 동일하게
# cut 함수의 bins 대신 나눌 구간개수 지정
pd.qcut(df['기준 변수'], 3, labels =['A', 'B', 'C'])
'ML(Machine Learning)' 카테고리의 다른 글
모델 평가 - 분류(Classification) 모델 (0) | 2024.01.06 |
---|---|
변수 선택(Feature selection) - RFE/RFE-CV/UFS (1) | 2024.01.02 |
스케일링(Scaling) (2) | 2024.01.02 |
범주형 데이터 정제하기 - 범주형 인코딩(Categorical Encoding) (0) | 2023.12.31 |
결측치(missing values) 처리하기 (2) | 2023.12.20 |