머신러닝

회귀, 분류 모델을 위한 데이터 변환

ROSEV 2021. 8. 15. 16:04

 

클래스 설정 및 누수(leakage) 확인

  • 우리가 맞추고자하는 타겟(종속변수)을 어떤 것으로 분석 할지 즉 이진분류, 다클래스 분류, 회귀분석를 타겟과 목적에 맞춰 잘 선정해야합니다.
  • 정보의 누수란, 타겟변수외 예측 시점에 사용할 수 없는 데이터가 포함되어 학습이 이루어지는 경우 혹은 훈련과 검증데이터를 완전히 분리하지 못하는 경우 즉, 정답에 정보가 어떤 형태로 유출되는 경우를 말합니다.
  • 그래서 정보의 누수가 있을 경우(클래스와 직접적인 관련이 있는 정보) 해당 속성을 제거하는 등 정보 누수에 대한 관리를 해야합니다.

 

문제에 적합한 평가지표 선택

분류문제의 경우 Accuracy, ROC, AUC, F1-score분류 문제할 때 클래스가 불균형 할 때, 모델 내 class_weight = 'balanced'라는 파라미터를 사용하여, 불균형을 해결한다. 불균형으로 인한 문제는 정확도는 높지만, 다른 지표 recall과 같은 재현율 등에 대한 문제가 나타날 수 있다.

DecisionTreeClassifier(max_depth=5, class_weight='balanced', random_state=2)

 

 

회귀문제의 경우 MSE, MAE, RMSE, R^2

 

선형 회귀 모델의 경우는 MSE, MAE, RMSE, R^2로 성능을 측정합니다.

일반적으로 특성과 종속변수간의 선형관계를 가정합니다. Class의 분포가 정규분포인 경우, 성능이 더 좋게 나올 가능성이 높습니다. 정규분포로 변환할 수 있는 방법은, 이상치를 제거해보고 로그변환 해주는 것입니다.

로그 변환

# 정규분포를 따르지 않는경우 아래의 TransformedTargetRegressor()을 통해 타겟변수를 정규분포로 변환한다

logTransForned = TransformedTargetRegressor(regressor=pipe,
                                func=np.log1p, inverse_func=np.expm1)

https://scikit-learn.org/stable/modules/generated/sklearn.compose.TransformedTargetRegressor.html

 

sklearn.compose.TransformedTargetRegressor — scikit-learn 0.24.2 documentation

 

scikit-learn.org