ML. 카테고리와 기타 변수 다루기

카테고리와 기타 변수 다루기

1. 연속형 변수 다루기

1.1 함수 변환

로그 변환 (log transform)

$x \rightarrow \log x$

비대칭된 임의의 분포를 정규 분포에 가깝게 전환시키는데에 도움이 된다.

데이터의 스케일을 작게 만들어 데이터간 편차를 줄이는 효과 (큰 값은 많이 줄이고, 작은 값은 적게 줄인다)

특징

  • 비대칭 분포가 제거되는 것을 확인
  • 이상치 완화에도 효율적이지만, 0이나 음수에 적용할 수 없음

제곱근 변환 (square root transform)

변수에 제곱근을 취해서 변환

로그 변환과 효과가 비슷하지만, 로그 변화과의 차이점은 데이터 편차의 강도

$\therefore$ 비대칭(Right-skewed)이 강한 경우 로그 변환, 약한 경우 제곱근 변환이 유리

단, 왼쪽으로 치우쳐진 데이터 분포에 활용 시 더 치우치는 부작용 발생


거듭제곱 변환 (power transform)

변수에 제곱을 취해서 변환


Box-Cox 변환 (Box-Cox Transform)

임의의 하이퍼파라미터 $\lambda$를 이용해서 변환

$\tilde{x} = \displaystyle \begin{cases} \displaystyle \frac{x^{\lambda} - 1}{\lambda} & if \lambda \neq 0, \newline ln(x) & if \lambda = 0 \end{cases}$

목적에 맞게 최적 $\lambda$를 찾아야 한다.


1.2 스케일링

동일한 수치 범위로 변경하는 방법

ex. 키는 100cm ~ 190cm, 몸무게는 40kg ~ 110kg으로 각 변수의 수치 범위가 다른 경우를 맞춰줌

수치 범위가 다르게 존재하면 종속 변수에 각기 다르게 영향을 미친다.

특히 수치 범위가 큰 변수일수록 다른 변수에 비해 더 크게 종속 변수에 영향을 준다.

필요한 이유

KNN은 벡터간 거리를 측정해서 데이터를 분류하는 방식

변수들이 동일한 범위로 스케일링이 안되어 있다면, 결과가 올바르지 않은 리스크가 존재할 것이다.

  • 수치 범위가 다르게 존재하면 종속 변수에 다르게 영향을 미침
  • 수치 범위가 큰 변수일수록 다른 변수에 비해 더 중요하게 인식될 수 있음

Min-Max 스케일링

연속형 변수의 수치 범위를 0~1 사이로 변환하는 방법

$\tilde{x} = \displaystyle \frac{x - min(x)}{max(x) - min(x)}$

다만 min과 maz가 무엇이냐에 따라 이상치에 취약한 부분이 존재한다.


표준화

변수의 수치 범위를 평균이 0, 표준 편차가 1이 되도록 변경 (Z-score)

$\tilde{x} = \displaystyle \frac{x - mean(x)}{sqrt(var(x))}$


로버스트 스케일링 (robust scaling)

IQR을 기준으로 변환

$\tilde{x} = \displaystyle \frac{x - IQR_2}{IQR_3 - IQR_1}$

평균 대신 중앙값을 활용해서 이상치에 강건한 효과

1.3 구간화

수치형 변수를 범주형 변수로 전환시키는 방법

데이터가 범주화되기 때문에 학습 모델의 복잡도가 줄어드는 장점이 있다.

ex. 나이 데이터 $\rightarrow$ 10대, 20대, 30대

특징

  • 등간격(동일 길이), 등빈도(동일 개수)로 나누어 구간화를 진행
  • 범주로 통일되어서 이상치를 완화
  • 데이터의 구분이 가능해져 데이터 및 모델 해석에 용이

2. 범주형 변수 다루기

2.1 One-hot Encoding

