如何成為一名合格的數據評估員

本篇文章超長,慎入。

本文我們討論的是:

如何評價一個欄位,一個特徵,一個數據源,一個模型的有效性。

這個問題比建模本身要簡單一點,所以受眾會廣一點,畢竟用模型的人比做模型的人還是要多不少的。但又不像大家想的那麼簡單.

我們可以把這個問題分為兩部分:

1. 如何在數學上評價兩個變數的關係?

2. 假設其中一個變數是我們定義好的因變數,那這個關係要近到什麼程度,才能夠產生經濟效益?

以下是我總結的一些常用分析方法(如有遺留歡迎大家補充)。

Bivariate Analysis

在討論bivariate analysis 之前,需要提一下univaiate analysis,單變數分析,也就是俗稱的「單身狗分析」。它也許是統計分析中最簡單的一種形式。

而bivariate analysis,二元變數分析,用來討論兩個變數之間的相互關係。

這兩個變數,可以是一個因變數,一個自變數(特徵,評分等等),也可以是兩個自變數。為了把本篇的立意提高一個檔次,我可以這樣說:

univaiate analysis是bivariate analysis的基礎;

bivariate analysis是所有learing的基礎。

做過模型的或用過模型的都知道,風險模型其實就是一種典型的supervised learning。

supervised learning

(百度百科)是一個機器學習中的技巧,可以由訓練資料中學到或建立一個模式(函數 / learning model),並依此模式推測新的instances。訓練資料是由輸入物件(通常是向量)和預期輸出所組成。函數的輸出可以是一個連續的值(稱為回歸分析),或是預測一個分類標籤(稱作分類)。

用大白話說就是,有明確目標的學習,比如要學到什麼樣的客戶是壞客戶、就是想先實現一個億的小目標、就是想打通關;與之相對的是unsupervised learning,我漫無目標的學,因為我也不知道我要什麼樣的,就像現在好多人談戀愛,最早也不知道自己喜歡什麼樣的,那隻好見一個愛一個,慢慢的才能把自己的口味試出來,畢竟每個人的口味不一樣。

那肯定有人問了,這種漫無目標的嘗試和學習,有什麼意義呢?會不會反倒是資源的浪費?

其實不是,不管是社會、某個行業、亦或者是某種語言,保持多樣性是非常重要,放棄多樣性就意味著放棄可能性。回到我們的話題,我之前提到風險模型其實就是一種典型的supervised learning,這句話不完全對,因為在建立風險模型的過程中,有一個關鍵的步驟叫做「特徵工程characteristic engineering」,狹義的特徵工程也叫做特徵提取,就是找到那些可能作為模型自變數的這個步驟,這個步驟其實就是unsupervised learning,最理想的就是窮盡各種可能性來代表用戶某一方面的特徵。

可以度量的風險(不僅僅是風險因變數),可能出現四種類型:

連續型變數(continuous variable)

序數型變數(ordinal variable)

二元型變數(binary variable)

無序列表型變數(nominal variable)

同因變數一樣,我們在這個領域中遇到的幾乎所有(again,就是這麼嚴謹)二元分析能夠遇到的變數也都是屬於上述四種類型,我們後面會分別討論這四種變數在做二元分析時的這10對兩兩關係一般都是如何處理的。

變數和特徵

先來說變數,變數是一個可以變化數值的量化指標,比如所有申請人的年齡。因為每個申請人的年齡有各種各樣的可能性,那麼這個變數就實際上是「隨機變數」。隨機變數是一個統計學中的概念,指我們把現實中一件事可能發生的結果和實數的集合做了一個1-1的對應關係,專業人士中的變數,本質上是一個函數或一個關係,而不是一個數。舉個例子,性別是男女,這不叫變數,你把男女映射成1/0,才是變數。

這裡要引入另外一個概念,「事件」。除了像年齡,性別這樣的屬性,其他大部分的用戶行為都是一個事件,如某年某月我借了一筆錢,某天我給120打了電話,某天我上了一個賭博網站。但在風險模型和規則中,一般是不會直接使用這些事件作為變數和特徵的。用數學的語言來描述的話,就是在風險模型和規則中可以使用的變數和特徵,是所有用戶事件集合的σ代數(σ-algebra)

用直白的語言來描述,就是窮盡所有的事件組合,所構成的集合才是最完美的特徵集合。在絕大多數金融場景中,原始的客戶事件數據都是存儲在一個帶時間標記的二維表中,這種數據我們稱其為面板數據(panel data),在一般情況下我們得到的特徵集合,其實都是基本事件的σ代數的子集。同時,在將面板數據(panel data)轉化為可供模型使用的寬表(flat file/flat data)的過程,我們稱為特徵提取。

二元分析的主要目的

因變數-自變數:這裡的自變數可以是一個特徵,或是一個評分,既可以來自於內部,也可能是一個外部的數據源,由於因變數的存在,此時我們既可以用同一套指標和標準來評估不同的自變數,來給出自變數顯著性的排序;也可以用不用的指標,來研究同一對變數之間關係。

自變數-自變數:這種分析即會應用在建模的流程中,來進行降維或診斷模型的有效性;也可以用來分析不同數據的重疊度,主要應用在外部數據評估和模型部署的場景下。

離散化

離散化,就是我們前文提到的變數分組;通常我們的離散化,就是通過分區間的手段,把連續型變數,變為序數型變數。比如,我們把精確的逾期天數,劃分成M1,M2,M3等;把一天24小時分為凌晨,上午,下午,夜間等等。

