오늘은 전에 했던 거 복습을 했다. day 24는 밥먹고 와서 하는걸루.
- 데이터 전처리와 특징 엔지니어링
- 선형 회귀 개념과 원리
1. 데이터 전처리 (Data Preprocessing)
데이터 분석의 첫 번째 단계로, 데이터를 정리하고 모델 학습에 적합한 형태로 변환하는 과정이다.
1) 데이터 탐색 및 정리
- 데이터를 로드하고 기본 통계(분포, 데이터 타입 등)를 확인
- df.info(), df.describe()
- 시각화: matplotlib, seaborn 등을 사용해 변수 간 관계 탐색
2) 결측값(Missing Values) 처리
- df.isnull().sum() 으로 결측값 확인
- 평균/중앙값 대체 (df.fillna()), 특정 행 제거 (df.dropna())
3) 이상치(Outliers) 처리
- 박스플롯(sns.boxplot())으로 이상치 탐색
- IQR(사분위 범위) 기반 이상치 제거
4) 데이터 정규화 및 스케일링
- 데이터 크기 차이를 맞추기 위해 사용
- 표준화(Standardization) → StandardScaler() (평균 0, 분산 1로 변환)
- 정규화(Normalization) → MinMaxScaler() (값을 0~1 범위로 변환)
2. 특징 엔지니어링 (Feature Engineering)
모델 성능을 향상시키기 위해 적절한 특징을 생성하거나 변환하는 과정
1) 새로운 특징 생성
- 기존 변수를 조합하여 새로운 특징 생성
- (예) 구매 주기 = (마지막 주문일 - 첫 주문일) / 총 주문 횟수
- 날짜 정보 변환
- (예) df['가입 연도'] = df['가입일'].dt.year
- 텍스트 데이터 변환 (TF-IDF, 단어 빈도수)
- TF-IDF (Term Frequency - Inverse Document Frequency)
- 단순 빈도수(TF)와 희귀성(IDF)를 결합하여 단어의 중요도를 계산하는 방식.
- TF-IDF (Term Frequency - Inverse Document Frequency)
2) 특징 선택 (Feature Selection)
모든 변수를 사용하지 않고, 모델 성능을 높이는 중요한 변수만 선택
- 상관계수(Correlation) 활용 → df.corr()
- 중요도 기반 선택 → 랜덤 포레스트(RandomForestClassifier.feature_importances_)
- 랜덤 포레스트는 여러 개의 의사결정 트리(Decision Tree)를 조합하여 예측하는 앙상블 모델이다. 또한, 각 특징(Feature)이 예측에 얼마나 기여하는지(변수 중요도, Feature Importance)를 확인할 수 있어 특징 선택(Feature Selection)에도 유용함
3) 특징 변환 (Feature Transformation)
- 로그 변환(Log Transformation)
- 로그 변환은 데이터가 한쪽으로 치우쳐 있을 때(오른쪽 꼬리 분포) 정규 분포에 가깝게 만들기 위해 사용. 특히 지수적으로 증가하는 값(매출, 인구 수 등)에 유용함.
- 최근에는 비선형 모델(딥러닝)이 많이 활용되면서, 로그 변환 없이 직접 학습하는 경우도 많음.
- 차원 축소(Dimensionality Reduction) → PCA(주성분 분석)로 불필요한 차원 제거
3. 머신러닝 적용 예제 (특징엔지니어링 예제)
고객 유지율 예측
- 최근 구매 패턴, 구매 간격을 특징으로 활용
- 예측 모델: 로지스틱 회귀, 랜덤 포레스트
광고 효율 최적화
- 광고비와 전환율 관계 분석
- 특정 고객군에 대한 맞춤 광고 전략 수립
상품 추천 최적화
- 고객의 최근 구매 및 클릭 데이터를 활용해 개인화된 추천 시스템 구축
4. 선형 회귀 개념 및 활용
선형 회귀(Linear Regression)란?
- 독립 변수(X)와 종속 변수(Y) 간의 선형 관계를 찾아 미래 값을 예측하는 통계적 기법
- 하지만 현실 데이터에서 단순 선형 관계가 존재하지 않는 경우가 많으며, 코로나, 전쟁 같은 환경적 요인은 단순 회귀 모델로 반영하기 어려움.
- 최근에는 복잡한 비선형 관계를 학습하는 딥러닝(Quant 모델 등)이 더 많이 활용됨.
실무에서의 활용
- 전통적 분석 방법: 선형 회귀를 사용하여 변수 간 관계 분석
- 데이터 중심 접근: 딥러닝 모델을 적용하여 더 높은 예측 성능 확보
5. 회귀분석에 대한 그로스 마케팅 시나리오
배경: 한 온라인 쇼핑몰의 마케팅 팀은 광고비 지출이 고객 전환(예: 구매, 회원 가입, 앱 다운로드 등)에 미치는 영향을 분석하고자 합니다.
가상 데이터로 회귀분석 및 보고서 작성 실습 (회귀분석 복습)
코드 정리
dt.days, to_dict, lambda 함수, apply 정의
- dt.days: 날짜 데이터에서 일 단위 차이 계산
- to_dict(): 데이터를 딕셔너리 형태로 변환하여 맵핑 가능
- lambda 함수: 한 줄로 작성할 수 있는 익명 함수
- apply(): df.apply(함수, axis=1) 형태로 행/열 단위 연산 수행
1) 고객 유지율 분석
# 평균 주문 간격 계산 (마지막 주문일 - 첫 주문일) / 총 주문 횟수
df["평균 주문 간격"] = (df["마지막 주문일"] - df["첫 주문일"]).dt.days / df["총 주문 횟수"]
# 유입 채널별 평균 구매 금액 계산 (각 유입 채널의 평균 구매 금액을 계산 후 매핑)
channel_avg_purchase = df.groupby("유입 채널")["구매 금액"].mean().to_dict()
df["유입 채널별 평균 구매 금액"] = df["유입 채널"].map(channel_avg_purchase)
설명:
- 고객의 평균 구매 주기를 계산하여, 구매 패턴을 분석
- 유입 채널(광고, 검색, 추천 등) 별로 평균 구매 금액을 계산하여, 어떤 채널이 높은 전환율을 보이는지 분석
2) 상품 추천 최적화
import pandas as pd
# 샘플 데이터 생성
data = {
"고객ID": ["C001", "C002", "C003"],
"최근 3개월 구매 카테고리": [["전자기기", "패션", "스포츠"], ["가구", "생활용품"], ["패션", "뷰티", "전자기기"]],
"최근 본 상품": ["스마트폰", "소파", "헤드폰"],
"최근 구매 상품": ["태블릿", "책상", "스마트워치"],
"구매 주기(일)": [20, 35, 15],
}
df = pd.DataFrame(data)
# 카테고리 다양성 계산 (고유한 카테고리 개수)
df["카테고리 다양성"] = df["최근 3개월 구매 카테고리"].apply(lambda x: len(set(x)))
# 최근 본 상품과 최근 구매 상품이 같은 카테고리에 속하는지 확인
df["유사 구매 여부"] = df.apply(lambda row: row["최근 본 상품"] in row["최근 3개월 구매 카테고리"], axis=1)
# 추천 최적화 모델을 위한 특징 데이터 출력
display(df)
'STUDY' 카테고리의 다른 글
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 26 kNN, SVM, 로지스틱 회귀 실습 (0) | 2025.03.13 |
---|---|
[멋쟁이사자처럼부트캠프_그로스마케팅] Day 24 로지스틱 회귀, 실습 (1) | 2025.03.11 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day22 머신러닝 기초, 로지스틱 회귀 실습 (0) | 2025.03.07 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day21 루커 스튜디오 실습, chart.js 웹 서비스 (1) | 2025.03.07 |
[멋쟁이사자처럼부트캠프_그로스마케팅] Day20-2 태블로 실습 2 (0) | 2025.03.07 |