본문 바로가기
2. Data Science Basics/Python

[논문분석] 머신러닝에서 유의미한 Feature 쉽게 구분해내기

by Mojito 2022. 5. 30.

참고: https://www.jmlr.org/papers/volume3/stoppiglia03a/stoppiglia03a.pdf

 [서론]

  빅데이터를 다루다보면 많은 feature들을 마주하게 됩니다. 많은 feature 들이 다 유의미한 값을 가져서 target값을 예측하는 경우도 있겠지만, 위의 문제점은 차원이 높아져서 학습하는데 어려움이 있고 오버피팅이나 정확한 타겟을 예측 못하는 경우가 발생할 수 있다는 것입니다.  이런 문제들 때문에 무조건 많은 feature 를 써서 고차원 모델을 만드는 것 보다, 때때로 차원을 낮춰주어 모델을 단순화 해주는 것이 normalization 즉 일반화를 더 잘 하는 모델이 되는 경우가 존재합니다. 

 

  그렇다면 어떤 feature를 쓰고 어떤 feature를 안쓰는 것이 좋은지 알 수 있는 방법은 무엇이 있을까요? 대표적으로 통계적 추론을 해보는 것이 있습니다. 표본을 모으고 귀무가설을 세우고 가설검정을 해보는 방법이 있겠지만, 이는 시간이 다소 걸리며 통계학을 잘 아는 사람이 아니면 어려움이 있을 수 있습니다. 하지만 이런 어려움 없이 위 논문에서는 기발하며 빠르고 쉽게 적용시킬 수 있는 머신러닝 방법을 제시하였고 도움이 된다생각하여 글을 적어보게 되었습니다.

 

[본론]

  위 논문에서는 간단하게 두가지 방법을 통해서 중요한 feature들을 선택할 수 있다고 말하고 있습니다.

1. 가우시안 분포를 따르는 랜덤한 피쳐를 하나 생성합니다.

2. 각 피쳐의 중요도 (feature importance)를 순서대로 나열합니다.

  예를 들어 설명해 보겠습니다. 만약 내가 체인점들의 매출액을 알고있고 음료수 체인점을 오픈하려 합니다. 어디에 오픈하는게 좋을지 머신러닝을 통해 알고싶은데, 어떤 feature 를 써야 좋은 예측값을 주는지 아직까지 알수는 없습니다. 그러기 위해 유의미하다고 생각되는 데이터를 API를 통해 모으게 되었고 아래와 같은 feature들을 모았다고 생각해봅시다.

Variable 에 대해서 간략히 설명을 드리자면 대부분은 KakaoAPI에서 주변 카테고리를 crawling 하였고 거기에 더해서 선택한 위치에서 스타벅스, 맥도날드까지의 거리등이 있습니다. (distance2SB, distance2MD)

https://developers.kakao.com/docs/latest/ko/local/dev-guide

위 정보들을 이용하여 내가 알고있던 타겟값 (매출액)을 예측하려 하는데, 분명 예측에 도움이 되는 feature들도 있지만 크게 도움이 되지않아서 모델을 오히려 더 일반화 시켜주지못하고 오버피팅하게 만드는 피처들도 존재할 수 있습니다. 그리하여 유의미한 feature 몇개만 뽑아서 차원을 낮추고 싶을때 가우시안 분포를 따르는 랜덤 feature를 생성하였습니다.

import numpy as np
np.random.normal(size = (1250,1))  # 데이터 갯수가 1250개일 경우

 

랜덤 feature를 생성 후 feature importance를 순서대로 나열해 보면 위와 같이 나오게 됩니다. 방금 임의로 생성한 dummy 라는 variable 도 들어가 있는것을 확인할 수 있습니다. 이와 같은경우, dummy 아래의 variable 을 지울 때의 리스크는 랜덤 숫자를 지울때의 리스크 보다 낮다고 판단하여 지우고 더 위의 랭킹에 있는 feature들만 사용하여 학습을 하는 것 입니다.(위의 경우 5가지: distance2SB, FD6, PK6, CE7, HP8)

 

[테스트 결과]

  테스트는 매출액을 정확히 예측하는 것이 목표가 아닌, 주변 상권을 예측하는데 의미가 있어서 매출액을 아래와 같이 나눈 후 classification 을 진행 하였습니다.

0~30% = 0

30~60% = 1

60~100% = 2

Percent quantile target
0%~30% 0
30%~60% 1
60%~100% 2

Hyperparameter Tune 을 진행하지 않고 간단히 여러 모델들을 사용하여 모델을 비교해 보았습니다. 각자 가장 최적화된 모델은 달랐으나 결과값은 근사치를 보여줬습니다. 이번 실험에서 보여주듯이, dummy variable 아래의 feature 들은 지웠을경우 모델에 큰 risk를 주지 않는것을 확인 할 수 있었고, 오히려 테스트모델을 돌렸을경우 더 일반화가 잘된 결과를 얻을 수 있었습니다.

  Accuracy AUC F1
All Features
(ExtremeRandomTrees)
0.619 0.831 0.622
Features above dummy
(Random Forest)
0.639 0.832 0.642

[결론]

  위의 방법은 정통적인 통계적 접근에 비해 단점도 있지만 분명한 장점도 존재합니다. 대표적인 단점으로는, 위 방법은 error loss를 줄이는데 최적화 되있으며 regression 모델이 아닐경우 적합하지 않을 수 있다는것입니다. 하지만 장점으로는 굉장히 빠르게 테스트를 진행해 볼 수 있다는 것입니다. 특정 지식이 없어도 간단히 랜덤 피처를 생성하여 빠르게 낮은차원의 모델을 일반화하여 비슷한 정확도나 그 이상의 정확도로 만들 수 있다는 것입니다.

 
 
 
반응형

댓글