分析(CCA)在金融風(fēng)控中的應(yīng)用:從原理到實(shí)踐)
1. 項(xiàng)目概述從“清分”到“關(guān)聯(lián)”的數(shù)學(xué)橋梁最近在整理一個金融數(shù)據(jù)分析項(xiàng)目時遇到了一個典型問題我們手頭有兩組數(shù)據(jù)一組是客戶的交易行為數(shù)據(jù)比如交易頻率、單筆金額、渠道偏好另一組是他們的風(fēng)險評分?jǐn)?shù)據(jù)比如信用評分、欺詐風(fēng)險等級、合規(guī)風(fēng)險值。業(yè)務(wù)方很直接地問“這兩組指標(biāo)之間到底有沒有關(guān)系如果有具體是哪些行為最能解釋風(fēng)險的高低” 這聽起來像是個相關(guān)性分析問題但普通的皮爾遜相關(guān)系數(shù)只能兩兩配對面對兩組內(nèi)部各自相關(guān)的變量群時就束手無策了。這正是典型相關(guān)分析大顯身手的地方。典型相關(guān)分析英文是Canonical Correlation Analysis業(yè)內(nèi)常簡稱CCA。它不是什么新鮮玩意兒早在1936年就被提出但在數(shù)據(jù)驅(qū)動的今天尤其在金融風(fēng)控、生物信息、心理學(xué)研究等領(lǐng)域其價值被重新發(fā)現(xiàn)。簡單來說它的核心任務(wù)就是探尋兩個多維變量集合之間的最大關(guān)聯(lián)。它不是簡單粗暴地計(jì)算所有變量對之間的相關(guān)系數(shù)而是像一位高明的“紅娘”分別在兩個變量集合中尋找最具代表性的“組合”即典型變量并讓這兩對組合之間的相關(guān)性達(dá)到最大。這個最大的相關(guān)系數(shù)就是第一對典型相關(guān)系數(shù)。然后它再繼續(xù)尋找第二對、第三對……在剩余的信息中尋找最大關(guān)聯(lián)直到提取出所有有意義的關(guān)聯(lián)維度。對于“清分”這個場景——在金融領(lǐng)域常指交易清算與分類——CCA能幫助我們回答哪些交易行為模式的組合與哪些風(fēng)險特征的組合存在著最強(qiáng)的共變關(guān)系這遠(yuǎn)比看幾十個散點(diǎn)圖要高效和深刻得多。接下來我就結(jié)合這次的項(xiàng)目實(shí)踐拆解一下CCA從原理到落地再到結(jié)果解讀的全過程分享一些實(shí)操中踩過的坑和總結(jié)的技巧。2. 核心思路與模型原理拆解2.1 問題轉(zhuǎn)化從“多對多”到“一對對”面對兩組變量假設(shè)第一組有 p 個變量 (X1, X2, ..., Xp)第二組有 q 個變量 (Y1, Y2, ..., Yq)。如果我們想研究它們的關(guān)系最樸素的想法是計(jì)算 p*q 個相關(guān)系數(shù)。但這會帶來兩個問題一是信息碎片化難以形成整體認(rèn)知二是忽略組內(nèi)變量的共線性可能誤導(dǎo)結(jié)論。CCA的聰明之處在于進(jìn)行了問題轉(zhuǎn)化。它不再直接研究原始變量而是去研究它們的線性組合。我們?yōu)榈谝唤M變量尋找一個權(quán)重向量 a (a1, a2, ..., ap)得到第一個典型變量 U a1X1 a2X2 ... apXp。同樣為第二組變量尋找權(quán)重向量 b得到 V b1Y1 b2Y2 ... bqYq。CCA的目標(biāo)就是找到這樣一對權(quán)重向量 a 和 b使得 U 和 V 的相關(guān)系數(shù) ρ corr(U, V) 達(dá)到最大。這個最大的 ρ 就是第一典型相關(guān)系數(shù)。然后在 U 和 V 不相關(guān)的約束下即尋找新的、與之前提取的信息不相關(guān)的關(guān)聯(lián)模式繼續(xù)尋找第二對權(quán)重向量得到第二典型變量對和第二典型相關(guān)系數(shù)以此類推。理論上最多可以提取 min(p, q) 對典型變量。注意這里的不相關(guān)指的是不同序號的典型變量之間例如第一對典型變量 (U1, V1) 與第二對典型變量 (U2, V2) 之間是互不相關(guān)的。但 U1 和 V1 自身是高度相關(guān)的。2.2 數(shù)學(xué)求解一個特征值分解問題那么如何找到這對神奇的權(quán)重向量 a 和 b 呢這歸結(jié)為一個條件極值問題。通過拉格朗日乘數(shù)法可以推導(dǎo)出求解第一對典型變量和典型相關(guān)系數(shù)等價于求解一個廣義特征值問題。具體而言我們需要計(jì)算兩組變量內(nèi)部的協(xié)方差矩陣 ΣXX 和 ΣYY以及兩組變量之間的互協(xié)方差矩陣 ΣXY 和 ΣYXΣYX 是 ΣXY 的轉(zhuǎn)置。典型相關(guān)系數(shù)的平方ρ2就是矩陣 M ΣXX?1 * ΣXY * ΣYY?1 * ΣYX 的特征值。而對應(yīng)的特征向量經(jīng)過一定的標(biāo)準(zhǔn)化后就給出了我們需要的權(quán)重向量 a。同理權(quán)重向量 b 也可以通過類似方式得到或者通過關(guān)系式 b ∝ ΣYY?1 * ΣYX * a 計(jì)算。每一個特征值對應(yīng)一對典型變量特征值從大到小排列對應(yīng)的典型相關(guān)系數(shù)也依次遞減。2.3 與主成分分析、多元回歸的異同理解CCA可以把它放在常見的多變量分析方法家族中對比與主成分分析PCA對比PCA是“單打獨(dú)斗”只針對一組變量尋找能最大程度解釋該組內(nèi)部方差的新坐標(biāo)軸主成分。而CCA是“成雙成對”同時處理兩組變量尋找能最大程度解釋兩組之間協(xié)方差的新坐標(biāo)軸典型變量。PCA關(guān)注“內(nèi)部差異”CCA關(guān)注“外部關(guān)聯(lián)”。與多元回歸對比多元回歸有明確的因變量和自變量之分目標(biāo)是用一個變量組自變量去預(yù)測另一個變量因變量。而CCA是“對稱”的沒有因變量和自變量之分兩組變量地位平等目標(biāo)是揭示它們之間的相互依賴結(jié)構(gòu)??梢哉fCCA揭示的是更底層的、雙向的關(guān)聯(lián)模式。在我們的清分建模場景中交易行為X組和風(fēng)險評分Y組沒有明確的預(yù)測與被預(yù)測關(guān)系業(yè)務(wù)更想了解它們之間內(nèi)在的、多維的關(guān)聯(lián)結(jié)構(gòu)因此CCA比回歸更合適。3. 實(shí)操前的核心準(zhǔn)備與數(shù)據(jù)預(yù)處理3.1 數(shù)據(jù)要求與適用性判斷不是所有數(shù)據(jù)都適合扔進(jìn)CCA模型。在動手前必須檢查以下幾點(diǎn)變量類型CCA本質(zhì)是處理連續(xù)型變量或可視為連續(xù)的數(shù)值型變量。對于分類變量尤其是無序多分類需要先進(jìn)行適當(dāng)?shù)木幋a如獨(dú)熱編碼或考慮其他方法如多重對應(yīng)分析結(jié)合CCA。在我們的項(xiàng)目中交易渠道是分類變量我們將其轉(zhuǎn)化為多個二值虛擬變量后納入分析。樣本量要求CCA對樣本量比較敏感。一個經(jīng)驗(yàn)法則是樣本數(shù) n 至少是 (pq) 的10倍以上才能保證結(jié)果的穩(wěn)定性。如果變量多而樣本少結(jié)果極易過擬合提取的典型相關(guān)系數(shù)可能在統(tǒng)計(jì)上不顯著。我們的項(xiàng)目有約10萬個客戶樣本變量總數(shù)約20個滿足要求。線性關(guān)系假設(shè)CCA尋找的是線性組合間的最大相關(guān)。如果兩組變量間的本質(zhì)關(guān)系是非線性的如二次、指數(shù)CCA可能無法捕捉。在分析前建議通過散點(diǎn)圖矩陣觀察主要變量對之間的關(guān)系形態(tài)。多元正態(tài)性嚴(yán)格的CCA假設(shè)數(shù)據(jù)來自多元正態(tài)分布。在實(shí)際應(yīng)用中只要沒有嚴(yán)重的偏態(tài)或異常值模型通常具有穩(wěn)健性。但顯著性檢驗(yàn)如Bartlett的卡方檢驗(yàn)依賴于這個假設(shè)。3.2 關(guān)鍵預(yù)處理步驟詳解數(shù)據(jù)質(zhì)量直接決定CCA結(jié)果的可靠性。以下是幾個必須執(zhí)行的步驟中心化與標(biāo)準(zhǔn)化這是至關(guān)重要的一步。由于CCA的權(quán)重向量 a 和 b 對變量的尺度非常敏感如果變量單位差異大如交易金額以“元”計(jì)交易頻率是“次/月”量級大的變量會“主導(dǎo)”典型變量掩蓋其他變量的貢獻(xiàn)。通常的做法是對每一列變量進(jìn)行標(biāo)準(zhǔn)化即減去均值后除以標(biāo)準(zhǔn)差使其均值為0標(biāo)準(zhǔn)差為1。這樣處理后權(quán)重系數(shù)的大小才具有可比性可以直接反映該變量在構(gòu)成典型變量時的重要性。缺失值處理CCA通常要求完整數(shù)據(jù)。對于缺失值需要根據(jù)情況處理刪除若缺失很少且完全隨機(jī)可直接刪除缺失樣本。插補(bǔ)常用方法有均值/中位數(shù)插補(bǔ)、回歸插補(bǔ)、多重插補(bǔ)等。在我們的金融數(shù)據(jù)中部分風(fēng)險評分存在少量缺失我們采用了基于其他行為變量的K近鄰插補(bǔ)法。注意如果缺失機(jī)制復(fù)雜非隨機(jī)缺失需要謹(jǐn)慎處理因?yàn)榭赡芤肫?。異常值檢測與處理極端異常值會極大地扭曲協(xié)方差矩陣的計(jì)算從而嚴(yán)重影響權(quán)重向量的估計(jì)。建議先通過箱線圖、馬氏距離等方法識別多元異常值。對于明確的錄入錯誤應(yīng)修正或刪除對于真實(shí)的極端值需要業(yè)務(wù)判斷有時可以縮尾處理Winsorization有時則需要保留并分析其特殊性。多重共線性檢查雖然CCA本身可以處理組內(nèi)變量的相關(guān)性但嚴(yán)重的多重共線性如一個變量幾乎是其他變量的線性組合會導(dǎo)致協(xié)方差矩陣 ΣXX 或 ΣYY 接近奇異不可逆使得求逆計(jì)算不穩(wěn)定。在標(biāo)準(zhǔn)化后可以計(jì)算每組變量的方差膨脹因子VIF或條件數(shù)Condition Number進(jìn)行診斷。如果存在嚴(yán)重共線性考慮剔除部分變量或使用正則化版本的CCA如稀疏典型相關(guān)分析。4. 模型實(shí)現(xiàn)與結(jié)果解讀全流程4.1 工具選擇與代碼實(shí)現(xiàn)實(shí)現(xiàn)CCA的工具有很多。對于統(tǒng)計(jì)分析R語言是絕佳選擇其CCA包或candisc包功能強(qiáng)大。Python中scikit-learn的CrossDecomposition模塊提供了CCA類非常方便。此外statsmodels也有相關(guān)實(shí)現(xiàn)。對于商業(yè)軟件SPSS、SAS也都有成熟的CCA模塊。這里以Python的sklearn.cross_decomposition.CCA為例展示核心代碼片段import numpy as np import pandas as pd from sklearn.cross_decomposition import CCA from sklearn.preprocessing import StandardScaler # 1. 讀取數(shù)據(jù)假設(shè)DataFrame df 已準(zhǔn)備好 # X_vars [交易行為變量列表] # Y_vars [風(fēng)險評分變量列表] X df[X_vars].values Y df[Y_vars].values # 2. 標(biāo)準(zhǔn)化強(qiáng)烈推薦 scaler_X StandardScaler() scaler_Y StandardScaler() X_scaled scaler_X.fit_transform(X) Y_scaled scaler_Y.fit_transform(Y) # 3. 初始化CCA模型這里指定提取3對典型變量 cca CCA(n_components3) cca.fit(X_scaled, Y_scaled) # 4. 將原始數(shù)據(jù)轉(zhuǎn)換到典型變量空間 X_c, Y_c cca.transform(X_scaled, Y_scaled) # 5. 獲取權(quán)重系數(shù)結(jié)構(gòu)系數(shù)/標(biāo)準(zhǔn)化典型系數(shù) # 注意sklearn返回的權(quán)重是基于標(biāo)準(zhǔn)化后數(shù)據(jù)的 x_weights cca.x_weights_ # 對應(yīng)于權(quán)重向量 a y_weights cca.y_weights_ # 對應(yīng)于權(quán)重向量 b # 6. 計(jì)算典型相關(guān)系數(shù) # 可以通過轉(zhuǎn)換后典型變量的相關(guān)系數(shù)得到 for i in range(3): corr np.corrcoef(X_c[:, i], Y_c[:, i])[0, 1] print(f典型相關(guān)系數(shù) {i1}: {corr:.4f})4.2 結(jié)果解讀不止看一個系數(shù)運(yùn)行模型后會得到一系列輸出。解讀需要層層深入第一步看典型相關(guān)系數(shù)及其顯著性。這是門檻。通常只有前幾對典型相關(guān)系數(shù)是統(tǒng)計(jì)顯著的。在R中可以用cancor函數(shù)配合p.asym進(jìn)行顯著性檢驗(yàn)。在Python中需要自己實(shí)現(xiàn)或借助其他包如pingouin進(jìn)行類似Bartlett的近似卡方檢驗(yàn)。如果第一典型相關(guān)系數(shù)就不顯著說明兩組變量整體上可能沒有顯著的線性關(guān)聯(lián)分析應(yīng)就此打住或重新審視問題。第二步看典型權(quán)重典型系數(shù)。這就是權(quán)重向量 a 和 b 的值。但直接解釋它們有陷阱當(dāng)組內(nèi)變量間存在相關(guān)性時典型權(quán)重會不穩(wěn)定一個變量的權(quán)重可能因?yàn)槠渌嚓P(guān)變量的存在而被壓低或抬高導(dǎo)致解釋困難。因此更常用的是下面兩種系數(shù)。第三步看結(jié)構(gòu)系數(shù)也稱典型載荷。這是每個原始變量與它所在組的典型變量之間的相關(guān)系數(shù)。它反映了原始變量對典型變量的貢獻(xiàn)程度更穩(wěn)定、更容易解釋。例如如果第一典型變量 U1 與“交易頻率”的結(jié)構(gòu)系數(shù)是0.92與“單筆金額”是0.15那么顯然 U1 主要代表了“交易頻率”這個維度。同樣看 V1 與各個風(fēng)險評分變量的結(jié)構(gòu)系數(shù)就能知道 U1 主要與哪些風(fēng)險維度關(guān)聯(lián)。第四步看交叉載荷。這是每個原始變量與另一組的典型變量之間的相關(guān)系數(shù)。這提供了更直接的關(guān)聯(lián)洞察。例如“交易頻率”與風(fēng)險組的典型變量 V1 的交叉載荷很高那就直接說明了“交易頻率”與 V1 所代表的風(fēng)險組合密切相關(guān)。第五步看冗余度分析。這是評估模型實(shí)用價值的關(guān)鍵指標(biāo)。它回答一個問題一組變量的典型變量能解釋另一組變量總方差的比例是多少通常計(jì)算兩個冗余度X組被Y組解釋的冗余度Y組的典型變量能解釋X組原始變量總方差的比例。Y組被X組解釋的冗余度X組的典型變量能解釋Y組原始變量總方差的比例。 即使典型相關(guān)系數(shù)很高如果冗余度很低比如10%說明雖然找到的關(guān)聯(lián)很強(qiáng)但這個關(guān)聯(lián)模式只攜帶了原始變量中很少的信息實(shí)際意義可能有限。4.3 可視化呈現(xiàn)一圖勝千言CCA結(jié)果尤其需要可視化典型相關(guān)系數(shù)碎石圖繪制各對典型相關(guān)系數(shù)的條形圖幫助決定保留多少對有效的典型變量通常選取“肘部”之前的部分。典型變量散點(diǎn)圖繪制第一對或前兩對典型變量 (U1, V1) 的散點(diǎn)圖。如果相關(guān)性強(qiáng)點(diǎn)會沿著一條對角線分布??梢越o樣本點(diǎn)著色如按風(fēng)險等級觀察不同類別在關(guān)聯(lián)空間中的分布。結(jié)構(gòu)系數(shù)/載荷圖在二維平面上以第一和第二典型變量為坐標(biāo)軸將每個原始變量作為向量畫出來。向量的方向和長度表示了該變量與這兩個典型維度的關(guān)系。這是解讀變量貢獻(xiàn)最直觀的方式。典型冗余圖展示各對典型變量所解釋的方差比例和冗余度直觀展示模型的解釋能力。5. 在清分建模中的具體應(yīng)用與案例拆解回到我們的金融清分場景。假設(shè)X組交易行為有5個標(biāo)準(zhǔn)化后的變量freq交易頻率、avg_amt平均交易金額、night_ratio夜間交易比例、channel_A渠道A使用虛擬變量、channel_B渠道B使用虛擬變量。Y組風(fēng)險評分有3個標(biāo)準(zhǔn)化變量credit_score信用評分越高越好、fraud_risk欺詐風(fēng)險越高越差、compliance_risk合規(guī)風(fēng)險越高越差。經(jīng)過CCA分析我們得到第一對典型變量高度顯著ρ10.65 p0.001。結(jié)構(gòu)系數(shù)解讀對于U1行為側(cè)典型變量freq的結(jié)構(gòu)系數(shù)為0.95night_ratio為0.87avg_amt為-0.10渠道變量系數(shù)均很小。這說明U1主要捕捉了“高頻”且“夜間交易活躍”的行為模式與交易金額關(guān)系不大。對于V1風(fēng)險側(cè)典型變量fraud_risk的結(jié)構(gòu)系數(shù)為0.90compliance_risk為0.75credit_score為-0.70。這說明V1主要代表了“高欺詐與合規(guī)風(fēng)險伴隨低信用評分”的綜合風(fēng)險畫像。結(jié)論關(guān)聯(lián)第一典型相關(guān)系數(shù)0.65表明“高頻且夜間交易活躍”的行為模式與“高欺詐/合規(guī)風(fēng)險及低信用評分”的風(fēng)險狀態(tài)之間存在較強(qiáng)的正向關(guān)聯(lián)。這為風(fēng)控提供了直接線索監(jiān)控夜間高頻交易行為可以作為識別潛在欺詐和合規(guī)問題的一個有效信號。冗余度分析計(jì)算發(fā)現(xiàn)V1風(fēng)險側(cè)解釋了X組行為總方差的18%而U1行為側(cè)解釋了Y組風(fēng)險總方差的22%。雖然相關(guān)系數(shù)不錯但冗余度表明這種關(guān)聯(lián)模式只覆蓋了各自變量集一部分的信息提示我們還有其他的行為-風(fēng)險關(guān)聯(lián)模式可能由后續(xù)的典型變量揭示或獨(dú)立的風(fēng)險因素存在。6. 常見陷阱、問題排查與進(jìn)階技巧6.1 實(shí)操中踩過的坑忽略標(biāo)準(zhǔn)化導(dǎo)致誤讀早期未標(biāo)準(zhǔn)化發(fā)現(xiàn)avg_amt金額單位是元的權(quán)重巨大幾乎壟斷了典型變量而freq次數(shù)的權(quán)重微乎其微。標(biāo)準(zhǔn)化后兩者貢獻(xiàn)才得到公平體現(xiàn)。過度解釋不顯著的典型變量軟件總會計(jì)算出 min(p,q) 對典型變量但后面幾對的相關(guān)系數(shù)可能很小且統(tǒng)計(jì)不顯著。曾有一次我興奮地解讀第三對變量后來檢驗(yàn)發(fā)現(xiàn)p值大于0.1純屬噪聲?;煜龣?quán)重系數(shù)與結(jié)構(gòu)系數(shù)試圖用權(quán)重系數(shù)的大小來給變量重要性排序結(jié)果發(fā)現(xiàn)與業(yè)務(wù)直覺嚴(yán)重不符。后來改用結(jié)構(gòu)系數(shù)解釋起來順暢多了。權(quán)重系數(shù)受共線性影響太大。樣本量不足的幻覺在一次小規(guī)模試點(diǎn)分析n150, pq15中得到了看似很高的典型相關(guān)系數(shù)0.8以上但用置換檢驗(yàn)Permutation Test一驗(yàn)證p值很高結(jié)果并不穩(wěn)定。對于小樣本一定要進(jìn)行嚴(yán)格的顯著性檢驗(yàn)不要輕信相關(guān)系數(shù)值。6.2 結(jié)果不顯著或太弱怎么辦如果CCA結(jié)果不理想典型相關(guān)系數(shù)低或不顯著可以從以下方面排查數(shù)據(jù)層面檢查預(yù)處理是否到位異常值是否扭曲了關(guān)系變量間是否存在強(qiáng)烈的非線性關(guān)系可以嘗試對變量進(jìn)行適當(dāng)?shù)淖儞Q如對數(shù)變換。模型層面也許線性關(guān)聯(lián)的假設(shè)不成立。可以考慮核典型相關(guān)分析Kernel CCA來捕捉非線性關(guān)聯(lián)。問題層面反思業(yè)務(wù)問題??赡軆山M變量本質(zhì)上就是相對獨(dú)立的這本身也是一個有價值的發(fā)現(xiàn)。6.3 進(jìn)階方向正則化與擴(kuò)展稀疏典型相關(guān)分析當(dāng)變量非常多p或q很大時普通的CCA結(jié)果可能難以解釋因?yàn)槊總€典型變量都由幾乎所有原始變量線性構(gòu)成。SCCA通過引入L1正則化Lasso使得權(quán)重向量變得稀疏很多系數(shù)為0從而自動進(jìn)行變量選擇產(chǎn)生更簡潔、可解釋的典型變量。這在基因組學(xué)等高維數(shù)據(jù)中應(yīng)用廣泛。多重典型相關(guān)分析用于分析兩組以上變量集合之間的關(guān)系。監(jiān)督式CCA在構(gòu)建典型變量時引入樣本標(biāo)簽信息使得找到的關(guān)聯(lián)方向不僅最大化組間相關(guān)還能更好地區(qū)分不同類別常用于分類問題的特征融合。6.4 一份快速自查清單在交付CCA分析報(bào)告前對照下表快速核查檢查項(xiàng)合格標(biāo)準(zhǔn)工具/方法樣本量n 10*(pq)簡單計(jì)算標(biāo)準(zhǔn)化已對所有變量執(zhí)行StandardScaler缺失值已處理且機(jī)制已評估缺失模式分析異常值已識別并妥善處理箱線圖、馬氏距離多重共線性組內(nèi)變量無嚴(yán)格線性依賴VIF 10 條件數(shù)檢查典型相關(guān)系數(shù)前k個顯著 (p0.05)Bartlett檢驗(yàn)、置換檢驗(yàn)主要解讀依據(jù)結(jié)構(gòu)系數(shù)與交叉載荷cca.x_loadings_,cca.y_loadings_(或自行計(jì)算)實(shí)用價值評估冗余度 可接受閾值如5%冗余度計(jì)算可視化載荷圖、散點(diǎn)圖已生成Matplotlib, Seaborn最后我想強(qiáng)調(diào)的是CCA是一個強(qiáng)大的“探索性”工具它揭示關(guān)聯(lián)但不證明因果。在清分建模中它幫我們找到了風(fēng)險與行為之間強(qiáng)有力的“線索”。但這條線索背后是原因如欺詐者偏好夜間操作還是結(jié)果如高風(fēng)險賬戶被限制后交易行為變化需要結(jié)合業(yè)務(wù)邏輯進(jìn)一步研判。把它作為特征工程、構(gòu)建風(fēng)險標(biāo)簽、或者深入業(yè)務(wù)分析的起點(diǎn)其價值才能最大化。每次分析后多問一句“這個關(guān)聯(lián)模式在業(yè)務(wù)上意味著什么”才能讓數(shù)學(xué)建模真正穿透數(shù)據(jù)觸及問題的核心。