像小時,分鐘,月份,星期幾這種變數,看似它和實際的連續型變數差不多,但跟正常的連續型變數有一個很大的區別,這種變數的值是頭尾相接的,比如,周日後面是周一,而不是周八,12月後面是1月而不是13月。這類特殊的連續型變數在統計學中稱為Circular distribution,是有著特殊的處理方法的,我們在一些特定的場景下需要注意。

虛擬化

虛擬化,是指通過虛擬化技術將一台計算機虛擬為多台邏輯計算機。在一台計算機上同時運行多個邏輯計算機,每個邏輯計算機可運行不同的操作系統,並且應用程序都可以在相互獨立的空間內運行而互不影響,從而顯著提高計算機的工作效率。虛擬化使用軟體的方法重新定義劃分IT資源,可以實現IT資源的動態分配、靈活調度、跨域共享,提高IT資源利用率,使IT資源能夠真正成為社會基礎設施,服務於各行各業中靈活多變的應用需求。

我們的虛擬化,跟計算機里的虛擬化,完全不是一回事。這裡的虛擬化,指的是把連續型或序數型或無序列表型變數轉化為二元變數的過程,這類二元變數有個特定名稱,叫做虛擬變數(dummy variable)。比如說,我們把逾期表現定義為,M2+和else;把星期幾變成weekday和weekend等等。

虛擬化和離散化的主要作用是將連續型的隨機變數轉變為離散的變數,使得連續型的隨機變數能夠使用那些針對離散型變數的評估方法,另外在做一些傳統的線性回歸或邏輯回歸時,通過虛擬化和離散化能夠捕捉到一些非線性的相關關係。

連續型變數的二元相關關係

連續型變數的二元相關關係其實在整個的分析過程中,基本屬於不被重視經常被忽略的,主要原因就是在風險模型中大概95%的模型都是二元的因變數。但連續型變數的二元相關關係,發揮的通常都是基礎性的作用,所以呢,我把它放在了第一個介紹。

通常情況下,如果兩個連續型變數的可以被認定為是有關係的,那麼應該會滿足下面四種相關關係中的一種,分別是:

線性相關

依分布線性相關

秩相關

其他非線性相關

需要注意的是,這裡的四種關係的相關性是逐漸減弱的(相對),而且完全是我自己總結的,甚至連其中兩種相關關係的名字都是我現編的,難免有不嚴謹的地方,因此接受討論,不接受批評,u can u up。

線性相關

線性相關是我認為最強的相關關係,也就兩個變數線性相關的程度。常用的評估線性相關關係的方法有如下三種,

相關係數:相關係數是最早由統計學家卡爾·皮爾遜設計的統計指標,是研究變數之間線性相關程度的量,一般用字母 r 表示。由於研究對象的不同,相關係數有多種定義方式,較為常用的是皮爾遜相關係數。

相關關係是一種非確定性的關係,相關係數是研究變數之間線性相關程度的量。由於研究對象的不同,相關係數有如下幾種定義方式。

簡單相關係數:又叫相關係數或線性相關係數,一般用字母r 表示,用來度量兩個變數間的線性關係。

相關係數的主要應用場景是在做一般線性回歸或邏輯回歸時,診斷自變數之間的多重共線性,在進行變數篩選時應用較少,主要原因是,線性相關是一直比較嚴格相關關係,用它來做標準會誤殺很多變數。

多重共線性(multi-collinearity)

很多受到過比較嚴格模型訓練的同學都知道在做一般線性回歸或邏輯回歸時都要做多重共線性診斷,但很少有人會去思考為什麼,可能只是當年在公司帶你的那個人say so。這個事情其實挺滑稽的,當年老羅語錄中有個段子叫傳統論,我覺得放在這裡特別應景(具體請自行百度)。

其實,多重共線性是在做線性回歸診斷的時候發明出來的一個名詞,指的是自變數之間有比較強的線性相關關係。

對於每一種數學模型,比如線性回歸、邏輯回顧等,其實都是有兩個要素的,分別是函數形式和參數擬合,對一般線性回歸來說,它的這兩個要素分別是線性的函數形式和最小二乘估計。

有理論推導可以證明,多重共線性會導致最小二乘估計擬合出來的參數的方差偏大,說人話就是多重共線性會導致最小二乘估計這個方法失效,這其實這是做多重共線性診斷的根本原因。話說回來,它所使用的這個參數擬合方法叫做極大似然估計,也有可能是我孤陋寡聞,一直沒看到多重共線性導致極大似然估計失效的相關文獻,所以其實都是經驗結論,如果有哪位同學有請一定發給我。

R平方(R-square)

R方是典型的用模型指標來進行變數相關性評估的方法之一,跟這個類似還有用LASSO或隨機森林給出在一對多的變數評估時,給出變數的相關性。

以R-square為例,此類方案的原理就是將兩個(或多個)中的某一個作為因變數,剩餘的作為自變數,訓練一個模型,用衡量模型的指標來做為衡量變數之間相關關係的指標。

(百度百科)在統計學中對變數進行線行回歸分析,採用最小二乘法進行參數估計時,R平方為回歸平方和與總離差平方和的比值,表示總離差平方和中可以由回歸平方和解釋的比例,這一比例越大越好,模型越精確,回歸效果越顯著。R平方介於0~1之間,越接近1,回歸擬合效果越好,一般認為超過0.8的模型擬合優度比較高。

由於R-square取值0~1,而且在最完美的時候是1,在經濟統計中,R-square

經常被用作衡量「貢獻度」或「解釋程度」,比如,用過去30的第三產業產值去回歸過去30年的GDP,我們就知道第三產業對於國民生產總值的貢獻了。

抽樣散點圖

