葡萄牙銀行電話貸款數(shù)據(jù)分析

寫在前面

研究生一年級上半學期的課程很快就結(jié)束了,本學期數(shù)據(jù)挖掘課程老師在寒假留給我們一個大作業(yè)芜赌。大作業(yè)一共有五個project椎工,要求任選一個進行數(shù)據(jù)分析,在權(quán)衡后選擇了葡萄牙銀行電話貸款的案例翘簇。該案例的數(shù)據(jù)集是銀行電話推銷貸款業(yè)務的客戶信息撬码,題目要求對這些客戶信息進行數(shù)據(jù)分析,預測電話推銷貸款的成功率版保。數(shù)據(jù)集一共有兩個版本呜笑,較早的版本數(shù)據(jù)維度比新版數(shù)據(jù)的維度要少,在筆者的實驗中使用新的數(shù)據(jù)集彻犁。新版數(shù)據(jù)集包含兩個數(shù)據(jù)文件叫胁,較大的數(shù)據(jù)文件中包含約四萬條數(shù)據(jù),較小的包含約四千條數(shù)據(jù)汞幢,較小的數(shù)據(jù)集被用來訓練例如svm這樣需要較大計算量的模型驼鹅。該數(shù)據(jù)集可以在UCI數(shù)據(jù)庫中下載,現(xiàn)在給出數(shù)據(jù)集地址森篷。

數(shù)據(jù)集描述

數(shù)據(jù)集中的數(shù)據(jù)用于描述銀行客戶的信息输钩,每條信息擁有二十個屬性,包括用戶的年齡仲智,受教育程度买乃,職業(yè)等等。這些屬性有的是離散值钓辆,例如受教育程度剪验,有的是連續(xù)值,例如客戶年齡前联。每條數(shù)據(jù)有一個標簽屬性功戚,用于表述該客戶在電話推銷后是否接受銀行的貸款業(yè)務,“no”代表不接受蛀恩,“yes”則代表接受疫铜。根據(jù)程序?qū)γ總€屬性取值的分析,數(shù)據(jù)集中的數(shù)據(jù)存在缺失值双谆,即有的屬性取值為“unknown”壳咕,這些缺失值在其后的數(shù)據(jù)分析中需要進行特別處理席揽。數(shù)據(jù)集中標簽為“no”的數(shù)據(jù)占多數(shù),標簽為“yes”的數(shù)據(jù)占少數(shù)谓厘,二者的比例大約為9:1幌羞,即該數(shù)據(jù)存在類別不平衡問題,在數(shù)據(jù)分析中也需要進行處理竟稳。

分析方案制定

數(shù)據(jù)挖掘的分析方法多種多樣属桦,每種方法都有自己的適用范圍,面對題中的分析任務他爸,筆者認為任意選取某一種分析方法進行分析是不負責任的聂宾,必須對比多種模型在數(shù)據(jù)集上的表現(xiàn)才能確定最佳的分析方法≌矬裕基于筆者自身的能力和精力系谐,筆者最終決定選取隨機森林,決策樹讨跟,logistic回歸和svm四種方法故黑,在其中選取表現(xiàn)最佳的方法作為這個case的預測模型刻恭。且基于提升自己編程能力和對模型理解運用能力的目的,該案例分析中所有代碼除矩陣運算外暑椰,均為筆者手動實現(xiàn)吏颖,不借用任何現(xiàn)成的機器學習框架输莺。

數(shù)據(jù)預處理

上一小節(jié)中提到了所要用到的四個模型甫男,這四個模型中有的要求輸入數(shù)據(jù)為離散型變量攘已,例如決策樹和隨機森林,有的要求輸入數(shù)據(jù)為連續(xù)型變量澜共,例如svm和logistic回歸预愤。因此就需要對數(shù)據(jù)集進行必要的預處理來滿足不同模型的需求。