범주 변수를 0과 1로 구성된 이진 벡터 형태로 변환하는 방법 (binary)

ex.
|종목 번호|종목| |:——:|:——:| |32|네이버| |95|카카오| |356|라인플러스|

One-Hot Encoding
|종목 번호|네이버|카카오|라인플러스| |:—:|:—:|:—:|:—:| |32|1|0|0| |95|0|1|0| |356|0|0|1|

  • 장점1 : 변수의 이진화를 통해 컴퓨터가 인식하는 것에 적합
  • 장점2 : 알고리즘 모델이 변수의 의미를 정확하게 파악가능

  • 단점1 : 고유 범주 변수의 크기가 늘어날 때마다 희소 벡터 차원이 늘어나는 문제점이 존재
  • 단점2 : 벡터의 차원이 늘어나면 메모리 및 연산에 악영향
  • 단점3 : 차원의 저주 발생

2.2 레이블 인코딩

각 범주를 정수로 표현한다.

ex.
|종목 번호|종목| |:——:|:——:| |32|네이버| |95|카카오| |356|라인플러스|

Label Encoding
|종목 번호|종목| |:——:|:——:| |32|0| |95|1| |356|2|

하나의 칼럼으로 모든 변수를 표현가능하지만, 순차적 데이터에서 더 효과적이다.

  • 장점1 : 범주 당 정수로 간단하게 변환 가능
  • 장점2 : 하나의 변수로 표현 가능해서 메모리 관리 측면에서 효율적

  • 단점1 : 순서가 아닌 값을 순서로 인식할 수 있는 문제 발생

2.3 빈도 인코딩

고유 범주의 빈도 값을 인코딩 (= Count Encoding)

빈도가 높을수록 높은 정수값을, 빈도가 낮을수록 낮은 정수값을 부여받는 형태

ex.
|날짜|종목| |:——:|:——:| |01-01|네이버| |01-01|카카오| |01-02|라인플러스| |01-02|라인플러스| |01-02|네이버|

Frequency Encoding
|날짜|종목| |:——:|:——:| |01-01|2| |01-01|1| |01-02|2| |01-02|2| |01-02|2|

  • 장점1 : 빈도라는 수치적인 의미를 변수에 부여가능
  • 장점2 : 하나의 변수로 표현이 가능해서 메모리 관리 측면에서 효율적

  • 단점1 : 빈도가 같은 경우, 다른 변수도 같은 변수로 처리할 수 있다.
    이러한 문제를 해결하기 위해, feature1에 label encoding을 하고, feature2로 frequency encoding을 할 수 있다.

2.4 타겟 인코딩

특정 타겟 변수를 통계량(평균)으로 인코딩하는 방식(=Mean Encoding)

ex.
|날짜|종목|시가| |:——:|:——:|——:| |01-01|네이버|64,000| |01-01|카카오|24,000| |01-02|라인플러스|14,000| |01-02|라인플러스|16,000| |01-02|네이버|65,000|

Target Encoding
|날짜|종목| |:——:|:——:| |01-01|64,500| |01-01|24,000| |01-02|15,000| |01-02|15,000| |01-02|64,500|

  • 장점1 : 범주간 수치적인 의미를 변수에 부여
  • 장점2 : target 변수의 추가적인 정보를 가진 변수에 의존해서 추가된 정보를 알고리즘에 입력 가능
  • 장점3 : 하나의 변수로 표현 가능해서 메모리 관리 측면에서 효율적

  • 단점1 : target 변수에 이상치가 존재하거나 범주의 종류가 소수라면 과적합 가능성이 있다.
  • 단점2 : 학습과 검증 데이터를 분할하면, 타겟 변수 특성이 이미 학습 데이터 셋에서 노출되어서 Data-Leakage 문제가 발생
    $\because$ Data Split 이전에 평균을 구해 인코딩이 선행되므로

타겟 인코딩의 과적합 방지

  • smoothing
  • K-Fold