天天看點

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

簡介

客戶流失/流失,是企業最重要的名額之一,因為擷取新客戶的成本通常高于保留現有客戶的成本。

事實上,根據一個 ​​study by Bain & Company​​,随着時間的推移,現有客戶傾向于從公司購買更多産品,進而降低企業的營運成本,并可能将他們使用的産品推薦給其他人。例如,在金融服務領域,客戶保留率每增加 5%,利潤就會增加 25% 以上。

通過使用生存分析,公司不僅可以預測客戶是否可能停止開展業務,還可以預測該事件何時發生。

​​資料集​​

描述和概述

團隊想要使用的資料集包含以下功能:

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

從分類到數值

有幾個分類特征需要編碼為 one-hot 向量:

1.  # 建立向量
2.   
3.  dtset = pd.get_dummies(rawdaset, columns=caegres)
4.   
5.  # 建立時間和事件列
6.  timeolun = 'onth_tive
7.  ent_clmn = 'chuned' (事件列)。
8.   
9.  # 提取特征
10.  特征 = np.setdiff1d(daaet.oums, [tie_olmn,] ).tolist()      

探索性資料分析

在這裡,我們将隻檢查資料集是否包含 Null 值或是否有重複的行。然後,我們将看看特征相關性。

空值和重複

首先要做的是檢查 raw_dataset 是否包含 Null 值和重複的行。

1.  # 檢查是否為空值
2.  Null = sum(dtaet[feaues].isnull().sum())
3.   
4.  # 如果存在重複的資料,則将其删除
5.  daast = datt.drop_duplicates(keep='first').reset_index(drop=True)
6.   
7.  # 資料集中的樣本數
8.  N = det.shape[0] 。      

事實證明,資料集沒有任何 Null 值或重複項。

相關性

讓我們計算和可視化特征之間的相關性

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

圖 1 - 相關性

模組化

構模組化型

為了稍後執行​​交叉驗證​​并評估模型的性能,讓我們将資料集拆分為訓練集和測試集。

1.  # 建立訓練和測試集
2.  dex_train, index_test = train_test_split( range(N), test_size = 0.35)
3.   
4.  # 建立X、T和E輸入
5.  X_tain, Xtst = daa_ain[ftures], datts[fees]
6.  T_tin, T_tst = daa_rain[ie_olumn], dta_est[tme_olumn]
7.  E_tain, _tst = daa_tain[vent_cumn], dattet[evet_lumn]      

注意:超參數的選擇是使用網格搜尋選擇獲得的。

  1.  # 拟合模型
  2.  cf.fit(_trai, T_tra, _tain, ax_eatrs='sqrt',

變量重要性

建立生存森林模型後,我們可以計算特征重要性:

  1.  # 計算變量的重要性
  2.  sf.vaialeipotanetle.head(5)

這是最重要的功能中的前 5 個。

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

由于功能的重要性,我們可以更好地了解是什麼推動了保留或流失。在這裡,會計和薪資管理産品、滿意度調查得分以及與客戶支援通話的時間都發揮着重要作用。

注意:重要性是擾動和未擾動錯誤率之間的預測誤差差異

交叉驗證

為了評估模型性能,我們之前将原始資料集拆分為訓練集和測試集,以便我們現在可以在測試集上計算其性能名額:

這C-index代表模型辨識能力的全局評估: 這是模型根據個體風險評分正确提供生存時間可靠排名的能力。一般來說,當 C-index 接近 1 時,模型具有近乎完美的判别力;但如果接近0.5,則沒有區分低風險和高風險對象的能力。

Brier score

這Brier score測量給定時間狀态和估計機率之間的平均差異。 是以,分數越低(通常低于 0.25),預測性能就越好。為了評估跨多個時間點的整體誤差測量,通常還計算綜合 Brier 分數 (IBS)。

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

圖 2 - 條件生存森林 - Brier 分數和預測誤差曲線

IBS 在整個模型時間軸上等于 0.13。這表明該模型将具有良好的預測能力。

預測

總體預測

既然我們已經建立了一個似乎可以提供出色性能的模型,讓我們比較每個時間 t 停止與 SaaS 公司開展業務的實際客戶數量和預測客戶數量的時間序列。

comroal(cf, X_tst, T_tst, E_tst      
Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

圖 3 - 條件生存森林 - 流失的客戶數量

該模型總體上提供了非常好的結果,因為在整個 12 個月的視窗中,它隻會産生約 5 個客戶的平均絕對誤差。

個人預測

讓我們計算在 所有時間 t 中保留客戶的機率。

首先,我們可以根據風險評分分布建構風險組。

  1.  cree_rskups(oel=csf, X=X_test
Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

圖 4 - 條件生存森林 - 風險組

在這裡,可以區分 3 個主要群體, 低風險、 中風險 和 高 風險群體。由于 C 指數較高,模型将能夠對每組随機單元的生存時間進行适當的排序。

讓我們随機選擇每組中的單個單元,并比較它們在所有時間 t 中保留客戶的機率。為了證明我們的觀點,我們将特意選擇經曆過事件的機關來可視化事件的實際時間。

Python條件生存森林模型Conditional Survival Forest 預測客戶流失交叉驗證

圖 5 - 條件生存森林 - 預測個人保留客戶的機率

在這裡,我們可以看到該模型設法提供了對事件時間的出色預測。

結論

我們現在可以儲存我們的模型,以便将其投入生産并為未來的客戶評分。

繼續閱讀