반응형
이탈고객 분석에 대한 개요와 데이터 이해, 데이터 탐색, 데이터 전처리 등이 완료가 되었고, 분류모형을 이용하여 이탈고객 모델링을 하고자 합니다.
목차 - 이탈고객분석 개요 - 목표 - 데이터 이해 - 데이터 탐색 - 데이터 전처리 - 데이터모델링 - 모델평가 |
3. 데이터 모델링
(1) 학습데이터와 테스트데이터를 분할함
- 필요 없는 칼럼( 'Avg_Open_To_Buy','Gender')을 삭제합니다
#필요없는 컬럼을 삭제
bank_df.drop(['Avg_Open_To_Buy','Gender', 'Income_Category','Card_Category' ], axis=1, inplace=True)
|
- 학습데이터 70%, 테스트 데이터 30%로 나눕니다.
X = bank_df.drop('Attrition_Flag', axis=1) #X의 설명변수는 타겟변수를 삭제
y = bank_df['Attrition_Flag'] #y에 타겟변수 지정
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) #학습 70%, 테스트 30% 분할
|
(2) 의사결정나무 모델링
- 의사결정나무 알고리즘을 이용하여 모형화하고, 트리 그림을 작성하였습니다.
dt =DecisionTreeClassifier(criterion='entropy', random_state=2222).fit(X_train, y_train)
plt.figure(figsize=(24,10))
plot_tree(dt, rounded=True, fontsize=5, feature_names=X.columns)
plt.show()
|
- 학습이 완료된 모형에 테스트 데이터를 이용하여 예측하고 y_pred변수로 지정합니다.
dt = dt.fit(X_train,y_train)
y_pred = dt.predict(X_test)
|
- 모형을 평가하기 위하여, confusion_matrix, classification_report 함수를 사용합니다. 이때 정확도 보다 재현율(recall)에 대한 설명이 필요합니다. recall은 실제 이탈자가 이탈로 예측된 비율이 79%입니다. 전체 정확도 보다 재현율 평가에 관심을 가질 필요가 있습니다.
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
|
(3) KNN 모델링
- KNN 알고리즘을 이용하여 모형화하고자 합니다. 예측 결과 KNN은 재현율은 72%로 의사결정나무보다 낮습니다.
#KNN 알고리즘으로 분류
knn = KNeighborsClassifier(n_neighbors=2).fit(X_train,y_train) #모형화
knn_pred = dt.predict(X_test) #예측
print(confusion_matrix(y_test, knn_pred))
print(classification_report(y_test, knn_pred))
|
(4) Random Forestes
- 의사결정나무를 Base로 하는 앙상블 알고리즘인 Random Forestes를 이용하여 모형화하고자 합니다. 예측 결과 랜덤 포레스의 재현율은 74%로 의사결정나무보다 낮지만, KNN보다 재현률이 높습니다.
#앙상블 randomforest
rf = RandomForestClassifier(n_estimators=100, random_state=2222).fit(X_train,y_train)
rf_pred = rf.predict(X_test)
print(confusion_matrix(y_test, rf_pred))
print(classification_report(y_test, rf_pred))
|
(참고) 앙상블에 대한 내용은 아래를 참조하세요(https://withdatastory.tistory.com/57)
(5) Feature Importances(특성 중요도)
- 특성중요도는 각 특성이 모델의 예측에 얼마나 많은 영향을 미치는지를 측정하는 것입니다. 이탈고객 분류에서 중요한 특성을 확인한 결과 Total_Trans_Amt가 가장 중요한 변수인 것으로 나타났습니다.
#feature importance
rf.feature_importances_ #특성중요도
importances = pd.Series(rf.feature_importances_, X_train.columns)
n=10
plt.title(f'Top {n} features')
importances.sort_values().plot.barh() #var차트를 보여줌
|
'데이터이야기' 카테고리의 다른 글
의과대학생이 정신건강에 미치는 영향 (1) | 2024.10.16 |
---|---|
분류모형을 이용한 은행 고객 이탈 모형 (1) | 2023.11.13 |
데이터로 보는 고령자 디지털 정보 역량 군집화와 디지털 격차 해소 방안 (0) | 2023.10.09 |
데이터로 보는 고령자 디지털 격차 데이터전처리, 데이터탐색, 데이터시각화 (0) | 2023.10.03 |
데이터로 보는 고령자 디지털 격차 (0) | 2023.09.25 |