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

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

0x00 人工神經網絡介紹

人工神經網絡(Artificial Neural Network,即ANN ),是20世紀80 年代以來人工智能領域興起的研究熱點。它從信息處理角度對人腦神經元網絡進行抽象, 建立某種簡單模型,按不同的連接方式組成不同的網絡。在工程與學術界也常直接簡稱為神經網絡或類神經網絡。神經網絡是一種運算模型,由大量的節點(或稱神經元)之間相互 連接構成。每個節點代表一種特定的輸出函數,稱為激活函數(activation function)。每兩個節點間的連接都代表一個對於通過該連接信號的加權值,稱之為權重,這相當於人工神經網絡的記憶。網絡的輸出則依網絡的連接方式,權重值和激勵函數的不同而不同。而網絡自身通常都是對自然界某種算法或者函數的逼近,也可能是對一種邏輯策略的表達。

0x01 基礎知識準備

本文需要讀者瞭解以下內容:

  • 激活函數
  • ANN的工作原理
  • ANN的學習原理
  • 梯度下降
  • 隨機梯度下降
  • 前向網絡
  • 反饋網絡

對基礎知識瞭解不太紮實的讀者也不用擔心,頭條號後續會補充基礎知識的相關文章。

0x02 環境搭建(Windows)

1、安裝Anaconda,具體步驟請參考頭條號文章《 》

2、打開Anaconda Prompt

3、執行如下命令創建虛擬環境

conda create -n tensorflow python=3.5 anaconda

注意:

如果出現錯誤The path 'vcruntime140.dll' specified in the package manifest cannot be found.

說明是沒有安裝vs2015,安裝vs2015即可解決

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

4、激活虛擬環境

activate tensorflow

5、安裝Theano、TensorFlow、Keras

conda install theano

conda install mingw libpython

pip install tensorflow

pip install keras

6、更新所有軟件到最新版本

conda update --all

7、運行 Spyder:

spyder

0x03 問題描述

現有一個包含10000條銀行客戶數據的數據集,包含銀行客戶的一些基本信息,如:客戶ID,姓名,信用積分,國家,性別,年齡,與銀行簽約時長,資產,產品數,是否有信用卡,是否活躍,年薪和是否已經解約(也就是拋棄了這家銀行),所有數據都是獨立的。目前需要根據此數據集預測哪些客戶傾向與這家銀行解約,這樣可以達到提前對這些客戶做相應措施的目的。要數據集的朋友請看評論。

如下圖所示,exited為1表示已解約,exited為0表示未解約

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

0x04 創建ANN模型

創建ANN模型分為兩部分,第一部分為數據處理,第二部分為創建ANN模型。

本文問題為分類問題,我們需要篩選能夠影響客戶去留的輸入數據,和客戶留下或者離開的輸出數據。

數據處理步驟如下:

1、導入需要的庫

在spyder左側的編輯框輸入以下內容,並按control+enter執行它們

import numpy as np

import matplotlib.pyplot as plt

import pandas as pd

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

2、導入數據集

執行下面代碼

dataset = pd.read_csv('Churn_Modelling.csv')

X = dataset.iloc[:, 3:13].values

y = dataset.iloc[:, 13].values

dataset,X,y變量分別為:

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

dataset

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

X

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

y

3、將分類變量列轉換成二進制數。

執行如下語句:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X_1 = LabelEncoder()

X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])

labelencoder_X_2 = LabelEncoder()

X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

onehotencoder = OneHotEncoder(categorical_features = [1])

X = onehotencoder.fit_transform(X).toarray()

X = X[:, 1:]

其中涉及到了OneHot編碼的知識。簡單來說就是將每種分類用二進制的一位表示,是哪種分類哪一位就是1,其它位就是0。

執行之後的X如下圖所示:

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

3、將數據集分為訓練集和測試集

執行下面的代碼:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)

4、將數據進行特徵縮放

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.transform(X_test)

創建ANN模型步驟如下:

5、導入Keras庫

import keras

from keras.models import Sequential

from keras.layers import Dense

6、初始化ANN

classifier = Sequential()

7、增加輸入層和第一個隱含層

classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))

8、增加第二個隱含層

classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu'))

9、增加輸出層

classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))

10、編譯ANN

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

11、用訓練集訓練

classifier.fit(X_train, y_train, batch_size = 10, epochs = 100)

12、用測試集測試

y_pred = classifier.predict(X_test)

y_pred = (y_pred > 0.5)

13、生成混淆矩陣

from sklearn.metrics import confusion_matrix

cm = confusion_matrix(y_test, y_pred)

注意:

有些函數的詳細使用方法在spyder裡面有幫助,例如將光標放在Dense上,按control+i打開help文檔

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

按ctrl+i

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

Dense類

0x05 結論

如下圖所示,橫向是測試集,縱向是預測結果。

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

準確率為85.25%

0x06 總結

本文介紹了什麼是ANN,如何搭建實驗環境,如何下載數據,數據預處理,使用ANN模型預測客戶是否會解約。

例如應用訓練好的模型預測客戶是否會解約

現某客戶信息如下:

  • Geography: France
  • Credit Score: 600
  • Gender: Male
  • Age: 40 years old
  • Tenure: 3 years
  • Balance: $60000
  • Number of Products: 2
  • Does this customer have a credit card ? Yes
  • Is this customer an Active Member: Yes
  • Estimated Salary: $50000

使用ANN模型預測他是否會解約:

new_prediction = classifier.predict(sc.transform(np.array([[0.0, 0, 600, 1, 40, 3, 60000, 2, 1, 1, 50000]])))

new_prediction = (new_prediction > 0.5)

答案是客戶不會解約。

0x07 寫在最後

下篇文章將介紹ANN的評價與優化。

本文是系列文章,後續還將以類似形式推出如下內容:

CNN(卷積神經網絡)

RNN(循環神經網絡)

SOMs(自組織特徵映射神經網絡)

Boltzmann Machine(玻爾茲曼機)

AutoEncoders(自動編碼器)

Regression&Classification(迴歸和聚類)

本文到此就介紹完了,感謝大家的閱讀。


分享到:


相關文章: