1. 程式人生 > >Python實戰專案:詳解銀行使用者流失預測

Python實戰專案:詳解銀行使用者流失預測

專案介紹

這次我們要學習的是銀行使用者流失預測專案,首先先來看看資料,資料分別存放在兩個檔案中,’Churn-Modelling.csv’裡面是訓練資料,’Churn-Modelling-Test-Data.csv’裡面是測試資料。下面是資料內容:

資料來源於國外匿名化處理後的真實資料

RowNumber:行號
CustomerID:使用者編號
Surname:使用者姓名
CreditScore:信用分數
Geography:使用者所在國家/地區
Gender:使用者性別
Age:年齡
Tenure:當了本銀行多少年使用者
Balance:存貸款情況
NumOfProducts:使用產品數量
HasCrCard:是否有本行信用卡
IsActiveMember:是否活躍使用者
EstimatedSalary:估計收入
Exited:是否已流失,這將作為我們的標籤資料

首先先載入一些常用模組

import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn import neighbors
from sklearn.metrics import classification_report
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import LabelEncoder

然後用numpy讀入資料,因為資料中有字串型別的資料,所以讀入資料的時候dtype設定為np.str

train_data = np.genfromtxt('Churn-Modelling.csv',delimiter=',',dtype=np.str)
test_data = np.genfromtxt('Churn-Modelling-Test-Data.csv',delimiter=',',dtype=np.str)

資料切分,表頭不需要,第0到第倒數第2列為資料,最後1列為標籤

x_train = train_data[1:,:-1]
y_train = train_data[1:,-1]
x_test = test_data[1:,:-1]
y_test = test_data[1:,-1]

第0,1,2列資料資料分別為編號,ID,人名,這三個資料對最後的結果應該影響不大,所以可以刪除掉。

x_train = np.delete(x_train,[0,1,2],axis=1)
x_test = np.delete(x_test,[0,1,2],axis=1)

刪除掉0,1,2列資料後剩下的1,2列資料為國家地區和性別,都是字元型的資料,需要轉化為數字型別的資料才能構建模型

labelencoder1 = LabelEncoder()
x_train[:,1] = labelencoder1.fit_transform(x_train[:,1])
x_test[:,1] = labelencoder1.transform(x_test[:,1])
labelencoder2 = LabelEncoder()
x_train[:,2] = labelencoder2.fit_transform(x_train[:,2])
x_test[:,2] = labelencoder2.transform(x_test[:,2])

由於讀取資料的時候用的是np.str型別,所以訓練模型之前要先把string型別的資料變成float型別

x_train = x_train.astype(np.float32)
x_test = x_test.astype(np.float32)
y_train = y_train.astype(np.float32)
y_test = y_test.astype(np.float32)

然後做資料標準化

sc = StandardScaler()
x_train = sc.fit_transform(x_train)
x_test = sc.transform(x_test)

構建KNN模型並檢驗測試集結果

knn = neighbors.KNeighborsClassifier(n_neighbors=5)
knn.fit(x_train, y_train)
predictions = knn.predict(x_test)
print(classification_report(y_test, predictions))
          precision    recall  f1-score   support

     0.0       0.80      0.95      0.87       740

     1.0       0.69      0.33      0.45       260

micro avg 0.79 0.79 0.79 1000

macro avg 0.75 0.64 0.66 1000

weighted avg 0.77 0.79 0.76 1000

構建MLP模型並檢驗測試集結果

mlp = MLPClassifier(hidden_layer_sizes=(20,10) ,max_iter=500)
mlp.fit(x_train,y_train)
predictions = mlp.predict(x_test)
print(classification_report(y_test, predictions))
            precision    recall  f1-score   support

     0.0       0.82      0.96      0.88       740

     1.0       0.77      0.38      0.51       260

micro avg 0.81 0.81 0.81 1000

macro avg 0.79 0.67 0.70 1000

weighted avg 0.80 0.81 0.79 1000

專案打包

關注公眾號:Python資料分析和人工智慧

後臺回覆:1214

作者介紹