版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)挖掘在信用卡詐騙中的應(yīng)用研究摘要信用卡在日常生活中越來(lái)越普及,給人們的日常生活帶來(lái)了諸多便利。作為一種新型的金融工具,銀行找到了新的利潤(rùn)來(lái)源,但是與此同時(shí),信用卡作為一種無(wú)抵押的信用貸款工具,作為發(fā)行方的銀行如果錯(cuò)誤判斷了信用卡用戶的還款能力,往往會(huì)承擔(dān)很多未知的風(fēng)險(xiǎn)。如果信用卡用戶長(zhǎng)期無(wú)法按時(shí)償還信用卡欠款金額,甚至惡意拖欠欠款,則將構(gòu)成信用卡詐騙,損害銀行的利益,這是一種犯罪行為。因此,很有必要將數(shù)據(jù)分析和數(shù)據(jù)挖掘的相關(guān)技術(shù)引用到信用卡欺詐檢測(cè)上,幫助銀行準(zhǔn)確識(shí)別出潛在的違約用戶,這能幫助銀行免受信用卡欺詐帶來(lái)的損失。本次設(shè)計(jì)將采用一個(gè)kaggle網(wǎng)站上的臺(tái)灣銀行信用卡數(shù)據(jù)集,利用描述性統(tǒng)計(jì)、可視化作圖等工具對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)探索。對(duì)數(shù)據(jù)集有了初步了解之后,對(duì)數(shù)據(jù)集進(jìn)行數(shù)據(jù)清洗和轉(zhuǎn)換,再通過(guò)使用邏輯回歸、神經(jīng)網(wǎng)絡(luò)、決策樹(shù)等常用的機(jī)器學(xué)習(xí)算法,對(duì)數(shù)據(jù)集建立模型。使用F1分?jǐn)?shù)、準(zhǔn)確率等常用的評(píng)價(jià)指標(biāo)評(píng)價(jià)不同算法的得到的模型再測(cè)試集上的性能表現(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國(guó)內(nèi)外研究現(xiàn)狀 21.3研究?jī)?nèi)容及主要工作 22數(shù)據(jù)挖掘方法 32.1數(shù)據(jù)挖掘基本概念 32.2本文涉及的方法的基本概念 42.2.1邏輯回歸 42.2.2多項(xiàng)式拓展 52.2.3樸素貝葉斯 62.2.4神經(jīng)網(wǎng)絡(luò) 72.2.5主成分分析 82.2.6決策樹(shù) 93使用的數(shù)據(jù)集 103.1數(shù)據(jù)來(lái)源和簡(jiǎn)介 103.2數(shù)據(jù)探索 123.2.1數(shù)據(jù)質(zhì)量探索 123.2.2連續(xù)變量描述性統(tǒng)計(jì) 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離散變量進(jìn)行啞變量編碼 374.4連續(xù)變量標(biāo)準(zhǔn)化 384.5多項(xiàng)式拓展 384.6劃分?jǐn)?shù)據(jù)集 395數(shù)據(jù)挖掘 415.1模型評(píng)價(jià)指標(biāo) 415.1.1F1分?jǐn)?shù) 415.1.2AUC分?jǐn)?shù) 415.2邏輯回歸 425.2.1單變量邏輯回歸 425.2.2選擇正則化參數(shù) 445.2.3性能評(píng)價(jià) 475.3神經(jīng)網(wǎng)絡(luò) 495.3.1選擇隱藏層規(guī)模 495.3.2模型評(píng)價(jià) 525.4樸素貝葉斯 535.4.1實(shí)現(xiàn)過(guò)程 535.4.2性能評(píng)價(jià) 545.5決策樹(shù) 555.5.1主要過(guò)程 555.5.2性能評(píng)價(jià) 565.6模型比較 57結(jié)論 58參考文獻(xiàn) 59致謝 601引言研究背景與意義隨著經(jīng)濟(jì)的全球化發(fā)展,國(guó)內(nèi)國(guó)外的銀行紛紛進(jìn)入全球市場(chǎng)。銀行再盈利方面,傳統(tǒng)模式的存儲(chǔ)盈利已經(jīng)不餓滿足銀行的需求,借此機(jī)會(huì),信用卡普及了。信用卡再上世紀(jì)五十年代誕生于美國(guó),作為信用卡行業(yè)最發(fā)達(dá)的國(guó)家,美國(guó)的信用卡主要有維薩(VISA)、萬(wàn)事達(dá)(MasterCard)、美國(guó)運(yùn)通(AmericanExpress)和大來(lái)(DinnersClub)?,F(xiàn)如今,大多數(shù)國(guó)家緊隨美國(guó)的不發(fā),銀行大力推廣信用卡,同時(shí)信用卡這一金融工具發(fā)展的越來(lái)越成熟。 在信用卡發(fā)展的早期階段,各大機(jī)構(gòu)為了能夠吸引到大量的用戶來(lái)使用自家的信用卡,往往會(huì)降低信用卡的申請(qǐng)門檻,大量的發(fā)行信用卡,搶占新興的市場(chǎng)份額。得益于這種政策,截止到1970年,超過(guò)一般的美國(guó)人使用上了信用卡。知道2017年,VISA的全球交易額已經(jīng)達(dá)到二10.21萬(wàn)億美元,市場(chǎng)份額超過(guò)了50%。 隨著信用卡普及率逐年上升,信用卡用戶不能按時(shí)還款甚至惡意違約的信用卡欺詐犯罪行為出現(xiàn)的越來(lái)越頻繁。根據(jù)央行統(tǒng)計(jì)報(bào)告顯示,截止到2013年,我國(guó)的信用卡壞賬總額已經(jīng)高達(dá)251.92億元,比上一年年末,增加了105.34億元,增幅達(dá)到了71.86%。出現(xiàn)了這么嚴(yán)峻的信用卡欺詐請(qǐng)款,除了信用卡發(fā)卡前的審核準(zhǔn)確率較低之外,歸根結(jié)底,不餓能及時(shí)找出高違約風(fēng)險(xiǎn)的信用卡用戶才是最重要的原因。上訴原因?qū)е铝诵庞每◥阂膺`約的犯罪愈演愈烈。因此。利用新的技術(shù)手段來(lái)提高信用卡發(fā)卡前對(duì)申請(qǐng)人的信用評(píng)級(jí)準(zhǔn)確率,和及時(shí)發(fā)現(xiàn)已有用戶中的高風(fēng)險(xiǎn)用戶,已經(jīng)勢(shì)在必行。如何從信用卡數(shù)據(jù)集中挖掘出有用的信息,結(jié)合數(shù)據(jù)分析分析信用卡違約用戶群的群體特征,將非常有助于銀行避免發(fā)放信用卡給無(wú)力按時(shí)償還欠款的用戶,同時(shí)挖掘出已有用戶群中違約風(fēng)險(xiǎn)較高的用戶群,對(duì)其提高警惕,采取如降低信用額度等措施,從根源上避免銀行遭受不必要的經(jīng)濟(jì)損失。另一方面,將數(shù)據(jù)分析和數(shù)據(jù)挖掘用在銀行信用卡信用欺詐檢測(cè)上,也能讓優(yōu)質(zhì)的信用卡申請(qǐng)人更加快速便捷的拿到申請(qǐng)的信用卡,不論對(duì)于廣大用戶而言還是對(duì)于銀行而言,都是一種互利共贏的方式。1.2國(guó)內(nèi)外研究現(xiàn)狀 在國(guó)外,BrauseR等人于1999年通過(guò)將關(guān)聯(lián)規(guī)則、高斯核函數(shù)和神經(jīng)網(wǎng)絡(luò)等算法應(yīng)用在信用卡欺詐數(shù)據(jù)集上,得到了不錯(cuò)的模型預(yù)測(cè)準(zhǔn)確率。2011年,BhattacharyyaS采用了不同以往的方法,將隨機(jī)森林、邏輯回歸、支持向量機(jī)等常用的及其學(xué)習(xí)方法運(yùn)用到國(guó)際信用卡業(yè)務(wù)交易的數(shù)據(jù)集上,對(duì)比分析三種模型在信用卡欺詐檢測(cè)應(yīng)用中的效果。在國(guó)內(nèi),早期較為常用的是決策樹(shù)和邏輯回歸這兩種算法。在2008年,楊璽采用了支持向量機(jī)算法。2010年,劉艷紅提出將支持向量描述算啊SVDD應(yīng)用到這方面的想法,而且兩階段信用卡欺詐檢測(cè)模型克服了信用卡數(shù)據(jù)包含的信息量可能不充足的問(wèn)題。2011年,段剛龍等人提出了將F-scores、支持向量機(jī)相結(jié)合的途徑,成功克服了模型泛化能力不夠強(qiáng)的問(wèn)題??偟膩?lái)說(shuō),沒(méi)有哪一種算法能普遍適用于所有的數(shù)據(jù)集,同種算法在不同的數(shù)據(jù)集中表現(xiàn)可能有很大的差別。1.3研究?jī)?nèi)容及主要工作這篇文章所用到的數(shù)據(jù)集為kaggle網(wǎng)站上的臺(tái)灣銀行信用卡數(shù)據(jù)集,并在這個(gè)數(shù)據(jù)集上,使用常用的數(shù)據(jù)分析方法和常用的機(jī)器學(xué)習(xí)算法,對(duì)數(shù)據(jù)集進(jìn)行分析和建模,達(dá)到能用于預(yù)測(cè)的目的。 第一章作為引言,簡(jiǎn)單介紹這個(gè)題目的背景和研究意義,簡(jiǎn)單介紹國(guó)內(nèi)和國(guó)外在這方面的研究情況,各種研究方法的優(yōu)點(diǎn)。同時(shí)介紹這篇文章的整體思路和基本的寫(xiě)作框架。 第二章作為文中所用到的相關(guān)知識(shí)的理論介紹,包括各種常用的數(shù)據(jù)分析方法和常用的數(shù)據(jù)挖掘方法的介紹。 第三章著重與數(shù)據(jù)探索,簡(jiǎn)單介紹這次題目所用到的數(shù)據(jù)集的基本情況,并且對(duì)該數(shù)據(jù)集進(jìn)行初步的探索 第四章將引入常用的模型評(píng)價(jià)指標(biāo),并進(jìn)行數(shù)據(jù)挖掘過(guò)程中的數(shù)據(jù)預(yù)處理、第五章側(cè)重于將數(shù)據(jù)挖掘應(yīng)用在數(shù)據(jù)集上的研究,建立模型,比較不同數(shù)據(jù)挖掘方法的效果,并對(duì)全文做出總結(jié)。同時(shí)指出這邊文章中的不足之處和進(jìn)一步完善的方法。2數(shù)據(jù)挖掘方法2.1數(shù)據(jù)挖掘基本概念 數(shù)據(jù)挖掘,即DataMining,不同于傳統(tǒng)的分析,是指在數(shù)據(jù)中挖掘出有價(jià)值的信息,期間可能用到一些機(jī)器學(xué)習(xí)的算法,數(shù)據(jù)挖掘知識(shí)覆蓋面廣泛,涉及統(tǒng)計(jì)學(xué)、計(jì)算機(jī)等專業(yè)領(lǐng)域的知識(shí)。數(shù)據(jù)挖掘可以分為有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)兩種形式,前者所引用的數(shù)據(jù)集中,每條數(shù)據(jù)記錄除了包含輸入變量之外,還包含了輸出的類標(biāo)簽。而無(wú)監(jiān)督學(xué)習(xí)的數(shù)據(jù)集記錄則不包含真實(shí)的類標(biāo)簽,只包含了對(duì)應(yīng)的輸入變量值。此篇文章屬于有監(jiān)督學(xué)習(xí)范疇。 數(shù)據(jù)挖掘整個(gè)過(guò)程可以大致分為以下幾個(gè)步驟:定義挖掘目標(biāo):首先得明確本次數(shù)據(jù)挖掘過(guò)程的目標(biāo)是什么,想要達(dá)到什么效果。數(shù)據(jù)采樣:即明確數(shù)據(jù)來(lái)源,手動(dòng)抽取數(shù)據(jù)集或者利用現(xiàn)成的數(shù)據(jù)集,數(shù)據(jù)集質(zhì)量要能保證相關(guān)性、可靠性和有效性,不能忽視采用的數(shù)據(jù)集的數(shù)據(jù)質(zhì)量,否則數(shù)據(jù)挖掘的效果會(huì)很差,甚至造成誤導(dǎo)。數(shù)據(jù)探索:對(duì)采用的數(shù)據(jù)集進(jìn)行初步的探索,可以進(jìn)行描述性統(tǒng)計(jì)或者可視化等常用的方法,分析數(shù)據(jù)集中各個(gè)變量之間的相關(guān)性,目標(biāo)變量和輸入變量之間的相關(guān)性,變量取值的規(guī)律性,形成對(duì)數(shù)據(jù)集和數(shù)據(jù)集質(zhì)量的初步認(rèn)知數(shù)據(jù)預(yù)處理:數(shù)據(jù)集一般都會(huì)有錯(cuò)誤數(shù)據(jù)或者缺失數(shù)據(jù),可能造成這種情況的原因包含人工錄入數(shù)據(jù)過(guò)程出錯(cuò)、數(shù)據(jù)存儲(chǔ)過(guò)程中意外丟失損壞、虛假數(shù)據(jù)等。數(shù)據(jù)預(yù)處理一般包含了缺失值處理、異常值處理、均值詭異、主成分分析、特征工程等過(guò)程。建立模型:沒(méi)有哪一種方法是適合解決所有問(wèn)題的,即使是相似的題目,用同一種算法得到的效果也有可能天差地別。在這一步應(yīng)該分析所選的題目適合使用哪些方法,實(shí)踐過(guò)程應(yīng)該如何調(diào)整所選擇的方法的參數(shù)。將模型理論知識(shí)和實(shí)踐相結(jié)合。模型評(píng)價(jià):如果數(shù)據(jù)挖掘過(guò)程中使用了多種方法,我們?cè)撊绾卧u(píng)價(jià)哪種方法的效果更好,值得投入到實(shí)際應(yīng)用中呢?這個(gè)時(shí)候就需要我們選擇合適的模型評(píng)價(jià)指標(biāo),根據(jù)數(shù)據(jù)集的數(shù)據(jù)質(zhì)量和題目的具體情況,選擇的模型評(píng)價(jià)指標(biāo)往往不同。2.2本文涉及的方法的基本概念2.2.1邏輯回歸線性回歸是通過(guò)一系列的點(diǎn),計(jì)算出一條曲線來(lái)擬合這些點(diǎn),從而對(duì)未來(lái)輸入的值進(jìn)行連續(xù)型變量的預(yù)測(cè),預(yù)測(cè)上的輸出結(jié)果值域?yàn)閷?shí)數(shù)。而邏輯回歸不同于線性回歸,主要用于離散變量的二分類。假設(shè)數(shù)據(jù)集中每一條記錄為(xi,yi),其中共有m個(gè)樣本,其中第i個(gè)樣本x?類標(biāo)簽預(yù)測(cè)值公式如下:h其中x為輸入的特征向量,θT為模型參數(shù)的轉(zhuǎn)置,作出?x~由上圖可見(jiàn),?θTx邏輯回歸代價(jià)函數(shù)如下:Jθ=1其中:costhθ(xicosthθ(xi對(duì)每個(gè)參數(shù)進(jìn)行如下梯度下降過(guò)程:θj=θ如果要擬合的邏輯回歸模型較為復(fù)雜,一般需要進(jìn)行多項(xiàng)式拓展,才能得到更好的效果。2.2.2多項(xiàng)式拓展 假設(shè)數(shù)據(jù)集中每一條記錄為(xi,yi),其中共有m個(gè)樣本,其中第i個(gè)樣本x? 為了模型能夠擬合更加復(fù)雜、維度更高的數(shù)據(jù)集,使擬合效果更好,可以對(duì)原始數(shù)據(jù)集進(jìn)行多項(xiàng)式拓展,將每個(gè)屬性跟其他屬性結(jié)合成二次項(xiàng)、三次項(xiàng)或者更高次項(xiàng),并插入到原始數(shù)據(jù)集中,一并進(jìn)行數(shù)據(jù)挖掘。2.2.3樸素貝葉斯樸素貝葉斯是一個(gè)經(jīng)典的統(tǒng)計(jì)學(xué)習(xí)方法,可用于分類。之所以稱之為樸素,是指各個(gè)變量之間相互獨(dú)立。但是在實(shí)際生活中,數(shù)據(jù)集所有變量之間相互獨(dú)立的條件往往不會(huì)得到滿足,用于分類的話,由于變量之間難免會(huì)有相關(guān)性,效果可能沒(méi)有理論上的那么好。樸素貝葉斯用于分類時(shí)基于一下貝葉斯公式:P(B|A)=P假設(shè)B為樣本屬于某個(gè)類,A為樣本的已有特征,那么由于假設(shè)變量之間相互獨(dú)立,P(A|B)為整個(gè)數(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)元之間的信息傳遞過(guò)程,由多個(gè)層以及許多神經(jīng)元節(jié)點(diǎn)構(gòu)成,每個(gè)節(jié)點(diǎn)通過(guò)一個(gè)激活函數(shù)對(duì)前一層的神經(jīng)網(wǎng)絡(luò)節(jié)點(diǎn)的輸出進(jìn)行運(yùn)算,再將運(yùn)算結(jié)果傳遞到下一層神經(jīng)元。同時(shí),每個(gè)神經(jīng)元之間的連接,是加上了不同的權(quán)重的。 更具神經(jīng)網(wǎng)絡(luò)的層次結(jié)構(gòu),一般可以分為輸入層、隱藏層、輸出層。輸入層就是用于輸入樣本數(shù)據(jù),經(jīng)過(guò)隱藏層的復(fù)雜運(yùn)算,如前向傳播、后向傳播之后,輸出到輸出層。如下圖所示,下圖未插入一行偏置單元: 假設(shè)aij為第j層第i個(gè)單元的值,aaah以上就是前向傳播求預(yù)測(cè)值的過(guò)程接下來(lái)是后向傳播求神經(jīng)元誤差值,進(jìn)行梯度下降調(diào)整參數(shù)的過(guò)程:在前面的邏輯回歸小結(jié)有提到sigmoid函數(shù),而神經(jīng)網(wǎng)絡(luò)也用到了sigmoid函數(shù)作為激活函數(shù)。由上面的前向傳播過(guò)程,可以得到輸出層誤差為:δ=根據(jù)微積分中的鏈?zhǔn)角髮?dǎo),第l層的值為a(l),下一層的值為a(l+1)。此時(shí)把δg往前計(jì)算,就能求出各層的而誤差,進(jìn)而使用邏輯回歸中的梯度下降優(yōu)化模型,不斷調(diào)整參數(shù)。使得代價(jià)函數(shù)的值最小。2.2.5主成分分析有時(shí)候數(shù)據(jù)集過(guò)于龐大,運(yùn)算量過(guò)大,導(dǎo)致耗時(shí)過(guò)長(zhǎng),可以適當(dāng)降低數(shù)據(jù)集的維度,對(duì)數(shù)據(jù)集進(jìn)行壓縮,減少其占用的存儲(chǔ)空間,同時(shí)加快機(jī)器的運(yùn)行速度。其次,更低維度的數(shù)據(jù)也更方便對(duì)其進(jìn)行可視化。主成分分析整個(gè)過(guò)程主要是尋找一個(gè)維度較低的空間,把原始數(shù)據(jù)集映射到低緯度空間中,而且原始數(shù)據(jù)到低維空間的投影距離最小,及最小化誤差。計(jì)算低維空間向量包含:計(jì)算協(xié)方差、奇異值分解、計(jì)算低維矩陣、轉(zhuǎn)換為低維數(shù)據(jù)這幾個(gè)主要步驟。協(xié)方差矩陣:C=再對(duì)協(xié)方差矩陣進(jìn)行奇異值分解。主成分分析過(guò)程中,原始數(shù)據(jù)集到新的低維空間的距離可以采用平均投影誤差的平房來(lái)衡量:J=1其中,xapproxJ得到的結(jié)果就是從n維空間像更低維度的k維空間進(jìn)行映射。2.2.6決策樹(shù)決策樹(shù)是一種常見(jiàn)的分類算法,性能優(yōu)秀。決策樹(shù)一般需要進(jìn)行以下步驟:1.利用特征A的某個(gè)取值a,將數(shù)據(jù)分為兩部分,計(jì)算A=a時(shí)的基尼系數(shù)2.遍歷所有特征的所有取值,重復(fù)步驟1,直到滿足停止條件,算法的停止條件既可以選擇樣本包含的最小樣本數(shù),又可以選擇基尼系數(shù)閾值3.開(kāi)始剪枝,避免模型過(guò)擬合,泛化性能差。3使用的數(shù)據(jù)集3.1數(shù)據(jù)來(lái)源和簡(jiǎn)介此次題目采用來(lái)自kaggle網(wǎng)站上面的一個(gè)臺(tái)灣銀行信用卡數(shù)據(jù)集,該數(shù)據(jù)集每條數(shù)據(jù)集記錄包含了信用卡用戶的個(gè)人基本信息,如性別、年齡、婚姻情況等基本的人口統(tǒng)計(jì)學(xué)信息。除此之外,每條記錄還包含了2005年4月至2005年9月期間,該用戶應(yīng)償還的信用卡賬單金額、實(shí)際已償還的信用卡金額等信息。而該數(shù)據(jù)集的類標(biāo)號(hào)則為用戶在下個(gè)月是否違約。該數(shù)據(jù)集總共包含了30000條記錄,每條數(shù)據(jù)記錄包含了25個(gè)屬性,其中一個(gè)屬性為類標(biāo)簽。其中BILL_AMT變量為對(duì)應(yīng)月分的賬單金額,賬單金額=之前月份欠款+本月新的欠款,正數(shù)表示有為欠款,負(fù)數(shù)表示卡中有存款結(jié)余。其中PAY_AMT變量為對(duì)應(yīng)月份的還款金額,PAY_AMT=償還的欠款+存入信用卡的錢,大于BILL_AMT表示按時(shí)還款,小于BILL_AMT但大于最低還款限度表示延遲還款,小于最低還款限度表示違約。類標(biāo)簽為下個(gè)月(10月)用戶是否違約。數(shù)據(jù)集的主要字段如下:ID:信用卡客戶ID號(hào)LIMIT_BAL:以新臺(tái)幣計(jì)算的信貸金額(包括個(gè)人和家庭/補(bǔ)充信貸)SEX:性別(1代表男性,2代表女性)EDUCATION:受教育程度(1=研究生,2=大學(xué),3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)AGE:年齡PAY_0:2005年9月的還款記錄(0=按時(shí)付款,1=延遲一個(gè)月付款,2=延遲兩個(gè)月付款,...8=延遲八個(gè)月付款,9=延遲九個(gè)月及以上付款)PAY_2:2005年8月的還款情況(特征值含義如上)PAY_3:2005年7月的還款情況(特征值含義如上)PAY_4:2005年6月的還款情況(特征值含義如上)PAY_5:2005年5月的還款情況(特征值含義如上)PAY_6:2005年4月的還款情況(特征值含義如上)BILL_AMT1:2005年9月賬單金額(新臺(tái)幣)BILL_AMT2:2005年8月賬單金額(新臺(tái)幣)BILL_AMT3:2005年7月賬單金額(新臺(tái)幣)BILL_AMT4:2005年6月賬單金額(新臺(tái)幣)BILL_AMT5:2005年5月賬單金額(新臺(tái)幣)BILL_AMT6:2005年4月賬單金額(新臺(tái)幣)PAY_AMT1:2005年9月支付金額(新臺(tái)幣)PAY_AMT2:2005年8月支付金額(新臺(tái)幣)PAY_AMT3:2005年7月支付金額(新臺(tái)幣)PAY_AMT4:2005年6月支付金額(新臺(tái)幣)PAY_AMT5:2005年5月支付金額(新臺(tái)幣)PAY_AMT6:2005年4月支付金額(新臺(tái)幣)default.payment.next.month:是否違約還款(1代表是,0代表否)3.2數(shù)據(jù)探索3.2.1數(shù)據(jù)質(zhì)量探索由上圖可知,該數(shù)據(jù)集總共有30000條樣本,沒(méi)有缺失值,數(shù)據(jù)類型有int和float,都為數(shù)值型,但有些變量比如SEX,EDUCATION雖然是數(shù)值類型,但其實(shí)是分類變量,取值范圍在書(shū)籍集說(shuō)明文檔中有做說(shuō)明。3.2.2連續(xù)變量描述性統(tǒng)計(jì)由上圖可以觀察到,賬單金額從BILL_AMT6到BILL_AMT9,均值逐漸上升,說(shuō)明人們?cè)?005年4月到9月這段時(shí)間越來(lái)越傾向于信用卡消費(fèi),這種消費(fèi)方式越來(lái)越被人們接受。最小值和最大值區(qū)間跨度比較大,最好進(jìn)行連續(xù)變量標(biāo)準(zhǔn)化。每個(gè)月的賬單金額中位數(shù)都為20000左右。由上圖可以得出:從PAY_AMT6到PAY_AMT1分別代表了2005年4月到9月,每個(gè)月的還款金額。均值和中位數(shù)隨著時(shí)間的推移,都有上升的趨勢(shì),說(shuō)明人們的還款能力逐漸提高。最大最小值跨度同樣比較大,需要進(jìn)行標(biāo)準(zhǔn)化。由上圖可得:信貸金額取值范圍從10000大100萬(wàn)不等,均值為16萬(wàn),中位數(shù)為14萬(wàn),說(shuō)明大多數(shù)人的額度為15萬(wàn)新臺(tái)幣左右。取值范圍跨度同樣比較大,需要進(jìn)行標(biāo)準(zhǔn)化。3.2.3違約率違約率為0.2212,樣本不平衡,存在偏斜類的現(xiàn)象。模型評(píng)價(jià)指標(biāo)可以考慮使用F1分?jǐn)?shù),而不是只用準(zhǔn)確率。因?yàn)槿绻挥脺?zhǔn)確率的話,為了得到更高的準(zhǔn)確率,可能模型會(huì)將所有樣本猜測(cè)為沒(méi)有違約,這樣最差的模型也能得到78%左右的準(zhǔn)確率。模型評(píng)價(jià)指標(biāo)將在第五章進(jìn)行討論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()運(yùn)行結(jié)果如下:SEX:性別(1代表男性,2代表女性)由圖可以得出,女性用戶數(shù)較多,大概是男性的1.5倍婚姻狀況(1=已婚,2=單身,3=其他)單身的用戶人數(shù)比已婚的用戶人數(shù)多,但是已婚人士的違約率高于單身人士出現(xiàn)了文檔中未解釋的異常值,需要對(duì)異常值進(jìn)行處理。(1=研究生,2=大學(xué),3=高中,4=其他5=未知,6=未知)大學(xué)學(xué)歷人數(shù)最多,高中學(xué)歷用戶的違約率最高,大概在50%,而且隨著學(xué)歷的升高,違約率減少。出現(xiàn)了說(shuō)明文檔中未做解釋的異常值,需要進(jìn)行異常值處理,異常值數(shù)量較少,可以考慮直接將包含異常值的數(shù)據(jù)記錄刪除。(-1=按時(shí)付款,1=延遲一個(gè)月付款,2=延遲兩個(gè)月付款,...8=延遲八個(gè)月付款,9=延遲九個(gè)月及以上付款)一旦超過(guò)2個(gè)月未還款,違約率將超過(guò)50%不難看出,沒(méi)有違約的子圖頻數(shù)更高,大都數(shù)人會(huì)選擇按時(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()運(yùn)行結(jié)果如下:SEX:性別(1代表男性,2代表女性)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)已婚用戶年齡普遍高于未婚用戶,但差距較小已婚男性年齡普遍高于已婚女性,未婚男性年齡普遍高于未婚女性。EDUCATION:受教育程度(1=研究生,2=大學(xué),3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)已婚用戶年齡普遍高于未婚用戶,MARRIAGE取值為其他的用戶,在上面幾個(gè)箱型圖中,年齡普遍大于已婚用戶和單身用戶,有可能是離婚用戶。不同學(xué)歷的用戶群在年齡上的分布大致相同,受教育程度對(duì)年齡分布的影響不明顯。SEX:性別(1代表男性,2代表女性)信貸金額不論男女,都隨著年齡的增長(zhǎng)而增長(zhǎng),直到大約30歲,之后趨于平穩(wěn),50隨之后開(kāi)始震蕩。男性的信貸金額普遍比女性的高。EDUCATION:受教育程度(1=研究生,2=大學(xué),3=高中,4=其他5=未知,6=未知)MARRIAGE:婚姻狀況(1=已婚,2=單身,3=其他)單身用戶的額度普遍比已婚用戶的額度要低。隨著學(xué)歷的升高,用戶往往能得到更大的信貸額度。不論教育程度高低,違約人數(shù)都是占少部分。,信貸金額主要集中在10萬(wàn)到20萬(wàn)新臺(tái)幣。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()運(yùn)行結(jié)果如下:除了在30~35歲這個(gè)年齡段,用戶的履約能力更高之外,其他年齡段的分布沒(méi)有明顯區(qū)別,信用卡的主要用戶集中在25到30歲,然后隨著年齡的逐漸增長(zhǎng),使用信用卡的人越來(lái)越少。中年人青年人客戶消費(fèi)需求多,存在購(gòu)房、購(gòu)車、下一代教育等大額消費(fèi)需求,但與此同時(shí),這各群體正是社會(huì)的中堅(jiān)力量,還款能力并不弱。信貸金額的峰值在5萬(wàn)新臺(tái)幣附近,大部分是0-10萬(wàn)新臺(tái)幣的信用額度不論用戶違約與否,大多數(shù)賬單金額集中在5萬(wàn)新臺(tái)幣附近,違約與否的信貸金額的分布沒(méi)有顯著差別。說(shuō)明用戶是否違約和每月的賬單金額大小沒(méi)有明顯的關(guān)系。未違約用戶每個(gè)月還款金額與違約用戶每月還款金額相比,分布上沒(méi)有明顯差別3.2.6相關(guān)性探索:主要代碼如下:matplotlib.pyplot.figure()seaborn.heatmap(data.iloc[:,0:-1].corr())matplotlib.pyplot.show()運(yùn)行結(jié)果如下:BILL_AMT之間的相關(guān)性隨著月間距離的增加而減小。相關(guān)性最低的是9-4月。PAY之間沒(méi)相關(guān)性PAY_AMT之間的相關(guān)性隨著月間距離的增加而減小。相關(guān)性最低的是9-4月。類標(biāo)簽和其他變量的相關(guān)性:LIMIT_BAL負(fù)相關(guān),跟6個(gè)PAY變量關(guān)系比較大,正相關(guān),而且跟PAY_0關(guān)系最大既然PAY變量與類標(biāo)簽相關(guān)性較高,那么如果建模的時(shí)候準(zhǔn)確率太低的話,可以嘗試只用PAY變量建模4數(shù)據(jù)預(yù)處理數(shù)據(jù)集在采集數(shù)據(jù)和保存數(shù)據(jù)的過(guò)程中難免會(huì)出現(xiàn)錯(cuò)誤,需要進(jìn)行異常值處理和缺失值處理。同時(shí),對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換有利于挖掘出更有價(jià)值的信息,建立性能更好的模型。4.1異常值處理在第三章的數(shù)據(jù)探索中,我發(fā)現(xiàn)數(shù)據(jù)集中,有些記錄某個(gè)變量的取值不在說(shuō)明文檔中,除了查閱kaggle官方的數(shù)據(jù)集說(shuō)明文檔之外,經(jīng)過(guò)在網(wǎng)上查閱其他關(guān)于該數(shù)據(jù)集變量的說(shuō)明文檔,現(xiàn)在開(kāi)始對(duì)數(shù)據(jù)集中的異常值進(jìn)行處理。在PAY變量中,異常值0表示償還了最小金額,區(qū)別與按時(shí)還款,但是不屬于違約。EDUCATION變量中,0,5,6三個(gè)取值在官方文檔中解釋為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,該變量唯一標(biāo)識(shí)一個(gè)客戶,對(duì)改題目沒(méi)有意義:主要代碼如下:#刪除變量IDdataX.drop(['ID'],axis=1,inplace=True)print('刪除了變量ID后剩余的變量',dataX.columns)運(yùn)行結(jié)果如下:在之前的數(shù)據(jù)分析過(guò)程中,我發(fā)現(xiàn)了男人更可能違約,已婚人士更傾向于違約,因此把這兩個(gè)變量組合成一個(gè)新的變量SEXandMARRIAGE,插入到數(shù)據(jù)集中:主要代碼如下:#發(fā)現(xiàn)男人更有可能違約,已婚人士更有可能違約,進(jìn)行特征工程,組合這兩個(gè)變量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ò)的運(yùn)行速度,節(jié)省時(shí)間,在神經(jīng)網(wǎng)絡(luò)模型中可以選擇采用主成分分析來(lái)降低數(shù)據(jù)集的維度;主要代碼如下:fromsklearn.decompositionimportPCAmodelPCA=PCA()modelPCA.fit(dataX)print('各個(gè)變量保留的方差:\n',modelPCA.explained_variance_ratio_)varSum=0#for循環(huán)內(nèi)的變量拿不出來(lái),用這個(gè)變量記住要保留幾個(gè)變量parameterPCA=0forindexinrange(0,len(modelPCA.explained_variance_ratio_)):varSum=varSum+modelPCA.explained_variance_ratio_[index]ifvarSum>=0.95:print('選取方差貢獻(xiàn)量前',index+1,'個(gè)屬性即可保留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離散變量進(jìn)行啞變量編碼在處理離散變量的時(shí)候,應(yīng)該對(duì)離散變量進(jìn)行啞變量編碼,否則計(jì)算代價(jià)函數(shù)時(shí),都某個(gè)取值的距離與到另一個(gè)取值的距離是不一樣的,這是不對(duì)的,因?yàn)橐粋€(gè)類個(gè)中取值之間應(yīng)該是在同一個(gè)等級(jí)上的。把有n種取值的某個(gè)屬性,轉(zhuǎn)換為n維向量,該向量中只有一個(gè)元素為1,其余為0,再將該向量插入到數(shù)據(jù)集中。主要代碼如下:print('轉(zhuǎn)換為啞變量之前,一共有',len(dataX.iloc[0,:]),'個(gè)變量')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,:]),'個(gè)變量')運(yùn)行結(jié)果如下:4.4連續(xù)變量標(biāo)準(zhǔn)化某些變量的值域過(guò)大,標(biāo)準(zhǔn)化有助于加快收斂速度,節(jié)省時(shí)間。主要代碼如下:forcolNameindataX.columns:ifcolNamenotinindexCategorical:colData=dataX.loc[:,colName]dataX.loc[:,colName]=(colData-colData.mean())/colData.std()4.5多項(xiàng)式拓展如果模型擬合效果欠佳,不能得出更復(fù)雜的模型,可以考慮使用多項(xiàng)式拓展,形成二次項(xiàng)插入到數(shù)據(jù)集中。主要代碼如下:#多項(xiàng)式拓展,除了類標(biāo)簽,此時(shí)data中不包含類標(biāo)簽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('多項(xiàng)式拓展之后的數(shù)據(jù)集info:')dataX.info()dataX.to_csv('多項(xiàng)式拓展完成.csv')4.6劃分?jǐn)?shù)據(jù)集將數(shù)據(jù)集按照6:2:2的比例劃分為訓(xùn)練集、交叉驗(yàn)證集合、測(cè)試集。定義函數(shù)用于讀取數(shù)據(jù)集。主要代碼如下:defloadData():importpandasimportosdata=pandas.read_csv('dataDone.csv',index_col=0)dataTraining=data.iloc[:int(0.6*len(data)),:]print('訓(xùn)練集樣本數(shù):\n',len(dataTraining))dataCV=data.iloc[int(0.6*len(data)):int(0.8*len(data)),:]print('交叉驗(yàn)證集樣本數(shù):\n',len(dataCV))dataTest=data.iloc[int(0.8*len(data)):,:]print('測(cè)試集樣本數(shù):\n',len(dataTest))#每次從新進(jìn)行數(shù)據(jù)預(yù)處理,訓(xùn)練集違約率都會(huì)變化,但調(diào)用loadData()不會(huì)變化print('訓(xùn)練集違約率為:',dataTraining['default.payment.next.month'].sum()/len(dataTraining))print('交叉驗(yàn)證集合違約率為:',dataCV['default.payment.next.month'].sum()/len(dataCV))print('測(cè)試集合違約率為:',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模型評(píng)價(jià)指標(biāo)選擇哪種模型評(píng)價(jià)指標(biāo),需要按照具體的數(shù)據(jù)集和使用的具體的機(jī)器學(xué)習(xí)方法,結(jié)合考慮,沒(méi)有哪一種模型評(píng)價(jià)指標(biāo)是適用于所有模型或者所有問(wèn)題的。之前的數(shù)據(jù)分析過(guò)程中,我發(fā)現(xiàn)了數(shù)據(jù)集總體違約率大約為22%,是一個(gè)傾斜的數(shù)據(jù)集,此時(shí)不應(yīng)該只考慮準(zhǔn)確率,最好使用F1分?jǐn)?shù),auc分?jǐn)?shù)等作為模型評(píng)價(jià)指標(biāo),能更好的解決偏斜類的問(wèn)題。5.1.1F1分?jǐn)?shù)假設(shè)用TP,TN,FP,FN分別表示真正例,真負(fù)例,假正例,假負(fù)例,那么精確率precision=TP/(TP+FP)召回率recall=TP/(TP+FN)準(zhǔn)確率accuracy=(TP+TN)/(TP+FP+TN+FN)F1分?jǐn)?shù)=2*precision*recall/(pression+recall)同時(shí)考慮了精確率和召回率,能有效避免模型把全部樣本歸為一個(gè)類別,還能獲得不錯(cuò)的準(zhǔn)確率的情況出現(xiàn)。5.1.2AUC分?jǐn)?shù)ROC曲線和AUC分?jǐn)?shù)也經(jīng)常被用來(lái)衡量二分類分類器的性能。假正率FPR,真正率TPR計(jì)算公式如下:FPR=FP/TN+FNTPR=TP/TP+FPTPR的增加以FPR的增加為代價(jià)。ROC曲線下的面積就是AUC分?jǐn)?shù),可以作為模型性能的評(píng)價(jià)指標(biāo)。5.2邏輯回歸5.2.1單變量邏輯回歸由于采用的數(shù)據(jù)集中包含了24個(gè)輸入變量,根據(jù)之前數(shù)據(jù)分析章節(jié)中的熱度圖可以得知,每個(gè)變量與類標(biāo)簽的相關(guān)性不盡相同,為了能更直接的了解到各個(gè)輸入變量對(duì)模型準(zhǔn)確判斷輸入樣本的類標(biāo)簽的貢獻(xiàn)有多大,可以對(duì)各個(gè)變量一一建立邏輯回歸模型,計(jì)算AUC分?jǐn)?shù)。主要代碼如下:fromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportroc_auc_scoreaucs=list()forindexNameindata.columns[0:-1]:modelLogisticRegression=LogisticRegression()#modelLogisticRegression.fit()要求第一個(gè)參數(shù)為DataFrame,第二個(gè)為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()對(duì)每個(gè)變量進(jìn)行單變量邏輯回歸,得到的AUC分?jǐn)?shù)如下:由上圖可以得出,各個(gè)變量最低的AUC分?jǐn)?shù)也有0.5,最高達(dá)到了0.645.2.2選擇正則化參數(shù)為了邏輯回歸模型過(guò)擬合,泛化性能差,即在訓(xùn)練集上表現(xiàn)得非常優(yōu)秀,但是在測(cè)試集和實(shí)際應(yīng)用中性能表現(xiàn)卻不佳,可以為代價(jià)函數(shù)加上正則化項(xiàng)。選取的正則化參數(shù)范圍從0.0001到100,分別用以上正則化參數(shù)建立邏輯回歸模型,測(cè)試其在交叉驗(yàn)證集上的性能表現(xiàn),篩選出最佳的正則化參數(shù),訓(xù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隨機(jī)平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來(lái)計(jì)算梯度modelLogisticRegression=LogisticRegression(C=(1/i),solver='sag',n_jobs=2)#用values,要求numpy的arraymodelLogisticRegression.fit(dataTrainingX,dataTrainingY)prediction=modelLogisticRegression.predict(dataTrainingX)print('當(dāng)C=',1/i,'時(shí),\n在訓(xùn)練集上的正確率為:',len(prediction[prediction==dataTrainingY[:]])/len(prediction))print('在訓(xùn)練集上預(yù)測(cè)為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('在訓(xùn)練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1)prediction=modelLogisticRegression.predict(dataCVX)accuracy=len(prediction[prediction==dataCVY[:]])/len(prediction)accuracyCV.append(accuracy)print('在交叉驗(yàn)證集上的正確率為:',accuracy)print('在交叉驗(yàn)證集上預(yù)測(cè)為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('在交叉驗(yàn)證集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1,'\n')#折線圖找出最佳正則化參數(shù)importmatplotlib.pyplotaspltplt.plot(lambdaRange,accuracyCV)plt.xlabel('lambda')plt.ylabel('accuracyCV')plt.show()lambdaBest=lambdaRange[accuracyCV.index(max(accuracyCV))]print('當(dāng)正則化參數(shù)為',lambdaBest,'時(shí),交叉驗(yàn)證及上正確率最高,為',max(accuracyCV))隨著正則化參數(shù)lambda的變化,模型再在交叉驗(yàn)證集上的準(zhǔn)確率如下面圖片所示:由以上折線圖可以得出,隨著正則化參數(shù)的增大,交叉驗(yàn)證集上的性能表現(xiàn)在正則化參數(shù)為10.24的時(shí)候最佳。下一步使用該正則化參數(shù)訓(xùn)練得到的模型,在測(cè)試集上進(jìn)行檢驗(yàn)。5.2.3性能評(píng)價(jià)用最佳正則化參數(shù),在測(cè)試集上進(jìn)行預(yù)測(cè),評(píng)估模型性能:主要代碼如下:#用最佳的正則化參數(shù)在測(cè)試上預(yù)測(cè)prediction=modelLogisticRegression.predict(dataTestX)accuracy=len(prediction[prediction==dataTestY[:]])/len(prediction)print('在測(cè)試集上的正確率為:',accuracy)print('在測(cè)試集上預(yù)測(cè)為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('在測(cè)試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1,'\n')#只在測(cè)試集上計(jì)算auc,目前0.75possibilityPositive=numpy.array([score[1]forscoreinmodelLogisticRegression.predict_proba(dataTestX)])auc=roc_auc_score(dataTestY.values,possibilityPositive)print('測(cè)試集上的auc分?jǐn)?shù)為:\n',auc)fromsklearn.metricsimportbrier_score_lossbrier=brier_score_loss(dataTestY.values,possibilityPositive)print('測(cè)試集上的brier分?jǐn)?shù)為:\n',brier)由上圖可以得出,當(dāng)正則化參數(shù)為10.24時(shí),邏輯回歸模型在測(cè)試集上的正確率為82.2%,F(xiàn)1分?jǐn)?shù)為0.43,表現(xiàn)良好。5.3神經(jīng)網(wǎng)絡(luò)5.3.1選擇隱藏層規(guī)模此次選擇的神經(jīng)網(wǎng)絡(luò)僅包含一個(gè)隱藏層,一個(gè)輸入層和一個(gè)輸出層。隱藏層的規(guī)模一般為輸入層的整數(shù)倍,為了得到更好的效果,在交叉驗(yàn)證集上對(duì)隱藏層的神經(jīng)元數(shù)進(jìn)行選擇倍數(shù)為輸入層的1倍或者2倍。在訓(xùn)練集上用不同的隱藏層神經(jīng)元個(gè)數(shù)進(jìn)行訓(xùn)練:主要代碼如下: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當(dāng)隱藏層神經(jīng)元個(gè)數(shù)為',i*len(dataTrainingX.iloc[0,:]),'時(shí):')print('keras在訓(xùn)練集上的正確率為:',len(prediction[prediction.values==dataTrainingY.values])/len(prediction))print('keras訓(xùn)練集上預(yù)測(cè)為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在訓(xùn)練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?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在交叉驗(yàn)證集上的正確率為:',accuracy)print('keras在交叉驗(yàn)證集上預(yù)測(cè)為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在交叉驗(yàn)證集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1)numberBest=(accuracyCV.index(max(accuracyCV))+1)*len(dataTrainingX.iloc[0,:])print('當(dāng)隱藏層神經(jīng)元個(gè)數(shù)為',numberBest,'時(shí),在交叉驗(yàn)證集上的正確率最高,為',max(accuracyCV))matplotlib.pyplot.plot([1,2,3],accuracyCV)matplotlib.pyplot.xlabel('units')matplotlib.pyplot.ylabel('accuracyCV')matplotlib.pyplot.show()運(yùn)行結(jié)果如下:可以得出,當(dāng)隱藏層的神經(jīng)元個(gè)數(shù)和輸入層神經(jīng)元個(gè)數(shù)相等的時(shí)候,模型泛化性能最佳,隨著隱藏層神經(jīng)元個(gè)數(shù)的增加,開(kāi)始出現(xiàn)過(guò)擬合的情況,即在訓(xùn)練集上表現(xiàn)優(yōu)秀,在交叉驗(yàn)證集上表現(xiàn)的很差。5.3.2模型評(píng)價(jià)選用上一步得到的神經(jīng)元規(guī)模,訓(xùn)練模型并在測(cè)試集上進(jìn)行檢驗(yàn)。主要代碼如下:#在測(cè)試集上預(yù)測(cè):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在測(cè)試集上的正確率為:',len(prediction[prediction.values==dataTestY.values])/len(prediction))print('keras測(cè)試集上預(yù)測(cè)為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在測(cè)試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1)準(zhǔn)確率為0.78,F(xiàn)1分?jǐn)?shù)為0.432,相比訓(xùn)練集上的表現(xiàn),說(shuō)明模型出現(xiàn)了過(guò)擬合,表現(xiàn)不好。5.4樸素貝葉斯5.4.1實(shí)現(xiàn)過(guò)程主要代碼如下:modelNaiveBayes=GaussianNB()modelNaiveBayes.fit(dataTrainingX,dataTrainingY)prediction=modelNaiveBayes.predict(dataTrainingX)#第0行第1列的數(shù)表示y_true中值為0,y_pred中值為1的個(gè)數(shù)print('訓(xùn)練集混淆矩陣:\n',metrics.confusion_matrix(dataTrainingY,prediction))precision=precision_score(dataTrainingY,prediction)recall=recall_score(dataTrainingY,prediction)F1=2*precision*recall/(precision+recall)print('訓(xùn)練集上的正確率為:',len(prediction[prediction==dataTrainingY.values])/len(prediction))print('訓(xùn)練集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1)#在測(cè)試集上驗(yàn)證prediction=modelNaiveBayes.predict(dataTestX)print('測(cè)試集混淆矩陣:\n',metrics.confusion_matrix(dataTestY,prediction))precision=precision_score(dataTestY,prediction)recall=recall_score(dataTestY,prediction)F1=2*precision*recall/(precision+recall)print('測(cè)試集上的正確率為:',len(prediction[prediction==dataTestY.values])/len(prediction))print('測(cè)試集上的pecision為:',precision,'\trecall為:',recall,'\tF1分?jǐn)?shù)為:',F1)5.4.2性能評(píng)價(jià)運(yùn)行結(jié)果如下:由上圖可以看出,樸素貝葉斯在訓(xùn)練集上的正確率為80.3%,F(xiàn)1分?jǐn)?shù)為0.35測(cè)試集上的正確率為80.4%,F(xiàn)1分?jǐn)?shù)為0.35模型性能良好5.5決策樹(shù)5.5.1主要過(guò)程主要代碼如下:fromsklearnimportmetricsfromsklearn.treeimportDecisionTreeClassifierimportmyFunctionfromsklearn.metricsim
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生職業(yè)規(guī)劃成長(zhǎng)賽道培訓(xùn)
- 信訪舉報(bào)培訓(xùn)課件
- 疔瘡的健康宣教
- 2024年診所護(hù)士節(jié)假日值班聘用合同規(guī)范3篇
- 2024年股權(quán)出資合作協(xié)議3篇
- 2024年銷售合同備案3篇
- 2024年空調(diào)設(shè)備更換與修復(fù)合同
- 2024年船舶維修吊車使用臨時(shí)租賃合同2篇帶眉腳
- 2024年自卸車輛租賃服務(wù)合同3篇
- 2024年離異雙方子女撫養(yǎng)協(xié)議
- 穴位貼敷護(hù)理培訓(xùn)
- 腰椎間盤突出癥護(hù)理查房課件
- DB45T 2866-2024 靈芝菌種制備技術(shù)規(guī)程
- 2024年度區(qū)塊鏈軟件產(chǎn)品知識(shí)產(chǎn)權(quán)共享協(xié)議3篇
- 人教版九年級(jí)上學(xué)期物理期末復(fù)習(xí)(壓軸60題28大考點(diǎn))
- 人教版(2024版)七年級(jí)上冊(cè)英語(yǔ)期末模擬測(cè)試卷(含答案)
- 2024年江蘇省普通高中學(xué)業(yè)水平測(cè)試小高考生物、地理、歷史、政治試卷及答案(綜合版)
- 浙江省杭州市西湖區(qū)2023-2024學(xué)年六年級(jí)上學(xué)期期末語(yǔ)文試卷
- 全國(guó)農(nóng)村環(huán)境質(zhì)量試點(diǎn)監(jiān)測(cè)技術(shù)方案
- 土地復(fù)墾工程施工組織設(shè)計(jì)方案2
- 最新開(kāi)利中央空調(diào)故障代碼大全
評(píng)論
0/150
提交評(píng)論