用散點圖將兩個變數點在一個XY的坐標系中,是最直觀的反應相關關係的手段,但由於我們都號稱自己是做大數據的,數據特別多,所以只好做抽樣了,否則圖上就全是點,沒法看了。

秩相關

秩相關在很多情況下可能大家接觸的比較少,秩相關的從直觀來理解就是是兩個連續型變數的對於樣本分別進行排序,排序的結果可能差不多。秩分布相關其實是秩相關的一種特殊情況。

在大多數金融業務的場景下,我們想知道的其實就是秩相關。常見的依相關的例子並不出現在兩個連續型隨機變數之間,而通常是一個二元的變數和一個連續型的或其他類型的變數。

針對兩個連續型隨機變數,評估秩相關的主要手段是非參數假設檢驗。

參數檢驗和非參數檢驗

假設檢驗是數理統計中的一個非常重要的分支,它遵循這樣一個樸素的思維方法,即「提出假設->根據假設進行推導->獲得結論->接受或推翻假設」。拿大家都知道的死神小學生柯南來舉一個例子,他通常的解決一個案件的流程是這樣的:

1、在某個時間點,看到線索或聽到線索或靈感浮現,他大概知道了誰是兇手。這個過程叫做提出假設。

2、當我認為某人是兇手時,根據這個人的行為特徵或作案條件,他會知道,在某個時間地點,會留下一個什麼樣的痕迹。這就是提出假設檢驗的統計量。

3、到那個地方去找證據。這個就根據原假設計算相應的統計量。

4、證據找到了,那就說明假設是對了;否則便是假設錯了。這就是接受原假設或拒絕原假設,轉而接受備擇假設。

那非參數檢驗和參數檢驗的差別主要就是,參數檢驗就是我們對連續型隨機變數的分布是有一個假設的,如正態分布,指數分布等等,在進行推理和計算的過程中,我們是依據這個前提的,這樣做的好處是如果我們前提是對的,那麼我們再驗證假設的過程中會更準確,但前提如果本身就是錯的,那我們的結論可能會錯的更離譜;非參數檢驗就是那些沒有前提假設的那些假設前提,好處是我們的推理會更具有普適性,壞處就是可能在具體的情景下,會喪失一定的準確性。

特別需要注意的是,我們這裡介紹的是連續型隨機變數之間的秩相關.

依分布相關

在解釋分布之前,我們先要講兩個概念

分布函數(英文Cumulative DistributionFunction, 簡稱CDF),是概率統計中重要的函數,正是通過它,可用數學分析的方法來研究隨機變數。分布函數是隨機變數最重要的概率特徵,分布函數可以完整地描述隨機變數的統計規律,並且決定隨機變數的一切其他概率特徵。

統計學中,經驗分布函數是與樣本經驗測度相關的分布函數。該分布函數是在n個數據點中的每一個上都跳躍1 / n的階梯函數。其在測量變數的任何指定值處的值是小於或等於指定值的測量變數的觀測值的數。

(百度百科)經驗分布函數是對樣本中生成點的累積分布函數的估計。根據Glivenko-Cantelli定理,它以概率1收斂到該基礎分布。同時也存在一些結果來量化經驗分布函數與潛在的累積分布函數的收斂速度。

分布函數和經驗分布函數的差別就有點像某寶賣家版和買家實拍版的差別,分布函數是理論模型,經驗分布函數就是實際觀察出的模型。在討論模型表現的時候,大家都知道要看KS,但很少有知道為了計算KS,我們要首先計算經驗分布函數。

為了從分布的角度考察他們的相關性,通常的做法是將這兩個變數先做「標準化」(也叫「歸一化」)處理,原理也很簡單,就是對這兩變數分別減去自己的均值然後除以方差。在經過這樣的處理後,再通過計算KS來判定兩個變數依分布相關的程度。所以,我們這裡的相關,其實也是在歸一化後口徑下的依分布相關。

KS(Kolmogorov-Smirnov)統計量

Kolmogorov-Smirnov是比較一個頻率分布f(x)與理論分布g(x)或者兩個觀測值分布的檢驗方法。其原假設H0:兩個數據分布一致或者數據符合理論分布。D=max| f(x)-g(x)|,當實際觀測值D>D(n,α)則拒絕H0,否則則接受H0假設。

KS檢驗與t-檢驗之類的其他方法不同是KS檢驗不需要知道數據的分布情況,可以算是一種非參數檢驗方法。當然這樣方便的代價就是當檢驗的數據分布符合特定的分布事,KS檢驗的靈敏度沒有相應的檢驗來的高。在樣本量比較小的時候,KS檢驗最為非參數檢驗在分析兩組數據之間是否不同時相當常用。

還有一個與KS相類似的統計量是C統計量,C統計量其實就AUC的馬甲。這個我們再介紹AUC的時候會詳細介紹。

另外,為了更直觀的觀測兩個連續型變數的依分布相關,可以將兩個經驗分布函數繪在同一張圖上進行比較。

二元變數和連續型變數的關係

二元變數和連續型變數的相關關係是「謹慎的「使用數據驅動的風控模型中的核心技術;同時,這裡的連續型變數是泛指所有類型的變數,因為我們之前講到的所有二元型,連續型,序數型,無序列表型都可以通過分組,離散化,虛擬化等技術手段轉化為一個理論上的連續型變數。

為了支撐所謂的「大數據風控」其實需要我們需要將這個特殊的相關關係轉化為如下幾個範疇的內容:

從數學的角度評估一個二元變數和一個連續型變數

因為從風險管理的角度,我們最關心的就是用戶是否逾期,這個就是我們所說的「一個二元變數」。

