原理+代碼|Python基於主成分分析的客戶信貸評級實戰

2020-11-30 CDA數據分析師

文章來源: 早起Python

作者:蘿蔔

本文是Python商業數據挖掘實戰的第5篇

1 - 基於不平衡數據的反欺詐模型實戰2 - Apriori算法實現智能推薦3 - 隨機森林預測寬帶客戶離網4 - 多元線性回歸模型實戰5 - PCA實現客戶信貸5C評級

前言

大樣本的數據集固然提供了豐富的信息,但也在一定程度上增加了問題的複雜性。如果我們分別對每個指標進行分析,往往得到的結論是孤立的,並不能完全利用數據蘊含的信息。但是盲目的減少我們分析的指標,又會損失很多有用的信息。所以我們需要找到一種合適的方法,一方面可以減少分析指標,另一方面儘量減少原指標信息的損失

變量壓縮的方法非常多,但百法不離其中,其實最根本的都是「主成分分析」(Primary Component Analysis,下簡稱PCA)。能夠理解 PCA 的基本原理並將代碼用於實際的業務案例是本文的目標,本文將詳細介紹如何利用Python實現基於主成分分析的5c信用評級,主要分為兩個部分:

詳細原理介紹Python代碼實戰引入

在正式開始原理趣析前,我們先從兩個生活場景入手,藉以更好的理解需要進行變量壓縮的原因。

場景1:

上司希望從事數據分析崗位的你僅用兩個短句就概括出以下數據集所反映出的經濟現象

用幾個長句都不一定能夠很好的描述數據集的價值,更何況高度凝練的兩個短句,短短九個指標就已經十分讓人頭疼了,如果表格再寬一些呢,比如有二三十個變量?

場景2

大學生講究德智體美勞全面發展,學校打算從某學院挑選一兩名學生外派進修數據分析,需要綜合全面的考量學生素質。部分候選學生的個人情況如下:

首先還是與場景1類似的問題,這些指標只是冰山一角,還沒算上學生們其他領域的成績,如果說在場景1中還可以以犧牲全面性來刪除一些我們覺得關係不大的變量,比如我們猜測老闆只會關注GDP與人均GDP這兩個指標,那麼場景2的背景便已經清晰地說明了需要綜合地考慮變量,不能有生硬的去掉「體育」之類的操作。

信息壓縮

如果把信息壓縮這四個字拆成信息和壓縮這兩部分來看的話,便會呈現如下值得探究的問題:

「信息壓縮中的信息指什麼?」

其實各種數據、變量都可被稱為信息,而統計學家們常把方差當作信息。其實在做描述性統計分析的時候,只要能夠表現我們數據的變異情況的統計量都可以被稱作信息,如方差,極差等,只不過是極差會更好計算。以方差為例,方差變化越大,數據分布越分散,涵蓋的信息就越多。

「什麼樣的信息/變量才能被壓縮?」

只有相關性強的變量才能被壓縮。如場景2的數學建模和科技節活動,都是學生們理科思維的體現方式,所以可以考慮把這兩者合併成一個新的叫 「 理科思維 」 的變量,這樣便可以不用兩個變量都要費筆墨描述,關鍵是 「 理科思維 」 這個新的變量裡面數學建模和科技節這兩個舊變量的各自的佔比是多少。(因為這裡並沒有因變量,所以這兩個舊變量的權重係數無法簡單的使用多元線性回歸來完成)如果變量間的關係幾乎是獨立的卻依然強制壓縮(比如體育和演講),則會大大加劇信息的缺失程度,這也是為什麼 「 壓縮 」 其實帶有一絲迫不得已的意味,都是以儘可能損失最少的信息為前提。主成分分析是只能針對連續變量來進行壓縮,分類變量則不行。因為分類變量之間可以說是完全獨立的,並沒有正負兩種相關性一說,如性別男和女之間就完全是獨立的。如果一定也要將分類變量壓縮的話,通常會對進行WOE轉換(後續推文會提及),之後就可以愉快的進行壓縮了。所以分類變量是沒辦法進行單獨壓縮的,因為沒有對應的算法。有些人可能會直接對分類變量間進行卡方檢驗,然後把 p 值大的刪去一些,這個其實應該被劃分為手工的範疇,並不屬於算法。「有哪些壓縮的方法?」

