특성 선택 (Feature Selection)¶
개요¶
특성 선택(Feature Selection)은 모델 학습에 가장 유용한 특성의 부분 집합을 선별하는 과정이다. 불필요한 특성은 노이즈를 추가하고, 차원의 저주(curse of dimensionality)를 유발하며, 과적합을 촉진하고, 학습 시간을 늘린다. 특성 선택은 필터(Filter), 래퍼(Wrapper), 임베디드(Embedded) 세 가지 접근법으로 나뉜다.
핵심 개념¶
1. 필터 방법 (Filter Methods)¶
모델에 독립적으로, 통계적 관계만을 기반으로 특성을 평가한다.
| 기법 | 적합한 데이터 | 측정 대상 |
|---|---|---|
| 분산 임계값 | 모든 데이터 | 분산이 낮은 특성 제거 |
| 상관계수 (Pearson) | 수치형 | 선형 관계 강도 |
| Chi-Square Test | 범주형 | 특성-타겟 독립성 |
| Mutual Information | 모든 데이터 | 비선형 관계 포함 정보량 |
| ANOVA F-test | 수치-범주형 | 클래스 간 평균 차이 |
장점: 빠르고, 모델에 독립적
단점: 특성 간 상호작용을 무시, 중복 특성 제거 어려움
2. 래퍼 방법 (Wrapper Methods)¶
모델 성능을 직접 평가하여 최적 특성 부분 집합을 탐색한다.
| 기법 | 방향 | 설명 |
|---|---|---|
| Forward Selection | 추가 | 빈 집합에서 시작, 최적 특성을 하나씩 추가 |
| Backward Elimination | 제거 | 전체에서 시작, 가장 불필요한 특성을 하나씩 제거 |
| RFE (Recursive Feature Elimination) | 제거 | 모델의 특성 중요도를 기반으로 재귀적 제거 |
장점: 모델 성능을 직접 최적화
단점: 매우 느림 (특성 수에 비례하는 모델 학습 횟수)
3. 임베디드 방법 (Embedded Methods)¶
모델 학습 과정에서 특성 선택이 자동으로 이루어진다.
L1 Regularization (Lasso)¶
L1 페널티가 일부 가중치를 정확히 0으로 만들어, 자동으로 특성을 선택한다.
트리 기반 중요도¶
- Gini Importance (MDI): 분할 시 불순도 감소 기여도
- 장점: 빠르고 직관적
- 주의: 고카디널리티 특성에 편향
ElasticNet¶
L1 + L2를 결합하여 그룹화된 특성도 선택할 수 있다.
4. 특성 중요도 점수 (Importance Scores)¶
| 방법 | 원리 | 신뢰도 | 주의점 |
|---|---|---|---|
| Permutation Importance | 특성을 무작위 섞었을 때 성능 하락 정도 | 높음 | 상관된 특성 간 중요도 분산 |
| SHAP Feature Importance | Shapley value 기반 기여도 | 매우 높음 | 계산 비용 높음 |
| MDI (Mean Decrease Impurity) | 트리의 분할 불순도 감소 | 중간 | 고카디널리티 편향 |
| Drop-Column Importance | 특성 제거 후 재학습 성능 비교 | 높음 | 매우 느림 |
Permutation Importance의 한계: 두 특성이 강하게 상관되어 있으면, 하나를 섞어도 다른 하나가 정보를 보존하여 중요도가 과소 평가될 수 있다.
SHAP (SHapley Additive exPlanations): 게임 이론의 Shapley value에 기반한 가장 이론적으로 견고한 방법이다. 지역적(local) 설명과 전역적(global) 중요도를 모두 제공한다.
상세 내용¶
특성 선택 워크플로우¶
flowchart TD
A["특성 수 확인"] --> B{"몇 개?"}
B -->|"< 50개"| C["Embedded Methods<br>(Lasso, Tree Importance)"]
B -->|"50~500개"| D["Filter → Embedded<br>단계적 축소"]
B -->|"500+개"| E["Filter (분산, MI)<br>→ Embedded<br>→ Wrapper (최종)"]
C --> F["교차 검증으로 검증"]
D --> F
E --> F
F --> G{"성능 개선?"}
G -->|예| H["선택된 특성 사용"]
G -->|아니오| I["전체 특성 유지<br>또는 다른 방법 시도"] 특성 선택 방법 비교¶
| 특성 | Filter | Wrapper | Embedded |
|---|---|---|---|
| 속도 | 매우 빠름 | 매우 느림 | 중간 |
| 모델 의존성 | 독립 | 의존 | 의존 |
| 상호작용 고려 | 아니오 | 예 | 부분적 |
| 과적합 위험 | 낮음 | 높음 | 중간 |
| 구현 용이성 | 쉬움 | 복잡 | 쉬움 |
언제 사용하는가¶
| 상황 | 추천 방법 |
|---|---|
| 특성 수십 개, 빠른 결과 필요 | Embedded (Lasso, Tree) |
| 특성 수백~수천 개 | Filter → Embedded 순차 |
| 최고 성능 필요, 시간 충분 | Wrapper (RFE) |
| 해석 가능성 중요 | SHAP + Permutation Importance |
| 고카디널리티 범주형 | Mutual Information, Target Encoding |
| 딥러닝 | 보통 불필요 (모델이 자동 선택) |
흔한 오해와 함정¶
-
전체 데이터에서 특성 선택: 특성 선택도 데이터 누수의 원인이 된다. 학습 데이터에서만 선택하고, 동일한 특성 집합을 테스트에 적용해야 한다.
-
상관관계가 높은 특성을 무조건 제거: 높은 상관관계가 항상 중복을 의미하지는 않는다. 두 특성이 타겟에 대해 다른 정보를 제공할 수 있다.
-
MDI (Gini Importance)만 의존: 고카디널리티 특성에 편향된다. Permutation Importance나 SHAP을 교차 검증해야 한다.
-
특성 선택이 항상 성능을 개선한다: 정보가 풍부한 특성을 제거하면 오히려 성능이 하락한다. 반드시 검증으로 확인해야 한다.
-
한 번에 최종 결정: 특성 선택은 반복적 과정이다. 모델을 바꾸면 최적 특성 집합도 달라질 수 있다.
다른 주제와의 연결¶
- 특성 공학: 생성한 특성을 선별하는 후속 단계
- 데이터 누수: 특성 선택 시 누수 방지
- ML 파이프라인 설계: 파이프라인에 특성 선택 통합
- 윤리적 AI: SHAP을 활용한 설명 가능성
- 흔한 실수: 잘못된 특성 선택 시점