의사 결정 트리 분류기 예를 예측하는 고객 이탈을 예측합니다
개요
이 프로젝트는 의사 결정 트리 분류기를 사용하여 고객이 서비스를 떠나는 지 여부를 예측하는 방법을 보여줍니다. 데이터 세트에는 age , 월별 요금 및 고객 서비스 호출 와 같은 기능이 포함되어 있습니다.
모델은 Scikit-Learn의 의사 결정 트리 분류기를 사용하여 교육을 받고 코드는 의사 결정 트리를 시각화하여 모델이 결정을 내리는 방법을 더 잘 이해합니다.
사용 된 기술
- Python 3.x : 모델 구축에 사용되는 기본 언어.
- pandas : 데이터 조작 및 처리 데이터 세트 용.
- matplotlib : 데이터 시각화 (의사 결정 트리 플로팅).
- Scikit-Learn : 모델 교육 및 평가를 포함한 머신 러닝 용.
설명 된 단계
1.
필요한 라이브러리 가져 오기
팬더를 PD로 가져옵니다
matplotlib.pyplot을 plt로 가져옵니다
경고 수입
sklearn.model_selection import train_test_split
sklearn.tree 가져 오기 의사 결정 treeclassifier
Sklearn.metrics import accuracy_score에서
Sklearn 수입 트리에서
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
-
pandas (pd) :
이것은 데이터 조작 및 데이터 프레임 형식에 데이터를로드하는 데 사용됩니다. 데이터 프레임은 테이블 (행 및 열)과 같은 구조화 된 데이터를 구성하고 조작 할 수 있습니다. -
-
matplotlib (plt) :
이것은 데이터를 시각화하는 데 사용되는 플로팅 라이브러리입니다. 여기에서는 의사 결정 트리를 그래픽으로 플로팅하는 데 사용되며 트리의 각 노드에서 의사 결정이 어떻게 이루어지는 지 이해하는 데 도움이됩니다. -
-
경고 (경고) :
경고 모듈은 경고를 억제하거나 처리하는 데 사용됩니다. 이 코드에서는 출력을 깨끗하고 읽을 수 있도록 불필요한 경고를 무시하고 있습니다. -
-
scikit-learn 라이브러리 :
- train_test_split :이 기능은 데이터 세트를 교육 및 테스트 하위 집합으로 분할합니다. 교육 데이터는 모델에 맞는 데 사용되며 테스트 데이터는 성능을 평가하는 데 사용됩니다.
- DecisionTreeClassifier : 이것은 데이터를 분류하고 고객 이탈을 예측하는 데 사용될 모델입니다. 의사 결정 트리는 기능을 기반으로 나무와 같은 의사 결정 모델을 만들어 작동합니다.
- accuracy_score :이 함수는 예측 된 값을 대상 변수의 실제 값과 비교하여 모델의 정확도를 계산합니다.
- tree :이 모듈은 훈련이 끝나면 의사 결정 트리를 시각화하는 기능이 포함되어 있습니다.
2.
경고 억제
warnings.filterwarnings ( "무시")
import pandas as pd
import matplotlib.pyplot as plt
import warnings
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn import tree
이 줄은 Python에게 - 모든 경고를 무시하도록 지시합니다 . 모델을 실행할 때 도움이 될 수 있으며 (감가 상승 된 기능에 관한 것과 같은) 출력을 혼란스럽게하는 경고를 원하지 않습니다.
3.
합성 데이터 세트 만들기
data = {
'CustomerID': Range (1, 101), # 각 고객에 대한 고유 ID
'Age': [20, 25, 30, 35, 40, 45, 50, 55, 60, 65]*10, # 고객의 연령
'월간 충전': [50, 60, 70, 80, 90, 100, 110, 120, 130, 140]*10, # 월간 청구서 금액
'CustomerserViceCalls': [1, 2, 3, 4, 0, 1, 2, 3, 4, 0]*10, # 고객 서비스 전화 번호
'이탈':
data = {
'CustomerID': range(1, 101), # Unique ID for each customer
'Age': [20, 25, 30, 35, 40, 45, 50, 55, 60, 65]*10, # Age of customers
'MonthlyCharge': [50, 60, 70, 80, 90, 100, 110, 120, 130, 140]*10, # Monthly bill amount
'CustomerServiceCalls': [1, 2, 3, 4, 0, 1, 2, 3, 4, 0]*10, # Number of customer service calls
'Churn': ['No', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'Yes', 'No', 'Yes']*10 # Churn status
}
df = pd.DataFrame(data)
print(df.head())
-
여기, 우리는 프로젝트를위한 합성 데이터 세트 를 만듭니다. 이 데이터 세트는 AGE, 월별 충전, 고객 서비스 이탈 (고객이 휘젓거나 휘젓는 지)와 같은 기능을 갖춘 통신 회사의 고객 정보를 시뮬레이션합니다.
-
customerId : 각 고객에 대한 고유 식별자.
-
나이 : 고객의 나이.
-
월간 충전 : 고객의 월간 청구서.
-
customerservicecalls : 고객이 고객 서비스라고 불리는 횟수.
-
이탈 : 고객이 휘젓는 지 (예/아니오)
-
4. 기능 분할 기능과 대상 변수
x = df [
# 기능
y = df
# 대상 변수
X = df[['Age', 'MonthlyCharge', 'CustomerServiceCalls']] # Features
y = df['Churn'] # Target Variable
: 대상을 예측하는 데 사용되는 독립 변수. 이 경우 연령, 월 충전 및 고객 서비스가 포함됩니다.
-
대상 변수 (y) : 종속 변수는 예측하려는 값입니다. 여기에서는 Churn 열입니다. 이는 고객이 이탈 할 것인지 아닌지를 나타냅니다.
-
5. 데이터를 교육 및 테스트 세트로 분할
x_train, x_test, y_train, y_test = train_test_split (x, y, test_size = 0.3, random_state = 42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
데이터 세트를 두 부분으로 나눕니다.
-
test_size = 0.3 : 데이터의 30%가 테스트를 위해 따로 설정되었고 나머지 70%는 교육에 사용됩니다.
random_state = 42 임의의 숫자 생성기의 시드를 고정하여 결과의 재현성을 보장합니다.
-
6. - 의사 결정 트리 모델 훈련
clf = dectionTreeClassifier ()
clf.fit (x_train, y_train)
DectionTreeClassifier () 의사 결정 트리 모델을 초기화합니다.
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
는 교육 데이터를 사용하여 모델을 훈련시킵니다. 이 모델은 y_train target 변수를 예측하기 위해 x_train 기능의 패턴을 학습합니다.
-
7. 예측 만들기
-
y_pred = clf.predict (x_test)
clf.predict (x_test) : 모델을 훈련 한 후 테스트 세트 (x_test)를 예측하는 데 사용됩니다. 이 예측 된 값은 y_pred에 저장되며 모델을 평가하기 위해 실제 값 (y_test)과 비교할 것입니다. .
y_pred = clf.predict(X_test)
모델 평가
-
정확도 = accuracy_score (y_test, y_pred)
print (f "정확도 : {정확도}")
accuracy_score (y_test, y_pred) 예측 된 이탈 레이블 (y_pred)을 테스트 세트에서 실제 이탈 레이블 (y_test)과 비교하여 모델의 정확도를 계산합니다.
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
는 얼마나 많은 예측이 올바른지 측정합니다. 평가를 위해 인쇄됩니다.
-
9. 의사 결정 트리 시각화
-
plt.figure (figsize = (12, 8))
tree.plot_tree (clf, closed = true, feaction_names = , class_names =
))).
plt.show ()
tree.plot_tree (clf, closed = true)
: 훈련 된 의사 결정 트리 모델을 시각화합니다. CLASS 라벨 (Churn/No Churn)을 기반으로 한 노드를 채우는 = 진정한 인수.
plt.figure(figsize=(12, 8))
tree.plot_tree(clf, filled=True, feature_names=['Age', 'MonthlyCharge', 'CustomerServiceCalls'], class_names=['no churn', 'churn'])
plt.show()
feaction_names - : 트리에 표시 할 기능 (독립 변수)의 이름을 지정합니다.
class_names - : 대상 변수 (Churn)의 클래스 레이블을 지정합니다.
plt.show () - : 트리 시각화를 표시합니다.
-
코드 실행
저장소를 복제하거나 스크립트를 다운로드하십시오.
종속성 설치 :
PIP 설치 팬더 MATPLOTLIB SCIKIT-LEARN
-
- Python 스크립트 또는 Jupyter 노트북을 실행하여 모델을 훈련시키고 의사 결정 트리를 시각화하십시오.
pip install pandas matplotlib scikit-learn