📌 서론
머신러닝 프로세스에서 변수를 선택하는 것 또한 중요하다. 이번 글에서는 변수를 선택하는 방법에 대해서 설명해 보겠다.
머신러닝 프로세스
문제 해결 프로세스/머신러닝 프로세스는 다음과 같다.
여기서 변수 선택의 의미를 생각해 보자.
현재 데이터 수집이 되었고, 수집한 데이터를 전처리하는 단계에서 EDA를 통해 데이터 분석을 진행했다. 결측치와 이상치를 처리하고 연속형 변수에 대해서 transformation이나 다른 변환 처리를 했고, 변주형 변수에 대해서도 처리한 상황이라고 가정해 보자. 그리고 그러한 데이터에 추가적인 feature engineering을 생성해 줘서 성능까지 끌어올릴 준비가 된 상황이다.
이 상황에서 변수 선택의 의미가 무엇일까?
변수 선택 의미
변수 선택의 정의는, 기존의 변수와 파생변수를 통해서 생성된 변수 중에서 일부 변수만을 선택한다는 의미다.
뒷단에 모델에 들어가는 관점에서는 변수가 많게 되면 모델 학습할 때 성능이 올라갈 순 있지만 과적합이라던지, 변수가 row보다 더 많아서 생기는 차원의 저주 등과 같은 문제점이 발생할 수 있다.
학습 시간이나 배포, 추론 시간의 관점에서 feature가 많으면 많을수록 시간은 올라갈 가능성은 높다. 그리고 피쳐가 많으면 배포할때 메모리상에서 이슈가 발생할 위험성이 크다.
그리고 데이터 수집 단계에서의 의미는 데이터 수집할때 기존 변수를 갖고 하나하나 다 차곡차곡 수집할텐데, 기존 변수가 많으면 많을수록 이게 전부 다 수집에 대한 비용이 된다.
그래서 변수를 수집한다라는건 수집 관점에서는 비용을 줄이고, 모델 관점에서는 학습과 추론, 속도를 높여주면서 과적합을 피해 성능을 높일 기대를 하고 있는것이다.
Feature selection (변수 선택)
학습에 필요한 변수를 중요도에 따라 선택하는 과정이다. 즉, 모델 학습에 불필요한 변수를 생략하는 과정이라고 생각하면 된다.
변수의 중요도를 어떻게 정의하고, 평가할지에 따라 방법론이 나뉜다.
변수 선택을 시행하는 이유
- 차원의 저주 (Curse of Dimensionality) 해소 : 모델의 복잡도를 낮출 수 있다
- 차원의 저주 : 데이터의 차원이 학습 데이터 수보다 증가하면서 모델의 성능이 저하되는 현상
- 모델의 성능 향상 및 과적합(Overfitting) 완화
- 학습 및 추론시간, 메모리 개선
- 더 적은 변수들을 활용해 해석 가능성 증대
대표적인 변수 선택의 3가지 접근법
변수의 중요도를 평가하는 방법은 기준에 따라 세 가지로 분류된다.
- Filter methods : 변수들간 통계적 관계를 기반으로 변수의 중요도 설정
- e.g. 상관관계, 분산 기반 방법
- Wrapper methods : 실제 머신러닝 모델의 성능을 기반으로 변수의 중요도 설정
- 모델을 학습하고 검증한 결과를 기반으로 변수의 중요도 설정
- e.g. Forward selection, Backward elimination
- Embedded methods : 모델 훈련 과정에서 변수의 중요도 설정
- 트리 모델이 대표적
- 모델 훈련 과정에서 모델 스스로 변수의 중요도/기여도를 조절해 불필요한 변수는 아예 훈련에 참여하지 않도록, 중요한 변수는 자주 훈련에 참여하도록 조절
- e.g. Feature importance, Regularizer 기반 선택
Filter methods
위 그림에서 '전체 변수 집합' 부분에서 '변수 선택'이 발생하고, 선택된 일부 변수 집합을 모델에 학습시켜 성능을 측정한다.
여기서 모델 학습의 결과가 변수 선택에 영향을 끼치지 않는다는점이 다른 방법론과 구별되는 점이다.
변수 선택 방법
변수간의 통계적 관계를 평가해 변수의 중요도를 결정하는 방법이다.
- 통계적 관계 = 변수 간의 상관관계, 분산 고려
- 상관관계 : 변수들 간의 상관계수를 계산해, 상관관계가 높은 변수들을 제거
- 분산 : 분산이 낮은 변수들을 제거해 변동성이 낮은 변수 제거
장점
다른 방법론에 비해 상대적으로 빠른 계산 속도를 가진다.
상관계수 (Correlation) 기반 변수 선택
연속형 변수들 사이에서 상관성이 높은 Feature들을 찾아서 제거하는 방법이다.
아래 도표에서 Feature 1과 Feature2는 row가 넘어갈때마다 0.3씩 똑같이 증가하는 경향을 보이고 있다. 그래서 두 변수의 상관성이 높다고 판단해 둘중 하나의 feature를 제거하는 방법이다.
카이제곱 (Chi-square) test 기반 변수 선택
카이제곱 test 기반 변수 선택 이전에 카이제곱 독립 검정의 내용을 살펴보자.
카이제곱 독립 검정 : 두 범주형 변수 간의 유의미한 관계가 있는지 검정하는 방법
- 귀무가설 (H0) : 두 변수들 사이에는 관계가 없다
- 대립가설 (H1) : 두 변수들 사이에는 관계가 있다
👉 p-value가 유의하면, 귀무가설을 기각 + 대립가설을 인용 (=두 변수 사이에는 관계가 있다)
👉 이를 기반으로 유의미한 변수를 선택한다.
카이제곱 독립 검정을 이용해서 카이제곱 기반 변수 선택은 다음과 같이 진행된다.
- Target variable과 독립변수들의 관계성을 카이제곱 통계량으로 판단한다.
- 카이제곱 통계량을 검정통계량으로 하고, p-value를 구해 유의수준으로 검정력을 판단한다.
- 최종적으로 관계가 있는 변수들만 선택한다.
카이제곱 독립 검정의 과정
- Target variable(Y)와 각 독립변수들(X)에 대해 카이제곱 통계량을 구한다.
- 카이제곱 통계량을 통해 p-value를 계산한다.
- 카이제곱 통계량이 충분히 크면, p-value는 충분히 낮고 이 때 귀무가설(H_0: 둘 사이 관계가 없다)을 기각한다
👉 Target variable(Y)과 해당 독립변수(X)과 관계가 있다고 판단할 수 있다.
Wrapper methods
filter method와 비교해보면 '성능에 도움이 되는 feature는 유지' 부분이 추가된걸 확인할 수 있다.
실제 모델의 성능을 활용하여 변수를 선택하는 방법
- 모델을 반복적으로 학습시키고 검증하는 과정에서 (다른 feature selection 대비) 최적의 변수 조합을 찾는 방법이다.
- 그러나 여러번 반복하는 방식때문에 속도는 느리다.
- 순차적 특성 선택(Sequential Feature Selection) : 변수를 하나씩 추가하면서 탐색
- 재귀적 특성 제거(Recursive Feature Elimination) : 변수를 하나씩 제거하면서 탐색
순차적 특성 선택 - 전진 선택 (Forward Selection)
아무런 Feature가 없는 상태에서 시작해 하나하나 유의미한 Feature를 추가해 나간다.
- “유의미”의 기준: 모델의 성능 및 평가지표 (성능이 상승하면 해당 Feature를 추가)
여러번 반복하지만 전방위적으로 전부 탐색하다보니 꽤 좋은 성능을 보장을 하긴 한다.
재귀적 특성 제거 - 후진 제거 (Backward Elimination)
전체 Feature들 중에서 가장 무의미한 Feature를 제거해 나간다.
- 모든 feature를 가진 모델에서 시작해 모델에 도움이 되지 않는 Feature를 하나씩 줄여 나가는 방식
- “무의미”의 기준: 해당 Feature를 제거 시, 모델의 성능 하락폭이 얼마나 되는지?
Embedded methods
모델의 훈련 과정에서 변수의 중요도를 평가해, 이를 기반으로 모델에 대한 변수의 기여도를 결정하는 방법이다.
- 트리 모델 Feature importance 기반 : 트리 split 기여도에 따른 importance를 이용
- 규제(Regularizer) 기반 : L1, L2 등의 규제를 이용해 변수의 기여도 결정
👉 모델의 특성을 잘 반영하고, 변수의 중요도와 모델의 복잡성을 동시에 고려 가능
Importance 기반 selection
Feature importance
트리 node 분할에 대해 각 feature의 기여도로 각 변수의 중요성을 판단하는 방법이다.
- 트리 split 기준 : Gini 계수, Entropy
👉 학습 과정에서 Feature의 기여도를 Importance에 따라 조절
트리 node 분할의 기준
- 노드의 순수도를 나타내는 Gini 계수, Entropy 등을 활용 (두 값이 낮아야 불순도가 낮다는 의미)
- 특정 feature가 트리의 순수도가 높은 분할에 도움이 된다면 해당 feature는 중요도가 높다고 이해
Regularization 기반 selection
Regularization
L1, L2 등의 Regularization을 사용해 특정 Feature의 Weight를 0 또는 0으로 가깝게 만들어 Feature 제거의 효과가 있다.
- L1 : Weight를 0으로 변환
- L2 & ElasticNet : Weight를 0으로 가깝게 변환
L1 Norm: 실제 weight를 0으로 보낸다.
L2 Norm: weight를 0에 가깝게 보낸다.
실제로 weight를 0으로 보내겠다는 의미는 데이터를 제거하겠다. 라는 의미고 0에 가깝게 보내겠다는 의미는 영향력을 줄이겠다는 의미다.
다음 Regularizer 항을 모델에 추가함으로써 실현된다.
Lasso가 L1 Norm에 해당, Ridge가 L2 Norm에 해당. Lasso+Ridge가 ElasticNet에 해당한다.
요약
'ML' 카테고리의 다른 글
데이터 저장소 Data Source, Data Lake, Data Warehouse, Data Mart 기본 개념 (0) | 2024.10.24 |
---|---|
p-value, R²(결정 계수), β(베타 계수) 해석 (3) | 2024.09.25 |
선형회귀분석과 머신러닝의 차이 (0) | 2024.09.20 |
선형 회귀모델과 상관관계 분석 (1) | 2024.09.04 |
머신러닝 프로세스에서 변수 선택 방법 실전 사례 - Correlation 기반, Feature Importance 기반, Permutation Importance, Target permutation, Adversarial Validation (1) | 2024.09.03 |