鄭淞元
(浙江省杭州學軍中學,浙江杭州,310000)
存款營銷是銀行吸收存款的主要經營模式,通過對銀行歷史營銷數據進行建模,利用模型去判斷一個潛在客戶是否會有存款業務,從而幫助銀行提高營銷成功率和營銷效率,更好的分配人力資源,節省成本。本文將使用spark框架中的邏輯回歸實現,按照數據分析的步驟,分析銀行營銷數據,建立邏輯回歸模型,預測客戶是否會存款,并提出建議。
邏輯回歸是一個有監督機器學習算法中的分類算法。通常是利用已知的特征變量來預測一個離散型目標變量的值(如0/1,是/否,真/假)。通過邏輯回歸擬合得到結果變量值是一個概率值(0-100%),根據概率值的大小和根據業務場景確定的分類閾值,映射為最終預測目標變量的分類值,如:概率值大于等于50%,映射目標變量分類值為1;概率值小于50%,映射目標變量分類值為0。
線性回歸的基本思路是對多維空間中存在的樣本點,用特征的線性組合去擬合多維空間中點的分布和軌跡,公式如下:z=θ0 +θ1x1 +θ2x2 +θ3x3......+θnxn=θTx;
特征工程是對原始數據進行加工,提取滿足算法和模型要求的特征變量。特征工程包括特征提取、特征轉換、降維等操作。Spark提供了多種特征工程算法的實現。本驗中,我們使用了StringIndex 和 OneHotEncoder 兩種特征轉換算法。
StringIndex是指把一組字符型標簽編碼成一組數值型標簽索引,索引的范圍為0到標簽數量。索引構建的順序為標簽的頻率,優先編碼頻率較大的標簽,即出現頻率最高的標簽為0號。如果輸入的是數值型的,將轉成字符型,再對其進行編碼。

表1 StringIndex特征轉換示例
在上述例子數據中,a出現了3次,c出現了2次,b出現了1次,按照category頻率從高到低,從0開始編碼,所以a的編碼為0.0,c的編碼為1.0,b的編碼為2.0。
OneHot編碼將已經轉換為數值型的類別特征,映射為一個稀疏向量對象,對于某一個類別映射的向量中只有一位有效,即只有一位數字是1,其他數字位都是0。如下列例子,有兩個特征屬性:
婚姻狀況:[“已婚”,“單身”,“離異”,“未知”]
有無房貸:[“有房貸”,“無房貸”]
機器學習算法不接收字符型的特征值,需要將字符型分類值的特征數字化,對于某一個樣本,如[“已婚”,“無房貸”],最直接的方法可以采用序列化的方式:[0,1],但是這樣的特征處理并不能直接放入機器學習算法中。對于類似婚姻狀況是4維,有無房貸是2維等問題,可以采用One-Hot編碼的方式對上述樣本[“已婚”,“無房貸”]進行編碼,“已婚”對應[1,0,0,0],“無房貸”對應[0,1],則完整的特征數字化的結果為:[1,0,0,0,0,1],這樣做會使數據變得連續,但也會非常稀疏,所以在Spark中,用了稀疏向量來表示這個結果,并且邏輯回歸算法的分類器是需要連續數值作為特征輸入的。
Apache Spark是專為大規模數據處理而設計的快速通用的計算引擎,其核心特點是基于內存的,對于大型的、低延遲的大數據分析應用有很好的性能表現。Spark的計算模型借鑒吸收了Hadoop MapReduce優點,同時也著力去解決MapReduce的一系列問題。
Spark具有如下幾個主要特點:
(1)運行速度快:構建RDD的DAG支持循環數據流結構,通過執行引擎進行內存中的并行計算處理。
(2)容易使用:提供了多種語言的交互方式,比如Scala、Java、Python和R語言等,可以方便得通過Spark Shell使用上述幾種語言編程交互式使用Spark。
(3)通用性:強大而完整的工具套件和技術棧--SQL查詢、streaming流式計算、機器學習和圖算法等相關組件。
(4)運行模式多樣:可單獨得構建集群來使用,可運行在Hadoop之上,可以在Amazon EC2等云環境中進行部署,數據源也可以很多樣化,可以訪問HDFS、Cassandra、HBase、Hive等多種數據源。
本實驗基于windows系統平臺。使用的編程語言主要是Scala,開發工具為Scala IDE。本次實驗數據來自:https://github.com/ChitturiPadma/datasets/blob/master/bank_marketing_data.csv。
在數據bank_marketing_data.csv中,包含4萬多條記錄和21個字段,本次實驗中,我們使用其中10個字段作為因變量,1個字段作為目標變量,具體列明含義如表2所示。

表2 數據字段描述
經過對數據的概要分析可知,營銷數據中除了數值型的字段 (age、duration、previous、empvarrate),還有一些包含分類值的字符型字段(job,marital、default、housing、poutcome、loan)。本步驟就要利用特征工程,對分類字段進行特征轉換,使用spark提供的StringIndex和OneHotEncoder算法。

圖1 特征工程加工后的分類變量
最后需要對在對目標變量y進行StringIndex數據轉換后,就可以基于編碼后的向量字段應用邏輯回歸算法進行預測了。
基于Spark平臺進行邏輯回歸分析的基本步驟如下:
(1)實例化一個向量組裝器對象,將向量類型字段和數值型字段形成一個新的字段:features,其中包含了所有的特征值 val;
(2)對目標變量進行StringIndexer特征轉換,輸出新列;
(3)將特征按順序進行合并,形成一個數組 val;
(4)將原始數據selected_Data進行8-2分,80%用于訓練數據training。20%用于測試數據test,評估訓練模型的精確度 ;
(5)實例化邏輯回歸算法;
(6)將算法數組和邏輯回歸算法合并,傳入pipeline對象的stages中,然后作用于訓練數據,訓練模型;
(7)將上一步的訓練模型作用于測試數據,返回測試結果;
(8)顯示測試結果集中的真實值、預測值、原始值、百分比字段;
(9)創建二分類算法評估器,對測試結果進行評估val。

val splits = selected_Data.randomSplit(Array(0.8,0.2))val lr = new LogisticRegression()var model = new Pipeline().setStages(transformers:+ lr).fit(training)

圖2 代碼1(邏輯回歸模型進行預測)
運行代碼,可以得出結果如圖3所示。

圖3 預測結果圖像
圖3運行后輸出的測試結果前10條數據,其中probability 列值范圍是[0,1],對應的發生概率,如果某個分類值出現的概率大于0.5,那么預測值prediction就是對應的那個分類值。對20%測試集的預測精確度為:0.9192031636279924,即:精確度為 90% 以上,說明我們模型是有效的,預測的準確度比較高。需要注意的是,每次運行的精確度不會完全一樣,有稍微差別。
本文章介紹了運用邏輯回歸機器學習算法的基本步驟,以銀行營銷數據為基礎演示了的分析預測方法,該方法包括以下步驟:
(1)獲取銀行營銷數據;(2)分析營銷數據的結構;(3)概要分析數據字段的內容;(4)對數據使用特征工程;(5)建立邏輯回歸模型并進行預測。
除上述步驟外,根據數據情況和具體場景,有時還需要對數據進行清洗。