데이터이야기

분류모형을 이용한 은행 고객 이탈 모형(02)

상선약수64 2023. 11. 14. 23:16
반응형

 

이탈고객 분석에 대한 개요와 데이터 이해, 데이터 탐색, 데이터 전처리 등이 완료가 되었고, 분류모형을 이용하여 이탈고객 모델링을 하고자 합니다. 

목차

- 이탈고객분석 개요
- 목표
- 데이터 이해
- 데이터 탐색
- 데이터 전처리
- 데이터모델링
- 모델평가

 

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)

 

앙상블(Ensemble)의 기본개념 및 Bagging 예제

머신 러닝에서 앙상블이란 단어 그대로 여러 단순한 모델을 결합하여 정확한 모델을 만드는 방법입니다. 분류를 할 때 여러 개의 분류기(Classifier)를 생성하고 여러 모델을 결합하여 최종 예측을

withdatastory.tistory.com

 

(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차트를 보여줌