總的來說降維有兩種方法,一種是特徵消除,另一種是特徵提取

特徵消除:如上提到的採用卡方檢驗這樣的非算法,又或者直接拍腦袋決策需要刪掉哪些變量,但這可能會使我們丟失這些特徵中的很多信息。特徵提取:通過組合現有特徵來創建新變量,可以儘量保存特徵中存在的信息。PCA就是一種常見的特徵提取方法,它會將關係緊密的變量們用儘可能少的新創建的變量代替,使這些新變量是兩兩不相關的。這就實現用較少的綜合指標分別代表存在於各個變量中的各類信息。所以多元變量壓縮思路的基礎其實是相關分析。

「壓縮後的信息與原來的有什麼不同?」

我們需要明確的是,無論是主成分還是後續推文的稀疏主成分分析,都有一個問題:他們得到的主成分均沒有什麼業務含義,如果希望得到的壓縮後的變量是有意義的,則可以考慮變量聚類。

壓縮過程

下圖為兩個正態分布的變量間可能存在的三種關係的示意圖,去正態分布和相關係數為 0.9 是為了從比較理想化的角度來解釋變量壓縮的步驟。

可以看到,若量間的關係是較強的正/負相關,用鉛筆把散點圖的範圍圈起來的話呈現的都是一個較扁的橢圓;反之,完全獨立的兩個變量的分布更像是一個肥胖的圓形。關於壓縮過程我們依舊對以下幾個常見的問題進行解釋。

「如何通過散點圖理解信息壓縮?」

直接看散點圖只能判斷出是否值得壓縮,畢竟只有變量間具有一定的相關性才值得壓縮。接下來將涉及到 PCA 中很重要的一個知識點:坐標軸旋轉

「旋轉坐標軸的作用?」

旋轉後的坐標軸與原坐標軸一樣,都是正交(垂直)的。這樣的旋轉方式可以使兩個相關的變量的信息在坐標軸上得到最充分的體現(如果以極差作為信息,則點在 X1 的投影範圍最長)。之後便可從短軸方向來壓縮,當這個橢圓被壓扁到一定程度時,短軸上的信息就可以忽略不計,便達到了信息壓縮的目的。

「如果有三個變量該如何壓縮?」

三維的也是如此,只不過是由橢圓變成橢球(三個變量都相關)。步驟還是一樣,找到最長軸後,在軸上做切面,切面一旦有了,便又回歸到了二維的情況。這時可以找到次長軸和最短軸,這就可以依次的提取,當我們認為最短軸可以忽略不計的時候,就又起到了信息壓縮的作用。

要注意的是如果呈球形分布,這說明變量間沒有相關關係,沒有必要做主成分分析,也不能做變量的壓縮。

建模分析

前面已經說到,PCA後所得到的壓縮的主成分並沒有什麼意義,比如5個變量壓縮成2個主成分P1和P2。

這兩個主成分中的組成等式為:

其中,等式右邊的係數正負與否並沒有什麼意義,通常看絕對值即可。第一個主成分 P1中受五個變量的影響程度無明顯差別,權重都在0.42 ~ 0.47間 主成分P2受第一個變量的影響最大,權重係數為0.83,受第三個變量影響最小,權重為0.14

那麼如何知道應該壓縮成幾個主成分?PCA 的功能是壓縮信息,壓縮後的每個主成分都能夠解釋一部分信息的變異程度(統計學家喜歡用方差表示信息的變異程度),所以,只需要滿足解釋信息的程度達到一定的值即可。

計算每個成份因子將不同成分因子所能解釋的變異百分比相加 3. 得到的值被稱之為累積變異百分比 4. PCA 過程中,我們將選擇能使得這個值最接近於 1 的維度個數

