본문 바로가기

파이썬

9. Feature Engieneering (특성공학, 변수파생)

✔ 기존 수치 데이터를 변형하여 새로운 의미를 가진 변수를 생성

연령대 생성 → 나이를 10, 20, 30대 등 범주형 데이터로 변환

누적합 → 판매량을 날짜별로 누적하여 누적 매출 생성

평균 대비 차이 → 개별 값이 평균보다 얼마나 높은지 계산

로그 변환 → 데이터의 분포가 치우친 경우 로그 스케일로 변환하여 정규화

import pandas as pd
import numpy as np

# 샘플 데이터 생성
df = pd.DataFrame({
    '이름': ['철수', '영희', '민수', '지수'],
    '나이': [23, 35, 45, 52],
    '월급': [250, 400, 600, 700]
})

# 연령대 변수 생성
df['연령대'] = pd.cut(df['나이'], bins=[0, 30, 40, 50, 100], 
		labels=['20대', '30대', '40대', '50대 이상'])

# 누적 월급 계산
df['누적월급'] = df['월급'].cumsum()

# 평균 대비 차이 계산
df['월급_평균차'] = df['월급'] - df['월급'].mean()

# 로그 변환 (정규화)
df['월급_로그'] = np.log1p(df['월급'])

print(df)

 

  날짜 데이터를 가공하여 시간 관련 패턴을 반영

연도, , 요일, 분기 추출 → "2023-05-20" → 연도: 2023, : 5, 요일: Saturday

주말 여부 추가 → "2023-05-20" → 주말 여부: 1 (, )

날짜 차이 계산 → "가입일" "구매일"의 차이 계산하여 고객 활동 기간 생성

df = pd.DataFrame({
    '이름': ['철수', '영희', '민수', '지수'],
    '구매일': pd.to_datetime(['2023-01-15', '2023-05-20', '2023-08-10', '2023-12-25'])
})

# 날짜 정보 파생
df['연도'] = df['구매일'].dt.year
df['월'] = df['구매일'].dt.month
df['요일'] = df['구매일'].dt.day_name()
df['주말여부'] = df['요일'].isin(['Saturday', 'Sunday']).astype(int)
df['분기'] = df['구매일'].dt.quarter

print(df)​

 

✔ 문자 데이터를 가공하여 모델이 이해할 수 있도록 변환

성별 변환 → "" → 0, "" → 1 (이진 변환)

주소에서 지역 정보 추출 → "서울 강남구" → "서울", "강남구"

텍스트 길이 계산 → 리뷰에서 단어 개수, 글자 개수 등을 추출

df = pd.DataFrame({
    '이름': ['철수', '영희', '민수', '지수'],
    '성별': ['남', '여', '남', '여'],
    '주소': ['서울 강남구', '부산 해운대구', '서울 종로구', '대전 서구']
})

# 성별을 숫자로 변환
df['성별_코드'] = df['성별'].map({'남': 0, '여': 1})

# 주소에서 도시와 구 추출
df['도시'] = df['주소'].str.split().str[0]
df['구'] = df['주소'].str.split().str[1]

print(df)

 

  두 개 이상의 변수 조합을 활용하여 새로운 변수 생성

1인당 소비 금액 → 총 매출 / 고객 수

판매량 대비 반품율 → 반품 개수 / 판매량

평균 리뷰 점수와 리뷰 개수 조합 → 리뷰 점수 * 리뷰 개수

import pandas as pd
import numpy as np

# 샘플 데이터 생성
df = pd.DataFrame({
    '이름': ['철수', '영희', '민수', '지수'],
    '총매출': [10000, 20000, 30000, 40000],
    '고객수': [100, 150, 200, 250],
    '광고비': [500, 700, 1000, 1500],
    '리뷰점수': [4.2, 4.5, 3.8, 4.0],
    '리뷰개수': [30, 50, 20, 40]
})

df['1인당 소비금액'] = df['총매출'] / df['고객수']  # 총매출 대비 고객 1명당 평균 소비금액
df['광고효과'] = df['총매출'] / df['광고비']  # 광고비 대비 매출 효과
df['매출 증가율'] = df['총매출'].pct_change().fillna(0)  # 전월 대비 매출 증가율
df['리뷰 점수 대비 차이'] = df['리뷰점수'] - df['리뷰점수'].mean()  # 평균 대비 리뷰 점수 차이
df['리뷰 품질 점수'] = df['리뷰점수'] * df['리뷰개수']  # 리뷰 점수 × 리뷰 개수 (리뷰의 신뢰도 반영)
df

 

 

'파이썬' 카테고리의 다른 글

11. 시각화  (0) 2025.03.18
10. 탐색적 데이터 분석  (0) 2025.03.18
8. 데이터 병합과 추가  (0) 2025.03.18
7. 데이터전처리  (0) 2025.03.18
6. 데이터 전처리 (결측치와 이상치)  (0) 2025.03.17