這裡的「連續型「變數可能是一個內部評分,也有可能是一個外部評分,更有可能是某個可以量化的用戶特徵。我們要做的是用各種數學指標去評估這個變數對逾期是否顯著(siginificant),這裡的數學指標可能是一堆數據,一個表格,用來深度理解這個二元關係,當然也可能是將這個1-1的關係簡化成一個數字,用來進行比較和排序,如我們所熟知的KS,IV等。

通過各種方法生成或找到一個顯著的連續型變數

這個就是我們通常所說的狹義的「建模「了,這裡要做的主要是三件事

一是從海量的數據中先把這些可能顯著的特徵提取出來;

二是從那些海量的特徵中找到那些可能顯著的特徵;

三是將可能顯著的特徵或弱顯著特徵聚合成一個顯著特徵(評分)

從業務的角度評估一個二元變數和一個連續型變數的效用

當我們發現了一個從數學上對於逾期顯著的變數時,新的任務就是判斷這個變數是否適合放入我們的風險規則,以及如何將這個新的評分或者特徵放入我們已經存在的規則體系中。如果說上面的兩個任務更像是搞科研的話,那麼這個任務就是科技成果轉化,科研成果只有轉化成生產力才能真正為企業帶來收益,否則你說資本家銀行賬戶里也沒有閑錢啊。

這裡主要討論的是「從數學的角度評估一個二元變數和一個連續型變數」。在我們整個的流程中,可能會用到的評估方法如下:

IV

gini係數

相關係數

entropy

KS

AUC

混淆矩陣指標族

ROC曲線

Lorenz曲線

模型影響力指標族

IV

全稱是Information Value,中文意思是信息價值,或者信息量。反應的是單一特徵對目標變數的顯著性,但由於IV的數值本身沒有比較顯著的物理意義,因此IV的主要作用就是根據顯著性對特徵進行排序。

需要注意的是,由於在各種指標下每個特徵的排序可能不會完全一致,而且由於目前尚無嚴格的理論證明各種指標的最優適用範圍,因此使用多個指標對特徵進行排序,然後取並集,是我們在篩選特徵時常用的手段,避免漏掉一些特徵,影響模型表現。

IV的主要計算手段就是跟據特徵的不同取值分組,然後在每個分組中計運算元IV,然後將每個組中的子IV求和,每個分組中的子IV計算公式如下:

從直觀上去理解,每個子IV有如下特徵:

子IV總是大於等於零的;

當該分組中好壞的比例與總體好壞的比例相同時,則子IV為0;

當該分組中好壞的比例與總體好壞的比例偏離越大,則子IV越大;

那麼將所有子IV相加以後的特徵IV越大,也就意味著這個特徵的不同取值從總體來說對好壞的區分越大。

一般人對於IV的認知也就到此了,但是為了顯示出張老師還是肚子里還是有點墨水,也不總是搬運工和抖機靈,下面我們真對IV來做一些深入的探討。

IV的計算是取決於分組的方式的,不同的分組方式所計算出的IV是會有一些怎樣的差異?

IV是由各個分組的子IV求和來的,那麼IV必然就會有一些由求和代來的特性,那麼一個偏科分子和各門功課都還行的同學,誰會在計算IV的時候佔優勢?

接著,在如果我用子IV的平均數或者中位數來代替子IV求和,設計出IV改1和IV改2,那麼用這兩個新指標計算出來的IV,在特徵顯著性篩選方面會有什麼異同?或者說為什麼我們不用IV改1或IV改2來計算IV?

我們是否可以通過對那些有足夠支撐的子IV的排序,找到特別有區分能力的特徵的取值?這麼做是否有意義?

GINI

Gini係數我們更多的是從新聞里聽到評價一個國家收入差距的指標,但gini係數的演算法,其實也是一種用來判別特徵對於目標變數顯著程度的指標,只不過gini係數在一般變數評估及傳統的建模流程中不常用,但gini係數是一種叫做CART(classification and regression tree)的決策樹演算法,對於離散型目標變數進行分叉時的主要依據,而CART正是大名鼎鼎的GBDT所使用的決策樹。

其實像gini數據一樣,很多經典的統計指標和方法在早期都是被生物學家、人口學家、經濟學家所發明的,正是因為生物學、人口學、經濟學是那個時代的「大數據」啊。

赫希曼根據洛倫茨曲線提出的判斷分配平等程度的指標。設實際收入分配曲線和收入分配絕對平等曲線之間的面積為A,實際收入分配曲線右下方的面積為B。並以A除以(A+B)的商表示不平等程度。這個數值被稱為基尼係數或稱洛倫茨係數。如果A為零,基尼係數為零,表示收入分配完全平等;如果B為零則係數為1,收入分配絕對不平等。收入分配越是趨向平等,洛倫茨曲線的弧度越小,基尼係數也越小,反之,收入分配越是趨向不平等,洛倫茨曲線的弧度越大,那麼基尼係數也越大。另外,可以參看帕累托指數(是指對收入分布不均衡的程度的度量)。

這個數值計算方法,是我們在實踐中通常用的方法,類似於我們用經驗分布函數來代替分布函數,用以計算KS。

為了讓大家更好的理解基尼係數,我們來看幾個數字;

(百度百科)中國國家統計局基尼公布基尼係數2012年為0.474,2013年為0.473,2014年為0.469,2015年為0.462,2016年為0.465,根據西南財經大學教授甘犁主持,西南財經大學中國家庭金融調研中心發布統計報告稱2010年為0.61。

