原文鏈接:http:///?p=23344本文中我們介紹了決策樹和隨機森林的概念,并在R語言中用邏輯回歸、回歸決策樹、隨機森林進行信用卡違約數(shù)據(jù)分析(查看文末了解數(shù)據(jù)獲取方式)。 決策樹是由節(jié)點和分支組成的簡單樹狀結(jié)構。根據(jù)每個節(jié)點的任何輸入特征拆分數(shù)據(jù),生成兩個或多個分支作為輸出。這個迭代過程增加了生成的分支的數(shù)量并對原始數(shù)據(jù)進行了分區(qū)。這種情況一直持續(xù)到生成一個節(jié)點,其中所有或幾乎所有數(shù)據(jù)都屬于同一類,并且不再可能進一步拆分或分支。 視頻:從決策樹到隨機森林:R語言信用卡違約分析信貸數(shù)據(jù)實例這整個過程生成了一個樹狀結(jié)構。第一個分裂節(jié)點稱為根節(jié)點。末端節(jié)點稱為葉子并與類標簽相關聯(lián)。從根到葉的路徑產(chǎn)生分類規(guī)則。 假設你是一名員工,你想吃食物。 您的行動方案將取決于多種情況。 如果你不餓,你就不會花錢。但是如果你餓了,那么選擇就會改變。你的下一步行動取決于你的下一個情況,即你有沒有買午餐? 現(xiàn)在,如果你不吃午飯,你的行動將完全取決于你的下一個選擇,即是不是月底?如果是月底最后幾天,可以考慮不吃飯;否則,您不會將其視為偏好。 當涉及多個選擇來做出任何決定時,決策樹就會發(fā)揮作用。現(xiàn)在你必須做出相應的選擇以獲得有利的結(jié)果。 決策樹如何工作?決策樹有兩個組成部分:熵和信息增益 熵是一個用來衡量信息或無序的概念。我們可以用它來衡量數(shù)據(jù)集的純度。 為了更好地理解熵,讓我們研究兩個不同的示例數(shù)據(jù)集,它們都有兩個類,分別表示為藍點和紅叉。在左側(cè)的示例數(shù)據(jù)集中,我們混合了藍點和紅叉。在右側(cè)數(shù)據(jù)集的示例中,我們只有紅十字。第二種情況——一個只有一個類樣本的數(shù)據(jù)集——是我們的目標:一個“純”數(shù)據(jù)子集。 熵可以是純度、無序或信息的量度。由于混合類,左邊的數(shù)據(jù)集不那么純凈,更混亂(更無序,即更高的熵)。然而,更多的混亂也意味著更多的信息。實際上,如果數(shù)據(jù)集只有一類的點,那么無論您嘗試多長時間,都無法從中提取太多信息。相比之下,如果數(shù)據(jù)集具有來自兩個類的點,則它也具有更高的信息提取潛力。所以,左邊數(shù)據(jù)集的熵值越高,也可以看作是潛在信息量越大。 信息增益為了評估一個特征對分裂的好壞,計算分裂前后的熵差。 決策樹中每個拆分的目標是從混淆的數(shù)據(jù)集移動到兩個(或更多)更純的子集。理想情況下,分裂應該導致熵為 0.0 的子集。然而,在實踐中,如果拆分導致子集的總熵低于原始數(shù)據(jù)集就足夠了。 也就是說,我們首先計算分割前數(shù)據(jù)集的熵,然后計算分割后每個子集的熵。最后,在拆分之前從數(shù)據(jù)集的熵中減去由子集大小加權的輸出熵之和。這種差異衡量了信息的增益或熵的減少。如果信息增益是一個正數(shù),這意味著我們從一個混亂的數(shù)據(jù)集轉(zhuǎn)移到了一些更純粹的子集。 然后,在每一步,我們將選擇在信息增益值最高的特征上分割數(shù)據(jù),因為這會產(chǎn)生最純粹的子集。 我們將首先分割信息增益最高的特征。這是一個遞歸過程,直到所有子節(jié)點都是純的或直到信息增益為零。 隨機森林隨機森林是另一種強大且最常用的監(jiān)督學習算法。 許多比一個好。簡單來說,這就是隨機森林算法背后的概念。也就是說,許多決策樹可以產(chǎn)生比僅僅一棵決策樹本身更準確的預測。事實上,隨機森林算法是一種有監(jiān)督的分類算法,它構建了 N 個經(jīng)過稍微不同訓練的決策樹,并將它們合并在一起以獲得更準確和穩(wěn)定的預測. 讓我們再次強調(diào)這個概念。整個想法依賴于多個決策樹,這些決策樹都經(jīng)過略微不同的訓練,并且所有這些決策樹都被考慮到最終決策中。 在一個隨機森林中,N 棵決策樹在通過獲得的原始訓練集的一個子集上進行訓練自舉原始數(shù)據(jù)集,即通過帶放回的隨機抽樣。 此外,輸入特征也可能因樹而異,作為原始特征集的隨機子集。 N 個稍有不同訓練的樹將對相同的輸入向量產(chǎn)生 N 個稍有不同的預測。通常,多數(shù)規(guī)則適用于做出最終決定。N棵樹中的大多數(shù)提供的預測被用作最后一棵。 這種策略的優(yōu)勢是顯而易見的。雖然來自單個樹的預測對訓練集中的噪聲高度敏感,但來自大多數(shù)樹的預測卻不是——前提是這些樹不相關。Bootstrap 采樣是通過在不同的訓練集上訓練樹來去相關樹的方法。 接下來,我們在R語言中用邏輯回歸、回歸決策樹、隨機森林進行信用卡違約分析。 信貸數(shù)據(jù)集,其中包含了銀行貸款申請人的信息。該文件包含1000名申請人的20條信息。 下面的代碼可以用來確定申請人是否有信用,以及他(或她)是否對貸款人有良好的信用風險。有幾種方法被應用到數(shù)據(jù)上,幫助做出這種判斷。在這個案例中,我們將看一下這些方法。 相關視頻Boosting原理與R語言提升回歸樹BRT預測短鰭鰻分布 請注意,本例可能需要進行一些數(shù)據(jù)處理,以便為分析做準備。 我們首先將數(shù)據(jù)加載到R中。 credit <- read.csv(credit, header = TRUE, sep = ',') 這段代碼在數(shù)據(jù)上做了一個小的處理,為分析做準備。否則,就會出現(xiàn)錯誤,因為在某些文件的某一列中發(fā)現(xiàn)有四類因素。 基本上,任何4類因變量都被覆蓋為3類。繼續(xù)進行分析。 No.of.Credits\[No.of.Credits == 4\] <- 3 快速瀏覽一下數(shù)據(jù),了解一下我們的工作內(nèi)容。 str(credit) 你可能會立即注意到有幾個變量很顯眼。我們要排除它們。"信貸期限(月)"、"信貸金額 "和 "年齡"。 為什么?我們在這個模型中試圖把重點放在作為信用價值指標的數(shù)據(jù)分類或類別上。這些是分類變量,而不是數(shù)字變量。申請人有電話嗎?申請人是否已婚?是否有共同簽署人?申請人在同一地址住了多長時間?這類事情。 關于這些因素,重要的是我們知道它們與貸款決定的關系。良好的信用與某些因素的組合有關,從而使我們可以用概率將新的申請人按其特征進行分類。 在數(shù)據(jù)中,這些問題的答案不是 "是 "或 "不是 "或 "十年"。答案被分組為更廣泛的分類。 我們需要做的是刪除真正的數(shù)字數(shù)據(jù)(時間、金額和年齡),保留分類因素。我們排除選定列。 然后我們創(chuàng)建一個簡短的函數(shù),將整數(shù)轉(zhuǎn)換成因子。 for(i in S) credit\[, i\] <- as.factor(credit\[, i\]) 現(xiàn)在我們有了有用的數(shù)據(jù),我們可以開始應用不同的分析方法。 方法一:_邏輯回歸_(Logistic Regression)第一步是創(chuàng)建我們的訓練數(shù)據(jù)集和測試數(shù)據(jù)集。訓練集用于訓練模型。測試集則用于評估模型的準確性。 我們把數(shù)據(jù)集分成任何我們喜歡的大小,在這里我們使用三分之一,三分之二的分割。 (1:nrow(credit))\[-sample(1:nrow(credit), size = 333)\] 在這個階段,我們將使用glm()函數(shù)進行Logistic回歸。在這里,我們有選擇地使用模型中的變量。但現(xiàn)在只是用五個變量來確定信用度的值。 LogisticModel<- glm(Credit ~ Account + Payment + Purp + Length.of.current + Sex, family = binomial, data = credit) 完成后,我們繼續(xù)將我們剛剛創(chuàng)建的模型擬合到測試集i_test1上,并準備進行第一次預測。 我們已經(jīng)擬合了模型?,F(xiàn)在我們將使用ROCR包來創(chuàng)建預測,并以曲線下面積(AUC)來衡量性能。AUC越大,說明我們的模型表現(xiàn)越好。 perf1 <- performance(pred1, 'tpr', 'fpr') 讓我們描繪一下結(jié)果。 我們將通過尋找AUC來結(jié)束這一部分。 AUCLog1
這不是一個糟糕的結(jié)果,但讓我們看看是否可以用不同的方法做得更好。 方法二:另一種Logistic模型在這種方法中,我們將建立第二個Logistic邏輯模型來利用我們數(shù)據(jù)集中的所有變量。其步驟與上述第一個模型相同。 perf2 <- performance(pred2, 'tpr', 'fpr') AUCLog2 包括所有的變量,我們并沒有得到多少改善。一個好的規(guī)則是盡可能保持模型的簡單。增加更多的變量會帶來很少的改善,所以堅持使用更簡單的模型。 點擊標題查閱往期內(nèi)容 ![]() ![]() 左右滑動查看更多 ![]() 方法三:回歸樹接下來,讓我們試著用回歸樹的方法來分析數(shù)據(jù)。我們的大部分代碼與上述邏輯模型中使用的代碼相似,但我們需要做一些調(diào)整。 請再次注意,我們正在研究我們模型中的所有變量,找到它們對我們感興趣的變量--信用度的影響。 TreeModel <- rpart(Creditability ~ ., data = credit\[i_calibration1, \]) perf3 <- performance(pred3, 'tpr', 'fpr') 考慮到我們的樹狀模型的復雜性,這些結(jié)果并不令人滿意,所以我們不得不再次懷疑第一個例子中更簡單的Logistic Regression模型是否更好。 方法四:隨機森林與其建立一棵決策樹,我們可以使用隨機森林方法來創(chuàng)建一個決策樹 "森林"。在這種方法中,最終結(jié)果是類的模式(如果我們正在研究分類模型)或預測的平均值(如果我們正在研究回歸)。 隨機森林背后的想法是,決策樹很容易過度擬合,所以找到森林中的 "平均 "樹可以幫助避免這個問題。 你可以想象,這比創(chuàng)建一棵決策樹在計算上要求更高,但R可以很好地處理這一工作。 randomForest(Credit ~ ) 通過努力,我們得到了一個有點改進的結(jié)果。隨機森林模型是我們所嘗試的四個模型中表現(xiàn)最好的。但是,這需要判斷結(jié)果是否值得付出額外的努力。 方法五:比較隨機森林和Logistic模型好了,我們已經(jīng)看了使用兩種基本分析方法的各種結(jié)果--邏輯回歸和決策樹。我們只看到了以AUC表示的單一結(jié)果。 隨機森林方法要求我們創(chuàng)建一個決策樹的森林,并取其模式或平均值。為什么不利用所有這些數(shù)據(jù)呢?它們會是什么樣子呢? 下面的代碼創(chuàng)建了一個圖表,描述了我們的隨機森林中每棵樹的AUC分數(shù)和邏輯模型的數(shù)百種組合。 首先我們需要一個函數(shù)來進行分析。 function(i){ 這部分代碼的運行需要一段時間,因為我們要對數(shù)百個單獨的結(jié)果進行列表和記錄。你可以通過改變VAUC對象中的計數(shù)來調(diào)整模型中的結(jié)果數(shù)量。在這里,我們選擇計算200個x-y對,或400個單獨的結(jié)果。 plot(t(VC)) 你可以看到,我們從前四個模型中得到的結(jié)果正好處于分布的中間。 這為我們證實了這些模型都是有可比性的。我們所希望的最好結(jié)果是AUC達到0.84,而且大多數(shù)人給我們的結(jié)果與我們已經(jīng)計算的結(jié)果相似。 但是,讓我們試著更好地可視化。 首先,我們將對象轉(zhuǎn)換成一個數(shù)據(jù)框架。 我們創(chuàng)建幾個新圖。第一個是密度等高線圖。 plot(AA, aes(x = V1, y = V2) 第二張是高密度等高線圖,給我們提供了數(shù)據(jù)的概率區(qū)域。 with(AA, boxplot(V1, V2)) 無論我們以何種方式描述我們的結(jié)果,都必須使用數(shù)據(jù)來做出合理的貸款決定。這里有一個問題? 這些可能是我們使用這些模型所能得出的最佳分數(shù),但這些結(jié)果對于確定貸款申請人的信用價值是否可以接受?這取決于貸款機構所使用的信用標準。 在最好的情況下,看起來我們的模型給了82%的機會向良好的信用風險提供貸款。對于每100萬元的貸款,我們最多可能期望得到82萬元的償還。平均而言,我們預計會收回大約78萬元的本金。換句話說,根據(jù)我們的分析,有75%到80%的機會重新獲得100萬元的貸款,這取決于我們使用的建模方法。 當我們把貸款申請人加入我們的數(shù)據(jù)庫時,如果我們要把他們視為良好的信貸風險,我們希望他們聚集在高密度圖的最暗區(qū)域。 除非我們收取大量的利息來彌補我們的損失,否則我們可能需要更好的模型。 數(shù)據(jù)獲取 |
|
來自: 拓端數(shù)據(jù) > 《待分類》