본문 바로가기
Programming/Python

기본 개념 정리 3 (features)

출처: AI 엔지니어 기초 다지기 : 네이버 부스트캠프 AI Tech 준비과정

돌다리도 다시 두들겨보고 건너는 개념 복습 게시물

 

Feature Engineering: 기존 데이터에서 문제 해결에 도움되는 새 feature 생성, 변환해서 ML에 적합하게 변환하는 것

딥러닝에비해 머신러닝에서는 반드시 거쳐하는 과정!

 

 

[Pandas group by aggregation]

ex) 고객 ID기반으로 새 feature 생성

이전 구매량을 합한 것을 나타내는 feature

 

 

 

방법1: 누적합 cumsum함수를 이용해서 새 feature 생성

 

ex) id를 기준으로 total의 누적값을 계산

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

방법2: pandas group by nunique aggregation function

 

 

 

 

 

 

방법3: Time Series를 이용

이 예제는 고객별 최빈 구매 달과 연-월 표기 정보를 만들었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


[Cross Validation을 이용한 Out of Fold 예측]: 모형 훈련시, Cross Validation을 적용해서 Out of Fold Validation 성능 측정 및 Test 데이터 예측을 통해 성능 향상. Kaggle 경진대회에서 대부분 사용하는 방법

없는 미래데이터 혹은 타겟 데이터에 대한 성능을 미리 실험해보는 느낌이다.

 

 

 

 

 

 

[LightGBM Early Stopping 적용]

Early Stopping: validation 성능 측정 과정내 최적 하이퍼파라미터에서 학습 조기종료하는 Regularization

ex) Boosting 트리모델 트리 개수, 딥러닝 Epoch 수

 

LightGBM Early Stopping: validation 데이터가 있을 때, n-estimators 충분히 크게 설정 후, early_stopping_rounds를 적절한 값으로 설정한다. 트리를 추가할 때마다 validation 성능 측정하면서 early_stopping_rounds 값 이상 연속으로 성능이 좋아지지 않으면 트리 확장을 멈추고 성능 좋은 것을 최종 트리 개수로 사용.

 

 

 

out of fold에 LIghtGBM early stopping 설정을 추가한 코드

 

 

 


Feature Importance(피쳐 중요도): 타겟 변수 예측에 얼마나 유용한 지에 따라 피쳐에 점수를 할당해서 중요도를 측정하는 방법

model specific: 모델 자체에서 중요도 계산이 된다면

ex1) Boosting Tree(Light GBM에서 사용)

importance_type에 들어가는 값에 split(default)  = 모형에서 피쳐가 사용된 횟수

gain = 피쳐를 사용한 splits의 total gain

 

ex2) XGBoost: get_score로 계산. default = weight

weight: 모든 트리에서 data split위해 피쳐가 사용된 횟수

gain: 피쳐가 사용된 모든 split의 평균 gain

cover: 피쳐가 사용된 split의 평균 coverage

total_gain: 피쳐가 사용된 split의 total gain

total_cover: 피쳐가 사용된 split의 total coverage

 

ex3) CatBoost: get_featur_importance 함수로 계산. default = Featureimportance

 

 

model agnostic: 모델 제공 기능 상관없이 학습 후에 적용된 중요도 계산방법

ex) Permutation 피쳐 중요도: 모형 error를 각종 피쳐를 섞어서 적용하여 예측하여 그 값을 비교

요즘 많이 사용하는 방법

error가 크다면 = 그 피쳐는 중요한 것

error가 작다면 = 그 피쳐는 중요하지 않은 것

 

원리는 이렇지만 최신 sklearn에서 permutaion_importance를 제공하니 그걸 사용하면 간편하다.
permutation_importance로 사용可!

n_repeats = 10  : 10번 반복한 결과의 평균값으로 도출(1번만 하면 잘 안됨)

 

 

 

 


피처 선택(Feature Selection)

ML모델에 사용할 피처 선택 -> 모델 복잡도 낮춤 -> overfitting 방지 및 속도 향상

noise feature: 모델에 도움이 안되는 피처

 

 

방법1) Filter Method: 통계적 측정을 통해 피쳐간 상관관계를 따짐

가장 간단한 방법 but 상관관계 따지는 방법이 언제나 옳지는 않음을 유의

 

보통 Wrapper Method를 사용하기 전에 Filter Method를 전처리의 방법으로 사용한다.

ex1) 상관관계가 서로 높은 두 피쳐가 있다면 두 피쳐는 거의 같은 것이므로 두 피쳐 중 하나만 사용

ex2) Vraiance Threshold: 분산을 따져서 분산값이 작으면 피쳐 데이터 내용이 비슷하다는 의미이니 작은 것을 제외하는 방법

 

 

 

 

방법2) Wrapper Method: 예측모형을 통해 피쳐 subset 계속 측정 및 테스

 

 

 

 

 

 

방법3) Embedded Method: 방법 1과 2의 장점을 결합한 방식 = 학습 알고리즘 자체에 feature selection이 내장됨

 

 

 

728x90
반응형