解決分類問題有多種思路,包括應用支援向量機、決策樹等算法。還有一種較正常的做法是采用廣義線性回歸中的logistic回歸或probit回歸。廣義線性回歸是探索“響應變量的期望”與“自變量”的關系,以實作對非線性關系的某種拟合。這裡面涉及到一個“連接配接函數”和一個“誤差函數”,“響應變量的期望”經過連接配接函數作用後,與“自變量”存線上性關系。選取不同的“連接配接函數”與“誤差函數”可以構造不同的廣義回歸模型。當誤差函數取“二項分布”而連接配接函數取“logit函數”時,就是常見的“logistic回歸模型”,在0-1響應的問題中得到了大量的應用。
logistic回歸的公式可以表示為:
其中P是響應變量取1的機率,在0-1變量的情形中,這個機率就等于響應變量的期望。
這個公式也可以寫成:
可以看出,logistic回歸是對0-1響應變量的期望做logit變換,然後與自變量做線性回歸。參數估計采用極大似然估計,顯著性檢驗采用似然比檢驗。
建立模型并根據AIC準則選擇模型後,可以對未知資料集進行預測,進而實作分類。模型預測的結果是得到每一個樣本的響應變量取1的機率,為了得到分類結果,需要設定一個門檻值p0——當p大于p0時,認為該樣本的響應變量為1,否則為0。門檻值大小對模型的預測效果有較大影響,需要進一步考慮。首先必須明确模型預測效果的評價名額。
對于0-1變量的二分類問題,分類的最終結果可以用表格表示為:
其中,d是“實際為1而預測為1”的樣本個數,c是“實際為1而預測為0”的樣本個數,其餘依此類推。
顯然地,主對角線所占的比重越大,則預測效果越佳,這也是一個基本的評價名額——總體準确率(a+d)/(a+b+c+d)。
通常将上述矩陣稱為“分類矩陣”。一般情況下,我們比較關注響應變量取1的情形,将其稱為Positive(正例),而将響應變量取0的情形稱為Negative(負例)。常見的例子包括生物實驗的響應、營銷推廣的響應以及信用評分中的違約等等。針對不同的問題與目的,我們通常采用ROC曲線與lift曲線作為評價logistic回歸模型的名額。
一、ROC曲線
正因為我們比較關注正例的情形,是以設定了兩個相應的名額:TPR與FPR。
TPR:True Positive Rate,将實際的1正确地預測為1的機率,d/(c+d)。
FPR:False Positive Rate,将實際的0錯誤地預測為1的機率,b/(a+b)。
TPR也稱為Sensitivity(即生物統計學中的敏感度),在這裡也可以稱為“正例的覆寫率”——将實際為1的樣本數找出來的機率。覆寫率是重要的名額,例如若分類的目标是找出潛在的劣質客戶(響應變量取值為1),則覆寫率越大表示越多的劣質客戶被找出。
類似地,1-FPR其實就是“負例的覆寫率”,也就是把負例正确地識别為負例的機率。
TPR與FPR互相影響,而我們希望能夠使TPR盡量地大,而FPR盡量地小。影響TPR與FPR的重要因素就是上文提到的“門檻值”。當門檻值為0時,所有的樣本都被預測為正例,是以TPR=1,而FPR=1。此時的FPR過大,無法實作分類的效果。随着門檻值逐漸增大,被預測為正例的樣本數逐漸減少,TPR和FPR各自減小,當門檻值增大至1時,沒有樣本被預測為正例,此時TPR=0,FPR=0。
由上述變化過程可以看出,TPR與FPR存在同方向變化的關系(這種關系一般是非線性的),即,為了提升TPR(通過降低門檻值),意味着FPR也将得到提升,兩者之間存在類似互相制約的關系。我們希望能夠在犧牲較少FPR的基礎上盡可能地提高TPR,由此畫出了ROC曲線。
ROC曲線的全稱為“接受者操作特性曲線”(receiver operating
characteristic),其基本形式為:
當預測效果較好時,ROC曲線凸向左上角的頂點。平移圖中對角線,與ROC曲線相切,可以得到TPR較大而FPR較小的點。模型效果越好,則ROC曲線越遠離對角線,極端的情形是ROC曲線經過(0,1)點,即将正例全部預測為正例而将負例全部預測為負例。ROC曲線下的面積可以定量地評價模型的效果,記作AUC,AUC越大則模型效果越好。
由于ROC曲線描述了在TPR與FPR之間的取舍,是以我一般将其了解為投入産出曲線,receive of
cost。(事實上我了解錯了。相對而言lorenz曲線更适合這個名字。當然啦其實FPR可以了解為另一種cost。2010.10.15)
當我們分類的目标是将正例識别出來時(例如識别有違約傾向的信用卡客戶),我們關注TPR,此時ROC曲線是評價模型效果的準繩。
二、lift曲線
在營銷推廣活動(例如DM信)中,我們的首要目标并不是盡可能多地找出那些潛在客戶,而是提高客戶的響應率。客戶響應率是影響投入産出比的重要因素。此時,我們關注的不再是TPR(覆寫率),而是另一個名額:命中率。
回顧前面介紹的分類矩陣,正例的命中率是指預測為正例的樣本中的真實正例的比例,即d/(b+d),一般記作PV。
在不使用模型的情況下,我們用先驗機率估計正例的比例,即(c+d)/(a+b+c+d),可以記為k。
定義提升值lift=PV/k。
lift揭示了logistic模型的效果。例如,若經驗告訴我們10000個消費者中有1000個是我們的潛在客戶,則我們向這10000個消費者發放傳單的效率是10%(即客戶的響應率是10%),k=(c+d)/(a+b+c+d)=10%。通過對這10000個消費者進行研究,建立logistic回歸模型進行分類,我們得到有可能比較積極的1000個消費者,b+d=1000。如果此時這1000個消費者中有300個是我們的潛在客戶,d=300,則命中率PV為30%。
此時,我們的提升值lift=30%/10%=3,客戶的響應率提升至原先的三倍,提高了投入産出比。
為了畫lift圖,需要定義一個新的概念depth深度,這是預測為正例的比例,(b+d)/(a+b+c+d)。
與ROC曲線中的TPR和FPR相同,lift和depth也都受到門檻值的影響。
當門檻值為0時,所有的樣本都被預測為正例,是以depth=1,而PV=d/(b+d)=(0+d)/(0+b+0+d)=k,于是lift=1,模型未起提升作用。随着門檻值逐漸增大,被預測為正例的樣本數逐漸減少,depth減小,而較少的預測正例樣本中的真實正例比例逐漸增大。當門檻值增大至1時,沒有樣本被預測為正例,此時depth=0,而lift=0/0。
由此可見,lift與depth存在相反方向變化的關系。在此基礎上作出lift圖:
與ROC曲線不同,lift曲線凸向(0,1)點。我們希望在盡量大的depth下得到盡量大的lift(當然要大于1),也就是說這條曲線的右半部分應該盡量陡峭。
至此,我們對ROC曲線和lift曲線進行了描述。這兩個名額都能夠評價logistic回歸模型的效果,隻是分别适用于不同的問題:
如果是類似信用評分的問題,希望能夠盡可能完全地識别出那些有違約風險的客戶(不使一人漏網),我們需要考慮盡量增大TPR(覆寫率),同時減小FPR(減少誤殺),是以選擇ROC曲線及相應的AUC作為名額;
如果是做類似資料庫精确營銷的項目,希望能夠通過對全體消費者的分類而得到具有較高響應率的客戶群,進而提高投入産出比,我們需要考慮盡量提高lift(提升度),同時depth不能太小(如果隻給一個消費者發放傳單,雖然響應率較大,卻無法得到足夠多的響應),是以選擇lift曲線作為名額。
按照慣例,我們來做一個試驗。試驗的問題來自我的畢業論文,研究高爐鐵水矽品質分數的波動情況。
簡單地說,我們的響應變量是高爐鐵水矽品質分數的波動方向,記作SI0,當其取1時,表示本爐鐵水矽品質分數比上一爐小,當其取0時,表示本爐鐵水矽品質分數比上一爐大。(之是以這樣設定,是因為通常情況下更需要關注爐溫向涼的情形。)自變量選取為前一爐矽品質分數、前一爐料速、前一爐風量、前兩爐料速。
選取了350爐資料,分為兩組,分别用于模組化與預測
a=data[1:250,]
b=data[251:350,]
a[1:3,]
SI0
SI1
LS1
FL1 LS21
1 0.5825 0.8998203
0.9494003 0.78213472 0 0.5000
0.7933116 0.9334815 0.89982033
0 0.5700 0.7205215 0.8978194 0.7933116
建立logistic回歸模型
glm.logit=glm(SI0~.,data=a,family=binomial(link=logit))
summary(glm.logit)
計算預測值
p=predict(glm.logit,b)
p=exp(p)/(1+exp(p))
将門檻值定為0.5,得到分類結果
b$SI0pred=1*(p>0.5)
計算頻數
table(b[,c(1,6)])
SI0predSI0
1
28 18
1
12 42于是
TPR=77.8%
FPR=39.1%
PV=70%
k=54%
lift=1.3
繪制ROC曲線
TPR=rep(0,1000)
FPR=rep(0,1000)
for(i in 1:1000){
p0=i/1000;
SI0.true=b$SI0
SI0.pred=1*(p>p0)
TPR[i]=sum(SI0.pred*SI0.true)/sum(SI0.true)
FPR[i]=sum(SI0.pred*(1-SI0.true))/sum(1-SI0.true)}
plot(FPR,TPR,type="l",col=2)
points(c(0,1),c(0,1),type="l",lty=2)