파생변수 생성 - Feature Engineering

2025. 5. 19. 18:04·Data Analysis
728x90

머신러닝 모델을 만들기 전, 단순히 주어진 데이터만 사용하는 것은 부족할 수 있습니다.

예를 들어:

  • 생년월일 이 있다고 가정을 하면 그대로 사용이 가능할까?
  • 승선 인원 이 있는데, 이걸 혼자인지 여부, 가족 수 같은 의미 있는 값으로 바꾸면 더 좋지 않을까?

이처럼 기존 변수로부터 새로운 의미 있는 변수를 만들어내는 작업이

바로 파생변수 생성(Feature Engineering)입니다.

 

이 과정은 모델 성능을 극적으로 개선할 수 있으며, 데이터 분석의 핵심이라 해도 과언이 아닙니다.

 

파생변수 생성 패턴

Titanic-Dataset.csv
0.06MB

 

1. 날짜/시간 파생변수

예시: SibSp(형제자매 수), Parch(부모자녀 수) → 가족 수 변수 생성

df['FamilySize'] = df['SibSp'] + df['Parch'] + 1  # 자기 자신 포함

 

날짜 → 연도, 월, 요일, 시간대 등

df['Date'] = pd.to_datetime(df['Date'])
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Weekday'] = df['Date'].dt.dayofweek  # 0=월요일

 

주말 여부

df['IsWeekend'] = df['Weekday'].isin([5, 6]).astype(int)

 

 

2. 길이, 비율, 수치 조합 변수

텍스트 길이

df['NameLength'] = df['Name'].apply(len)

 

금액/수량 비율

df['FarePerPerson'] = df['Fare'] / df['FamilySize']

 

범주 개수 (고유값 수)

df['CabinInitial'] = df['Cabin'].str[0]
df['CabinCount'] = df.groupby('CabinInitial')['CabinInitial'].transform('count')

 

 

3. 범주형 변수 → 그룹 통계값

Pclass(등급)별 평균 요금 변수 생성

df['PclassMeanFare'] = df.groupby('Pclass')['Fare'].transform('mean')

 

성별별 평균 나이 변수 생성

df['SexMeanAge'] = df.groupby('Sex')['Age'].transform('mean')

 

Titanic 데이터셋 파생 변수 생성

import pandas as pd
df = pd.read_csv('Titanic-Dataset.csv')

# 가족 수
df['FamilySize'] = df['SibSp'] + df['Parch'] + 1

# 1인 승객 여부
df['IsAlone'] = (df['FamilySize'] == 1).astype(int)

# 이름 길이
df['NameLength'] = df['Name'].apply(len)

# 등급별 평균 요금
df['PclassMeanFare'] = df.groupby('Pclass')['Fare'].transform('mean')

# 요금 대비 가족 수 비율
df['FarePerPerson'] = df['Fare'] / df['FamilySize']

 

 

위 코드 처럼 직접 변수를 만들면 모델 성능을 개선하기 위해 기존 컬럼보다

정보력이 강한 파생 변수가 예측력을 높일 수 있습니다.

또한 데이터의 숨겨진 구조를 명확하게 드러낼 수 있습니다.

변수 수를 줄이기보단, 질 좋은 변수를 만드는 것이 우선입니다.

 

주의할 점

 

  • 누락된 값이 섞여 있는 컬럼으로 연산 시 NaN 전파
    → .fillna()로 먼저 처리 필요
  • 의미 없는 변수 생성 주의
    → 단순 조합이 아닌, 문제와 관련된 변수인지 검증해야 함
  • 데이터 누수 위험
    → 테스트셋 정보가 유출되는 그룹 연산 (e.g. 전체 평균 사용)

 

정리

파생변수 생성은 데이터를 단순히 "정리" 하는 것을 넘어 정보를 창출하는 작업입니다.

날짜, 텍스트, 범주형 변수 등 다양한 유형에서 유용한 파생 변수 도출이 가능합니다.

"좋은 데이터"는 결국 "좋은 변수"에서 시작됩니다.

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Data Analysis' 카테고리의 다른 글

범주형 변수 인코딩 - Label, One-Hot, Ordinal  (0) 2025.05.19
정규화(Normalization) vs 표준화(Standardization)  (0) 2025.05.14
이상치(Outliers) 탐지와 처리 방법  (0) 2025.05.14
결측치(Missing Values) 처리  (0) 2025.05.12
Hypothesis Test란?  (0) 2023.08.23
'Data Analysis' 카테고리의 다른 글
  • 범주형 변수 인코딩 - Label, One-Hot, Ordinal
  • 정규화(Normalization) vs 표준화(Standardization)
  • 이상치(Outliers) 탐지와 처리 방법
  • 결측치(Missing Values) 처리
Balang
Balang
음악 전공생의 개발일지
  • Balang
    Balang
    Balang
  • 전체
    오늘
    어제
  • 반응형
    • All Post (141) N
      • python (41) N
        • selenium (4)
        • algorithm (6) N
        • Django (6)
        • Pandas | Numpy (21)
      • SQL (9)
      • Data Engineer (29)
      • Data Scientist (3)
      • Data Analysis (8)
      • Computer Science (35)
      • Why? (15)
      • 마음가짐 (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
Balang
파생변수 생성 - Feature Engineering
상단으로

티스토리툴바