Python深度學習6:預測顧客是否流失

前言

前一篇博文「Python深度學習5 :Tensorflow 1.15 MobileNet-SSD 口罩辨識模型訓練」介紹如何訓練口罩辨識模型,這次來講講預測分析,使用Google Colab進行模型訓練與評估,關於平台介紹請參考「Python深度學習1:Google Colab介紹」。

顧客流失,例如信用卡公司發的信用卡,如果一直都沒有配套活動,容易造成客戶轉移至其他銀行,如果今天透過一些活動挽留到即將離開的顧客,還能找到新的用戶,藉此提升營收。

 

程式碼講解

先在Kaggle下載Churn_Modelling.csv資料集,包含10000筆顧客資訊,將資料集放入Google drive,使用Google Colab連接雲端硬碟,並開始以下步驟:

 

1.讀取檔案

import pandas
cm = pandas.read_csv('/content/drive/MyDrive/Churn_Modelling.csv', header = 0)
print(cm.head())
cm.isna().sum()

 


2.選出必要欄位,會發現Geography、Gender及Gender欄位的內容為英文字串,需要做數據清洗,替換為數字,若不替換則無法訓練,程式碼如下:

cm = cm.iloc[ : , 3 : ]
cm.head()

 

3.將字串欄位內的資料取出,替換為數字代號,結果如下:

geo = pandas.get_dummies(cm['Geography'])
del geo['France']
gender = pandas.get_dummies(cm['Gender'])
del gender['Female']
cm['Gender'].replace({'Male':1, 'Female':0})
cm2 = pandas.concat([geo, gender, cm], axis = 1)
cm2.drop(['Geography', 'Gender'], axis = 1, inplace=True)
cm2.head()

 


4.使用cm2產生X, y

y = cm2.iloc[:, -1]
X = cm2.iloc[:, :-1]
print(X.head())
y.head()

 

5.將資料進行標準化處理,別切割資料集,比例為7:3

from sklearn.model_selection import train_test_split
train_X, test_X, train_y, test_y = train_test_split(X,y, test_size = 0.3, random_state = 42)

 

6.將資料區分為訓練與測試資料集

from sklearn.preprocessing import StandardScaler
import numpy as np
def sigmoid_function(x):
return 1/ (1 + np.exp(-x))

sigmoid_function(train_X['Balance'])
train_X['Balance']
sc = StandardScaler()
train_X = sc.fit_transform(train_X)
test_X = sc.transform(test_X)

 

7.使用Keras 建立深度學習模型,並訓練模型

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(5, activation = 'relu', input_shape = (11,)))
model.add(Dense(1, activation = 'sigmoid'))
model.summary()

model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])

history = model.fit(train_X, train_y,
batch_size = 128,
epochs = 100,
verbose = 1,
validation_data = (test_X, test_y))



8.評估模型準確度

from sklearn.metrics import accuracy_score
model.evaluate(test_X,test_y)
pred_y = (model.predict(test_X) > 0.5).astype(int).flatten()
accuracy_score(test_y, pred_y)

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(test_y, pred_y)
print (cm)



橫向是測試集,縱向是預測結果

也可以透過矩陣計算結果,全部加起來為3000,將(2335+264)/3000=0.8663

 

9.設定一個客戶資訊,透過模型預測客戶是否解約。

假設A客戶訊息如下:

Geography: France
Credit Score: 600
Gender: Male
Age: 40 years old
Tenure: 3 years
Balance: $30000
Number of Products: 2
Has credit card ? Yes
Is Active Member: Yes
Estimated Salary: $25000

new_prediction = model.predict(sc.transform(np.array([[0.0, 0, 600, 1, 40, 3, 30000, 2, 1, 1, 25000]])))
new_prediction = (new_prediction > 0.5)
print(new_prediction)

 


將資訊轉換為矩陣,使用模型預測結果,答案是客戶A不會解約。

假設B客戶訊息如下:

Geography: France
Credit Score: 5
Gender: Male
Age: 35 years old
Tenure: 3 years
Balance: $30000
Number of Products: 0
Has credit card ? Yes
Is Active Member: Yes
Estimated Salary: $25000

new_prediction = model.predict(sc.transform(np.array([[0.0, 0, 5, 0, 35, 3, 30000, 0, 1, 1, 25000]])))
new_prediction = (new_prediction > 0.5)
print(new_prediction)

 


答案是客戶B會解約。

 

小結

以上就是顧客是否流失的模型訓練及評估,資料的清洗非常重要,大家在實作的過程中需要多注意。

 

參考資料

Kaggle:Churn_Modelling.csv

機器學習實戰:應用ANN預測客戶解約

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論