In [1]데이터 불러오기·원-핫 인코딩
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
data_df = pd.read_excel('./data/customer_churn_classification_dataset.xlsx')
encoder = OneHotEncoder(handle_unknown='ignore', sparse_output=False)
X_encoded = encoder.fit_transform(data_df[["Age", "Gender", "Region", "ContractType", "PaymentMethod", "AutoPay", "PremiumPlan"]])
y = data_df["Churn"]
X_encoded_cols = encoder.get_feature_names_out(["Age", "Gender", "Region", "ContractType", "PaymentMethod", "AutoPay", "PremiumPlan"])
encoded_df = pd.DataFrame(data=X_encoded, columns=X_encoded_cols)
data_df = data_df.drop(columns=["CustomerID", "Age", "Gender", "Region", "ContractType", "PaymentMethod", "AutoPay", "PremiumPlan", "Churn"])
df = pd.concat([data_df, encoded_df], axis=1)
In [2]학습·평가 데이터 나누기
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, stratify=y, random_state=42)
print(X_train.shape, X_test.shape)
Out[2] 출력 보기
(960, 82) (240, 82)
In [3]모델 학습하기
from sklearn.tree import DecisionTreeClassifier
data_dt = DecisionTreeClassifier(max_depth=4, random_state=42)
data_dt.fit(X_train, y_train)
In [4]지표 확인하기
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix
dt_pred = data_dt.predict(X_test)
print(confusion_matrix(y_test, dt_pred))
print('Accuracy : ', accuracy_score(y_test, dt_pred))
print('Precision : ', precision_score(y_test, dt_pred))
print('Recall : ', recall_score(y_test, dt_pred))
print('F1 Score : ', f1_score(y_test, dt_pred))
print('ROC-AUC : ', roc_auc_score(y_test, dt_pred))
Out[4] 출력 보기
[[156 18]
[ 57 9]]
Accuracy : 0.6875
Precision : 0.3333333333333333
Recall : 0.13636363636363635
F1 Score : 0.1935483870967742
ROC-AUC : 0.5164576802507836