특성 공학 (Feature Engineering)
핵심 요약: 원시 데이터를 모델이 이해하기 좋은 형태로 변환하는 과정이 특성 공학(Feature Engineering)이다. “좋은 재료 = 좋은 요리.” 아무리 뛰어난 모델도 입력 데이터의 품질을 넘을 수 없다.
초보자를 위한 핵심 용어
섹션 제목: “초보자를 위한 핵심 용어”- 특성(Feature): 모델에 입력되는 개별 변수. 예를 들어 집값 예측에서 “면적”, “방 수”, “역까지 거리”가 각각 하나의 특성이다.
- 원-핫 인코딩(One-Hot Encoding): 범주형 변수를 0과 1로 이루어진 벡터로 변환하는 방법. “서울”, “부산”, “대구”를 [1,0,0], [0,1,0], [0,0,1]로 표현한다.
- 스케일링(Scaling): 서로 다른 단위의 특성을 비슷한 범위로 맞추는 작업. 키(cm)와 몸무게(kg)를 같은 척도로 변환한다.
- 차원의 저주(Curse of Dimensionality): 특성이 너무 많아지면 모델 성능이 오히려 떨어지는 현상. 데이터 포인트가 고차원 공간에 희소하게 분포하게 된다.
숫자로 보는 특성 공학의 효과
섹션 제목: “숫자로 보는 특성 공학의 효과”집값 예측 모델을 예로 들어보자:
- 원시 데이터: 면적(㎡), 건축연도, 층수, 주소(텍스트) → 선형 회귀 R² = 0.65
- 특성 추가: “역까지 도보 거리”, “건축연도로부터 경과 년수”, “층수/전체층수(상대 층수)” 생성 → R² = 0.78
- 주기적 인코딩: 거래 월을 sin/cos로 변환 (계절성 반영) → R² = 0.82
- 상호작용 특성: “면적 × 역거리” (넓으면서 역 가까운 집의 프리미엄) → R² = 0.85
같은 모델(선형 회귀)인데, 특성 공학만으로 R²가 0.65에서 0.85로 향상되었다.
특성 공학(Feature Engineering)은 원시 데이터를 모델이 학습하기 좋은 형태로 변환하는 과정이다. “쓰레기가 들어가면 쓰레기가 나온다(Garbage In, Garbage Out)“라는 격언처럼, 데이터의 품질과 표현 방식이 모델 성능의 상한을 결정한다. 딥러닝이 자동으로 특성을 학습하는 시대에도, 정형 데이터(tabular data)에서는 여전히 특성 공학이 핵심적인 역할을 한다.
비유: 특성 공학은 요리의 양념과 같다. 같은 재료(데이터)라도 양념(특성 변환)에 따라 완전히 다른 맛(모델 성능)이 나온다. 최고급 식재료도 양념 없이는 밋밋하고, 평범한 재료도 적절한 양념으로 훌륭한 요리가 될 수 있다.
탄생 배경
섹션 제목: “탄생 배경”“데이터가 모델보다 중요하다”는 통찰은 여러 대회와 실무 사례에서 반복적으로 입증되었다. 2006년 시작된 Netflix Prize 대회에서 100만 달러의 상금을 놓고 경쟁한 팀들은 모델 아키텍처보다 특성 공학에서 가장 큰 성능 차이를 만들어냈다. 시청 시간, 평가 패턴, 사용자 행동 이력 등 원시 데이터를 창의적으로 변환한 특성들이 추천 정확도를 결정적으로 끌어올렸다.
이후 Kaggle 대회에서도 같은 패턴이 반복되었다. 상위권 솔루션의 핵심은 대부분 새로운 알고리즘이 아니라 창의적인 특성 공학이었다. Andrew Ng의 유명한 조언 “Applied ML is basically feature engineering”은 이러한 현실을 정확히 반영한다. 정형 데이터 경쟁에서는 XGBoost 같은 표준 모델에 잘 설계된 특성을 넣는 것이, 복잡한 딥러닝 아키텍처를 사용하는 것보다 거의 항상 우수한 성능을 보였다.
핵심 개념
섹션 제목: “핵심 개념”1. 범주형 변수 인코딩 (Encoding Categorical Variables)
섹션 제목: “1. 범주형 변수 인코딩 (Encoding Categorical Variables)”| 인코딩 방법 | 설명 | 장점 | 단점 |
|---|---|---|---|
| One-Hot | 카테고리 수만큼 이진 벡터 | 순서 관계 없음, 직관적 | 고카디널리티 → 차원 폭발 |
| Label Encoding | 정수로 변환 | 단순, 메모리 효율 | 순서 관계 암시 (트리 모델에서는 OK) |
| Target Encoding | 카테고리별 타겟 평균 | 고카디널리티 대응 | 과적합 위험 → smoothing 필요 |
| Frequency Encoding | 빈도로 대체 | 단순, 유용한 정보 | 다른 카테고리가 같은 빈도 가능 |
| Binary/Hashing | 이진/해시 변환 | 고카디널리티 대응 | 정보 손실 가능 |
| Embedding | 학습 가능한 밀집 벡터 | 의미적 관계 포착 | 신경망 필요 |
Target Encoding의 과적합 방지:
- Smoothing: 전체 평균과의 가중 평균 사용
- Leave-One-Out: 자기 자신을 제외하고 평균 계산
- 반드시 교차 검증 fold 내에서 적용
2. 특성 스케일링 (Feature Scaling)
섹션 제목: “2. 특성 스케일링 (Feature Scaling)”| 스케일링 방법 | 수식 | 결과 분포 | 이상치 강건성 |
|---|---|---|---|
| Standard (Z-score) | 평균 0, 분산 1 | 낮음 | |
| Min-Max | 매우 낮음 | ||
| Robust | 중앙값 0 | 높음 | |
| Log Transform | 왜도 감소 | 중간 |
언제 필요한가:
- 거리 기반 모델: KNN, SVM, 신경망
- 경사하강법 사용 모델: 로지스틱 회귀, 신경망
언제 불필요한가:
- 트리 기반 모델: Decision Tree, Random Forest, XGBoost
핵심 규칙: 학습 데이터의 통계치(평균, 분산 등)로 테스트 데이터도 스케일링해야 한다.
.fit()은 학습 데이터에만,.transform()은 학습/테스트 모두에 적용한다.
3. 특성 생성 (Feature Creation)
섹션 제목: “3. 특성 생성 (Feature Creation)”| 유형 | 예시 | 활용 |
|---|---|---|
| Polynomial Features | , | 비선형 관계 포착 |
| 날짜/시간 | 요일, 월, 시간, 공휴일 여부 | 시계열/이벤트 데이터 |
| 주기적 인코딩 | , | 시간의 주기성 반영 |
| 텍스트 | TF-IDF, BoW, 임베딩 | NLP |
| 집계 | 그룹별 평균, 최대, 카운트 | 관계형 데이터 |
| Lag Features | , | 시계열 |
| 도메인 지식 | BMI = 체중/키², 구매빈도/가입기간 | 비즈니스 도메인 |
주기적 인코딩이 중요한 이유: “23시”와 “1시”는 숫자로는 22 차이지만 실제로는 2시간 차이이다. / 인코딩은 이런 주기적 근접성을 올바르게 표현한다.
4. 특성 상호작용 (Feature Interaction)
섹션 제목: “4. 특성 상호작용 (Feature Interaction)”두 특성의 곱, 비율, 차이를 새로운 특성으로 생성한다.
- 곱: → AND 관계 포착
- 비율: → 상대적 크기
- 차이: → 변화량
자동 탐색: Polynomial features, Factorization Machines
상세 내용
섹션 제목: “상세 내용”특성 공학 워크플로우
섹션 제목: “특성 공학 워크플로우”실무에서의 특성 공학 팁
섹션 제목: “실무에서의 특성 공학 팁”-
도메인 전문가와의 협업: 기술적 특성 생성보다 비즈니스 도메인 지식에서 나온 특성이 더 강력한 경우가 많다.
-
단계적 접근: 기본 특성으로 baseline → 특성 추가/변환 → 성능 비교를 반복한다.
-
Kaggle 대회에서의 교훈: 상위 솔루션의 핵심은 종종 창의적인 특성 공학에 있다.
언제 사용하는가
섹션 제목: “언제 사용하는가”| 상황 | 특성 공학 중요도 |
|---|---|
| 정형 데이터 + 트리 모델 | 매우 높음 |
| 정형 데이터 + 신경망 | 높음 |
| 이미지/텍스트 + 딥러닝 | 낮음 (모델이 자동 학습) |
| 시계열 예측 | 매우 높음 (lag, 주기 특성) |
| 추천 시스템 | 높음 (사용자/아이템 특성) |
실전 사례
섹션 제목: “실전 사례”Netflix: “시청 요일+시간대” 특성의 위력
섹션 제목: “Netflix: “시청 요일+시간대” 특성의 위력”Netflix는 추천 시스템을 개선하는 과정에서, 단순한 사용자 평점 데이터에 “시청 요일”과 “시간대” 특성을 추가하는 것만으로 추천 정확도를 크게 개선했다. 핵심 통찰은 다음과 같았다:
- 평일 저녁에는 짧은 시트콤이나 예능을 선호하는 사용자가, 주말 오후에는 긴 영화나 다큐멘터리를 시청하는 패턴이 있었다
- 같은 사용자라도 심야 시간대에는 평소와 다른 장르를 선택하는 경향이 뚜렷했다
- 이 시간적 맥락(temporal context) 특성은 기존의 협업 필터링(Collaborative Filtering) 모델에 단순히 추가하는 것만으로도 유의미한 성능 향상을 가져왔다
이 사례는 도메인 지식에 기반한 특성 공학이 모델 아키텍처 변경보다 훨씬 비용 대비 효과적일 수 있음을 보여준다.
흔한 오해와 함정
섹션 제목: “흔한 오해와 함정”-
테스트 데이터의 정보 유출: 스케일링, target encoding 등을 전체 데이터에 fit하면 데이터 누수가 발생한다. 반드시 학습 데이터에만 fit해야 한다.
-
“특성이 많을수록 좋다”: 무의미한 특성은 노이즈를 추가하고 차원의 저주(curse of dimensionality)를 유발한다. 특성 선택이 필요하다.
-
Label Encoding을 비순서 범주형에 사용: 선형 모델이나 신경망에서 “서울=1, 부산=2, 대구=3”은 순서 관계를 암시한다. 트리 모델에서는 괜찮다.
-
로그 변환에서 0과 음수 무시: 은 정의되지 않는다. 또는 음수에 대한 별도 처리가 필요하다.
-
특성 공학을 한 번에 끝내려 함: 반복적 과정이다. 모델 결과를 보고 오류를 분석하며 특성을 개선해야 한다.