728x90
feature engineering
- 원본 데이터로부터 도메인 지식을 바탕으로 문제를 해결하는데 도움이 되는 feature를 생성, 변환하고 이를 머신 러닝 모델에 적합한 형식으로 변환하는 작업
feature engineering의 필요성: 딥러닝은 모델의 구조를 통해 데이터의 feature를 모델이 스스로 추출하지만, 일반 머신러닝 알고리즘은 feature를 스스로 추출할 수 없다. 따라서 사람이 직접 데이터를 이해해서 feature를 만드는 feature engineering 과정이 필요하다. 만약 양질의 데이터가 제공될 경우, 머신러닝 성능의 80 ~ 90%는 feature engineering을 통해 결정된다. 데이터 전처리와 함께 피처 엔지니어링은 ML project에서 중요한 과정이다.
좋은 feature와 나쁜 feature
- 레이블 간의 분포 차이가 명확할 수록 좋은 feature이다. 모델이 그만큼 레이블을 에측할 때 분류하기가 더 쉽다는 것을 의미한다.
cross validation out of fold
- model training시 cross validation을 적용해서 Out of Fold validation 성능 측정 및 test 데이터 예측을 통해 성능 향상.
- fold마다 training한 모델로 test 데이터를 예측하고, fold 갯수만큼 결과가 나오는데, average ensemble해서 최종 test 예측값을 사용하는 방식. 실무보다는 캐글 같은 대회에서 많이 사용함.
- 모델의 성능을 Cross Validation Out Of Fold 방식으로 진행한다. Cross Validation과 Out Of Fold가 합쳐진 단어.
- cross validation이란 데이터를 여러 개의 fold로 나눠서 검증 성능을 측정하는 방법.
- Out of Fold는 Fold마다 학습한 모델로 테스트 데이터를 예측하고, 이를 평균 ensemble하여 최종 예측값으로 사용하는 방법.
- 여러 개의 fold를 사용하여 검증을 하는 이유: 검증에서 사용하는 dataset에도 Bias가 존재하기 때문. 특정 데이터 셋에 모델의 성능이 높게 측정될 수 있고, 낮게 측정될 수 있으므로 이러한 Bias의 영향력을 줄이기 위해 여러 개의 fold를 사용하여 검증
- 그림에서 5개의 fold로 나누고, 4개로 train, 1개로 validation해서 validation 성능을 측정하는데, 이 모델로 test data를 예측하고, test data 예측값을 평균시켜서 test data의 예측값으로 사용함. --> 모델의 성능향상 기대
Early Stopping
- 반복학습이 가능한 ML model에서 검증 성능 측정을 통해 검증 성능이 가장 최적이라고 판단되는 지점에서 학습을 조기 종료하는 기법. 모델이 특정한 스텝에서 전체 데이터를 학습했을 때 이전 step보다 성능이 더 떨어지는 경우가 여러 번 반복되면 학습을 조기 종료.
LightGBM Early Stopping
- 정형 데이터에서 자주 사용하는 LGBM 모델에는 Early Stopping을 쉽게 적용할 수 있다. LIghtGBM을 사용할 떄 몇 개의 트리를 만들지 n-eatimators hyperparameter로 설정하고 이 갯수만큼 tree를 만들지만, 설정한 tree 갯수가 최적의 값이라고 볼 수는 없다. 더 큰 값에서 성능이 좋은 모델이 존재할 수 있기 때문. Early Stopping을 적용한다면 이러한 문제를 n_estimators값을 크게 설정함으로써 쉽게 해결 가능. 적용한다면 모델은 tree를 추가할 때마다 검증 데이터 성능을 측정하고 성능이 좋아지지 않는 어느 순간에 더 이상 트리를 만들지 않고 가장 검증 성능이 좋은 tree 갯수를 최종 트리 갯수로 사용할 것.
feature importance
- 좋은 feature들 모두가 모델이 target variable을 예측하는데 중요한 피처는 아니다. 예를들어 feature 같에 비슷한 값을 갖는다면 model한테는 noise data로 받아들여질 수 있다.
- target variable, 즉 정답을 예측하는 데 얼마나 유용한지에 따라 feature에 점수를 할당해 중요도를 측정하는 방법. 이를 측정하는 방법은 크게 두가지 방법이 있음.
model 자체에서 feature importance 계산이 가능한 model-specific한 방법
- lightGBM 모델의 경우에는 feature가 트리를 만드는데 몇 번이나 사용됐는지를 계산함으로써 feature의 중요도를 측정할 수 있다. 각 모델에서 제공하는 기능을 사용해 feature importance 계산을 진행했을 때 모델들의 feature importance의 결과는 다음과 같다.
- 각 상위권이 조금씩 다른데, 이유는 각 모델의 특성에 따라서 feature 계산 방식이 다르기 때문이다.
2. model을 학습한 후에 feature importance를 계산할 수 있는 model-agnostic한 방법(모델 종속x)
- dataset의 어떤 feature에 있는 값들을 랜덤하게 섞은 후에 학습한 모델의 에러를 측정하면 어떻게 될까? 아마 중요한 feature라면 모델이 예측을 잘하지 못하게 되어 에러의 값은 굉장히 커질 것이고 중요하지 않다면 다른 feature를 사용해서 예측하기 때문에 에러의 값은 작을 것. 이 방법은 Permutation feature importance를 측정하는 방법. 기존 데이터와 섞은 데이터의 에러 차이를 측정해 feature가 얼마나 중요한지를 파악한다.
feature selection
- 만들어진 feature중에 모델 예측에 도움이 되지 않는 noise feature들도 있을 수 있다. feature selection을 통해 noise feature를 제거할 수 있다. feature selection은 유용한 feature와 유용하지 않은 feature를 구분해서 유용한 feature를 선택하는 것.
- feature selection을 통해 모델의 복잡도를 낮춤으로써 overffiting 방지 및 모델의 속도 향상 가능.
- 세가지 방법이 존재한다.
- filter method: 통계적인 측정을 사용해 feature들의 상관관계를 계산. 계산 속도가 빠르고 feature 간의 상관관계를 알아내기 좋은 방법. 가장 간단하게 사용할 수 있다.
- wrapper method: 예측 모델을 사용해서 feature의 subset을 계속 테스트 함으로써 성능에 유용하지 않은 feature를 제거.
- Embedded Method: Filter, Wrapper의 장점을 합친 방법으로 학습 알고리즘 자체에 feature selection이 들어가 있다.
TODO 더 알아볼 것
LGBM, XGBoost, CatBoost
feature selection
728x90
'진행중' 카테고리의 다른 글
[프로젝트 냠냠] 개발 노트2-1. 개발 - 개발 환경 세팅 (1) | 2024.02.29 |
---|---|
[프로젝트 냠냠] 개발 노트 1. 프로젝트 개요, 기술 스택 및 요구사항, 아키텍처 (0) | 2024.02.29 |
[주간정리] 2023년 4월 2주차 (0) | 2023.04.16 |
[TIL] 2023-03-30 cycleGAN, parametric test (0) | 2023.03.30 |
[TIL] 2023-03-22 gradient descent 정리, back prop 정리 (0) | 2023.03.22 |