首先考慮決策樹和隨機森林咳胃,這兩種模型均需要輸入離散型的變量,因此對數(shù)據(jù)集的連續(xù)型變量進行離散化旷太。對于年齡這樣的數(shù)據(jù)展懈,筆者以十歲為一個階段進行區(qū)間劃分,落入不同階段內(nèi)的年齡賦不同的枚舉值供璧,對于較大的連續(xù)型變量則用其整除某一值的整數(shù)商來作為該屬性的離散值存崖。

其次考慮svm和logistic回歸,這兩種模型均要求連續(xù)型的輸入數(shù)據(jù)睡毒。在對原始數(shù)據(jù)集連續(xù)化過程之前首先需要考慮這樣一個問題来惧,即原數(shù)據(jù)集中有不少屬性值是缺失的,必須將這些缺失值從數(shù)據(jù)集中“移除”掉演顾,否則會對模型產(chǎn)生負面影響供搀∮缇樱“移除”的方法有兩個,其一是將這些有缺失值的數(shù)據(jù)從數(shù)據(jù)集中刪掉葛虐,其二是根據(jù)其他的完整數(shù)據(jù)來預測這些缺失值的取值胎源。方案一的優(yōu)點是簡單,缺點是會造成數(shù)據(jù)集規(guī)模和代表性的縮水屿脐,方案二的優(yōu)點是能夠最大限度的保留數(shù)據(jù)集涕蚤,保證模型的泛化能力,缺點是較為復雜的诵。最終筆者選取的方案是使用隨機森林模型對數(shù)據(jù)集中的缺失值進行預測万栅。

圖0

在補齊數(shù)據(jù)集中的缺失值之后就可以對其進行連續(xù)化操作了。連續(xù)化操作針對的對象是離散型變量西疤,這些離散型變量可以分類兩類烦粒,一類是二值型離散變量,一類是多值型離散變量瘪阁。二值型離散變量可以簡單地對一個取值賦1撒遣,另一個賦0。多值型離散變量又可以分為兩類管跺,一類是取值為有序的义黎,例如受教育年限,一類是取值為無序的豁跑,例如婚姻狀態(tài)廉涕。對于有序的多值型離散變量,可以簡單地用有序的連續(xù)數(shù)值對應各個離散值艇拍,對于無序的多值型離散變量則需要引入啞變量來進行數(shù)值化狐蜕。啞變量又稱為虛擬變量,可以理解為向量卸夕,對于一個取值數(shù)為n的多值無序變量层释,其啞變量的維數(shù)為n-1。舉例如下:

圖1

數(shù)值化后的數(shù)據(jù)集需要進一步進行正規(guī)化操作快集,因為某些取值可能過大贡羔,這在距離計算時可能會導致擾動。通常對數(shù)據(jù)正規(guī)化操作就是對數(shù)值型變量求對數(shù)个初,但是該數(shù)據(jù)集中有利率這個屬性乖寒,該屬性存在負值,因此必須采用別的正規(guī)化操作方法院溺。筆者選取了兩種正規(guī)化計算方法楣嘁,其正規(guī)化計算公式如下所示。方法一:

圖2

方法二:

圖3

由于數(shù)據(jù)集比較龐大,數(shù)據(jù)預處理是個非常耗時的操作逐虚,因此筆者推薦將預處理后的數(shù)據(jù)持久化保存到本地聋溜。

訓練集與測試集選取

由于原數(shù)據(jù)集中正例與反例的數(shù)目不平衡,為了保證模型的泛化性能痊班,必須對這個問題進行解決勤婚。解決類別不平衡問題一共有兩種思路,一種是過抽樣涤伐,一種是欠抽樣馒胆。前者是利用某種算法人為地增加較少樣例的數(shù)目,例如smote算法凝果,另一種是人為地減少數(shù)目較多的樣例的數(shù)目祝迂。前一種方法的優(yōu)點在于能夠在總樣本量較少的情況下既保證類別平衡,又保證訓練集的規(guī)模器净,缺點在于實現(xiàn)起來較為復雜型雳。后一種方法的優(yōu)點是簡單,只需要簡單地刪除數(shù)據(jù)集中類別較多的數(shù)據(jù)直到類別平衡為止山害,缺點是在數(shù)據(jù)集規(guī)模較小的情況下這種方法可能導致數(shù)據(jù)集變得更小纠俭,導致模型欠擬合。在本例中即使是較小的數(shù)據(jù)集規(guī)模也在四千以上浪慌,因此從實現(xiàn)簡單的角度出發(fā)冤荆,筆者選用欠抽樣的方法來保證數(shù)據(jù)集的類別平衡,即從較多樣例的類別中隨機選取與較少樣例類別相同數(shù)目的樣例权纤。代碼如下:

