Feature engineering을 해야 하는 이유
Salary prediction portfolio를 작성하면서 다양한 feature engineering과 hyperparameter tuning을 시도해 보면서 느끼는 점은, 물론 hyperparameter tuning도 중요하지만 feature engineering 만큼 강력하게 예측 정확도에 영향을 주는 것은 없다는 것이다. 특히, feature engineering을 적절하게 하지 못하면 아무리 hyperparameter tuning을 정성 들여하거나 다른 범위로 시도를 해 봐도 예측 정확도가 현저히 떨어지는 사태가 발생한다. 그리고 random forest 나 XGBoost 등의 머신러닝 모델에서의 hyperparamter 중 number of estimator는 대체로 클수록 예측 정확도가 올라간다. 예를 들어, number of estimator를 1000까지 올려봤는데, feature engineering 이 잘 되어 있지 않으니 아무리 number of estimator 가 1000이더라도 예측 정확도가 거의 증가하지 않았다. 즉, hyperparamter tuning 에는 한계가 있는 것이다. 그리고 hyperparameter tuning 은 어두운 숲 속을 헤매는 것과도 같은 느낌이다. random grid search를 한다고 해도 초기에 어느 정도의 범위를 설정해야 하는지도 자신의 직관에 의존해야 하기 때문에 최선을 다한다고 해도 노력이 보상받지 못할 수 있다. 하지만 feature engineering의 영역은 다르다. 실제로 탐색적 데이터 분석을 하면서 가설을 세우고, 어떤 feature engineering을 해야 예측 정확도가 높아질지 예측해 볼 수 있다. feature engineering은 잘 못하게 되면 내가 baseline으로 잡았던 모델보다 오히려 예측 정확도가 훨씬 떨어지는 일이 있다. 하지만 그것은 그만큼 feature engineering을 하는 것이 더 영향력이 있다는 반증이 되기도 한다.
여러 가지 feature engineering 방법
- group statistics 추가하기
Salary prediction portfolio의 공식 모범답안에서는 feature engineering에 categorical group 별 salary의 대푯값 (평균, 최솟값, 최댓값, 중간값 등)을 feature로 넣었고 그렇게 했을 때 Mean squared error 가 현저히 감소했다. 생각해보니, 탐색적 데이터 분석을 하며 boxplot을 그릴 때 확실히 group 별 salary의 median 값, 최댓값, 최솟값, 범위 등이 달랐다. 그리고 group 별로 분산이 크기 때문에 별도의 data 정제 과정을 거치지 않고서는 분석하기가 힘들 것이라는 생각이 든다. 이럴 경우에는 group 별 평균 등의 statistics를 예측 변수로 추가하는 것이 salary prediction 하는데 유용할 것이다. 실제로 variable importance plot에서 가장 중요한 변수로 나온 것이 group별 salary의 평균이었다.
- label encode for ordinal category
내가 생각하기에는 Categorical data 중에서도 명백히 ordinal 한 정보가 있는 경우에는 이를 숫자로 encoding 할 수 있을 것 같다. 예를 들어 직급 (인턴, 과장, senior 과장, 부사장 등), 학위 (고등학교 , 학사, 석사, 박사, post-doc 등)에는 분명히 순서가 있다. 이런 경우에는 인턴부터 부사장을 각각 1 부터 4라는 숫자로, 학위에는 고등학교부터 박사까지를 1부터 5까지 숫자를 할당할 수 있을 것이다.
- standardizing
numeric variable 의 경우 scale 이 서로 크게 다를 수 있다. 예를 들어 대도시와 직장 간의 거리가 0~1000까지의 숫자로 되어 있는데 일한 경력은 0년부터 길어야 40년 일 수 있다. 이럴 때 feature 간의 단위를 맞추지 않으면 그중 변동 폭이 dominate 하여 다른 변수를 고려하는데 방해가 될 수 있기 때문에 standardizing 과정이 필요하다.
'데이터 사이언스' 카테고리의 다른 글
PowerBI 에서 한국지도명 인식이 잘 되지 않을 때 해결 방법 (0) | 2022.09.16 |
---|---|
for loop과 fig, ax 사용하여 그림 그리기 (0) | 2022.07.23 |
Hyperparameter 를 manual하게 tuning하는 것이 어려운 이유 (0) | 2022.05.17 |
머신러닝 모델 적합을 할 때 cross-validation 을 적용한 사례 (0) | 2022.05.15 |
머신러닝을 이용한 월급 예측 데이터 분석 포트폴리오 (0) | 2022.05.14 |