在現實中,日本是全球基尼係數最低的國家之一。據共同社2013年10月11日報道,日本厚生勞動省周五公布的2011年調查報告顯示,日本國內基尼係數為0.2708,創歷史新高。據報道,自1984年以來,日本的基尼係數持續上升,此次調查為0.2708,較2008年的數據增加0.0218,創歷史新高。厚勞省認為,收入較低的老年人及單身者家庭的增加導致差距擴大。據悉,基尼係數是國際上用來綜合考察一國或地區居民內部收入分配差異狀況的一個重要分析指標,基尼係數越接近1就表示收入分配差距越大。在日本,基尼係數的調查每三年左右實施一次,此次是第16次。日本的基尼係數一般在0.25左右,德國為0.3左右,而美國的基尼係數已經超過0.4的警戒線。

我不評價這些數字的準確性,只是做了一些實驗,告訴大家GINI係數分別是0.61,0.45,0.27的時候收入的差距到底是怎麼樣的?

我取100個人,一共讓他們賺5500快,那麼收入有如下三種分配方式:

1. 100個人的收入是從1一直到100,是不是感覺差距已經很明顯了,如果放在現實社會中,收入最高的1%已經是收入最低的1%的人收入的100倍了,但其實這100個人的gini係數只有0.33,而日本只有0.27;

2. 100個人中,最富有的一個人掙了2700,剩下的99個人一共掙了2800塊,平均一個人差不多28塊。這種情況下,這個整體的GINI係數是0.48

3. 100個人中,最富有的一個人掙了3500,剩下的99個人一種才掙了2700塊,平均一個人也就20塊。這種情況下,這個整體的GINI係數是0.63.

其實從上面的例子可以看到,決定GINI係數或收入差距的並不是最富有的人比最窮的人高了多少倍,即使在最後一個例子,也就不到200倍;決定GINI係數或是收入差距的是,最富有的人佔有的社會的總財富的比例,而在這三個例子裡面,分別是不到2%,50%和差不多64%。尤其是第三個例子,最富有的1%佔有了總收入的64%,這個還是挺誇張的,這已經不是2:8法則了吧。

Entropy(熵)

Entropy這個指標在我們做模型的時候用的的確不多,但在決策樹中,這個指標代表了一類非常重要的分類或叫做分叉思想,也就是通過分叉(根據某個指標的閾值將總體分成幾個子集)降低整體人群的混亂度。從ID3開始,C4.5以及之後的演化版本,用的都是它。

Entropy其實就是我們在中學化學課本中學過的熵,所有的化學反應,其實都是由純凈到混亂的過程,過程中釋放能量,整個系統的熵(混亂度)在增加。

我們這裡的熵其實準確的叫法就是信息熵,在我們提取信息的過程中,是信息熵在不斷的減小。舉個簡單的例子,當我們把50個白球和50個黑球混在起後,這個時候看起來是很亂的,對於這個簡單的系統,此時的熵是很大的;當我們手工挑10個白球出來,放成另一堆後,這時新的兩堆球的熵的和是小於之前的一大堆球的。

來看一下信息熵的計算公式

這個公式其實看起來跟我們之前講過的IV的公式是有點像的,下面我們就通過IV和信息熵的對比,來更好的理解一下信息熵:

IV是信息量,那麼其實信息量越大,包含的信息越多;而信息熵則相反,熵越小包含的信息量越大,這個應該是非常好理解的。

跟IV相比,entropy有一個非常重要的特性,就是可加性。也就是說,當我把人群分成兩部分以後新的系統的整體entropy就等於兩個子集的entropy之和,但IV卻不具有這個性質,根據IV的公式,新的系統IV是跟原來一樣的,那麼我們就沒有辦法通過IV的變化來判定使用這個指標後的效果。從這個意義上說,IV是一個先驗的總體指標,主要用來做橫向比較,也就是說IV能帶給我們的信息是,這個指標比那個指標有用;但entropy其實是一個閾值敏感的結果指,也就是說,entropy能告訴我,當我用了某個指標,且指定了分類閾值後,樣本的熵將會下降多少,用個學術名詞,這個就叫做「信息增益」。對於熟悉一般邏輯回歸建模流程和決策樹分叉流程的同學看到這裡應該就明白了,為什麼在這兩個場景下,我們會分別用IV和entropy了。

混淆矩陣指標族

今天我們要討論的話題是混淆矩陣指標族(confusion matrix),之所以叫指標族,是因為有很多指標都是由混淆矩陣計算而來的。

要注意的是,在這裡我們講一個二分類變數和連續型變數(模型平台)的相關關係,因此為了計算模型評分對於壞客戶(二分類)的混淆矩陣,我們要做的第一步就是找到一個閾值把這個連續的可以用來排序的指標轉化為一個二元指標(這個過程類似與我們之前講過的虛擬化);隨之而來的問題就是,這個閾值怎麼找?在幾乎所有的分析包中,這個閾值都是根據如下方法來確定的。

第一步,看一下在樣本中T和F的比例,這個是真實的壞人和好人的比例;

第二部,通過排序演算法從低分到高分(假設低分是壞人),找到那個使P/N=T/F的值,這個值有可能是一個數值或分位數;

第三步,用這個閾值,將評分轉化為P和N;

以上這個方法是非常標準的演算法,可以廣泛應用在各行各業,但是具體我們行業,我覺得用這個辦法確定閾值,然後計算相應指標,如召回率之類的,其實不是一個好的衡量模型用的指標,混淆矩陣指標族,多用在分析模型對整體策略的影響時使用,而不是用在比較模型的好壞。

介紹完基本概念,我們開始進入正題。