圖4

解決了數(shù)據(jù)集類別不平衡問題中钓简,就應該開始產(chǎn)生訓練集和測試集。訓練集和測試集應是兩個沒有交集的集合汹想,且訓練集和測試集大小之比大多為7:3外邓。在本例中筆者采用自助法產(chǎn)生訓練集和測試集:首先遍歷數(shù)據(jù)集,每次遍歷從數(shù)據(jù)集中隨機選擇一條數(shù)據(jù)放入訓練集中古掏,同時并不將該條數(shù)據(jù)從原數(shù)據(jù)集中刪除损话,這樣該條數(shù)據(jù)就能參與下一次遍歷時的隨機選取。這樣槽唾,遍歷完一次原數(shù)據(jù)集就能產(chǎn)生一個大小與原數(shù)據(jù)集相同的訓練集席镀,這個訓練集中是包含重復數(shù)據(jù)的,測試集即是原數(shù)據(jù)集與訓練集的差集夏漱。記原始數(shù)據(jù)集的大小為m,則訓練集中某一樣本抽取m次都不被抽中的概率為:

圖5

取該概率的極限可得到:

圖6

根據(jù)以上計算顶捷,訓練集的大小基本相當于原數(shù)據(jù)集的30%挂绰,而訓練集的大小和原數(shù)據(jù)集相同,因此訓練集合測試集不相交且大小之比為7:3。

模型評估

實驗平臺為Macbook Pro葵蒂,操作系統(tǒng)為OS X Capitan 10.11.5交播,內(nèi)存8 GB 1867 MHz DDR3,模型使用python語言編寫践付,筆者使用的python版本為3.6.3秦士。

隨機森林

隨機森林是并行式集成學習的一種。集成學習的中心思想是設(shè)置若干個弱學習器(基學習器)永高,每個弱分類器都會對待分類數(shù)據(jù)給出自己的預測值隧土,整個模型的輸出取決于所有弱分類器給出的結(jié)果,筆者在實現(xiàn)時采用投票法給出最終結(jié)果命爬。這樣的學習方法雖然比較簡單曹傀,但是在某些問題上卻能給出較為準確的預測結(jié)果。隨機森林就是這樣的一種方法饲宛,其基學習器為決策樹皆愉,該決策樹與通常的決策樹不同,通常的決策樹在節(jié)點上選擇屬性進行分裂時候選屬性集是在該節(jié)點上所有屬性組成的集合艇抠,但隨機森林中決策樹節(jié)點上的候選屬性集是該節(jié)點上所有屬性集合上隨機選取的一個子集幕庐,該子集的大小一般設(shè)置為該節(jié)點上所有屬性集合大小的以2為底的對數(shù)。

鑒于筆者計算機能力的限制家淤,筆者只測試了基學習器數(shù)量在1-20的情況异剥,每種情況下做五次實驗,模型的預測準確率取五次準確率的平均值媒鼓,實驗數(shù)據(jù)集為bank-additional-full届吁。實驗結(jié)果如下所示:

圖7

從結(jié)果中可以大致看出其分類準確率與基學習器個數(shù)存在一定的關(guān)系,為了驗證筆者的想法绿鸣,將平均分類準確率與基學習器個數(shù)做圖如下:

圖8

