ROC曲線
在網上有很多地方都有說ROC曲線對於正負樣本比例不敏感,即正負樣本比例的變化不會改變ROC曲線。但是對於PR曲線就不一樣了。PR曲線會隨着正負樣本比例的變化而變化。但是沒有一個有十分具體和嚴謹地對此做出過分析和論證(至少我沒有找到)。
此處記為結論1:
結論1:PR曲線會隨着正負樣本比例的變化而變化;但是ROC曲線不會。 |
此處我就這一問題進行了詳細的分析論證,並在這個過程中引發了很多思考。
首先,如何分析這個問題呢?
看下ROC曲線是由TPR和FPR組成的
下面我們這樣來分析這個問題,首先構造出一個數據集,並且其中某個參數可以控制數據集中正負正負樣本比例。在不同樣本分布的情況下,我們計算TPR,FPR,PREC,RECALL,如果TPR與FPR的關系與正負樣本比例無關,而PREC與RECALL的關系與正負樣本比例有關,則可以論證結論1。
下面我們做出如下假設,並生成數據集來驗證結論1
假設1:
數據集的score和Y是這樣生成的,即score決定了Y的概率,P(Y=1|score)=score
數據集均勻地在0~m之間生成,即s服從在0~m之間的均勻分布。通過m的改變,可以改變正負樣本的比例,從而嚴重不同比例下的TPR,FPR,PREC,RECALL變化情況...
\begin{equation} \left\{\begin{matrix}
TP=N\int_{c}^{m}sds=\frac{N}{2}(m^{2}-c^{2})
\\ FP=N\int_{c}^{m}(1-s)ds=N(m-c)-\frac{N}{2}(m^{2}-c^{2})
\\ TN=N\int_{0}^{c}(1-s)ds=N(c-\frac{1}{2}c^{2})
\\ FN=N\int_{0}^{c}sds=\frac{N}{2}c^{2}
\end{matrix}\right. \end{equation}
通過以上結果分別計算TPR,FPR,PREC
\begin{equation} \left\{\begin{matrix}
TPR=\frac{TP}{TP+FN}=1-\frac{c-\frac{1}{2}c^{2}}{m-\frac{1}{2}m^{2}}
\\ FPR=\frac{FP}{FP+TN}=1-(\frac{c}{m})^{2}
\\ PREC=\frac{TP}{TP+FP}=\frac{1}{2}(m+c)
\end{matrix}\right. \end{equation}
得出如下結論: 即結論1不成立,和起初設想的不一樣,怎么辦呢,還是拿實際數據來說話吧。
matlab模擬
假設一個生成模型,p(s|y=1)服從N(1,1),p(s|y=0)服從N(-1,1),score即為s,即我們的預測值,通過改變正負樣本比例,畫出在2種比例下的ROC曲線,看有沒有區別。
代碼如下:
1 N=200000; 2 M=floor(N*3);%不平衡樣本 3 score=[normrnd(1,1,1,N) normrnd(-1,1,1,M)]; 4 y=[ones(1,N) zeros(1,M)]; 5 [TPR,FPR,TH] = roc(y,score); 6 plot(FPR,TPR,'r') 7 hold on 8 M=floor(N*1);%平衡樣本 9 score=[normrnd(1,1,1,N) normrnd(-1,1,1,M)]; 10 y=[ones(1,N) zeros(1,M)]; 11 [TPR,FPR,TH] = roc(y,score); 12 plot(FPR,TPR,'b') 13 %結果一樣
圖1 ROC不隨着樣本比例變化而變化
發現之前的分析是錯誤的,但是為什么呢?咋看下來,假設完全合理的呀,
下面我們構造一個生成模型,從這里生成的數據出發,重新分析一下:
假設2:
先驗分布如下:P(Y=1)=z,P(Y=0)=1-z,這里的z可以控制樣本的正負比例
在Y=1,0時會有不同的概率分布來產生一個觀測量,即我們的score,它們的pdf分別是p(s|Y=1),p(s|Y=0)
我們根據這個先驗和后驗分布來生成我們的數據,樣本個數為N,然后通過取不同的cutoff(記為c),得到不同cutoff下的TP,FP,TN,FN...
依據這個假設,我們可以得到
\begin{equation}\left\{\begin{matrix}
TP=N\int_{c}^{\infty}p(Y=1|s)p(s)ds=N\int_{c}^{\infty}p(Y=1,s)ds=N\int_{c}^{\infty}p(s|Y=1)P(Y=1)ds=N*P(Y=1)\int_{c}^{\infty}p(s|Y=1)ds
\\ FP=N\int_{c}^{\infty}p(Y=0|s)p(s)ds=N\int_{c}^{\infty}p(Y=0,s)ds=N\int_{c}^{\infty}p(s|Y=0)P(Y=0)ds=N*P(Y=0)\int_{c}^{\infty}p(s|Y=0)ds
\\ TN=N\int_{-\infty }^{c}p(Y=0|s)p(s)ds=N\int_{-\infty }^{c}p(Y=0,s)ds=N\int_{-\infty }^{c}p(s|Y=0)P(Y=0)ds=N*P(Y=0)\int_{-\infty }^{c}p(s|Y=0)ds
\\ FN=N\int_{-\infty }^{c}p(Y=1|s)p(s)ds=N\int_{-\infty }^{c}p(Y=1,s)ds=N\int_{-\infty }^{c}p(s|Y=1)P(Y=1)ds=N*P(Y=1)\int_{-\infty }^{c}p(s|Y=1)ds
\end{matrix}\right. \end{equation}
所以可以得到TPR,FPR和PREC,RECALL
\begin{equation} FPR=\frac{FP}{FP+TN}=\frac{P(Y=0)\int_{c}^{\infty}p(s|Y=0)ds}{P(Y=0)}=\int_{c}^{\infty}p(s|Y=0)ds \end{equation}
\begin{equation} TPR=\frac{TP}{TP+FN}=\frac{P(Y=1)\int_{c}^{\infty}p(s|Y=1)ds}{P(Y=1)}=\int_{c}^{\infty}p(s|Y=1)ds \end{equation}
\begin{equation} PREC=\frac{TP}{TP+FP}=\frac{P(Y=1)\int_{c}^{\infty}p(s|Y=1)ds}{P(Y=1)\int_{c}^{\infty}p(s|Y=1)ds+P(Y=0)\int_{c}^{\infty}p(s|Y=0)ds} \end{equation}
顯然可以得到我們所希望得到的結論:即TPR,FPR與正負樣本比例無關,但是PREC與正負樣本比例有關。從而論證了結論1。
但是為什么假設1就得出了不同的結論了呢?
再回頭看一下假設1,它是通過改變先驗分布來決定正負樣本比例的,這樣是很自然的。並且后驗分布並不會隨着樣本比例變化而變化。
但是假設1呢?其后驗分布其實是隨着樣本比例變化而變化的,所以假設1的問題就出在這里了。即后驗分布的變化導致了各個指標的變化,甚至導致AUC的變化。
如果只改變先驗,而不改變后驗的話,P(Y=1|score)就會發生變化。
即得出了如下結論:
結論2:在構造數據的過程中,要通過改變先驗來改變正負比例的變化,不應該動后驗。然后預測的概率在樣本分布變化的情況下,需要進一步做修正(即Calibration)。 |
對於假設1,通過重采樣正樣本來改變正負樣本比例,則預測的概率需要修正,再修正過后,可以得到與假設2同樣的結論,論證結論1的成立。
對於結論2,我們可以得到新的信息,通常對於樣本不平衡問題,都會采用重采樣的方法,從一定程度上緩解不平衡性。注意重采樣方法保證了少樣本類別的樣本分布依舊是同分布的。如果某種,就需要仔細推敲一下了。還有如果你是預測概率,通常要做calibration,修正概率值,那你的修正數據集一定要與先驗一致(不要采用與重采樣比例一致的樣本),要不然修正的概率值是有偏的,從而你的修正是白費功夫或者是有害的。
總結:
1) 分析問題需要仔細推敲,前提假設非常重要,真是一步錯步步錯。
2) 分析問題要全面深入,這樣可以對舊問題的分析,得到新的知識。也即溫故而知新吧。