Search

06. ML Workflow - Feature Engineering

Created
2023/06/28 15:50
Tags
data science
machine learning
kaggle
feature engineering : 분석에 사용할 데이터를 feature vector로 가공하는 작업. 머신러닝 모델 성능에 직접적인 영향을 준다.
데이터 마트까지 구성된 데이터를 input vector라고 부릅니다. (row 단위, 정형화된 수치들)
이 input vector를 머신러닝 모델에 사용할 feature vector로 바꾸는 작업이 feature engineering입니다.
feature vector란 input vector에서 머신러닝 모델이 봐야할 특징(feature)을 정의한 수치값들입니다.
feature engineering에 따라 머신러닝 모델의 성능이 굉장히 크게 변할 수 있습니다.
feature engineering을 할 때 체크해야하는 사항들을 중점적으로 확인을 해야합니다.
feature vector가 표현되는 공간을 feature space라고 합니다.

차원의 저주 (Curse of Dimensionality)

차원의 저주 문제는 머신러닝 모델이 고차원 공간에서 데이터의 패턴을 잘 파악하지 못하는 문제를 말합니다.
feature space의 차원이 큰 경우, 거리 함수가 제대로 작동하지 않는 문제가 발생합니다.
위의 자료는 1차원 공간에서 전체 feature space의 20%를 표현하기 위해서 필요한 데이터가 2, 3차원으로 올라갈 수록 exponentially 커진다는 것을 설명하고 있습니다.
그렇기 때문에 모델이 패턴을 파악하기 위해서는 고차원일수록 더 많은 데이터가 필요합니다.
반대로 얘기하면, 고차원일 때 충분한 데이터가 없다면 패턴을 파악하기 힘들다는 의미입니다.
그래서 머신러닝 모델링을 할 때는 저차원 & 소량의 데이터 or 고차원 & 다량의 데이터를 꼭 확인하는게 좋습니다. (슬프게도 이것에 대한 정해진 룰은 없으나, 저는 대략적으로 n_rows : n_cols100:1은 적어도 되어야한다고 생각합니다.)

상관관계 분석

상관관계 분석이란, feature들간의 연관성을 파악하거나, target value와 feature들간의 연관성을 파악하는 것을 말합니다.
이 때, Pearson Correlation Coefficient를 사용합니다.
상관계수 ρ\rho는 -1과 1 사이의 값으로 정의되며, 음수인 경우에 “음의 상관관계”를 양수인 경우에 “양의 상관관계”를 가진다고 말합니다.
그림을 보면 +1일 때는 완벽한 양의 선형관계를 의미하고, -1일 때는 완벽한 음의 선형관계를 말합니다.
즉, 피어슨 상관계수는 두 변수 사이의 선형성(linearity)을 나타내는 지표입니다.
여러 feature와 하나의 feature 사이의 관계를 파악하고 싶을 때는, VIF(Variance Inflation Factor)를 사용할 수 있습니다.

피처 추출(feature extraction)

input vector의 feature들이 서로 상관성이 강하거나 (이런 경우를 다중공선성(multi-collinearity)을 가진다고 말합니다) feature가 너무 많아서 고차원이 된 경우엔 feature를 줄일 필요가 있습니다.
그냥 줄일 수는 없고, 유의미한 feature를 만들어야 하는데 이 때 사용되는 기법들을 feature extraction method라고 합니다.
대표적인 기법으로 PCA(Prinicpal Component Analysis), AutoEncoder 등이 있습니다.
요즘에는 딥러닝 기법들을 사용하여 임베딩(Embedding) 기법을 사용하기도 합니다.
사실 딥러닝 모델이 머신러닝 모델보다 성능이 좋은 경우가 임베딩 성능이 좋아서이기도 합니다. (이 얘기는 뒤에서 자세히)

범주형 피처 인코딩(Categorical feature Encoding)

input vector에는 수치형 데이터(numeric feature)말고도 종류를 나타내는 범주형 데이터(categorical feature)도 있습니다.
이러한 categorical feature들은 대부분 문자열(string) 형태로 표현되어 있습니다.
문자열로 구성된 categorical feature들을 수치값으로 바꾸어야 feature vector로 표현이 가능합니다.
Temperature column을 보면, Hot / Cold / Very Hot / Warm 4가지의 category가 존재합니다.
이 4가지의 category를 숫자로 표현하는 방법중에 One-Hot Encoding 이라는 방법을 사용한 예시입니다.
One-hot encoding 말고도 Ordinal Encoding, Mean Encoding, Hashing 등의 다른 기법들이 있습니다.
원본 데이터의 category가 어떤 의미를 가지고 있느냐에 따라 표현하는 방법을 선택할 수 있습니다.

요약

feature engineering을 어떻게 하느냐에 따라 머신러닝 모델의 input이 바뀌기 때문에, 표현된 feature vector가 머신러닝 모델의 성능에 직접적인 영향을 줍니다.
feature engineering은 분석가의 직관과 모델의 성능에 따라서 정해집니다.
feature engineering을 잘하려면, 데이터에 대한 이해도가 높아야합니다. (EDA / domain knowledge)
머신러닝 모델은 고차원 데이터를 파악하기 힘들기 때문에 저차원으로 변환이 되면 좋습니다.
상관계수를 사용하거나, 피처 추출 기법을 사용하여 좋은 피처를 만들 수 있습니다.
Categorical feature encoding을 해서 종류에 관련된 정보를 좋은 수치로 표현합니다.