Today I Learned (TIL)/Python

[TIL] 머신러닝의 심화 - 데이터분석 프로세스(2)

신짜린 2024. 8. 16. 21:41

머신러닝심화_전처리_tips&titaninc.html
0.70MB

3. 데이터 전처리

- 이상치

 이상치란 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값을 말한다. 이상치를 확인하는 방법으로는 크게 Extreme Studentized Deviation(ESD)와 IQR(Inter Quantile Range)로 2가지가 있다.

 이상치는 주관적인 값으로 데이터 삭제는 분석가가 결정한다. 이상치는 도메인과 비즈니스 맥락에 따라 기준이 달라지고 데이터 삭제 시 품질은 좋아질 수 있지만 정보 손실을 동반하므로 주의해야 한다.

# 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'].qunatile(0.75)
IQR = Q3 - Q1
uppper_limit = Q3 + 1.5*IQR
lower_limit = Q1 - 1.5*IQR

 

- 결측치

 1) 수치형 데이터 결측치

 ▷ 평균값 대치: 대표적인 대치 방법

 ▷ 중앙값 대치: 데이터에 이상치가 많아 평균값이 대표성이 없다면 중앙값을 이용

 2) 범주형 데이터 결측치

 ▷ 최빈값 대치

구분 함수 설명
간단한 삭제 & 대치 df.dropna(axis = 0) 행 삭제
df.dropna(axis = 1) 열 삭제
Boolean Indexing  
df.fillna(value) 특정 값으로 대치(평균, 중앙, 최빈값
알고리즘 이용 sklearn.impute.SimpleImputer 평균, 중앙, 최빈값으로 대치
sklearn.impute.IterativeImputer 다변량대치(회귀 대치)
sklearn.impute.KNNImputer KNN  알고리즘을 이용한 대치
SimpleImputer.statistics_ 대치한 값 확인 가능

 

- 범주형 데이터 전처리: 인코딩 (Encoding)

 머신러닝 모델은 숫자를 기반으로 학습하기 때문에 반드시 인코딩 과정이 필요하다. 인코딩이란 어떤 정보를 정해진 규칙에 따라 변환하는 것을 뜻한다.

 1) 레이블 인코딩(Lable Encoding): 문자열 범주형 값을 고유한 숫자로 할당해 모델이 처리하기 쉬운 수치형으로 데이터를 변환하는 장점이 있지만 순서 간 크기에 의미가 부여되어 모델이 잘못 해석할 수 있다는 단점이 있음

구분 함수 & 패키지 설명
패키지 sklearn.preprocessing.LabelEncoder 인코딩 패키지
메소드 fit 데이터 학습
transform 정수형 데이터로 변환
fit_transform fit과 transform을 연결하여 한번에 실행
inverse_transform 인코딩된 데이터를 원래 문자열로 변환
속성 classes_ 인코더가 학습한 클래스(범주)

 

 2) 원 핫 인코딩 (One - Hot Encoding): 각 범주를 이진 형식으로 변환하는 기법으로 각 범주가 독립적으로 표현되어 순서가 중요도를 잘못 학습하는 것을 방지할 수 있는 장점이 있음. 하지만 범주 개수가 많을 경우 차원의 저주, 모델의 복잡도 증가, 과적합을 유발하는 단점이 있음

구분 함수 & 패키지 설명
패키지
pd.get_dummies 더미 변수
sklearn.preprocessing.OneHotEncoder
원 핫 인코딩 패키지
메소드 fit 데이터 학습
transform 정수형 데이터로 변환
fit_transform fit과 transform을 연결하여 한번에 실행
inverse_transform 인코딩된 데이터를 원래 문자열로 변환
속성

categories 인코더가 학습한 클래스(범주)
get_feature_names_out() 학습한 클래스 이름(리스트)

 

- 수치형 데이터 전처리: 스케일링 (Scaling)

 머신러닝 학습에 사용되는 데이터들은 서로 단위 값이 다르기 때문에 이를 보정하는 과정이 필요하다.

 1) 표준화 (Standardization): 각 데이터에 평균을 배고 표준편차를 나누어 평균을 0 표준편차를 1로 조정하는 방법으로 이상치가 있거나 분표가 치우쳐저 있을 때, 모든 특성의 스케일을 동일하게 맞춰 많은 알고리즘에서 좋은 성능을 내는 장점이 있음. 하지만 표준화는 데이터의 최소 - 최대 값이 정해지지 않는다는 단점이 있음

구분 함수 & 패키지 설명
패키지
sklearn.preprocessing.StandardScaler 스케일링 패키지
메소드
fit 데이터학습(평균과 표준편차를 계산)
transform 데이터 스케일링 진행
속성
mean_ 데이터의 평균 값
scale_, var_ 데이터의 표준 편차,분산 값
n_features_in_ fit 할 때 들어간 변수 개수
feature_names_in_ fit 할 때 들어간 변수 이름
n_samples_seen_ fit 할 때 들어간 데이터의 개수

 

 2) 정규화 (Normalization): 데이터를 0과 1사이 값으로 조정해 모든 특성의 스케일을 동일하게 맞추고 최대 - 최소 범위가 명확하다는 장점이 있음. 하지만 이상치에 영향을 많이 받을 수 있다는 단점이 있음

구분 함수 & 패키지 설명
패키지 sklearn.preprocessing.MinMaxScaler 정규화 패키지
속성 data_min_ 원 데이터의 최소 값
data_max_ 원 데이터의 최대 값
data_range_  원 데이터의 최대-최소 범위

 

 3) 로버스트 스케일링 (Robust Scaling): 중앙값과 IQR을 사용하여 스케일링해 이상치의 영향에 덜 민감하다는 장점이 있지만 표준화와 정규화에 비해 덜 사용된다는 단점이 있다.

구분 함수 & 패키지 설명
패키지 sklearn.preprocessing.RobustScaler 로버스트 스케일링 패키지
속성 center_ 훈련 데이터의 중앙값