주어진 데이터로 부터 새로운 피처를 생성하는 목적은
1. 모델이 데이터에서 더 많은 패턴을 학습할 수 있기 위해서
2. 데이터의 표현력을 증대시키기 위해서
3. 원래 데이터에 없던 새로운 정보를 추출하기 위해서
4. 데이터의 잠재적인 정보를 드러내기 위해서
from sklearn.preprocessing import LabelEncoder
# 1번은 사람 손으로 만든 feature들을 사용합니다.
X_human = X.copy()
# 요일 정보 추가
week_day = pd.to_datetime(bicycle['date_time']).dt.day_name()
le = LabelEncoder()
le.fit(week_day)
X_human['week_day'] = le.transform(week_day)
X_human.head()
밖이 너무 춥거나, 너무 덥다면 밖에 나가고 싶지 않을 것 -> 따릉이 이용자도 마찬가지로 날씨가 따릉이를 타기에 적절하지 않다면 대중교통이나 택시를 이용할 것
이 인사이트를 바탕으로
# 1. "일교차가 너무 큰 날씨"를 알기 위한 정보
X_human['temp_diff_info'] = X_human['high_temp'] - X_human['low_temp']
# 2. "덥고 습한 날씨"를 알기 위한 정보
X_human['sweat_info'] = X_human['high_temp'] * X_human['humidity']
# 3. "춥고 바람부는 날씨"를 알기 위한 정보
X_human['cold_info'] = X_human['low_temp'] * X_human['wind_speed']
X_human.head()
sklearn등에서 제공하는 자동 feature engineering
단순히 두 변수간의 곱을 추가해준 다음, 성능이 어떻게 변하는지 살펴보자
# 2번은 컴퓨터로 만든 feature들을 사용합니다.
X_computer = X.copy()
col_list = X_computer.columns
# 이중 for문을 사용하여 feature 자기 자신의 제곱과 두 feature간의 곱이라는 새로운 feature를 추가합니다.
for i in range(len(col_list)):
for j in range(i, len(col_list)):
X_computer[f'{col_list[i]}*{col_list[j]}'] = X_computer[col_list[i]] * X_computer[col_list[j]]
X_computer.head()
성능을 검증해보면 -> 자동연산을 통한 피처 생성이 성능이 더 좋다
: 왜 이러한 단순 연산에 의한 피처 생성이 어떤 원리로 모델의 성능을 향상시켰을까
자동 연산에 의한 피처 생성이라는 개념은 본질적으로 기계 학습 모델이 데이터의 비선형 관계를 더 잘 이해할 수 있도록 돕는 방법 중 하나입니다. 사이킷런의 PolynomialFeatures 같은 도구를 사용하여 새로운 피처를 생성하는 것은 데이터 내 숨겨진 패턴이나 관계를 모델이 더 잘 포착하게 하려는 시도입니다.