當我們樣本打好TF和PN的標記後,我們可以將整個樣本分為四種類型:

這四種類型有兩種類型我們的判斷是對的,一個可以賺錢,一個可以防止損失;另外兩種狀態我們判斷錯了,一個浪費本金,一個浪費營銷費用。

因此,從混淆矩陣衍生出來的指標一般分兩大類,正向指標和反向指標,正向指標就是把TP或FN之一或者之和放在分子,把總數、FP、TN等放在分母,總之正向指標越大,越說明模型好(由於模型的作用主要是將好壞分開,所以在很多統計學或機器學習的相關地方,我們一般稱呼為分類器,aka,Classifier);反向指標同理。

類似的指標還有:

False Negative Rate(假負率 , FNR) FNR = FN /(TP + FN);

True Positive Rate(真正率 , TPR)或靈敏度(sensitivity) TPR = TP /(TP + FN)

其實在真正的實際業務中,我們計算與混淆矩陣相關的指標,通常是個循環的過程,即,預先定義一個閾值,根據閾值進行成本核實,計算相應指標,然後調整閾值,重新進行成本核算。知道找到一個能最大滿足業務指標的閾值。

Lorenz Curve、KS、ROC Curve、AUC

即使是同一個模型,在我們計算混淆矩陣的相關指標時,如果閾值取的不同,結果也都是不一樣的。本篇要講的四個概念就是將混淆矩陣這個依賴於閾值的指標,轉化為了兩張圖和兩個全局指標。全局指標最大的好處就是可以脫離開應用場景,單獨使用,因此特別適合模型比較和評估;但反過來說,這些指標也特別容易將建模人員引入歧途,為了指標而建模,忘記了具體業務和應用場景。

KS(Kolmogorov-Smirnov)統計量

Kolmogorov-Smirnov是比較一個頻率分布f(x)與理論分布g(x)或者兩個觀測值分布的檢驗方法。其原假設H0:兩個數據分布一致或者數據符合理論分布。D=max| f(x)-g(x)|,當實際觀測值D>D(n,α)則拒絕H0,否則則接受H0假設。

KS檢驗與t-檢驗之類的其他方法不同是KS檢驗不需要知道數據的分布情況,可以算是一種非參數檢驗方法。

通常在計算KS的時候是這麼做的,在樣本量足夠的時候,我們會按照評分將樣本根據評分結果排序後,分為20等分,然後計算下面這個表格。

我們將A和C兩列畫在一張圖中,就形成了如下圖所示的Lorenz Curve。其中A是橫軸,C是縱軸。

其實B跟C在統計學中有個專有名詞,也就是我們前文講過的「經驗分布函數」,那個這兩個分布函數背後的隨機變數是什麼呢?

分別是Bad Accounts的評分和Good Accounts的評分,KS定義中的D=max| f(x)-g(x)|,f(x)和g(x)就是指的這兩個隨機變數的分布函數。

為了把這個過程更加形象化(如下兩張圖)。第二張圖的那個綠色的線就是兩個函數差的變化趨勢,以及差對應的最大值63%。我們這裡採用的是數值計算方法,因此的同樣的樣本和模型,在計算方法不同時,會有微小的不同。

有了Lorenz曲線,我們就知道,當用模型拒絕X%的人時,可以拒絕掉Y%的壞人,而這個正是我們上文講過的TPR,也就是說Lorenz Curve其實就是把TPR隨不用閾值的變化過程動態的展示給我們,而KS其實也可以理解成max|TPR-FNR|。需要注意的是,KS出現的位置,並不一定是我們應用模型時的閾值,也就是說KS高的模型,不是一定能帶給我們更好風險規則結果。反過來說,在我們選擇模型時,還是要根據我們具體的應用規則來選擇,不能機械的使用KS。

當我們把Lorenz Curve的橫軸換成B列(也就是FPR),那麼LorenZ Curve 就變成ROC Curve了(有時橫縱坐標會互換)。

AUC(Area under the Curveof ROC),顧名思義就是那個曲線下的面積了。但AUC是個面積,因此學過高數的同學都知道,要計算這種曲線的面積要用到積分,也就是我們用切片的方法去逼近這個積分,這種計算的運算複雜度是很高的。這個問題先放在這裡,我們講另外一個概念。

用SAS 做過Logistic Regression的同學一定對下圖不陌生:

右邊是一列統計量,可以先不理會,我們說左邊。如果說我們的樣本里有M個Bad,N個Good,那個我們會有M*N的比較對,在我們有了模型評分(風險越高評分越高)以後,就會有如下三種情況:

評分和M、N的結果一致,M中的記錄對用的評分高於N中記錄對應的評分(Concordant);

評分和M、N的結果不一致(Discordant);

M、N對應的評分相等(Tie)

這三種Pair加起來正好是100%的M*N,所以表格中的84,13,3.1就是這個意思(四捨五入過)。而右下角的C統計量就等於

% of Concordant+0.5 * % of Tie

計算C統計量的演算法複雜度是比計算AUC的複雜度要低,巧的是C統計量恰好就等於AUC,因此通常用計算C的方法來計算AUC。

關於為什麼C=AUC我們這裡就不詳細證明了,但是大家可以直觀理解一下,ROC曲線將這面積為1的區域分為了兩部分,在曲線下面的每一個點,其實就是對應了Concordant的情況和一半的Tie。

這種將數論(C統計量的研究領域)和解析幾何(ROC的研究領域)相結合解決數學問題的例子在數學史上比比皆是,遠到費馬大定理的證明,近到現在的區塊鏈中應用的加密演算法,深刻著影響著我們的生活。

這個評分到底該不該用?

