數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究_第1頁
數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究_第2頁
數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究_第3頁
數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究_第4頁
數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究摘要信用卡在日常生活中越來越普及,給人們的日常生活帶來了諸多便利。作為一種新型的金融工具,銀行找到了新的利潤來源,但是與此同時,信用卡作為一種無抵押的信用貸款工具,作為發(fā)行方的銀行如果錯誤判斷了信用卡用戶的還款能力,往往會承擔很多未知的風險。如果信用卡用戶長期無法按時償還信用卡欠款金額,甚至惡意拖欠欠款,則將構(gòu)成信用卡詐騙,損害銀行的利益,這是一種犯罪行為。因此,很有必要將數(shù)據(jù)分析和數(shù)據(jù)挖掘的相關(guān)技術(shù)引用到信用卡欺詐檢測上,幫助銀行準確識別出潛在的違約用戶,這能幫助銀行免受信用卡欺詐帶來的損失。本次設(shè)計將采用一個kaggle網(wǎng)站上的臺灣銀行信用卡數(shù)據(jù)集,利用描述性統(tǒng)計、可視化作圖等工具對數(shù)據(jù)集進行數(shù)據(jù)探索。對數(shù)據(jù)集有了初步了解之后,對數(shù)據(jù)集進行數(shù)據(jù)清洗和轉(zhuǎn)換,再通過使用邏輯回歸、神經(jīng)網(wǎng)絡(luò)、決策樹等常用的機器學習算法,對數(shù)據(jù)集建立模型。使用F1分數(shù)、準確率等常用的評價指標評價不同算法的得到的模型再測試集上的性能表現(xiàn)。關(guān)鍵詞: 數(shù)據(jù)分析,數(shù)據(jù)挖掘,信用卡欺詐AbstractCreditcardsarebecomingmoreandmorepopularindailylife,bringingconveniencetopeople'sdailylives.Asanewtypeoffinancialinstrument,thebankhasfoundanewsourceofprofit,butatthesametime,creditcardasanunsecuredcreditloantool,astheissuer'sbank,ifitmisjudgesthecreditcarduser'srepaymentability,itwilloftenTakeonmanyunknownrisks.Ifthecreditcarduserfailstorepaythecreditcarddebtamountontime,orevenmaliciouslydefaultsonthearrears,itwillconstitutecreditcardfraudanddamagetheinterestsofthebank.Thisisacriminalact.Therefore,itisnecessarytorefertothetechnologyofdataanalysisanddataminingtocreditcardfrauddetectiontohelpbanksaccuratelyidentifypotentialdefaultusers,whichcanhelpbanksavoidthelossescausedbycreditcardfraud.ThisdesignwilluseaTaiwanesebankcreditcarddatasetonthekagglewebsitetoexploredatasetsusingtoolssuchasdescriptivestatisticsandvisualmapping.Afterapreliminaryunderstandingofthedataset,thedatasetiscleanedandtransformed,andthedatasetismodeledbyusingcommonlyusedmachinelearningalgorithmssuchaslogisticregression,neuralnetworks,anddecisiontrees.TheperformanceofthemodelretestsetobtainedbydifferentalgorithmswasevaluatedusingcommonlyusedevaluationindexessuchasF1scoreandaccuracy.Keywords:Dataanalysis,datamining,creditcardfraud目錄1引言 11.1 研究背景與意義 11.2國內(nèi)外研究現(xiàn)狀 21.3研究內(nèi)容及主要工作 22數(shù)據(jù)挖掘方法 32.1數(shù)據(jù)挖掘基本概念 32.2本文涉及的方法的基本概念 42.2.1邏輯回歸 42.2.2多項式拓展 52.2.3樸素貝葉斯 62.2.4神經(jīng)網(wǎng)絡(luò) 72.2.5主成分分析 82.2.6決策樹 93使用的數(shù)據(jù)集 103.1數(shù)據(jù)來源和簡介 103.2數(shù)據(jù)探索 123.2.1數(shù)據(jù)質(zhì)量探索 123.2.2連續(xù)變量描述性統(tǒng)計 133.2.3違約率 153.2.4離散變量數(shù)據(jù)分布 153.2.5連續(xù)變量數(shù)據(jù)分布 263.2.6相關(guān)性探索: 314數(shù)據(jù)預(yù)處理 334.1異常值處理 334.2增刪變量以及主成分分析 344.3離散變量進行啞變量編碼 374.4連續(xù)變量標準化 384.5多項式拓展 384.6劃分數(shù)據(jù)集 395數(shù)據(jù)挖掘 415.1模型評價指標 415.1.1F1分數(shù) 415.1.2AUC分數(shù) 415.2邏輯回歸 425.2.1單變量邏輯回歸 425.2.2選擇正則化參數(shù) 445.2.3性能評價 475.3神經(jīng)網(wǎng)絡(luò) 495.3.1選擇隱藏層規(guī)模 495.3.2模型評價 525.4樸素貝葉斯 535.4.1實現(xiàn)過程 535.4.2性能評價 545.5決策樹 555.5.1主要過程 555.5.2性能評價 565.6模型比較 57結(jié)論 58參考文獻 59致謝 601引言研究背景與意義隨著經(jīng)濟的全球化發(fā)展,國內(nèi)國外的銀行紛紛進入全球市場。銀行再盈利方面,傳統(tǒng)模式的存儲盈利已經(jīng)不餓滿足銀行的需求,借此機會,信用卡普及了。信用卡再上世紀五十年代誕生于美國,作為信用卡行業(yè)最發(fā)達的國家,美國的信用卡主要有維薩(VISA)、萬事達(MasterCard)、美國運通(AmericanExpress)和大來(DinnersClub)?,F(xiàn)如今,大多數(shù)國家緊隨美國的不發(fā),銀行大力推廣信用卡,同時信用卡這一金融工具發(fā)展的越來越成熟。 在信用卡發(fā)展的早期階段,各大機構(gòu)為了能夠吸引到大量的用戶來使用自家的信用卡,往往會降低信用卡的申請門檻,大量的發(fā)行信用卡,搶占新興的市場份額。得益于這種政策,截止到1970年,超過一般的美國人使用上了信用卡。知道2017年,VISA的全球交易額已經(jīng)達到二10.21萬億美元,市場份額超過了50%。 隨著信用卡普及率逐年上升,信用卡用戶不能按時還款甚至惡意違約的信用卡欺詐犯罪行為出現(xiàn)的越來越頻繁。根據(jù)央行統(tǒng)計報告顯示,截止到2013年,我國的信用卡壞賬總額已經(jīng)高達251.92億元,比上一年年末,增加了105.34億元,增幅達到了71.86%。出現(xiàn)了這么嚴峻的信用卡欺詐請款,除了信用卡發(fā)卡前的審核準確率較低之外,歸根結(jié)底,不餓能及時找出高違約風險的信用卡用戶才是最重要的原因。上訴原因?qū)е铝诵庞每◥阂膺`約的犯罪愈演愈烈。因此。利用新的技術(shù)手段來提高信用卡發(fā)卡前對申請人的信用評級準確率,和及時發(fā)現(xiàn)已有用戶中的高風險用戶,已經(jīng)勢在必行。如何從信用卡數(shù)據(jù)集中挖掘出有用的信息,結(jié)合數(shù)據(jù)分析分析信用卡違約用戶群的群體特征,將非常有助于銀行避免發(fā)放信用卡給無力按時償還欠款的用戶,同時挖掘出已有用戶群中違約風險較高的用戶群,對其提高警惕,采取如降低信用額度等措施,從根源上避免銀行遭受不必要的經(jīng)濟損失。另一方面,將數(shù)據(jù)分析和數(shù)據(jù)挖掘用在銀行信用卡信用欺詐檢測上,也能讓優(yōu)質(zhì)的信用卡申請人更加快速便捷的拿到申請的信用卡,不論對于廣大用戶而言還是對于銀行而言,都是一種互利共贏的方式。1.2國內(nèi)外研究現(xiàn)狀 在國外,BrauseR等人于1999年通過將關(guān)聯(lián)規(guī)則、高斯核函數(shù)和神經(jīng)網(wǎng)絡(luò)等算法應(yīng)用在信用卡欺詐數(shù)據(jù)集上,得到了不錯的模型預(yù)測準確率。2011年,BhattacharyyaS采用了不同以往的方法,將隨機森林、邏輯回歸、支持向量機等常用的及其學習方法運用到國際信用卡業(yè)務(wù)交易的數(shù)據(jù)集上,對比分析三種模型在信用卡欺詐檢測應(yīng)用中的效果。在國內(nèi),早期較為常用的是決策樹和邏輯回歸這兩種算法。在2008年,楊璽采用了支持向量機算法。2010年,劉艷紅提出將支持向量描述算啊SVDD應(yīng)用到這方面的想法,而且兩階段信用卡欺詐檢測模型克服了信用卡數(shù)據(jù)包含的信息量可能不充足的問題。2011年,段剛龍等人提出了將F-scores、支持向量機相結(jié)合的途徑,成功克服了模型泛化能力不夠強的問題??偟膩碚f,沒有哪一種算法能普遍適用于所有的數(shù)據(jù)集,同種算法在不同的數(shù)據(jù)集中表現(xiàn)可能有很大的差別。1.3研究內(nèi)容及主要工作這篇文章所用到的數(shù)據(jù)集為kaggle網(wǎng)站上的臺灣銀行信用卡數(shù)據(jù)集,并在這個數(shù)據(jù)集上,使用常用的數(shù)據(jù)分析方法和常用的機器學習算法,對數(shù)據(jù)集進行分析和建模,達到能用于預(yù)測的目的。 第一章作為引言,簡單介紹這個題目的背景和研究意義,簡單介紹國內(nèi)和國外在這方面的研究情況,各種研究方法的優(yōu)點。同時介紹這篇文章的整體思路和基本的寫作框架。 第二章作為文中所用到的相關(guān)知識的理論介紹,包括各種常用的數(shù)據(jù)分析方法和常用的數(shù)據(jù)挖掘方法的介紹。 第三章著重與數(shù)據(jù)探索,簡單介紹這次題目所用到的數(shù)據(jù)集的基本情況,并且對該數(shù)據(jù)集進行初步的探索 第四章將引入常用的模型評價指標,并進行數(shù)據(jù)挖掘過程中的數(shù)據(jù)預(yù)處理、第五章側(cè)重于將數(shù)據(jù)挖掘應(yīng)用在數(shù)據(jù)集上的研究,建立模型,比較不同數(shù)據(jù)挖掘方法的效果,并對全文做出總結(jié)。同時指出這邊文章中的不足之處和進一步完善的方法。2數(shù)據(jù)挖掘方法2.1數(shù)據(jù)挖掘基本概念 數(shù)據(jù)挖掘,即DataMining,不同于傳統(tǒng)的分析,是指在數(shù)據(jù)中挖掘出有價值的信息,期間可能用到一些機器學習的算法,數(shù)據(jù)挖掘知識覆蓋面廣泛,涉及統(tǒng)計學、計算機等專業(yè)領(lǐng)域的知識。數(shù)據(jù)挖掘可以分為有監(jiān)督學習和無監(jiān)督學習兩種形式,前者所引用的數(shù)據(jù)集中,每條數(shù)據(jù)記錄除了包含輸入變量之外,還包含了輸出的類標簽。而無監(jiān)督學習的數(shù)據(jù)集記錄則不包含真實的類標簽,只包含了對應(yīng)的輸入變量值。此篇文章屬于有監(jiān)督學習范疇。 數(shù)據(jù)挖掘整個過程可以大致分為以下幾個步驟:定義挖掘目標:首先得明確本次數(shù)據(jù)挖掘過程的目標是什么,想要達到什么效果。數(shù)據(jù)采樣:即明確數(shù)據(jù)來源,手動抽取數(shù)據(jù)集或者利用現(xiàn)成的數(shù)據(jù)集,數(shù)據(jù)集質(zhì)量要能保證相關(guān)性、可靠性和有效性,不能忽視采用的數(shù)據(jù)集的數(shù)據(jù)質(zhì)量,否則數(shù)據(jù)挖掘的效果會很差,甚至造成誤導(dǎo)。數(shù)據(jù)探索:對采用的數(shù)據(jù)集進行初步的探索,可以進行描述性統(tǒng)計或者可視化等常用的方法,分析數(shù)據(jù)集中各個變量之間的相關(guān)性,目標變量和輸入變量之間的相關(guān)性,變量取值的規(guī)律性,形成對數(shù)據(jù)集和數(shù)據(jù)集質(zhì)量的初步認知數(shù)據(jù)預(yù)處理:數(shù)據(jù)集一般都會有錯誤數(shù)據(jù)或者缺失數(shù)據(jù),可能造成這種情況的原因包含人工錄入數(shù)據(jù)過程出錯、數(shù)據(jù)存儲過程中意外丟失損壞、虛假數(shù)據(jù)等。數(shù)據(jù)預(yù)處理一般包含了缺失值處理、異常值處理、均值詭異、主成分分析、特征工程等過程。建立模型:沒有哪一種方法是適合解決所有問題的,即使是相似的題目,用同一種算法得到的效果也有可能天差地別。在這一步應(yīng)該分析所選的題目適合使用哪些方法,實踐過程應(yīng)該如何調(diào)整所選擇的方法的參數(shù)。將模型理論知識和實踐相結(jié)合。模型評價:如果數(shù)據(jù)挖掘過程中使用了多種方法,我們該如何評價哪種方法的效果更好,值得投入到實際應(yīng)用中呢?這個時候就需要我們選擇合適的模型評價指標,根據(jù)數(shù)據(jù)集的數(shù)據(jù)質(zhì)量和題目的具體情況,選擇的模型評價指標往往不同。2.2本文涉及的方法的基本概念2.2.1邏輯回歸線性回歸是通過一系列的點,計算出一條曲線來擬合這些點,從而對未來輸入的值進行連續(xù)型變量的預(yù)測,預(yù)測上的輸出結(jié)果值域為實數(shù)。而邏輯回歸不同于線性回歸,主要用于離散變量的二分類。假設(shè)數(shù)據(jù)集中每一條記錄為(xi,yi),其中共有m個樣本,其中第i個樣本x?類標簽預(yù)測值公式如下:h其中x為輸入的特征向量,θT為模型參數(shù)的轉(zhuǎn)置,作出?x~由上圖可見,?θTx邏輯回歸代價函數(shù)如下:Jθ=1其中:costhθ(xicosthθ(xi對每個參數(shù)進行如下梯度下降過程:θj=θ如果要擬合的邏輯回歸模型較為復(fù)雜,一般需要進行多項式拓展,才能得到更好的效果。2.2.2多項式拓展 假設(shè)數(shù)據(jù)集中每一條記錄為(xi,yi),其中共有m個樣本,其中第i個樣本x? 為了模型能夠擬合更加復(fù)雜、維度更高的數(shù)據(jù)集,使擬合效果更好,可以對原始數(shù)據(jù)集進行多項式拓展,將每個屬性跟其他屬性結(jié)合成二次項、三次項或者更高次項,并插入到原始數(shù)據(jù)集中,一并進行數(shù)據(jù)挖掘。2.2.3樸素貝葉斯樸素貝葉斯是一個經(jīng)典的統(tǒng)計學習方法,可用于分類。之所以稱之為樸素,是指各個變量之間相互獨立。但是在實際生活中,數(shù)據(jù)集所有變量之間相互獨立的條件往往不會得到滿足,用于分類的話,由于變量之間難免會有相關(guān)性,效果可能沒有理論上的那么好。樸素貝葉斯用于分類時基于一下貝葉斯公式:P(B|A)=P假設(shè)B為樣本屬于某個類,A為樣本的已有特征,那么由于假設(shè)變量之間相互獨立,P(A|B)為整個數(shù)據(jù)集中,樣本屬于該類的情況下,A中所有已有特征各自出現(xiàn)的概率的乘積。例如:P(“屬于第二類”|“屬性1=1,屬性2=2”)=P“屬性1=1,屬性2=2”P2.2.4神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)模仿了人類大腦神經(jīng)元之間的信息傳遞過程,由多個層以及許多神經(jīng)元節(jié)點構(gòu)成,每個節(jié)點通過一個激活函數(shù)對前一層的神經(jīng)網(wǎng)絡(luò)節(jié)點的輸出進行運算,再將運算結(jié)果傳遞到下一層神經(jīng)元。同時,每個神經(jīng)元之間的連接,是加上了不同的權(quán)重的。 更具神經(jīng)網(wǎng)絡(luò)的層次結(jié)構(gòu),一般可以分為輸入層、隱藏層、輸出層。輸入層就是用于輸入樣本數(shù)據(jù),經(jīng)過隱藏層的復(fù)雜運算,如前向傳播、后向傳播之后,輸出到輸出層。如下圖所示,下圖未插入一行偏置單元: 假設(shè)aij為第j層第i個單元的值,aaah以上就是前向傳播求預(yù)測值的過程接下來是后向傳播求神經(jīng)元誤差值,進行梯度下降調(diào)整參數(shù)的過程:在前面的邏輯回歸小結(jié)有提到sigmoid函數(shù),而神經(jīng)網(wǎng)絡(luò)也用到了sigmoid函數(shù)作為激活函數(shù)。由上面的前向傳播過程,可以得到輸出層誤差為:δ=根據(jù)微積分中的鏈式求導(dǎo),第l層的值為a(l),下一層的值為a(l+1)。此時把δg往前計算,就能求出各層的而誤差,進而使用邏輯回歸中的梯度下降優(yōu)化模型,不斷調(diào)整參數(shù)。使得代價函數(shù)的值最小。2.2.5主成分分析有時候數(shù)據(jù)集過于龐大,運算量過大,導(dǎo)致耗時過長,可以適當降低數(shù)據(jù)集的維度,對數(shù)據(jù)集進行壓縮,減少其占用的存儲空間,同時加快機器的運行速度。其次,更低維度的數(shù)據(jù)也更方便對其進行可視化。主成分分析整個過程主要是尋找一個維度較低的空間,把原始數(shù)據(jù)集映射到低緯度空間中,而且原始數(shù)據(jù)到低維空間的投影距離最小,及最小化誤差。計算低維空間向量包含:計算協(xié)方差、奇異值分解、計算低維矩陣、轉(zhuǎn)換為低維數(shù)據(jù)這幾個主要步驟。協(xié)方差矩陣:C=再對協(xié)方差矩陣進行奇異值分解。主成分分析過程中,原始數(shù)據(jù)集到新的低維空間的距離可以采用平均投影誤差的平房來衡量:J=1其中,xapproxJ得到的結(jié)果就是從n維空間像更低維度的k維空間進行映射。2.2.6決策樹決策樹是一種常見的分類算法,性能優(yōu)秀。決策樹一般需要進行以下步驟:1.利用特征A的某個取值a,將數(shù)據(jù)分為兩部分,計算A=a時的基尼系數(shù)2.遍歷所有特征的所有取值,重復(fù)步驟1,直到滿足停止條件,算法的停止條件既可以選擇樣本包含的最小樣本數(shù),又可以選擇基尼系數(shù)閾值3.開始剪枝,避免模型過擬合,泛化性能差。3使用的數(shù)據(jù)集3.1數(shù)據(jù)來源和簡介此次題目采用來自kaggle網(wǎng)站上面的一個臺灣銀行信用卡數(shù)據(jù)集,該數(shù)據(jù)集每條數(shù)據(jù)集記錄包含了信用卡用戶的個人基本信息,如性別、年齡、婚姻情況等基本的人口統(tǒng)計學信息。除此之外,每條記錄還包含了2005年4月至2005年9月期間,該用戶應(yīng)償還的信用卡賬單金額、實際已償還的信用卡金額等信息。而該數(shù)據(jù)集的類標號則為用戶在下個月是否違約。該數(shù)據(jù)集總共包含了30000條記錄,每條數(shù)據(jù)記錄包含了25個屬性,其中一個屬性為類標簽。其中BILL_AMT變量為對應(yīng)月分的賬單金額,賬單金額=之前月份欠款+本月新的欠款,正數(shù)表示有為欠款,負數(shù)表示卡中有存款結(jié)余。其中PAY_AMT變量為對應(yīng)月份的還款金額,PAY_AMT=償還的欠款+存入信用卡的錢,大于BILL_AMT表示按時還款,小于BILL_AMT但大于最低還款限度表示延遲還款,小于最低還款限度表示違約。類標簽為下個月(10月)用戶是否違約。數(shù)據(jù)集的主要字段如下:ID:信用卡客戶ID號LIMIT_BAL:以新臺幣計算的信貸金額(包括個人和家庭/補充信貸)SEX:性別(1代表男性,2代表女性)EDUCATION:受教育程度(1=研究生,2=大學,3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)AGE:年齡PAY_0:2005年9月的還款記錄(0=按時付款,1=延遲一個月付款,2=延遲兩個月付款,...8=延遲八個月付款,9=延遲九個月及以上付款)PAY_2:2005年8月的還款情況(特征值含義如上)PAY_3:2005年7月的還款情況(特征值含義如上)PAY_4:2005年6月的還款情況(特征值含義如上)PAY_5:2005年5月的還款情況(特征值含義如上)PAY_6:2005年4月的還款情況(特征值含義如上)BILL_AMT1:2005年9月賬單金額(新臺幣)BILL_AMT2:2005年8月賬單金額(新臺幣)BILL_AMT3:2005年7月賬單金額(新臺幣)BILL_AMT4:2005年6月賬單金額(新臺幣)BILL_AMT5:2005年5月賬單金額(新臺幣)BILL_AMT6:2005年4月賬單金額(新臺幣)PAY_AMT1:2005年9月支付金額(新臺幣)PAY_AMT2:2005年8月支付金額(新臺幣)PAY_AMT3:2005年7月支付金額(新臺幣)PAY_AMT4:2005年6月支付金額(新臺幣)PAY_AMT5:2005年5月支付金額(新臺幣)PAY_AMT6:2005年4月支付金額(新臺幣)default.payment.next.month:是否違約還款(1代表是,0代表否)3.2數(shù)據(jù)探索3.2.1數(shù)據(jù)質(zhì)量探索由上圖可知,該數(shù)據(jù)集總共有30000條樣本,沒有缺失值,數(shù)據(jù)類型有int和float,都為數(shù)值型,但有些變量比如SEX,EDUCATION雖然是數(shù)值類型,但其實是分類變量,取值范圍在書籍集說明文檔中有做說明。3.2.2連續(xù)變量描述性統(tǒng)計由上圖可以觀察到,賬單金額從BILL_AMT6到BILL_AMT9,均值逐漸上升,說明人們在2005年4月到9月這段時間越來越傾向于信用卡消費,這種消費方式越來越被人們接受。最小值和最大值區(qū)間跨度比較大,最好進行連續(xù)變量標準化。每個月的賬單金額中位數(shù)都為20000左右。由上圖可以得出:從PAY_AMT6到PAY_AMT1分別代表了2005年4月到9月,每個月的還款金額。均值和中位數(shù)隨著時間的推移,都有上升的趨勢,說明人們的還款能力逐漸提高。最大最小值跨度同樣比較大,需要進行標準化。由上圖可得:信貸金額取值范圍從10000大100萬不等,均值為16萬,中位數(shù)為14萬,說明大多數(shù)人的額度為15萬新臺幣左右。取值范圍跨度同樣比較大,需要進行標準化。3.2.3違約率違約率為0.2212,樣本不平衡,存在偏斜類的現(xiàn)象。模型評價指標可以考慮使用F1分數(shù),而不是只用準確率。因為如果只用準確率的話,為了得到更高的準確率,可能模型會將所有樣本猜測為沒有違約,這樣最差的模型也能得到78%左右的準確率。模型評價指標將在第五章進行討論3.2.4離散變量數(shù)據(jù)分布主要代碼如下:indexName=('SEX','MARRIAGE','EDUCATION','PAY_0','PAY_2','PAY_3','PAY_4','PAY_5','PAY_6')foriinindexName:print(i,'取值分布為:\n',data[i].value_counts(),'\n')figure,(ax1,ax2)=matplotlib.pyplot.subplots(2,1)ax1.hist(data.loc[data['default.payment.next.month']==0,'EDUCATION'])ax1.set_title('NoDefault')ax2.hist(data.loc[data['default.payment.next.month']==1,'EDUCATION'])ax2.set_title('Default')matplotlib.pyplot.xlabel('EDUCATION')matplotlib.pyplot.show()運行結(jié)果如下:SEX:性別(1代表男性,2代表女性)由圖可以得出,女性用戶數(shù)較多,大概是男性的1.5倍婚姻狀況(1=已婚,2=單身,3=其他)單身的用戶人數(shù)比已婚的用戶人數(shù)多,但是已婚人士的違約率高于單身人士出現(xiàn)了文檔中未解釋的異常值,需要對異常值進行處理。(1=研究生,2=大學,3=高中,4=其他5=未知,6=未知)大學學歷人數(shù)最多,高中學歷用戶的違約率最高,大概在50%,而且隨著學歷的升高,違約率減少。出現(xiàn)了說明文檔中未做解釋的異常值,需要進行異常值處理,異常值數(shù)量較少,可以考慮直接將包含異常值的數(shù)據(jù)記錄刪除。(-1=按時付款,1=延遲一個月付款,2=延遲兩個月付款,...8=延遲八個月付款,9=延遲九個月及以上付款)一旦超過2個月未還款,違約率將超過50%不難看出,沒有違約的子圖頻數(shù)更高,大都數(shù)人會選擇按時還款或者償還最低還款,避免違約情況出現(xiàn)。其他探索:主要代碼如下:defmyBoxplot(feature1,feature2,feature3):matplotlib.pyplot.figure()seaborn.boxplot(x=feature1,y=feature2,hue=feature3,data=data,showfliers=False)matplotlib.pyplot.show()運行結(jié)果如下:SEX:性別(1代表男性,2代表女性)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)已婚用戶年齡普遍高于未婚用戶,但差距較小已婚男性年齡普遍高于已婚女性,未婚男性年齡普遍高于未婚女性。EDUCATION:受教育程度(1=研究生,2=大學,3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)已婚用戶年齡普遍高于未婚用戶,MARRIAGE取值為其他的用戶,在上面幾個箱型圖中,年齡普遍大于已婚用戶和單身用戶,有可能是離婚用戶。不同學歷的用戶群在年齡上的分布大致相同,受教育程度對年齡分布的影響不明顯。SEX:性別(1代表男性,2代表女性)信貸金額不論男女,都隨著年齡的增長而增長,直到大約30歲,之后趨于平穩(wěn),50隨之后開始震蕩。男性的信貸金額普遍比女性的高。EDUCATION:受教育程度(1=研究生,2=大學,3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)單身用戶的額度普遍比已婚用戶的額度要低。隨著學歷的升高,用戶往往能得到更大的信貸額度。不論教育程度高低,違約人數(shù)都是占少部分。,信貸金額主要集中在10萬到20萬新臺幣。3.2.5連續(xù)變量數(shù)據(jù)分布主要代碼如下:figure,(ax1,ax2)=matplotlib.pyplot.subplots(2,1)ax1.hist(data.AGE[data['default.payment.next.month']==1],bins=20)ax1.set_title('Default')ax2.hist(data.AGE[data['default.payment.next.month']==0],bins=20)ax2.set_title('NoDefault')matplotlib.pyplot.xlabel('Age')matplotlib.pyplot.ylabel('NumberofObservations')matplotlib.pyplot.show()運行結(jié)果如下:除了在30~35歲這個年齡段,用戶的履約能力更高之外,其他年齡段的分布沒有明顯區(qū)別,信用卡的主要用戶集中在25到30歲,然后隨著年齡的逐漸增長,使用信用卡的人越來越少。中年人青年人客戶消費需求多,存在購房、購車、下一代教育等大額消費需求,但與此同時,這各群體正是社會的中堅力量,還款能力并不弱。信貸金額的峰值在5萬新臺幣附近,大部分是0-10萬新臺幣的信用額度不論用戶違約與否,大多數(shù)賬單金額集中在5萬新臺幣附近,違約與否的信貸金額的分布沒有顯著差別。說明用戶是否違約和每月的賬單金額大小沒有明顯的關(guān)系。未違約用戶每個月還款金額與違約用戶每月還款金額相比,分布上沒有明顯差別3.2.6相關(guān)性探索:主要代碼如下:matplotlib.pyplot.figure()seaborn.heatmap(data.iloc[:,0:-1].corr())matplotlib.pyplot.show()運行結(jié)果如下:BILL_AMT之間的相關(guān)性隨著月間距離的增加而減小。相關(guān)性最低的是9-4月。PAY之間沒相關(guān)性PAY_AMT之間的相關(guān)性隨著月間距離的增加而減小。相關(guān)性最低的是9-4月。類標簽和其他變量的相關(guān)性:LIMIT_BAL負相關(guān),跟6個PAY變量關(guān)系比較大,正相關(guān),而且跟PAY_0關(guān)系最大既然PAY變量與類標簽相關(guān)性較高,那么如果建模的時候準確率太低的話,可以嘗試只用PAY變量建模4數(shù)據(jù)預(yù)處理數(shù)據(jù)集在采集數(shù)據(jù)和保存數(shù)據(jù)的過程中難免會出現(xiàn)錯誤,需要進行異常值處理和缺失值處理。同時,對數(shù)據(jù)進行轉(zhuǎn)換有利于挖掘出更有價值的信息,建立性能更好的模型。4.1異常值處理在第三章的數(shù)據(jù)探索中,我發(fā)現(xiàn)數(shù)據(jù)集中,有些記錄某個變量的取值不在說明文檔中,除了查閱kaggle官方的數(shù)據(jù)集說明文檔之外,經(jīng)過在網(wǎng)上查閱其他關(guān)于該數(shù)據(jù)集變量的說明文檔,現(xiàn)在開始對數(shù)據(jù)集中的異常值進行處理。在PAY變量中,異常值0表示償還了最小金額,區(qū)別與按時還款,但是不屬于違約。EDUCATION變量中,0,5,6三個取值在官方文檔中解釋為unknown,為了方便,歸入到4(other)中。其他屬性的異常值未找到合適的解釋,包含這些異常值的記錄將直接予以刪除。主要代碼如下:#異常值處理:#EDUCATION異常值0,4,5,6全部歸為4(其他)print('修正前的education取值:\n',data.EDUCATION.value_counts())index=list((data.EDUCATION==5)|(data.EDUCATION==6)|(data.EDUCATION==0))data.loc[index,'EDUCATION']=4print('修正后的education取值:\n',data.EDUCATION.value_counts())#其他變量異常值直接刪除print('修正前的MARRIAGE取值:\n',data.MARRIAGE.value_counts())index=list(data.MARRIAGE!=0)data=data.loc[index,:]print('修正后的MARRIAGE取值:\n',data.MARRIAGE.value_counts())結(jié)果如下:4.2增刪變量以及主成分分析刪除變量ID,該變量唯一標識一個客戶,對改題目沒有意義:主要代碼如下:#刪除變量IDdataX.drop(['ID'],axis=1,inplace=True)print('刪除了變量ID后剩余的變量',dataX.columns)運行結(jié)果如下:在之前的數(shù)據(jù)分析過程中,我發(fā)現(xiàn)了男人更可能違約,已婚人士更傾向于違約,因此把這兩個變量組合成一個新的變量SEXandMARRIAGE,插入到數(shù)據(jù)集中:主要代碼如下:#發(fā)現(xiàn)男人更有可能違約,已婚人士更有可能違約,進行特征工程,組合這兩個變量dataX['SEXandMARRIAGE']=0dataX.loc[((dataX.SEX==1)&(dataX.MARRIAGE==1)),'SEXandMARRIAGE']=1#marriedmandataX.loc[((dataX.SEX==1)&(dataX.MARRIAGE==2)),'SEXandMARRIAGE']=2#singlemandataX.loc[((dataX.SEX==1)&(dataX.MARRIAGE==3)),'SEXandMARRIAGE']=3#divorcedmandataX.loc[((dataX.SEX==2)&(dataX.MARRIAGE==1)),'SEXandMARRIAGE']=4#marriedwomandataX.loc[((dataX.SEX==2)&(dataX.MARRIAGE==2)),'SEXandMARRIAGE']=5#singlewomandataX.loc[((dataX.SEX==2)&(dataX.MARRIAGE==3)),'SEXandMARRIAGE']=6#divorcedwomandataX.to_csv('增加變量SEXandMARRIAGE.csv')為了加快神經(jīng)網(wǎng)絡(luò)的運行速度,節(jié)省時間,在神經(jīng)網(wǎng)絡(luò)模型中可以選擇采用主成分分析來降低數(shù)據(jù)集的維度;主要代碼如下:fromsklearn.decompositionimportPCAmodelPCA=PCA()modelPCA.fit(dataX)print('各個變量保留的方差:\n',modelPCA.explained_variance_ratio_)varSum=0#for循環(huán)內(nèi)的變量拿不出來,用這個變量記住要保留幾個變量parameterPCA=0forindexinrange(0,len(modelPCA.explained_variance_ratio_)):varSum=varSum+modelPCA.explained_variance_ratio_[index]ifvarSum>=0.95:print('選取方差貢獻量前',index+1,'個屬性即可保留95%的方差')parameterPCA=index+1print('parameterPCA的值為:',parameterPCA)breakmodelPCA=PCA(n_components=parameterPCA)modelPCA.fit(dataX)#transform之后是ndarraydataX=modelPCA.transform(dataX)dataX=pandas.DataFrame(dataX)print('降維之后數(shù)據(jù)集規(guī)模:',len(dataX),'行',len(dataX.iloc[0,:]),'列')dataX.info()dataX.to_csv('降維完成.csv')4.3離散變量進行啞變量編碼在處理離散變量的時候,應(yīng)該對離散變量進行啞變量編碼,否則計算代價函數(shù)時,都某個取值的距離與到另一個取值的距離是不一樣的,這是不對的,因為一個類個中取值之間應(yīng)該是在同一個等級上的。把有n種取值的某個屬性,轉(zhuǎn)換為n維向量,該向量中只有一個元素為1,其余為0,再將該向量插入到數(shù)據(jù)集中。主要代碼如下:print('轉(zhuǎn)換為啞變量之前,一共有',len(dataX.iloc[0,:]),'個變量')forcolNameindataX.columns:ifcolNameinindexCategorical:#get_dummies()返回向量數(shù)據(jù)框dummy=pandas.get_dummies(dataX.loc[:,colName])print('get_dummies(',colName,')返回值類型為:',type(dummy),'有',len(dummy),'行',len(dummy.iloc[0,:]),'列\(zhòng)t','正確答案是',len(dataX.loc[:,colName].unique()),'列')#列拼接print('合并之前有',len(dataX.iloc[0,:]),'列')dataX=dataX.drop([colName],axis=1)dataX=pandas.concat([dataX,dummy],axis=1)print('合并之后有',len(dataX.iloc[0,:]),'列')print('轉(zhuǎn)換為啞變量之后一共有',len(dataX.iloc[0,:]),'個變量')運行結(jié)果如下:4.4連續(xù)變量標準化某些變量的值域過大,標準化有助于加快收斂速度,節(jié)省時間。主要代碼如下:forcolNameindataX.columns:ifcolNamenotinindexCategorical:colData=dataX.loc[:,colName]dataX.loc[:,colName]=(colData-colData.mean())/colData.std()4.5多項式拓展如果模型擬合效果欠佳,不能得出更復(fù)雜的模型,可以考慮使用多項式拓展,形成二次項插入到數(shù)據(jù)集中。主要代碼如下:#多項式拓展,除了類標簽,此時data中不包含類標簽colName=dataX.columnsforcolIndex1inrange(0,len(colName)):forcolIndex2inrange(colIndex1,len(colName)):print('正在處理第',colIndex1,'列和第',colIndex2,'列')dataX=pandas.concat([dataX,dataX.iloc[:,colIndex1]*dataX.iloc[:,colIndex2]],axis=1)print('多項式拓展之后的數(shù)據(jù)集info:')dataX.info()dataX.to_csv('多項式拓展完成.csv')4.6劃分數(shù)據(jù)集將數(shù)據(jù)集按照6:2:2的比例劃分為訓練集、交叉驗證集合、測試集。定義函數(shù)用于讀取數(shù)據(jù)集。主要代碼如下:defloadData():importpandasimportosdata=pandas.read_csv('dataDone.csv',index_col=0)dataTraining=data.iloc[:int(0.6*len(data)),:]print('訓練集樣本數(shù):\n',len(dataTraining))dataCV=data.iloc[int(0.6*len(data)):int(0.8*len(data)),:]print('交叉驗證集樣本數(shù):\n',len(dataCV))dataTest=data.iloc[int(0.8*len(data)):,:]print('測試集樣本數(shù):\n',len(dataTest))#每次從新進行數(shù)據(jù)預(yù)處理,訓練集違約率都會變化,但調(diào)用loadData()不會變化print('訓練集違約率為:',dataTraining['default.payment.next.month'].sum()/len(dataTraining))print('交叉驗證集合違約率為:',dataCV['default.payment.next.month'].sum()/len(dataCV))print('測試集合違約率為:',dataTest['default.payment.next.month'].sum()/len(dataTest))os.system('pause')dataTrainingX=dataTraining.iloc[:,0:-1]dataCVX=dataCV.iloc[:,0:-1]dataTestX=dataTest.iloc[:,0:-1]dataTrainingY=dataTraining.iloc[:,-1]dataCVY=dataCV.iloc[:,-1]dataTestY=dataTest.iloc[:,-1]returndata,dataTrainingX,dataCVX,dataTestX,dataTrainingY,dataCVY,dataTestY5數(shù)據(jù)挖掘5.1模型評價指標選擇哪種模型評價指標,需要按照具體的數(shù)據(jù)集和使用的具體的機器學習方法,結(jié)合考慮,沒有哪一種模型評價指標是適用于所有模型或者所有問題的。之前的數(shù)據(jù)分析過程中,我發(fā)現(xiàn)了數(shù)據(jù)集總體違約率大約為22%,是一個傾斜的數(shù)據(jù)集,此時不應(yīng)該只考慮準確率,最好使用F1分數(shù),auc分數(shù)等作為模型評價指標,能更好的解決偏斜類的問題。5.1.1F1分數(shù)假設(shè)用TP,TN,FP,FN分別表示真正例,真負例,假正例,假負例,那么精確率precision=TP/(TP+FP)召回率recall=TP/(TP+FN)準確率accuracy=(TP+TN)/(TP+FP+TN+FN)F1分數(shù)=2*precision*recall/(pression+recall)同時考慮了精確率和召回率,能有效避免模型把全部樣本歸為一個類別,還能獲得不錯的準確率的情況出現(xiàn)。5.1.2AUC分數(shù)ROC曲線和AUC分數(shù)也經(jīng)常被用來衡量二分類分類器的性能。假正率FPR,真正率TPR計算公式如下:FPR=FP/TN+FNTPR=TP/TP+FPTPR的增加以FPR的增加為代價。ROC曲線下的面積就是AUC分數(shù),可以作為模型性能的評價指標。5.2邏輯回歸5.2.1單變量邏輯回歸由于采用的數(shù)據(jù)集中包含了24個輸入變量,根據(jù)之前數(shù)據(jù)分析章節(jié)中的熱度圖可以得知,每個變量與類標簽的相關(guān)性不盡相同,為了能更直接的了解到各個輸入變量對模型準確判斷輸入樣本的類標簽的貢獻有多大,可以對各個變量一一建立邏輯回歸模型,計算AUC分數(shù)。主要代碼如下:fromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportroc_auc_scoreaucs=list()forindexNameindata.columns[0:-1]:modelLogisticRegression=LogisticRegression()#modelLogisticRegression.fit()要求第一個參數(shù)為DataFrame,第二個為SeriesmodelLogisticRegression.fit(pandas.DataFrame(dataTrainingX[indexName]),dataTrainingY)possibilityPositive=numpy.array([score[1]forscoreinmodelLogisticRegression.predict_proba(pandas.DataFrame(dataTestX[indexName]))])auc=roc_auc_score(dataTestY.values,possibilityPositive)aucs.append(auc)#折線圖importmatplotlib.pyplotaspltplt.plot(data.columns[0:-1],aucs)plt.xlabel('columnsName')plt.ylabel('aucScore')plt.show()對每個變量進行單變量邏輯回歸,得到的AUC分數(shù)如下:由上圖可以得出,各個變量最低的AUC分數(shù)也有0.5,最高達到了0.645.2.2選擇正則化參數(shù)為了邏輯回歸模型過擬合,泛化性能差,即在訓練集上表現(xiàn)得非常優(yōu)秀,但是在測試集和實際應(yīng)用中性能表現(xiàn)卻不佳,可以為代價函數(shù)加上正則化項。選取的正則化參數(shù)范圍從0.0001到100,分別用以上正則化參數(shù)建立邏輯回歸模型,測試其在交叉驗證集上的性能表現(xiàn),篩選出最佳的正則化參數(shù),訓練模型并用于實際使用。主要代碼如下:fromsklearn.linear_modelimportLogisticRegressionlambdaRange=[0.0001,0.001,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24,100,1000]accuracyCV=list()foriinlambdaRange:#sag隨機平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來計算梯度modelLogisticRegression=LogisticRegression(C=(1/i),solver='sag',n_jobs=2)#用values,要求numpy的arraymodelLogisticRegression.fit(dataTrainingX,dataTrainingY)prediction=modelLogisticRegression.predict(dataTrainingX)print('當C=',1/i,'時,\n在訓練集上的正確率為:',len(prediction[prediction==dataTrainingY[:]])/len(prediction))print('在訓練集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataTrainingY,prediction)recall=recall_score(dataTrainingY,prediction)F1=2*precision*recall/(precision+recall)print('在訓練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)prediction=modelLogisticRegression.predict(dataCVX)accuracy=len(prediction[prediction==dataCVY[:]])/len(prediction)accuracyCV.append(accuracy)print('在交叉驗證集上的正確率為:',accuracy)print('在交叉驗證集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataCVY,prediction)recall=recall_score(dataCVY,prediction)F1=2*precision*recall/(precision+recall)print('在交叉驗證集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1,'\n')#折線圖找出最佳正則化參數(shù)importmatplotlib.pyplotaspltplt.plot(lambdaRange,accuracyCV)plt.xlabel('lambda')plt.ylabel('accuracyCV')plt.show()lambdaBest=lambdaRange[accuracyCV.index(max(accuracyCV))]print('當正則化參數(shù)為',lambdaBest,'時,交叉驗證及上正確率最高,為',max(accuracyCV))隨著正則化參數(shù)lambda的變化,模型再在交叉驗證集上的準確率如下面圖片所示:由以上折線圖可以得出,隨著正則化參數(shù)的增大,交叉驗證集上的性能表現(xiàn)在正則化參數(shù)為10.24的時候最佳。下一步使用該正則化參數(shù)訓練得到的模型,在測試集上進行檢驗。5.2.3性能評價用最佳正則化參數(shù),在測試集上進行預(yù)測,評估模型性能:主要代碼如下:#用最佳的正則化參數(shù)在測試上預(yù)測prediction=modelLogisticRegression.predict(dataTestX)accuracy=len(prediction[prediction==dataTestY[:]])/len(prediction)print('在測試集上的正確率為:',accuracy)print('在測試集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataTestY,prediction)recall=recall_score(dataTestY,prediction)F1=2*precision*recall/(precision+recall)print('在測試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1,'\n')#只在測試集上計算auc,目前0.75possibilityPositive=numpy.array([score[1]forscoreinmodelLogisticRegression.predict_proba(dataTestX)])auc=roc_auc_score(dataTestY.values,possibilityPositive)print('測試集上的auc分數(shù)為:\n',auc)fromsklearn.metricsimportbrier_score_lossbrier=brier_score_loss(dataTestY.values,possibilityPositive)print('測試集上的brier分數(shù)為:\n',brier)由上圖可以得出,當正則化參數(shù)為10.24時,邏輯回歸模型在測試集上的正確率為82.2%,F(xiàn)1分數(shù)為0.43,表現(xiàn)良好。5.3神經(jīng)網(wǎng)絡(luò)5.3.1選擇隱藏層規(guī)模此次選擇的神經(jīng)網(wǎng)絡(luò)僅包含一個隱藏層,一個輸入層和一個輸出層。隱藏層的規(guī)模一般為輸入層的整數(shù)倍,為了得到更好的效果,在交叉驗證集上對隱藏層的神經(jīng)元數(shù)進行選擇倍數(shù)為輸入層的1倍或者2倍。在訓練集上用不同的隱藏層神經(jīng)元個數(shù)進行訓練:主要代碼如下:accuracyCV=list()foriinrange(1,4):model=Sequential()model.add(Dense(input_dim=len(dataTrainingX.iloc[0,:]),output_dim=i*len(dataTrainingX.iloc[0,:])))model.add(Activation('sigmoid'))model.add(Dense(input_dim=i*len(dataTrainingX.iloc[0,:]),output_dim=1))model.add(Activation('sigmoid'))#去掉了,class_mode='binary'pile(loss='binary_crossentropy',optimizer='adam')#300改成100model.fit(dataTrainingX,dataTrainingY,nb_epoch=100,batch_size=1)prediction=model.predict_classes(dataTrainingX)prediction=pandas.DataFrame(prediction)prediction=prediction.iloc[:,0]print('\n當隱藏層神經(jīng)元個數(shù)為',i*len(dataTrainingX.iloc[0,:]),'時:')print('keras在訓練集上的正確率為:',len(prediction[prediction.values==dataTrainingY.values])/len(prediction))print('keras訓練集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataTrainingY,prediction)recall=recall_score(dataTrainingY,prediction)F1=2*precision*recall/(precision+recall)print('keras在訓練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)

prediction=model.predict_classes(dataCVX)prediction=pandas.DataFrame(prediction)prediction=prediction.iloc[:,0]accuracy=len(prediction[prediction.values==dataCVY.values])/len(prediction)accuracyCV.append(accuracy)print('keras在交叉驗證集上的正確率為:',accuracy)print('keras在交叉驗證集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataCVY,prediction)recall=recall_score(dataCVY,prediction)F1=2*precision*recall/(precision+recall)print('keras在交叉驗證集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)numberBest=(accuracyCV.index(max(accuracyCV))+1)*len(dataTrainingX.iloc[0,:])print('當隱藏層神經(jīng)元個數(shù)為',numberBest,'時,在交叉驗證集上的正確率最高,為',max(accuracyCV))matplotlib.pyplot.plot([1,2,3],accuracyCV)matplotlib.pyplot.xlabel('units')matplotlib.pyplot.ylabel('accuracyCV')matplotlib.pyplot.show()運行結(jié)果如下:可以得出,當隱藏層的神經(jīng)元個數(shù)和輸入層神經(jīng)元個數(shù)相等的時候,模型泛化性能最佳,隨著隱藏層神經(jīng)元個數(shù)的增加,開始出現(xiàn)過擬合的情況,即在訓練集上表現(xiàn)優(yōu)秀,在交叉驗證集上表現(xiàn)的很差。5.3.2模型評價選用上一步得到的神經(jīng)元規(guī)模,訓練模型并在測試集上進行檢驗。主要代碼如下:#在測試集上預(yù)測:model=Sequential()model.add(Dense(input_dim=len(dataTrainingX.iloc[0,:]),output_dim=numberBest))model.add(Activation('sigmoid'))model.add(Dense(input_dim=numberBest,output_dim=1))model.add(Activation('sigmoid'))#去掉了,class_mode='binary'pile(loss='binary_crossentropy',optimizer='adam')#300改成100model.fit(dataTrainingX,dataTrainingY,nb_epoch=100,batch_size=1)prediction=model.predict_classes(dataTestX)prediction=pandas.DataFrame(prediction)prediction=prediction.iloc[:,0]print('keras在測試集上的正確率為:',len(prediction[prediction.values==dataTestY.values])/len(prediction))print('keras測試集上預(yù)測為1的數(shù)量為:',len(prediction[prediction==1]))fromsklearn.metricsimportprecision_score,recall_score,f1_scoreprecision=precision_score(dataTestY,prediction)recall=recall_score(dataTestY,prediction)F1=2*precision*recall/(precision+recall)print('keras在測試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)準確率為0.78,F(xiàn)1分數(shù)為0.432,相比訓練集上的表現(xiàn),說明模型出現(xiàn)了過擬合,表現(xiàn)不好。5.4樸素貝葉斯5.4.1實現(xiàn)過程主要代碼如下:modelNaiveBayes=GaussianNB()modelNaiveBayes.fit(dataTrainingX,dataTrainingY)prediction=modelNaiveBayes.predict(dataTrainingX)#第0行第1列的數(shù)表示y_true中值為0,y_pred中值為1的個數(shù)print('訓練集混淆矩陣:\n',metrics.confusion_matrix(dataTrainingY,prediction))precision=precision_score(dataTrainingY,prediction)recall=recall_score(dataTrainingY,prediction)F1=2*precision*recall/(precision+recall)print('訓練集上的正確率為:',len(prediction[prediction==dataTrainingY.values])/len(prediction))print('訓練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)#在測試集上驗證prediction=modelNaiveBayes.predict(dataTestX)print('測試集混淆矩陣:\n',metrics.confusion_matrix(dataTestY,prediction))precision=precision_score(dataTestY,prediction)recall=recall_score(dataTestY,prediction)F1=2*precision*recall/(precision+recall)print('測試集上的正確率為:',len(prediction[prediction==dataTestY.values])/len(prediction))print('測試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分數(shù)為:',F1)5.4.2性能評價運行結(jié)果如下:由上圖可以看出,樸素貝葉斯在訓練集上的正確率為80.3%,F(xiàn)1分數(shù)為0.35測試集上的正確率為80.4%,F(xiàn)1分數(shù)為0.35模型性能良好5.5決策樹5.5.1主要過程主要代碼如下:fromsklearnimportmetricsfromsklearn.treeimportDecisionTreeClassifierimportmyFunctionfromsklearn.metricsim

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論