圖中橫坐標代表基學習器數(shù)量疚沐,縱坐標代表模型分類準確率。從圖中可以看出隨著基學習器數(shù)量的增多潮模,整個模型的分類準確率提升亮蛔。在基學習器數(shù)量大于15后準確率趨于穩(wěn)定,且基學習器數(shù)量為奇數(shù)時整個模型的預測準確率較高擎厢。

綜合實驗結(jié)果究流,可以推算出隨機森林的預測準確率大約為0.804。

決策樹

決策樹是數(shù)據(jù)挖掘領(lǐng)域非常著名的一種方法动遭,是數(shù)據(jù)挖掘十大算法之一芬探,同時該方法也非常簡單有效,在某些應用場景下堪比專家厘惦。實驗用到的數(shù)據(jù)集為bank-additional-full偷仿,一共做100次實驗,實驗分類錯誤率如下圖所示:

圖9

一百次實驗的平均錯誤率為0.621,其實驗次數(shù)與預測正確率的關(guān)系如下圖所示:

圖10

圖中橫軸為實驗次數(shù)酝静,縱軸為模型預測準確率节榜。從圖中可以看出,決策樹模型的預測準確率比較穩(wěn)定别智,基本只和訓練集與測試集數(shù)據(jù)有關(guān)宗苍,在一百次實驗中,其準確率一直穩(wěn)定在0.61附近薄榛。

Logistic回歸

Logistic回歸是線性回歸的一種讳窟,該模型的相關(guān)說明請參見筆者的另一篇博客淺談隨機梯度下降法在對數(shù)回歸中的應用。由于線性模型的計算量比較大蛇数,因此在實驗該模型的過程中筆者采用較小的數(shù)據(jù)集bank-additional挪钓,量化該數(shù)據(jù)后本地存儲為bank-addtional-format-lr供實驗讀取。

筆者采用線性損失函數(shù)耳舅,并且使用隨機梯度下降法訓練模型碌上。該方法中有兩個較為重要的參數(shù),一個是迭代次數(shù)浦徊,另一個是梯度下降步長馏予。為了得到較為收斂的數(shù)據(jù)且避免陷入局部最小,迭代次數(shù)選為10000次盔性,步長選為0.001霞丧。回歸分析中最重要的是回歸系數(shù)是否收斂冕香,若回歸系數(shù)收斂則說明模型是收斂的蛹尝,否則一個發(fā)散的模型是無法使用的。下圖為回歸系數(shù)全部31個維度的收斂情況:

圖11
圖12
圖13
圖14
圖15
圖16

圖中橫軸代表迭代次數(shù)悉尾,縱軸代表回歸系數(shù)相應維度的數(shù)值變化情況突那。從圖中可以看出,回歸系數(shù)在所有的維度上都收斂或者有收斂的趨勢构眯,這說明整個模型是收斂的愕难。接下來需要考察模型的預測準確率,筆者一共做了十次實驗惫霸,整理結(jié)果如下:

圖17

從實驗結(jié)果可以看出猫缭,回歸模型整體預測的正確率較高,平均達到準確率達到0.909壹店,且準確率表現(xiàn)十分穩(wěn)定猜丹,正負相差不超過0.015。這也說明該案例是一個線性可分的問題硅卢?

SVM

支持向量機(Support Vector Machine)是機器學習領(lǐng)域應用十分廣泛的一種模型射窒,其數(shù)學模型十分優(yōu)美妖混。更加難能可貴的是svm能夠通過核函數(shù)的方式將原本低緯度線性不可分的數(shù)據(jù)映射到更高維度的希爾伯特空間,從而使其線性可分轮洋,能夠解決許多非線性問題。筆者在實現(xiàn)svm模型時采用了高效的序列最小優(yōu)化算法(SMO)抬旺。