不管是引入一個外部評分還企業內部研發了一個新的內部評分,基於這個新評分制定相應的策略、再到新策略的上線是一個非常漫長、複雜和涉及多部門協作的事情。但是做為一個一線的模型人員或者數據測試人員來說,後面這個過程的變數很大的、時間和人力成本都很高,不可能每評估一個模型都把全流程走一遍;從另一個方面,如前面一直強調的,那些數學指標更多的是參考價值,畢竟數學和業務中間還是有一段距離。那麼,是否有什麼簡易的方法能夠相對合理,又比較快速的評估模型的效能是非常重要的。我下面會分別介紹一個速算評估法和一個完整全面的評估流程。前一個適合新業務和快速評估,後者更適合一個成熟的公司,對於一些相對重大調整的評估流程。

速算評估法

速算評估法其實就是參照如下這個公式:

這個公式的核心原理是用降低的壞賬去抵消獲客成本的提升,然後用一個經驗值來估計模型的生命周期,從而推斷出模型的潛在價值。裡面一堆字母大家可能看的比較暈,下面來逐一解釋。另外呢,這個公式完全是作者原創總結的,但不排除由於孤陋寡聞別人寫了,作者沒看到過,歡迎大家討論。同時這個公式中涉及的參數,每一個風險部門的同學至少應該對於本公司的相應數據應該是有所了解的。

CPA(Cost Per Acquisition)

這個是就是單一申請人的獲客成本。e.g. 現在大部分的線上貸款平台的獲客成本都是按照CPA來計費的,差不多從幾塊到十幾塊都有,但是這個CPA其實在大多數情況下指的是註冊,而從註冊到完成申請大概的漏斗率是70-80%(一般情況,個體差別很大),因此這個公式里的CPA其實是:註冊CPA/申請完成漏斗率。

AR(Approve Rate)& AR0

AR也就是目前的審批通過率,而AR0是一個新的通過率,這個通過率是我們在應用了新模型後的通過率,大家不用擔心這個新的通過率應該如果確定,因為根據公式,我們要把在一個小範圍內所有通過率的採樣點都要算一下。

ARl & ARu (l :lower bound,u:upper bound)

這個就是上面說的通過率的範圍,根據企業的經營策略總有一個可以容忍的通過率的上下限。上面說到的AR0,其實就是要在這兩個數之間,用一定的步長來遍歷所有可能的通過率。

這個就是在AR0通過率下的TN/(TN+FN)和在AR通過率下TN/(TN+FN)的差,這數可正可負。

此處需要注意的是,這裡沒有考慮模型中Y的具體定義,如果Y是一個比較深度的逾期則問題不大,如果說Y是早期逾期(early delinquent),則要稍微考慮一下用roll rate做調整,如果不做調整的話,可能會under-estimate模型的正面影響。

AC(Average Credit)

平均放款額度。平均的放款額度*逾期率的差,也就在新模型和閾值體系下,能夠減少的損失。

CD(Cost of Data) & HR (Hit rate)

CD就是購買外部數據的費用,或由於模型中額外引入了需要付費的數據而產生的成本。這個成本是在審批時產生的,因此要考慮通過率的放大作用,如果是純內部數據或未引進新的數據,此項費用為0;HR是在我們引入外部模型時才會生效,因為外部的模型是有查得率問題的,當查得率過低時,會影響我們工作的產出。

MA (Monthly Applicants) & LPW (Length of Performance Window)

MA是用來估計我們模型每個月能夠生效的人群,而LPW純粹是根據我的經驗,來根據模型Y值的表現窗來確定一個模型能夠有效,穩定的時間,e.g. Y=1 是6個月內曾經60DPD or worse,那麼這個模型比較有效實際用時間也就6個月左右。一般最小1個月,最長12個月。對於外部的評分,經驗值是大廠6-12,小廠3-6。

在評估一個外部評分,或比較若干個模型的時候,個人感覺用這個速算公式的計算公式的結果來比較,會比單純的比較模型數學指標,要更適合「風控審批」這個業務場景。而且這個計算過程看似複雜,其實是非常適合用計算機代碼來實現的,方便的時候,我會適時公布這個計算這個公式的python代碼。

綜合評估流程

一個相對來說完整流程一般來說包括如下三個大的模塊:

預評估;

測試評估;

運營監控

預評估:

預評估階段的主要任務是通過歷史數據的分析、數據測試(如果引入外部測試數據)對新的模型(數據欄位)、策略進行預先的評估,這個階段完全是由分析師在線下完成的,不涉及到任何的生產環境。這個模塊主要按照順訊完成以下幾項工作。

對數據進行測試

現在所有的金融機構在測試外部機構的數據測試的時候都會做外部測試但是大家做外部測試的方法卻都不太一樣,個人以為做數據測試時主要要考察如下兩方面:

真實性測試。

也就是說我們要準備一些樣本,我們是能夠完全了解真實情況的人(一般是內部員工,當然這個要做好隱私保護和溝通),因此這個樣本不會太多,但是這個測試能給我們一個對數據直觀的了解;

回溯測試。做回溯測試的主要目的是要拿有足夠還款表現的賬戶作為測試樣本,要求數據提供方將數據回溯到樣本真實的申請時間去匹配數據。回溯的重要性我就不過多強調了,很多公司提供的評分或黑名單產品由於在測試時沒有回溯,或僅僅是號稱回溯卻沒有回溯,在測試時可以得到很高的KS,但是將模型或評分應用到真實的業務中時卻差強人意。如果說是一個新的內部評分,我們也一定要將這個新的評分,放到一個有足夠還款表現的樣本上,用當時的數據進行打分,這個過程就叫做Backward。

