One-Hot Encoding, 다중공선성
원-핫 인코딩 #
범주형 데이터를 머신러닝/딥러닝 모델이 다룰 수 있도록 0과 1의 벡터값으로 변환하는 기법이다.
예를들어, 사과와 바나나라는 데이터에 대해 사과-1, 바나나-2 라는 값을 매긴다면 모델은 분석을 할때
바나나 > 사과 (2 > 1) 라는 가중치로 잘못 해석하게 되는 상황이 나올 수 있다. 이는 인풋 데이터의 특징이
규칙성이 있는가 혹은 분류성이 있는가에 대한 잘못된 해석으로 발생한 것이라 선형회귀에서 문제가 발생가능함.
텍스트와 카테고리 같이 비수치 데이터를 수치화하는 가장 단순하고 직관적인 방법
| 클래스 | 원-핫 벡터 |
|---|---|
| 사과 | [1, 0, 0, 0] |
| 바나나 | [0, 1, 0, 0] |
| 포도 | [0, 0, 1, 0] |
| 딸기 | [0, 0, 0, 1] |
| 클래스 | 사과 | 바나나 | 포도 | 딸기 |
|---|---|---|---|---|
| 사과 | 1 | 0 | 0 | 0 |
| 바나나 | 0 | 1 | 0 | 0 |
| 포도 | 0 | 0 | 1 | 0 |
| 딸기 | 0 | 0 | 0 | 1 |
다중공선성 문제 #
독립 변수 (입력 피처)들 사이에 강한 상관관계가 존재하는 현상이다.
각각의 독립변수가 의미하는 것이 진짜 독립적인가. 서로 연관된 의미가 없는것인가에 대한 물음에서 발생하는 문제다.
혈중 알코올 농도와 일주일동안 술을 마시는 빈도라는 독립변수가 시험성적에 낮아진다는 종속변수가 존재할때. 일주일동안 술을 마시는 빈도가 높은데 혈중 알코올 농도가 낮을수가 있을까? 라는 의문이 생길수있다.
당연히 일주일동안 술을 마시는 빈도가 높아지면 혈중 알코올 농도가 높아질 것이고 이는, 두 독립변수의 상관관계가 강하다는것을 알 수 있다.
원 핫 인코딩에서도 이는 발생할 수 있는데, n개의 범주를 모두 원 핫으로 넣으면 합이 항상 1이 된다는 특징에서 발생한다.
말이 좀 어렵지만 쉽게 설명하면 사과 바나나 포도를 100 010 001으로 나누었다고 쳐보자. 과연 이 세개의 벡터값으로 나타내야만 할까? 아니다 우리는 n-1의 값으로도 분류할 수 있다.
사과 바나나 포도를 10 01 00으로 분리할 수 있지 않는가. 따라서 3개를 모두 포함하면 불필요한 중복이 발생하게 되는것이다.
초래하는 문제 #
- 회귀 계수가 불안정하고 특정 계수 값이 비정상적으로 커질 수 있다.
- 모델 해석 어려움 -> 어떤 변수가 진짜로 영향을 줬는가? 에 대한걸 알기 힘들어진다.
- 변수가 많아지니 성능도 비효율적이다.
해결 방안 #
가장 간단하게는 원 핫 인코딩후 마지막 하나 열은 제거해버린다.
혹은 Ridge/Lasso 같은 규제 기법 도입으로 계수 안정화를 하거나 차원 축소 PCA같은 방법으로 상관관계를 줄이고 효율적으로 표현한다.
PCA(Principal Component Analysis)
정의: 고차원 데이터를 더 적은 차원으로 줄이면서, 데이터의 분산(정보)을 최대한 보존하는 차원 축소 기법.
핵심 아이디어:
원래 데이터에 있는 여러 변수들을 직교(orthogonal)하는 새로운 축으로 변환
그중에서 데이터 분산을 가장 잘 설명하는 축(주성분, Principal Component)을 선택