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)]
- Target 분포 확인
- Regression or Classification 문제로 보기
- EDA / Data Preprocessing 진행
- Baseline Model 만들기
- Time Series : 당일 예측값 = 전일 Target 값
- Regression : Target의 평균값
- Classification : Target의 최빈값
- Model 성능 비교 & Hyperparameter 최적화
- Best Model 찾기
[Leakage]
- Model의 성능이 지나치게 좋게 나올 경우 Leakage Issue가 발생했는지 확인해봐야 합니다.
- Test Data의 정보가 Train Data에 포함되어 있으면 정보를 leaking(누수)한다고 볼 수 있습니다.
발생 원인
- Train / Test Contamination
- train / test data를 제대로 나누지 못할 때 leakage 발생
- 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 분포도 형태
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