明顯可以看出隨著成分數目的增加,累積變異百分比逐漸增加。不建議使得累積百分比等於1,這將會導致有些主成分帶來冗餘信息,通常等於 0.85 就可以了。當然我們也可以選擇兩個主成分,因為當我們增加第三個主成分因子時,會發現增加它對於累積變異的百分比沒有太大的影響。

Python實戰

在正式開始 Python 代碼實戰前,簡要了解主成分分析的運用場景是非常有必要的

綜合打分:這種情況在日常中經常遇到,比如高考成績的加總、員工績效的總和排名。這類情況要求只出一個綜合打分,因此主成分分析比較適合。相對於講單項成績簡單加總的方法,主成分分析會賦予區分度高的單項成績以更高的權重,分值更合理。不過當主成分分析不支持只取一個主成分時,就不能使用該方法了。數據描述:描述產品情況,比如著名的波士頓矩陣,子公司業務發展狀況,區域投資潛力等,需要將多變量壓縮到少數幾個主成分進行描述,如果壓縮到兩個主成分是最理想的。這類分析一般做主成分分析是不充分的,做到因子分析更好。為聚類或回歸等分析提供變量壓縮:消除數據分析中的共線性問題,消除共線性常用的有三種方法,分別是:同類變量中保留一個最有代表性的;保留主成分或因子;從業務理解上進行變量修改。案例背景:某金融服務公司為了了解貸款客戶的信用程度,評價客戶的信用等級,採用信用評級常用的5C(品質 Character,能力 Capacity,資本 Capital,抵押 Collateral,條件 Condition)方法, 說明客戶違約的可能性。

本次實戰將圍繞綜合打分,即只選出一個主成分的情況來實現客戶信用評級。

數據探索

首先導入相關包並進行探索性分析

首先導入相關包並進行探索性分析

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

plt.style.use('seaborn-whitegrid')

plt.rc('font', **{'family': 'Microsoft YaHei, SimHei'})

# 設置中文字體的支持

df = pd.read_csv('loan_apply.csv')

df

參數解釋:

品格:指客戶的名譽;能力:指客戶的償還能力;資本:指客戶的財務實力和財務狀況;擔保:指對申請貸款項擔保的覆蓋程度;環境:指外部經濟政策環境對客戶的影響進行主成分分析前,一定要對數據進行相關分析,因為相關性較低或獨立的變量不可做PCA

# 求解相關係數矩陣,證明做主成分分析的必要性

## 丟棄無用的 ID 列

data = df.drop(columns='ID')

import seaborn as sns

sns.heatmap(data.corr(), annot=True)

# annot=True: 顯示相關係數矩陣的具體數值

發現變量間相關性都比較高,大於0.7,有做PCA的必要

數據標準化

PCA 建模前,數據需要進行標準化,通常使用中心標準化,也就是將變量都轉化成Z分數的形式,即偏離平均數的標準差個數,這樣才能防止量綱問題給建模帶來的影響。如身高-體重的量綱1.78-59與178-60在散點圖上的顯示會有比較大的區別!

# PCA 通常用中心標準化,也就是都轉化成 Z 分數的形式

from sklearn.preprocessing import scale

data = scale(data)

PCA建模

使用sklearn進行PCA分析,注意:

第一次的n_components參數最好設置得大一些(保留的主成份)觀察explained_variance_ratio_取值變化,即每個主成分能夠解釋原始數據變異的百分比from sklearn.decomposition import PCA

pca = PCA(n_components=5) # 直接與變量個數相同的主成分

pca.fit(data)

結果分析

累計解釋變異程度

明顯看出第一個主成分就已經能夠解釋84%的信息變異程度了!

重新建模

重新選擇主成分個數進行建模

主成分中各變量的權重分析

第一個主成分(解釋了84% 的變異的那個)與5個自變量的係數關係可以理解成:「第一成分 = 0.413 * 品格 + 0.47 * 能力 + 0.46 * 資本 + 0.45 * 擔保 + 0.42 * 環境」。所以說生成的主成分除降維意義顯著外,並沒有什麼其他的意義,並不好解釋。

做出決策

這裡的new_data是上文代碼pca.fit_transform(data)生成的降維後的數據,接著按照綜合打分從高到低進行排序

