首頁 >後端開發 >Python教學 >預測客戶流失的決策樹分類器範例

預測客戶流失的決策樹分類器範例

Linda Hamilton
Linda Hamilton原創
2024-12-10 13:30:11948瀏覽

Decision Tree Classifier Example to Predict Customer Churn

預測客戶流失的決策樹分類器範例

概述

此專案示範如何使用決策樹分類器來預測客戶流失(客戶是否離開服務)。此資料集包括年齡每月費用客戶服務電話等特徵,目的是預測客戶是否會流失。

模型使用 Scikit-learn 的決策樹分類器進行訓練,程式碼將決策樹視覺化,以便更好地理解模型如何做出決策。


使用的技術

  • Python 3.x:用於建立模型的主要語言。
  • Pandas:用於資料操作和處理資料集。
  • Matplotlib:用於資料視覺化(繪製決策樹)。
  • Scikit-learn:用於機器學習,包括模型訓練和評估。

步驟說明

1. 導入必要的庫

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
  • 熊貓(pd):

    • 這用於資料操作和將資料載入到 DataFrame 格式。 DataFrame 允許您組織和操作結構化數據,例如表(行和列)。
  • Matplotlib(plt):

    • 這是一個用於視覺化資料的繪圖庫。在這裡,它用於以圖形方式繪製決策樹,這有助於理解樹的每個節點如何做出決策。
  • 警告(警告):

    • 警告模組用於抑製或處理警告。在此程式碼中,我們忽略不必要的警告以保持輸出乾淨且可讀。
  • Scikit-learn 庫:

    • train_test_split:此函數將資料集拆分為訓練和測試子集。訓練資料用於擬合模型,測試資料用於評估其性能。
    • DecisionTreeClassifier:這是將用於對資料進行分類並預測客戶流失的模型。決策樹的工作原理是根據特徵建立樹狀決策模型。
    • accuracy_score:此函數透過將預測值與目標變數(Churn)的實際值進行比較來計算模型的準確性。
    • tree:此模組包含在訓練後可視化決策樹的函數。

2. 抑制警告

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. 建立綜合資料集

warnings.filterwarnings("ignore")
  • 在這裡,我們為此專案建立一個合成資料集。該資料集模擬了一家電信公司的客戶訊息,具有年齡、月費、CustomerServiceCalls 和目標變數流失(客戶是否流失)等特徵。

    • CustomerID:每位客戶的唯一識別碼。
    • 年齡:顧客的年齡。
    • MonthlyCharge:客戶每月的帳單。
    • CustomerServiceCalls:客戶致電客戶服務的次數。
    • 流失:客戶是否流失(是/否)。
  • Pandas DataFrame:資料被建構為 DataFrame (df),一種二維標記資料結構,允許輕鬆操作和分析資料。

4. 將資料拆分為特徵和目標變數

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
  • 特徵 (X):用於預測目標的自變數。在本例中,它包括 Age、MonthlyCharge 和 CustomerServiceCalls。
  • 目標變數 (y):因變量,即您嘗試預測的值。這裡是「流失」列,表示客戶是否會流失。

5. 將資料拆分為訓練集和測試集

warnings.filterwarnings("ignore")
  • train_test_split 將資料集分為兩部分:訓練集(用於訓練模型)和測試集(用於評估模型)。
    • test_size=0.3:留出30%的資料用於測試,剩餘70%用於訓練。
    • random_state=42 透過修復隨機數產生器的種子來確保結果的可重複性。

6. 訓練決策樹模型

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())
  • DecisionTreeClassifier() 初始化決策樹模型。
  • clf.fit(X_train, y_train) 使用訓練資料訓練模型。此模型從 X_train 特徵中學習模式來預測 y_train 目標變數。

7. 做出預測

X = df[['Age', 'MonthlyCharge', 'CustomerServiceCalls']]  # Features
y = df['Churn']  # Target Variable
  • clf.predict(X_test):模型訓練完成後,用於對測試集(X_test)進行預測。這些預測值儲存在 y_pred 中,我們將它們與實際值(y_test)進行比較來評估模型。

8. 評估模型

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  • accuracy_score(y_test, y_pred) 透過將預測的流失標籤 (y_pred) 與測試集中的實際流失標籤 (y_test) 進行比較來計算模型的準確性。
  • 準確度是測量有多少預測是正確的。列印出來供評估。

9. 可視化決策樹

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
  • tree.plot_tree(clf,filled=True):可視化訓練後的決策樹模型。 fill=True 參數會根據類別標籤(流失/無流失)為節點著色。
  • feature_names:指定要在樹中顯示的特徵(自變數)的名稱。
  • class_names:指定目標變數(Churn)的類別標籤。
  • plt.show():顯示樹視覺化。

運行程式碼

  1. 複製儲存庫或下載腳本。
  2. 安裝依賴項:
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
  1. 執行 Python 腳本或 Jupyter Notebook 來訓練模型並視覺化決策樹。

以上是預測客戶流失的決策樹分類器範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn