Applied Predictive Modeling(1) - Choosing ML Problems

2021. 3. 7. 15:38[AI]/Machine Learning

[Learned Stuff]

Key Points

  • Modeling Process

  • Leakage

  • Balancing Samples

  • Log-Transform


[New Stuff]

[Modeling Process (Supervised Learning)]

  1. Target 분포 확인
    • Regression or Classification 문제로 보기

 

  1. EDA / Data Preprocessing 진행

 

  1. Baseline Model 만들기
    • Time Series : 당일 예측값 = 전일 Target 값
    • Regression : Target의 평균값
    • Classification : Target의 최빈값

 

  1. Model 성능 비교 & Hyperparameter 최적화

 

  1. Best Model 찾기

 

[Leakage]

  • Model의 성능이 지나치게 좋게 나올 경우 Leakage Issue가 발생했는지 확인해봐야 합니다.
    • Test Data의 정보가 Train Data에 포함되어 있으면 정보를 leaking(누수)한다고 볼 수 있습니다.

 

발생 원인

  1. Train / Test Contamination
    • train / test data를 제대로 나누지 못할 때 leakage 발생

 

  1. Target Leakage
    • Train Data의 특정 feature만으로 Target값을 정확히 예측 할 때 leakage 발생
    • 이럴 경우, 해당 feature 만으로 정확하게 예측할 수 있으므로 굳이 머신러닝 Model을 만들 필요가 있는지 생각해봐야 함

 

[Balacning Samples (Classification Model)]

  • 불균형한 Data에서 적은 범주의 Data는 높은 가중치를 주어 Oversampling, 높은 범주의 Data는 낮은 가중치를 주어 Undersampling 하는 방법이 있습니다.

 

Code

#트리 기반 모델에 적용 가능
# class_weight='balanced' 로 해주면 됨
model = DecisionTreeClassifier(class_weight='balanced', random_state=42)

 

[Log-Transform]

  • Target의 분포도에 Log 변환을 취해주면 비대칭 분포 형태를 정규 분포 형태로 바꿔줄 수 있습니다.
    • 예측 모델 성능을 개선시킬 수 있음

 

Target 분포도 형태

Target Freuqncy Types

 

Code

from sklearn.compose import TransformedTargetRegressor

# pipe 라는 pipe_model로 만든 model이 있다고 가정
# X_train / y_train / X_validation / y_validation DataFrame 있다고 가정

# target 분포도에 log 취해주는 라이브러리
transformed = TransformedTargetRegressor(regressor=pipe,
                                func=np.log1p, inverse_func=np.expm1)

# Train Data에 fit
transformed.fit(X_train, y_train)

# R2 score 확인
transformed.score(X_validation, y_validation)
728x90