根據結果我們可以發現貸款給7號客戶風險最低,給9號客戶風險最高!

小結

本文通過生活實例引出為什麼要進行信息的壓縮與提煉,講解了主成分分析 PCA 的原理與使用時的注意事項,並使用Python示範了完整的建模流程,給讀者提供了參考和借鑑。另外,作為數據分析師必會的PCA在圖像處理如人臉識別和手寫數字識別等機器學習領域也有很廣的運用,值得好好琢磨並熟練掌握。

相關焦點

  • 運用sklearn進行線性判別分析(LDA)代碼實現
    基於sklearn的線性判別分析(LDA)代碼實現一、前言及回顧本文記錄使用sklearn庫實現有監督的數據降維技術——線性判別分析(LDA)。在上一篇LDA線性判別分析原理及python應用(葡萄酒案例分析),我們通過詳細的步驟理解LDA內部邏輯實現原理,能夠更好地掌握線性判別分析的內部機制。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    python教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • 乾貨| 基於 Python 的信用評分模型實戰!|python|離散化|dataframe...
    本篇我們主要討論基於Python的信用評分模型開發,並在各部分附上了相關代碼。  項目流程  典型的信用評分模型如圖1-1所示。信用風險評級模型的主要開發流程如下:  1.數據獲取, 包括獲取存量客戶及潛在客戶的數據。
  • 「python opencv計算機視覺零基礎到實戰」九模糊
    一、學習目標了解什麼是卷積了解模糊的使用方法與應用目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python opencv視覺入門到實戰」 第四節色彩空間
  • 原理+代碼|Python實戰多元線性回歸模型
    其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。主要將分為兩個部分:詳細原理Python 實戰Python 實戰Python 多元線性回歸的模型的實戰案例有非常多,這裡雖然選用的經典的房價預測
  • 代碼詳解:Python虛擬環境的原理及使用
    本指南先介紹虛擬環境的基礎知識以及使用方法,然後再深入介紹虛擬環境背後的工作原理。注意:本指南在macOS Mojave系統上使用最新版本的Python 3.7.x。目錄· 為什麼使用虛擬環境?· 什麼是虛擬環境?· 使用虛擬環境· 管理環境· 虛擬環境如何運行?1.
  • 數據分析之主成分分析,spss主成分分析實例
    一、主成分分析概要主成分分析,在進行有多個指標的綜合評定時,客觀全面的綜合評價結果非常重要,然而往往多個指標之間通常存在信息不統一或者重複等眾多因素,各指標的權重往往很難確認。主成分分析方法能夠解決以上問題,主成分分析法是一種降維的統計方法,是考察多個變量間相關性一種多元統計方法。二、spss主成分分析操作流程導入數據。
  • Python趣味打怪:60秒學會一個例子,147段代碼助你從入門到大師
    不要害怕學習的過程枯燥無味,這裡有程式設計師jackzhenguo打造的一份中文Python「糖果包」:147個代碼小樣,60秒一口,營養又好玩,從Python基礎到機器學習盡皆囊括。>例子是有趣的例子,教程也是正經教程,學習路徑清晰、系統,先一起來看看完整目錄:學習路徑施工完成:1、Python基礎2、Python字符串和正則化3、Python文件4、Python日期5、Python利器6、Python畫圖7、Python實戰施工中:Python基礎算法
  • 「python opencv視覺零基礎實戰」七邏輯運算應用
    一、學習目標了解opencv中圖像的邏輯運算了解opencv中邏輯運算的應用如有錯誤歡迎指出~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • 廣州Python測試培訓
    實戰項目1 [AI 五子棋] 1、編寫GUI界面(tkinter、pyqt、pygame等) 2、人機互動 3、棋局數據獲取、算法分析 4、搭建訓練模型
  • 信貸風險管理存在的問題及防範措施
    決策者只是在調查人員提供的信息上分析決策,無法掌握借款人的風險信息,從而在貸款審批和發放時,難以對貸款風險全面掌握、客觀評價和有效控制,致使信貸項目從開始就有損失的可能。二是貸後管理階段。在貸款發放後,信貸人員貸後檢查流於形式,忽視對借款人貸後經營情況變化的跟蹤了解,沒有對貸款項目進展情況進行深入研究分析,缺乏對經營風險的理解,因而難以及時發現和有效處置風險,導致貸款無法按期收回,形成不良貸款。
  • spss主成分怎麼進行分析?spss主成分分析法步驟
    spss 這款軟體功能非常多哦,還可以分析主成分哦,但是很多朋友不知道spss主成分怎麼進行分析?小編下面準備了spss主成分分析法詳細步驟,大家安裝 詳細步驟一步步操作就知道spss主成分怎麼進行分析?
  • 資源|用Python和NumPy學習《深度學習》中的線性代數基礎
    本文系巴黎高等師範學院在讀博士 Hadrien Jean 的一篇基礎學習博客,其目的是幫助初學者/高級初學者基於深度學習和機器學習來掌握線性代數的概念。掌握這些技能可以提高你理解和應用各種數據科學算法的能力。
  • 國君策略:ESG評級體系的構建與投資策略應用
    ESG評價因子的構建:基於Lasso回歸等方法。我們以滬深300指數成分股為樣本,選取26個底層指標構建ESG評價因子。我們基於Lasso、主成分分析、個體固定效應模型及雙向固定效應模型等方法,採用當年5月1日到次年4月30日的股票收益率對期初ESG底層指標進行回歸,回歸後得出各公司的底層指標係數,並以此權重與下一年數據進行擬合,得到下一年換倉所需的ESG評價因子。
  • 乾貨丨Python接口測試自動化實戰及代碼示例:含get、post等方法
    最終選定 python 作為腳本開發語言,使用其自帶的 requests 和 urllib 模塊進行接口請求,使用優化後的 unittest 測試框架編寫測試接口函數,測試結果選用 HTMLTestRunner 框架予以展示,並使用 python 的 ssl 模塊支持 https 協議的驗證。接下來,我詳細地介紹這些模塊,並給出各個模塊完整的測試代碼。
  • Python代碼性能調試和優化
    找出程序中影響程序性能的代碼。.prec -= 2return +sprint(exp(Decimal(150)))print(exp(Decimal(400)))print(exp(Decimal(3000)))最簡單的調試最簡單且實用的調試性能調試的方法是使用Linux的time命令,time可以計算程序執行的時間:time python3
  • 《中國金融》|開展央行內部評級工作的思考
    截至2020年10月末,央行評級系統累計上傳企業21.26萬家,報數機構涉及31個地區的2765家金融機構。 央行評級採取定量與定性相結合的評級方法。定量指標是基於企業財務報表計算得出,定性指標是基於企業經營狀況、市場地位、發展前景等情況綜合評價得出。
  • 基於python+OpenCV模塊的人臉識別定位技術
    本文將基於OpenCV模塊,在windows作業系統上,利用python語言,進行人臉識別技術的研究。當然OpenCV的應用領域很廣,除了人臉識別之外,它還支持圖像分割、動作識別、視頻處理等技術。代碼分析下面我們對代碼進行分析,代碼如圖所示:一共不超過15行,當然這是建立在別人已有的數據上做的,如果自己寫的話,不會這麼簡單,我們這只是調用了別人的接口,而這個接口是開源的,共享的。代碼第1行導入opencv模塊。
  • 基於5C要素分析法提高信貸風險管理效率研究
    第二,基於5C要分析法持續提高風險決策模型的應用價值。5C要素建模屬於典型的、應用價值較高的信用風險評估模型建立方式。5C要素分析法涵蓋了客戶的靜態基本資質(如客戶的學歷、工作、收入以及歷史信用記錄),資金用途(消費、投資、周轉或經營,判斷資金流向的合理性及潛在創造價值能力)、還款來源(變現能力、現金流量)、債權保證(抵押、擔保以及軟約束等)和客戶未來的發展前景等五大方面,能夠比較全面評價客戶的綜合資質,特別是潛在違約風險的評判。
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。