• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

Feature engineering 관련 질문입니다.

21.04.20 07:27 작성 조회수 80

0

강의에서는 Feature를 새로 만들어내면서 '난사' 한다고 표현을 하셨는데...

일단 만들어 놓고 나중에 정리하는 것 처럼 말씀하셨는데, 딱히 '정리' 하는 부분은 못본 것 같아서요...

plot_importance로  LightGBM에서 중요시 한 feature를 중요도 순서대로 나열할 수 있었는데

이런식으로 중요도를 평가한 후에 별로 중요하지 않은 feature를 아예 제거하는 방식으로도 성능을 높일 수 있나요?

만약 그렇다면 일단 여러개 만들고 나중에 필요없는 것을 없애는 효율적인 방식은 어떤 것이 있을까요?

답변 1

답변을 작성해보세요.

1

안녕하십니까,

딱히 만들어 놓은 피처들을 정리하기가 좀 애매했습니다. 이유는

1. 예측 성능을 높이려다 보니, 난사(?)로 만들어진 피처들이 그렇게 까지는 많지 않았습니다. 실제 top score에는 저보다 훨씬 많은 피처들로 구성된 모델이 많았습니다.

2. 일부 피처들을 drop 시켜봤는데, 성능 향상 효과가 미비했습니다.

3. 일반적으로 feature importance는 feature selection의 효과적인 대안이 되기 어렵습니다. 트리 모델의 feature importance는 전체 모델 차원에서 중요한 성능을 차지하는 feature 들을 나열한것이라기 보다는 tree구조를 만드는 빈번하게 사용되는 feature들의 우선 순위를 나열한 것입니다. 따라서 모델 성능 보다는 tree구조를 보다 효율적으로 만드는 feature 들에 더 높은 점수가 부여 됩니다.

때문에 feature importance는 feature selection으로 사용될 수는 있지만, 최적의 모델 성능을 조금이라도 더 내야하는 경우에는 잘 사용하지 않습니다.

잘 사용되는 feature selection 기법과 패키지는 permutation importance 기반의 Eli5, 그리고 SHAP가 있습니다. 아쉽게도 해당 기법 적용을 제가 미리 해봤는데, feature 들을 selection해봤을 때 큰 성능 향상이 어려웠고, 무엇보다 적용 시간이 너무 오래 걸렸습니다.  노력 대비 성능 향상 효과가 크기 않아서 강의에서는 제외했습니다. 

요약 드리자면 본 모델에서는 feature selection의 효과가 크지 않아서 적용하지 않았으며, 만일 feature selection 적용을 고려한다면 Eli5 등의 패키지를 통해서 적용하는게 좋습니다.

감사합니다.

Jaemin Kim님의 프로필

Jaemin Kim

질문자

2021.04.22

상세한 답변 감사드립니다! 갈 길이 멀군요 ㅠㅠ