1. Feature Engineering
파생변수란 기존 변수의 정보를 토대로 정제 및 생성을 하여 만들어진 변수를 의미한다.
이전에 범주형, 수치형 변수를 처리할 때 사용했던 함수변환, 스케일링, 구간화 등도 이러한 파생변수를 생성하는 것의 일종이다. 또 다른 방법으로는 도메인 지식을 활용하여 기존의 변수들을 조합하여 새로운 변수들을 생성하는 방법도 있다.
파생변수 생성은 변수 간의 연관관계를 파악하기 쉽게 만듦으로써 모델의 성능향상을 기대할 수 있으며, 정보의 손실을 줄이면서 메모리를 최적화시킬 수 도 있고, 도메인을 활용함으로써 해석적인 관점을 제공할 수 있다.
함수 변환과 스케일링, 구간화에 대해서는 이미 다뤄봤기 때문에 나머지 파생변수를 만드는 방법에 대해서 알아보겠다.
1-1. 분할(Split)
이름과 같은 짧은 단위의 문자를 분할하거나, 의미 있는 정보 등을 추출하여 분할.
아래와 같이 하나의 변수를 분할하여 두 개의 의미 있는 변수를 생성할 수 있다. 시간과 같은 변수도 변환할 수 있다.
특히 시간변수에 대해서는 다양한 정보를 추출해볼 수 있는데 위와 같이 단순 년, 월, 일 등으로 분할할 수도 있고 범주화를 시켜 (새벽, 오전, 오후)등으로 나눠볼 수도 있고, 시간차를 생성할 수도 있다.
1-2. 결합
결합은 분할과 반대로 서로 다른 의미를 담고 있는 변수를 통해 새로운 의미를 파생하는 방법으로, 도메인 지식을 이용하여 변수를 생성한다.
1-3. 통계 기반 변수
데이터 집계 후 평균, 중앙, 최대, 최소 등의 통계치를 파생 변수로 적용하는 방법으로 해당 관측치가 전체에서 차지하는 상대적인 위치를 쉽게 표현 가능하다.
2. Feature Selection
Feature selection이란, 데이터의 기본 변수나 파생 변수 사이에서 사용하고자 하는 변수를 선정하는 것이다.
Feature selection을 함으로써 차원의 저주를 해결할 수 있고, 모델의 성능향상 및 과적합 완화, 학습 및 추론시간과 메모리 개선등의 다양한 장점이 있다. 이를 위해 중요도에 따라 변수를 선택하는 방법을 알아볼 것이다.
대표적인 변수 선택법 `Filter method`, `Wrapper method`, `Embedded method`가 있다.
2-1. Filter method
Filter method는 변수들간 통계적 관계를 기반으로 변수의 중요도를 설정하는 방법으로, 상관관계를 이용하거나, 분산 기반의 방법이 있다.
일반적으로 상관관계가 높은 변수들을 제거하거나, 분산이 낮은 변수들을 제거하여 변동성이 낮은 변수를 제거하는 방법이 있다. 단 이 Filter method의 경우 모델을 학습시키고 결정하는 것이 아닌 단순히 상관관계와 분산을 보고 선택하는 것이다.
분산을 이용할 때는 보통 카이제곱검정을 통해 선택하게 되는데, 카이제곱 검정이란 두 범주형 변수 간의 유의미한 관계가 있는지를 검정하는 방법이다. 이를 특정 변수와 target 변수와의 카이제곱 검정을 진행하고 해당 검정의 통계량을 이용해 구한 p-value가 유의 수준보다 `낮으면` '두 변수사이의 관계가 없다'라는 귀무가설을 `기각`하여, 두 변수 사이의 관계가 있다고 판단하면 된다.
2-2. Wrapper method
Wrapper method는 실제 머신러닝 모델의 성능을 기준으로 변수의 중요도를 설정하는 방법으로, 전진선택법과 후진제거법 등이 있다. 즉 모델학습을 여러 번 하며 최적의 변수 조합을 찾는 것이다.
2-2-1. Forward selection
전진선택법은 아무런 Feature가 없는 상태에서 시작하여 유의미한 Feature을 하나하나 추가해나가는 방법이다. 이 유의미함을 결정하는 기준은 모델의 성능 및 평가지표이다. 즉 어떤 feature을 넣었을 때 성능이 향상되면 해당 feature을 추가하는 방향으로 반복하는 것이다.
2-2-2. Backward selection
전진선택법과 반대로 후진제거법은 모든 Feature을 다 넣은 상태로 모델학습을 진행한 후, 무의미한 feature을 제거해 나가는 방식이다. 무의미함 역시 모델의 성능지표를 기준으로 결정한다.
2-3. Embedded method
Embedded method는 모델 훈련 과정에서 변수의 중요도를 기준으로 모델에 대한 변수의 기여도를 결정하여 변수를 선택하는 방법이다. 일반적으로 트리기반의 모델들은 feature importance를 이용해 트리를 split 하는 기여도를 기준으로 보고, L1/L2 등의 규제를 이용해 변수의 중요도를 결정하기도 한다.
사실 이 방법은 모델 학습을 하면서 자연스럽게 이뤄지는 과정이고 결과를 바탕으로 feature importance나 permutation importance가 낮은 feature들을 직접 제거할 수도 있다.
2-3-1. Permutation importance
Permutation importance란, 검증 데이터셋의 Feature을 하나하나 shuffle하여 해당 feature이 무의미해지도록(순서를 마구잡이로 바꾸니까) 만들어서 학습된 모델로 평가를 하는 과정이다.
이를 통해 만약 shuffle한 feature이 중요한 역할을 하고 있었다면 모델의 성능이 크게 하락할 것이고, 성능이 변하지 않았다면 해당 feature은 애초에 별로 영향력이 없었다는 것을 의미한다를 보여주는 알고리즘이다.
( 추가로 이 Permutation importance 함수를 사용하면 아래와 같은 결과가 나오는데 특정 feature을 shuffle 할 때 랜덤성이 존재하기 때문에 한 번만 진행하는 것이 아니라 N번 진행한 결과를 다음과 같이 평균+=분산의 형태로 표시하는 것이다. )
from eli5.sklearn import PermutationImportance
2-4. ETC.
2-4-1. Target permutation
Target permutation은 Target을 shuffle 하여 모델을 학습시켜 importance를 구하고, 제대로 된 target을 학습시킨 모델의 importance를 비교하여 변수의 중요도를 추출한다.
여기서 shuffle한 target을 통해 학습시킨 모델의 importance를 `Null importance`라고하며, 기존의 데이터셋을 학습시킨 후 importace를 구한 것이 `Original importace`이다.
실제로 이 방법은 변수간의 상호작용을 고려할 수 있고 높은 분산을 가지거나 target 변수와 관련 없는 변수를 쉽게 도출 가능하다. 이 방법 또한 라이브러리로 구현되어있어 쉽게 사용해 볼 수 있다.
이 때 Null importance와 Original importance가 겹치지 않는 feature이 중요한 feature라고 볼 수 있다.
2-4-2. Adversial validation
이 방법은 학습 데이터셋과 검증 데이터셋이 얼마나 유사한지를 판단함으로써 과적합을 유발하는 feature을 제거하는 방법이다. 우선 학습 데이터셋의 target을 1로, 검증 데이터셋의 target을 0으로 지정하고 이진분류를 진행한다. 이때 이진분류의 결과가 좋다면, 학습데이터셋과 검증 데이터셋이 경향이 구별되는 어떤 특징이 있다는 것이고, 학습 데이터셋과 검증 데이터셋의 분류 성능이 낮다면 둘 사이의 경향이 다르다는 것이다. 이러한 분류에 도움이 되는 feature은 과적합을 유발하기 떄문에 제거해볼 수 있다.
2-4. 요약
'ML & DL > 개념정리' 카테고리의 다른 글
CAM: Class Activation Map (0) | 2024.01.31 |
---|---|
Activation Function: 활성화 함수 (0) | 2024.01.31 |
연속형, 범주형 변수 처리 (0) | 2024.01.11 |
데이터 전처리(이상치&결측치) (0) | 2024.01.10 |
PyTorch Lightning (0) | 2024.01.09 |