ML. 파생 변수 만들기

파생 변수 만들기

1. 파생 변수란?

1.1 파생 변수란?

기존 변수의 정보를 토대로 정제 및 생성된 새로운 변수

  1. 함수 변환 스케일링, 구간화를 기반으로 기존 변수를 새로 정제하는 방식
    변수들의 수치 범위를 동일하게, 정규분포를 따르도록
  2. 변수들 간의 상호작용 합성, 집계를 통해 새로운 변수를 도출하는 방식
    기존 변수의 정보력을 조합하여 새로운 의미를 가진 변수 도출
    단순 합성이 아닌, 해결하려는 문제에 대한 도메인 지식이 필요함

1.2 파생 변수의 종류

Alt text

1.3 파생 변수가 중요한 이유

성능적인 관점

알고리즘 입장에서 변수 간 연관 관계를 파악하기 수월하기 때문에 과적합을 방지할 수 있는 효과

해적적인 관점

도메인 기반의 파생 변수는 인간 친화적인 분석 관점을 제공

메모리 관점

파생 변수는 정보의 손실을 최소화하면서 압축 효과에 따른 신속한 전처리

2. 파생변수 생성 1 (변수 변환)

2.1 함수 변환

수치형 변수의 로그 변환

$x \rightarrow log(x)$

비대칭된 임의의 분포를 정규 분포에 맞게 변경함 (right skewed)

단, 0이나 음수에 대해서는 log가 먹히지 않는다.

다만, numpy의 loglp를 이용하면, 0에 대해서는 log를 취할 수 있다.

$loglp(x) = log(x+1)$

import numpy as np

x = np.loglp(x)

수치형 변수의 제곱근 변환

변수에 제곱근을 적용하여 정규분포에 가깝게 변환

log와의 차이점은 큰 관측값에 영향을 덜 주어서 비교적 완화된 수준으로 변환한다.

Box-Cox 변환

$\lambda$를 이용해서 로그, 제곱근, 거듭제곱 변환을 적절하게 섞는 방법

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

2.2 스케일링 (scaling)

Min-Max Scaling

연속형 변수의 수치 범위를 0~1 사이로 전환

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

표준화

평균이 0, 표준 편차가 1이 되도록 변경

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

2.3 기타 변수

분할

이름과 같은 짧은 단위의 문자를 분할하여 통일성 있는 데이터를 구성

ex.
|이름|$\rightarrow$|성|이름| |:—:|:—:|:—:|:—:| |Steven Gerrard|$\rightarrow$|Gerrard|Steven| |장동건|$\rightarrow$|장|동건|


시간 변수

날짜 및 시간 변수는 시점이라는 풍부한 정보를 담고 있어 모델에 많은 활용이 가능

시간 요소를 분리 추출하거나, 시간 차(time delta)를 파생 변수로 변환한다.

그 외에 주차, 일년기준 지난일수 등 파생변수를 만들 수 있고, 구간화를 이용해서 시간의 범주화(아침, 점심, 저녁)등도 사용할 수 있다.

3. 파생변수 생성 2 (변수 관계 활용)

3.1 상호작용 변수

변수 결합

서로 다른 의미를 담고 있는 변수를 통해 새로운 의미를 파생

ex. 통신사 월 이용 금액을 통해 멤버쉽 등급을 만듦

3.2 통계 기반 변수

데이터 집계 후 평균, 중앙, 최대, 최소 등의 통계치를 파생 변수로 적용할 수 있음.

상품 카테고리 가격 $\rightarrow$ 카테고리별 평균값 가격대
1 의류 46,000 $\rightarrow$ 35,000 1.31
2 의류 32,000 $\rightarrow$ 35,000 0.91
3 가전 560,000 $\rightarrow$ 520,000 1.07
4 가전 1,125,000 $\rightarrow$ 520,000 2.16

평균값이라는 feature와 그 평균과의 비율을 새로운 feature로 만들어서 모델이 통계치와 해당 row가 평균치와 얼마나 벗어났는지를 알 수 있는 정보를 집계한다.