我們為什麼一定要回溯。

不管是做策略分析,還是做評分模型,都有一個假設和一個前提。

一個假設:用戶行為在時間維度上是保持相對穩定的。這個假設保證了用歷史數據做分析得到的結論在我們應用策略和模型時還能適用。

一個前提:在應用策略和模型時,都是在用截止到應用時間點能夠獲得的所有信息。在這個時候是無法得知關於未來任何確定的信息的。所以我們需要研究的是「歷史加現狀和未來的關係」。

從上面的假設和前提,就知道在做分析、數據測試時,就是要保證這個前提。通常我們測試的時候都會取那些已知還款表現的樣本,比如,這些樣本都是在2017年1月通過測試的。如果在測試和分析的時候,我們不把2017年2月之後的數據剔除掉,那麼我們通過分析的到的結論其實是「未來和未來關係」,而不是符合應用場景的「歷史加現狀和未來的關係」。

通常呢,我們把觀察用戶表現的那個時間段叫做表現窗,把在審批時用來決定審批結果獲取數據的那個時間窗口叫做觀察窗,因此有一個推論就是表現窗和觀察窗是絕對不能重合的,如果說再做分析提取數據和做測試數據時,不做回溯的話,其實是用表現窗的數據去分析表現窗的數據,這樣得到的結論是有很大偏差的。

評估數據效能(如果涉及到新的數據欄位或評分)

在這個步驟中,我們根據回溯測試的數據,對數據欄位或者評分進行評估。如果不是評分,而是一個數據欄位,我們完全可以把這個數據欄位看做一個自由度比較低的評分。然後我們就可以直接應用我之前的速算評估公式來進行判斷了。

通過數據效能評估,我們可以大概知道這個數據或是模型,能否滿足我們的基本需求,是否值得我們花精力去開發相應的規則策略及產生額外的數據購買成本。

模型與策略開發

如果數據欄位的區分能力已經好到直接用到規則中,那麼這個時候可以直接通過數據表現來確定閾值,將該欄位放入規則中。

如果數據欄位的區分能力不足以直接進入規則,那麼就需要開發一個新的模型,將這個欄位引入已有的A卡或者B卡中。然後再講新的模型引入規則。

對新策略進行盈利分析。根據新的欄位或模型研發出的審核策略,除了在開發流程中要考慮的通過率和逾期率的影響以外,還應該全面的評估新策略對於審核成本,獲客成本,客戶體驗,對壞賬的影響等等,考慮的因素基本就可以參照我的速算公式,但是在進行財務預測的時候要更加的嚴謹,各項參數還要考慮到未來的變化。

以上就是預評估階段主要要做的事情,把這個流程完整的做完是非常複雜的,而且差不多每一個小步驟都可以展開成一個很大的話題。

測試評估:

經過了一個完整的預評估流程,說明經過歷史數據的評估,已經證明將要上線的數據、模型、策略是有價值的。同時之前的預評估都是由數據部門或風險部門的分析師完成的,還未涉及到系統的開發對接。測試評估主要分兩個階段:

模擬上線階段

通過系統對接、開發、測試(此處刪去開發和測試的辛酸淚五萬餘字。。。。。)我們的新模型和策略已經在系統中等待調用了。但是,從謹慎的角度,在這裡並不能直接將相關策略應用在真實的用戶上,很多同學都知道要做冠軍挑戰者測試。但其實,從測試完整性和謹慎的角度,模擬上線測試是要先進行的。

模擬線上測試其實是將新策略在真實的業務環境中運行一段時間,記錄相關結果,但運行結果不影響真實的業務運行。

冠軍挑戰者測試

通過了模擬上線測試下一步,就要開始將一小部分真實的用戶切換到新的策略中了,將現有的規則(冠軍)和新規則(挑戰者)進行比較;同時,冠軍挑戰者測試並不是一次性的,而是一個動態的過程,應該根據測試的結果,不斷調整冠軍和挑戰者的用戶比例,根據產品的用戶規模,這個動態的過程可快可慢,但總的方向是不斷擴大挑戰者測試的用戶規模。

通過了冠軍挑戰者測試,終於可以將現有策略淘汰了,但是不是我們數據評估的過程就結束了,下面就要開始第三個模塊了。

運營監控:

在新的模型、策略規則完全上線後,並不是可以當甩手掌柜了,運營監控是一個長期且沒有止境的過程,直到這個新模型「退休」。

運營監控主要要做的是如下幾方面的工作:

第三方數據源的穩定性。包括查得率,欄位數據分布等等。

模型和策略的前端穩定性。包括模型和測試輸入的數據欄位(內部和外部)數值值的分布。

模型和策略的後端穩定性。包括模型表現各項數據指標的穩定性;各個規則的漏斗率等。

這裡給大家舉個例子

這個是某指標連續14天的變化趨勢,往返上升或下降,通常在第14個點會觸發我們的監控規則。

當如上三個方面的穩定性發生明顯偏差時,就需要採取相應對策了,對數據源、策略、模型進行調整。

請大家別怪我啰嗦,前面講的所有知識點,在模型的過程都會不斷的調用。

本文作者:ZROBOT技術總監 @張SOMEBODY


推薦閱讀:

從0開始, Data Scientist 之路 Day 3
框架為數據科學家帶來哪些編程語言所不能帶來的優勢
健身應用暴露了美軍秘密基位置
2019年Q1票房將達到283.1億 未來市場或屬於它們3類
「數據摺疊」:人工智慧背後的人工

TAG:數據 | 數據分析師 |