728x90
반응형
📌 개요
지난 포스팅에서는 랜덤 포레스트를 활용하여 고객 이탈(Churn) 예측 모델을 구축하였습니다. 이번 포스팅에서는 딥러닝(Deep Learning)을 활용하여 고객 이탈 예측 성능을 향상시키는 방법을 다루겠습니다.
1️⃣ 딥러닝을 활용한 고객 이탈 예측
딥러닝은 신경망(Neural Network)을 사용하여 데이터를 학습하는 강력한 머신러닝 기법입니다. 이번 실습에서는 인공신경망(ANN, Artificial Neural Network)을 활용하여 고객 이탈을 예측하는 모델을 개발하겠습니다.
🔹 딥러닝 모델의 장점
- 복잡한 패턴 학습 가능: 여러 층을 통해 비선형 관계를 학습 가능
- 대량의 데이터 처리 가능: 고객 행동 데이터를 효과적으로 분석 가능
- 다양한 문제에 적용 가능: 이미지, 텍스트뿐만 아니라 이탈 예측에도 효과적
2️⃣ 데이터 로드 및 전처리
먼저 데이터를 로드하고, 딥러닝 모델에 적합한 형식으로 전처리를 수행하겠습니다.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
# 데이터 로드
df = pd.read_csv("customer_churn_dataset.csv")
# 범주형 변수 인코딩
label_encoders = {}
for col in ['Contract_Type', 'Payment_Method']:
le = LabelEncoder()
df[col] = le.fit_transform(df[col])
label_encoders[col] = le
# 특성과 타겟 변수 설정
X = df.drop(columns=['CustomerID', 'Churn'])
y = df['Churn']
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 데이터 정규화
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
✅ 코멘트:
- 범주형 변수(Contract_Type, Payment_Method)는 **레이블 인코딩(Label Encoding)**을 적용했습니다.
- 모든 데이터는 표준화(Scaling) 하여 모델 성능을 최적화했습니다.
3️⃣ 인공신경망(ANN) 모델 구축 및 학습
이제 Keras를 활용하여 인공신경망(ANN) 모델을 구축하고 학습하겠습니다.
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 딥러닝 모델 생성
model = keras.Sequential([
layers.Dense(16, activation='relu', input_shape=(X_train.shape[1],)),
layers.Dense(8, activation='relu'),
layers.Dense(1, activation='sigmoid') # 이진 분류이므로 sigmoid 활성화 함수 사용
])
# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 모델 학습
history = model.fit(X_train, y_train, epochs=50, batch_size=16, validation_data=(X_test, y_test))
📌 결과 예시:
Epoch 50/50
63/63 [==============================] - 0s 5ms/step - loss: 0.3245 - accuracy: 0.8825 - val_loss: 0.3552 - val_accuracy: 0.8700
✅ 코멘트:
- 모델은 3개의 층을 가지며, relu 활성화 함수를 사용하여 비선형성을 학습합니다.
- sigmoid 활성화 함수는 이진 분류(0 또는 1 예측)에 적합합니다.
- adam 옵티마이저를 사용하여 학습 속도를 최적화했습니다.
4️⃣ 모델 성능 평가
학습된 모델을 평가하고 정확도를 확인하겠습니다.
# 모델 평가
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {accuracy:.4f}")
📌 결과 예시:
Test Accuracy: 0.8700
✅ 코멘트:
- 신경망 모델이 87%의 정확도를 기록하며 랜덤 포레스트 모델과 비슷한 성능을 보였습니다.
- 추가적인 최적화를 통해 성능을 더욱 향상시킬 수 있습니다.
5️⃣ 모델 성능 개선 방법
🔹 과적합 방지 (Regularization)
# 드롭아웃(Dropout) 추가
model.add(layers.Dropout(0.2))
✅ 드롭아웃을 사용하면 모델이 특정 노드에 의존하는 것을 방지하여 일반화 성능을 향상시킬 수 있습니다.
🔹 하이퍼파라미터 튜닝
# 학습률 조정
optimizer = keras.optimizers.Adam(learning_rate=0.001)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
✅ 학습률을 조정하면 모델이 더 빠르게 또는 안정적으로 수렴할 수 있습니다.
📌 마무리
이번 포스팅에서는 딥러닝을 활용하여 고객 이탈을 예측하는 인공신경망(ANN) 모델을 구축했습니다.
- 데이터 전처리: 범주형 변수 인코딩 및 표준화 적용
- 신경망 모델 구성: 3개 층을 사용한 인공신경망 모델 구축
- 성능 평가: 정확도 87% 달성
- 성능 개선: 과적합 방지 및 하이퍼파라미터 튜닝
다음 포스팅에서는 딥러닝을 활용한 추천 시스템 구축을 다뤄보겠습니다! 🚀
728x90
반응형
'Daily Data Log' 카테고리의 다른 글
| [Day 12] 강화 학습을 활용한 추천 시스템 최적화 (0) | 2025.03.18 |
|---|---|
| [Day 11] 딥러닝을 활용한 추천 시스템 구축 (1) | 2025.03.17 |
| [Day 9] 고객 이탈 예측을 위한 머신러닝 모델 구축 (0) | 2025.03.14 |
| [Day 8] AutoML을 활용한 프리미어리그 경기 성과 예측 자동화 (0) | 2025.03.13 |
| [Day 7] XGBoost & LightGBM을 활용한 프리미어리그 경기 성과 예측 (0) | 2025.03.12 |