본문 바로가기
TIL _Today I Learned/2024.08

[DAY 29] Machine Learning 실습

by gamdong2 2024. 8. 22.
[천재교육] 프로젝트 기반 빅데이터 서비스 개발자 양성 과정 9기
학습일 : 2024.08.22

📕 학습 목록

  • 만료 및 탈퇴 회원 예측 모델 개발

 

📗 프로젝트 작업 내역

1) 프로젝트 제목

만료 및 탈퇴 회원 예측 모델 개발

 

2) 프로젝트 목표

회원의 상태를 "만료", "중지", "탈퇴"로 분류하여 고객 이탈을 조기 예측하는 머신러닝 모델을 개발하여 기업의 고객 유지 전략에 기여

 

3) 사용한 데이터 셋

  • 데이터: 천재교육 서비스의 회원 데이터(만료및탈퇴회원.csv)
    • 만료, 중지, 탈퇴 상태를 포함한 회원의 활동 데이터를 기반으로 머신러닝 예측 모델을 학습

4) 워크플로우

① 패키지 임포트

  • 사용한 주요 패키지: pandas, seaborn, numpy, matplotlib, scikit-learn, imblearn
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, accuracy_score
from imblearn.over_sampling import SMOTE

 

② 데이터 로드 및 요약

df = pd.read_csv("Data/만료및탈퇴회원.csv", index_col=0)
print(df.shape)
print(df.columns)

 

③ 데이터 전처리

  • 결측값 확인 및 새로운 feature(residual_point) 생성
# 결측값 처리 및 새로운 피처 생성
df['residual_point'] = df['earned_points'] - df['used_points']

 

④ 스케일링 및 변수 변환

  • MinMaxScaler로 스케일링 및 로그/제곱근 변환
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df[['residual_point']] = scaler.fit_transform(df[['residual_point']])

 

⑤ 오버샘플링을 통한 클래스 불균형 해결

smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)

 

⑥ 모델 학습

  • 소프트맥스 회귀 모델을 통한 다중 클래스 분류
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')
model.fit(X_resampled, y_resampled)

 

⑦ 성능 평가 및 시각화

from sklearn.metrics import confusion_matrix, roc_curve, auc

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

 

5) 프로젝트 결과

  • 구현 기능
    • 데이터 전처리 및 변환
    • 오버샘플링을 통한 클래스 불균형 해결
    • 머신러닝 모델 학습 및 평가

 6) 트러블 슈팅

  • 오류: ValueError: shapes (n,1) and (m,) not aligned
  • 해결 방법: .reshape(-1, 1)을 통해 데이터 차원을 맞춰 해결
X_resampled = X_resampled.reshape(-1, 1) if X_resampled.ndim == 1 else X_resampled

 

7) 프로젝트를 통해 얻은 역량

  • 데이터 전처리 및 불균형 해결 기술
  • 모델 성능 평가 및 지표 분석 역량

 

📙 내일 일정

  • 추천 시스템, 최적화 학습