筆者在實驗時采用的數(shù)據(jù)集是bank-additional弊予,量化后的數(shù)據(jù)本地存儲為bank-additional-format-svm。SVM模型本身需要的標定的參數(shù)是比較多的开财,包括松弛變量C汉柒,核函數(shù)的種類,KKT條件的容忍參數(shù)责鳍,選擇rdb核函數(shù)時到達率參數(shù)等碾褂。由于在logistic回歸中筆者懷疑該案例是一個線性可分的問題,因此首先測試線性核函數(shù)历葛。在測試中松弛變量C選擇為較大的0.6正塌,這樣能夠最大限度地讓訓練集中所有數(shù)據(jù)都正確分類,提高模型的泛化能力恤溶。KKT條件的容忍參數(shù)設(shè)定為0.01乓诽。

筆者一共實驗二十次,實驗結(jié)果如下圖所示:

圖18

從實驗結(jié)果可以看出咒程,svm的平均分類準確率為0.691鸠天。接著,筆者又選取了rbf核函數(shù)帐姻,到達率選擇了較大的1.3稠集。在rbf核函數(shù)下svm的表現(xiàn)比線性核要差得多,平均分類準確率只達到0.46左右饥瓷。

綜合四個模型的實驗剥纷,可以得到如下結(jié)果:

圖19

可以看出,表現(xiàn)最好的是回歸模型扛伍,然后是隨機森林模型筷畦,接著是svm模型,最后是決策樹模型刺洒。

展望

該案例的數(shù)據(jù)分析做到這里告一段落鳖宾,筆者認為還有一些可以優(yōu)化的地方,在這里寫明逆航,希望以后有機會能夠做的更好鼎文。第一點是數(shù)據(jù)預處理做的不充分,筆者在訓練模型時將數(shù)據(jù)的所有屬性都帶入模型因俐,沒有對數(shù)據(jù)的屬性進行篩選拇惋,這就不可避免地將一些對結(jié)果影響不大的屬性也帶入了周偎,給模型引入了更多的不確定性因素;第二點是原始數(shù)據(jù)可能存在一些不可分的情況撑帖,在這種情況下主流的做法應該是引入主成分分析蓉坎,對原始數(shù)據(jù)進行降維,但是限于筆者的精力和時間胡嘿,這一點沒有做蛉艾;第三點是實驗做的不充分,例如隨機森林的基學習器個數(shù)最大只做到了20衷敌,應該做更多的勿侯,其他方法也應該在每個參數(shù)水準上做更多的實驗來得到更加能夠說服人的結(jié)果。

開源

https://github.com/yhswjtuILMARE/DataMiningOfBank

2018年2月22日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缴罗,一起剝皮案震驚了整個濱河市助琐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌面氓,老刑警劉巖兵钮,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侧但,居然都是意外死亡矢空,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門禀横,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屁药,“玉大人,你說我怎么就攤上這事柏锄∧鸺” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵趾娃,是天一觀的道長缭嫡。 經(jīng)常有香客問我,道長抬闷,這世上最難降的妖魔是什么妇蛀? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮笤成,結(jié)果婚禮上评架,老公的妹妹穿的比我還像新娘。我一直安慰自己炕泳,他們只是感情好纵诞,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著培遵,像睡著了一般浙芙。 火紅的嫁衣襯著肌膚如雪登刺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天嗡呼,我揣著相機與錄音纸俭,去河邊找鬼。 笑死南窗,一個胖子當著我的面吹牛掉蔬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矾瘾,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼箭启!你這毒婦竟也來了壕翩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤傅寡,失蹤者是張志新(化名)和其女友劉穎放妈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荐操,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡芜抒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了托启。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宅倒。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屯耸,靈堂內(nèi)的尸體忽然破棺而出拐迁,到底是詐尸還是另有隱情,我是刑警寧澤疗绣,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布线召,位于F島的核電站,受9級特大地震影響多矮,放射性物質(zhì)發(fā)生泄漏缓淹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一塔逃、第九天 我趴在偏房一處隱蔽的房頂上張望讯壶。 院中可真熱鬧,春花似錦患雏、人聲如沸鹏溯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丙挽。三九已至肺孵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颜阐,已是汗流浹背平窘。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凳怨,地道東北人瑰艘。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像肤舞,于是被迫代替她去往敵國和親紫新。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容