AI·빅데이터 융합 경영학 Study Note

[ML수업] 8주차 실습1: feature engineering- Missing Data Handling 본문

AI·ML

[ML수업] 8주차 실습1: feature engineering- Missing Data Handling

SubjectOwner 2023. 11. 30. 15:47
##### Check missing values & Dropping

 

print(X_train.isnull().sum(), '\n')
print(X_test.isnull().sum())

'''
age_oldest                0
age_youngest              0
duration_previous      9318
'''

 

 

이 코드는 'state', 'car_value', 'risk_factor', 'C_previous', 'duration_previous' 열 중 하나라도 누락된 행을 제거하고, 제거된 행들을 제외한 데이터로 새로운 훈련 데이터(X_train_drop)와 테스트 데이터(X_test_drop)를 생성합니다. 이를 통해 누락된 값이 있는 행들을 처리할 수 있습니다.

X_train_drop = X_train.dropna(subset=['state','car_value','risk_factor','C_previous','duration_previous'])
X_test_drop = X_test.dropna(subset=['state','car_value','risk_factor','C_previous','duration_previous'])

 

 

(참고) X_train에서 누락된 값을 가진 열을 기준으로 행을 제거하는 코드 예제입니다.  이를 통해 누락된 값이 있는 열을 가진 행들이 제거되어 새로운 훈련 데이터가 생성됩니다. (데이터셋의 이름은 원래의 "X_train"과 동일합니다.)

X_train.dropna(subset=X_train.isnull().sum()[X_train.isnull().sum().gt(0)].index.values)

 

# 훈련 데이터에서 제거한 행들과 동일한 행들을 테스트 데이터 X_test에서도 제거하여 새로운 테스트 데이터를 생성합니다.
X_test_cleaned = X_test.dropna(subset=X_train.isnull().sum()[X_train.isnull().sum().gt(0)].index.values)

 

결과를 학인하는 코드 

아래는 X_train_drop 데이터 프레임에서 각 열(특성)별로 누락된 값의 개수를 계산하여 출력하는 코드 예제입니다. 

X_train_drop.isnull().sum()
'''
group_size           0
car_age              0
age_oldest           0
'''

 

### Imputation- 연속형 피처의 결측값 대체-
*Method-1: Univariate Imputation*

 

X_train 및 X_test 데이터 프레임에서 con 변수에 해당하는 열(특성)에 누락된 값이 얼마나 있는지를 계산하고 출력하는 코드 예제입니다.

print(X_train[con].isnull().sum(), '\n')
print(X_test[con].isnull().sum())

 

 

 SimpleImputer를 사용하여 'median' 전략을 선택하고, 이 전략을 사용하여 연속형 변수 'con'의 누락된 값을 대체하기 위한 Imputer를 훈련합니다.

- strategy="mean": 평균 대체
- strategy="median": 중위수 대체
- strategy="most_frequent":최빈값 대체
# SimpleImputer를 사용하여 'median' 전략을 선택하고, 연속형 변수(con)의 누락된 값을 대체하기 위해 모델을 훈련합니다.
imputer_con = SimpleImputer(strategy="median")

# 훈련 데이터 X_train에서 연속형 변수(con)의 누락된 값을 대체하기 위해 Imputer를 훈련합니다.
imputer_con.fit(X_train[con])

그걸 실행시키는 코드

imputer_con.transform(X_train[con])
X_train_imp = X_train.copy()
X_train_imp[con] = imputer_con.transform(X_train[con])

 

# 테스트 데이터에 imputer 적용
X_test_imp = X_test.copy()
X_test_imp[con] = imputer_con.transform(X_test[con])

#print(X_test_imp[con].isnull().sum())

 

### Imputation- 연속형 피처의 결측값 대체-
*Method-2: Multivariate Imputation*
이 코드는 먼저 IterativeImputer 객체를 생성하고 최대 반복 횟수(max_iter)를 설정합니다. 그런 다음, 해당 객체를 사용하여 훈련 데이터 X_train 및 테스트 데이터 X_test의 연속형 변수 'con'의 누락된 값을 반복적으로 대체합니다. 
이 코드를 어디에 쓰는지 모르겠음...
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# 훈련 데이터와 테스트 데이터의 복사본을 생성합니다.
X_train_imp, X_test_imp = X_train.copy(), X_test.copy()

# IterativeImputer 객체를 생성하고 최대 반복 횟수(max_iter)를 설정합니다.
imp = IterativeImputer(max_iter=10)

# IterativeImputer를 사용하여 훈련 데이터 X_train의 연속형 변수 'con'의 누락된 값을 대체합니다.
X_train_imp[con] = imp.fit_transform(X_train[con])

# IterativeImputer를 사용하여 테스트 데이터 X_test의 연속형 변수 'con'의 누락된 값을 대체합니다.
X_test_imp[con] = imp.transform(X_test[con])

 

 

##### Categorical feature 의 결측값 대체 -최빈값으로 대체
imp = SimpleImputer(strategy="most_frequent")
X_train_imp[cat] = imp.fit_transform(X_train_imp[cat])
X_test_imp[cat] = imp.transform(X_test_imp[cat])

 

그 결과를 확인하는 코드

X_train_imp[cat].info()