[데이터 전처리] 변수 분포 문제 - 특징과 라벨 관계

Bpius·2023년 10월 16일
0

데이터 EDA & 전처리

목록 보기
35/46
post-thumbnail

변수 분포 문제

일반화된 모델을 학습하는데 어려움이 있는 분포를 가지는 변수가 있어, 일반화된 모델을 학습하지 못하는 문제 발생.

문제 정의

  • 특징과 라벨 간 관계가 없거나 매우 약하다면, 어떠한 전처리 및 모델링을 하더라도 예측력이 높은 모델을 학습할 수 없음.
  • 특징과 라벨 간 비선형 관계가 존재한다면, 적절한 전처리를 통해 모델 성능을 크게 향상시킬 수 있음.
  • 해결점
    - 각 특징에 대해 특징과 라벨 간 관계를 나타내는 그래프를 통해 적절한 특징 변환 수행.(현실적으로 어려움)
    • 다양한 변환 방법을 사용하여 '특징을 생성'한 뒤 특징 선택 수행.

특징 생성

각 특징에 다양한 방법으로 변환.

다음의 데이터를 제곱과 로그를 적용하여 특징을 생성하고 적용해보자.

먼저 data와 라벨을 분리하고, 특징을 추가할 새로운 데이터를 생성한다.

# 특징과 라벨 분리
X = df.drop('EP', axis = 1)
Y = df['EP']

# 신규 데이터 생성
X_added = X.copy() # 특징이 추가된 데이터를 부착할 데이터

그리고 기존의 데이터에 제곱과 로그를 적용하여 새로운 컬럼을 생성하자.
부차적으로 새로운 특징을 생성한다고 하여 반드시 성능이 좋아지지는 않으며, 오히려 성능이 떨어질 수도 있다.

# 로그와 제곱 관련 변수만 추가
for col in X.columns:
    X_added[col + '_squared'] = X[col] ** 2 # 제곱 추가
    X_added[col + '_log'] = np.log(X[col]) # 로그 추가

기존의 데이터와 추가한 데이터의 차이를 확인하기 위해 'LinearRegression' 모델을 사용하여 'cross_val_score'의 수치를 확인한다.

from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LinearRegression as LR

# 5겹 교차 검증 기반의 평가 수행
X_score = cross_val_score(LR(), X, Y, cv = 5, scoring = 'neg_mean_absolute_error').mean()
X_added_score = cross_val_score(LR(), X_added, Y, cv = 5, scoring = 'neg_mean_absolute_error').mean()

결과를 보면 특징을 추가 생성한 모델의 수치가 조금 더 좋아졌음을 알 수 있다.

profile
데이터 굽는 타자기

0개의 댓글