本文目錄一覽:
- 1、python評分卡之LR及混淆矩陣、ROC
- 2、python怎樣創建具有一定長度和初始值的列表
- 3、Python十個評委打分,去掉最大最小值,求平均值
- 4、銀行數據倉庫體系實踐(18)–數據應用之信用風險建模
- 5、Python創建簡單登錄界面
- 6、利用Python進行數據分析筆記:3.1數據結構
python評分卡之LR及混淆矩陣、ROC
import pandas as pd
import numpy as np
from sklearn import linear_model
# 讀取數據
sports = pd.read_csv(r’C:\Users\Administrator\Desktop\Run or Walk.csv’)
# 提取出所有自變數名稱
predictors = sports.columns[4:]
# 構建自變數矩陣
X = sports.ix[:,predictors]
# 提取y變數值
y = sports.activity
# 將數據集拆分為訓練集和測試集
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size = 0.25, random_state = 1234)
# 利用訓練集建模
sklearn_logistic = linear_model.LogisticRegression()
sklearn_logistic.fit(X_train, y_train)
# 返回模型的各個參數
print(sklearn_logistic.intercept_, sklearn_logistic.coef_)
# 模型預測
sklearn_predict = sklearn_logistic.predict(X_test)
# 預測結果統計
pd.Series(sklearn_predict).value_counts()
——————————————————————————————————————————————-
# 導入第三方模塊
from sklearn import metrics
# 混淆矩陣
cm = metrics.confusion_matrix(y_test, sklearn_predict, labels = [0,1])
cm
Accuracy = metrics.scorer.accuracy_score(y_test, sklearn_predict)
Sensitivity = metrics.scorer.recall_score(y_test, sklearn_predict)
Specificity = metrics.scorer.recall_score(y_test, sklearn_predict, pos_label=0)
print(‘模型準確率為%.2f%%:’ %(Accuracy*100))
print(‘正例覆蓋率為%.2f%%’ %(Sensitivity*100))
print(‘負例覆蓋率為%.2f%%’ %(Specificity*100))
——————————————————————————————————————————————-
# 混淆矩陣的可視化
# 導入第三方模塊
import seaborn as sns
import matplotlib.pyplot as plt
# 繪製熱力圖
sns.heatmap(cm, annot = True, fmt = ‘.2e’,cmap = ‘GnBu’)
plt.show()
——————————————————————————————————————————————
# 繪製ROC曲線
# 計算真正率和假正率
fpr,tpr,threshold = metrics.roc_curve(y_test, sm_y_probability)
# 計算auc的值
roc_auc = metrics.auc(fpr,tpr)
# 繪製面積圖
plt.stackplot(fpr, tpr, color=’steelblue’, alpha = 0.5, edgecolor = ‘black’)
# 添加邊際線
plt.plot(fpr, tpr, color=’black’, lw = 1)
# 添加對角線
plt.plot([0,1],[0,1], color = ‘red’, linestyle = ‘–‘)
# 添加文本信息
plt.text(0.5,0.3,’ROC curve (area = %0.2f)’ % roc_auc)
# 添加x軸與y軸標籤
plt.xlabel(‘1-Specificity’)
plt.ylabel(‘Sensitivity’)
plt.show()
——————————————————————————————————————————————-
#ks曲線 鏈接: 風控數據分析學習筆記(二)Python建立信用評分卡 –
fig, ax = plt.subplots()
ax.plot(1 – threshold, tpr, label=’tpr’)# ks曲線要按照預測概率降序排列,所以需要1-threshold鏡像
ax.plot(1 – threshold, fpr, label=’fpr’)
ax.plot(1 – threshold, tpr-fpr,label=’KS’)
plt.xlabel(‘score’)
plt.title(‘KS Curve’)
plt.ylim([0.0, 1.0])
plt.figure(figsize=(20,20))
legend = ax.legend(loc=’upper left’)
plt.show()
python怎樣創建具有一定長度和初始值的列表
1、首先,我們需要打開Python的shell工具,在shell當中新建一個對象member,對member進行賦值。
2、這裡我們所創建的列表當中的元素均屬於字元串類型,同時我們也可以在列表當中創建數字以及混合類型的元素。
3、先來使用append函數對已經創建的列表添加元素,具體如下圖所示,會自動在列表的最後的位置添加一個元素。
4、再來使用extend對來添加列表元素,如果是添加多個元素,需要使用列表的形式。
5、使用insert函數添加列表元素,insert中有兩個參數,第一個參數即為插入的位置,第二個參數即為插入的元素。
Python十個評委打分,去掉最大最小值,求平均值
思路:分別將格子的成績用列表表示,然後各自排序,利用切片將最大與最小排除
分別利用sum函數求和併除以8,然後比較兩個值的大小就可以
銀行數據倉庫體系實踐(18)–數據應用之信用風險建模
信用風險
銀行的經營風險的機構,那在第15節也提到了巴塞爾新資本協議對於銀行風險的計量和監管要求,其中信用風險是銀行經營的主要風險之一,它的管理好壞直接影響到銀行的經營利潤和穩定經營。信用風險是指交易對手未能履行約定契約中的義務而給銀行造成經濟損失的風險。典型的表現形式包括借款人發生違約或信用等級下降。借款人因各種原因未能及時、足額償還債務/銀行貸款、未能履行合同義務而發生違約時,債權人或銀行必將因為未能得到預期的收益而承擔財務上的損失。
那如何來表示某個交易對手的信用情況呢,一般使用信用等級或信用評分來來表示,等級越低或評分越低,發生違約的概率會增加。這個信用評分主要應用在客戶的貸前和貸後管理中,貸前是指客戶貸款申請階段,銀行受理客戶貸款申請時會根據客戶提交的信息、人行徵信、其它數據源按一定的規則計算出一個違約概率和風險評分或信用等級。再根據這個評分或評級來確定客戶的授信額度和利率。計算出的評分或評級越高,違約概率越低,比如在進行個人貸前評分時主要關注以下5方面:
(1)People:貸款人狀況,包括歷史還款表現、當前負債情況、資金饑渴度等;
(2)Payment:還款來源,如基本收入、資產水平、月收支負債比、無擔保總負債等;
(3)Purpose:資金用途,如消費、買房,需要規避貸款資金用於投資或投機性質較高領域,如股票和數字貨幣;
(4)Protection:債權確保,主要是看是否有抵押物或擔保,需要看抵押物用途、質量、價格等關鍵要素;
(5)Perspective:借款戶展望,從地域、行業、人生階段等考察穩定性及潛力;
貸後是指客戶借款後銀行持續跟進客戶的信用情況,如果發現信用評分降低或者某些指標達到風險預警指標的閾值,說明風險升高,則會進行凍結額度甚至提前進行貸款收回。特別是對於逾期客戶。
風險建模步驟
在進行信用評估時如何選擇客戶屬性、如何確定評分或評級規則呢?這就需要進行風險建模,通過分析歷史數據來確定哪些特徵或指標對客戶的違約相關性大,可以了解客戶的還款能力以及還款意願。並通過一定方法來建立評分和評級的規則。那風險建模主要分為以下步驟:
(1)業務理解:主要評估當前現狀、確定業務目標,選擇建模方法,比如需要進行XX貸款產品的貸前評分模型並確定準入規則,建模方式比如為評分卡,評分應用為基於評分確定貸款准入規則以及額度和利率規則,同時需要確定分析數據的好客戶和壞客戶標準,如逾期90天以上為壞客戶;
(2)數據理解:首先需要準備建模的樣本數據,如抽取近2年的獲得類似產品的客戶相關信息以及根據好客戶和壞客戶標準確定的結果。並針對業務數據進行業務含義理解、對數據進行收集、探索,了解每個變數的數據質量、缺失情況,數據分布等。比如對於客戶在人行的徵信數據、客戶在銀行的存款、理財等信息、以及客戶申請填寫的家庭、房產信息、外部獲得的客戶教育、司法等相關信息進行業務理解和數據分布、質量的探索,對缺失值比例過大的變數或準確性不高的變數進行剔除,同時也要確定對於樣本數據中哪些數據進行建模,哪些數據進行驗證。
(3)數據準備:主要對數據進行預處理和指標加工,指標加工指基於基礎數據進行指標加工,如最近1個月的徵信查詢次數,最近1年的逾期次數等,數據預處理主要工作包括對每一個變數進行數據清洗、缺失值處理、異常值處理、數據標準化等,主要目的是將獲取的原始數據轉變成可用於建模的結構化數據。
比如對於連續變數,就是要尋找合適的切割點把變數分為幾個區間段以使其具有最強的預測能力,也稱為「分箱」。例如客戶年齡就是連續變數,在這一步就是要研究分成幾組、每組切割點在哪裡預測能力是最強的。分箱的方法有等寬、等頻、聚類(k-means)、卡方分箱法、單變數決策樹演算法(ID3、C4.5、CART)、IV最大化分箱法、best-ks分箱法等。如果是離散變數,每個變數值都有一定的預測能力,但是考慮到可能幾個變數值有相近的預測能力,因此也需要進行分組。
通過對變數的分割、分組和合併轉換,分析每個變數對於結果的相關性,剔除掉預測能力較弱的變數,篩選出符合實際業務需求、具有較強預測能力的變數。檢測變數預測能力的方法有:WOE(weight of Evidence) 、IV(informationvalue)等。
(4)分析建模:即對於篩選出來的變數以及完成好壞定義的樣本結果。放入模型進行擬合。如評分卡一般採用常見的邏輯回歸的模型,PYTHON、SAS、R都有相關的函數實現模型擬合。以下是生成的評分卡的例子。
(5)評估及報告:即通過驗證樣本對模型的預測進行校驗。評估模型的準確性和穩健性,並得出分析報告。常用的方法有ROC曲線、lift提升指數、KS(Kolmogorov-Smirnov)曲線、GINI係數等。
(6)應用:對模型進行實際部署和應用,如基於評分進行客戶准入和產生額度,並在貸款系統進行模型部署,自動對申請客戶進行評分。
(7)監測:建立多種報表對模型的有效性、穩定性進行監測,如穩定性監控報表來比較新申請客戶與開發樣本客戶的分值分布,不良貸款分析報表來評估不同分數段的不良貸款,並且與開發時的預測進行比較,監控客戶信貸質量。隨著時間的推移和環境變化,評分模型的預測力會減弱,所以需要持續監控並進行適當調整或重建。
在信用風險建模中,目前評分卡建模還是主要的方式,除了申請評分(A卡(Application score card))還有B卡(Behavior score card)行為評分卡、C卡(Collection score card)催收評分卡。B卡主要進行客戶貸後管理,如何進行風險預警,C卡進行催收管理,確定如何催收以及催收方式和時間點。信用風險模型中還有一個是反欺詐模型,它主要是識別假冒身份、虛假信息、批量薅羊毛等欺詐行為。隨著機器學習和大數據的發展,其它的一些建模方式如決策樹、深度神經網路也越來越多的應用到了風險建模中。
信用風險模型是數據倉庫支持的重要數據應用之一,在風險建模分析階段,數據倉庫是建模樣本數據以及衍生指標加工的主要提供者,業務人員一般在自助分析平台進行數據分析和建模,模型建立完成並部署後,會基於數據倉庫數據進行模型效果的監控。在貸後管理中,風險集市也會進行貸後指標的加工。另外風險模型以及預警中會經常使用到外部數據,這部分數據也是通過數據倉庫進行對接、加工和存儲。
Python創建簡單登錄界面
創建一個簡單的登錄窗口,假設用戶名為TestName,密碼為Python。
依據之前提到的創建方式,grid布局設計UI,設計登錄用戶名和密碼檢查函數。
from tkinterimport *
def LoginCheck():
name = txtName.get()
password = txtPassword.get()
name_len =len(name)
password_len =len(password)
if name ==”TestName” and password ==”Python”:
msgLabel[‘text’] =’登錄成功’
elif name ==”TestName” and password !=”Python”:
msgLabel[‘text’] =’密碼錯誤’
txtPassword.delete(0,password_len)
else:
msgLabel[‘text’] =’用戶名錯誤’
txtName.delete(0,name_len)
txtPassword.delete(0, password_len)
wnd = Tk()
lblName = Label(wnd, text=’User Name:’)
lblName.grid(row=0, column=0, sticky=W)
txtName = Entry(wnd)
txtName.grid(row=0, column=1, sticky=E)
lblPs = Label(wnd, text=’密碼:’)
lblPs.grid(row=1, column=0, sticky=W)
txtPassword = Entry(wnd)
txtPassword[“show”] =’*’
txtPassword.grid(row=1, column=1, sticky=E)
btn = Button(wnd, text=’登錄’, command=LoginCheck)
btn.grid(row=2, column=1, sticky=E)
# Message
msgLabel = Label(wnd, text=”)
msgLabel.grid(row=3)
wnd.mainloop()
運行效果如下:
可輸入不同的用戶名和密碼檢測邏輯上設計是否正確。
用戶名錯誤:
密碼錯誤:
登錄成功:
利用Python進行數據分析筆記:3.1數據結構
元組是一種固定長度、不可變的Python對象序列。創建元組最簡單的辦法是用逗號分隔序列值:
tuple 函數將任意序列或迭代器轉換為元組:
中括弧 [] 可以獲取元組的元素, Python中序列索引從0開始 :
元組一旦創建,各個位置上的對象是無法被修改的,如果元組的一個對象是可變的,例如列表,你可以在它內部進行修改:
可以使用 + 號連接元組來生成更長的元組:
元組乘以整數,則會和列表一樣,生成含有多份拷貝的元組:
將元組型的表達式賦值給變數,Python會對等號右邊的值進行拆包:
拆包的一個常用場景就是遍曆元組或列表組成的序列:
*rest 用於在函數調用時獲取任意長度的位置參數列表:
count 用於計量某個數值在元組中出現的次數:
列表的長度可變,內容可以修改。可以使用 [] 或者 list 類型函數來定義列表:
append 方法將元素添加到列表尾部:
insert 方法可以將元素插入到指定列表位置:
( 插入位置範圍在0到列表長度之間 )
pop 是 insert 的反操作,將特定位置的元素移除並返回:
remove 方法會定位第一個符合要求的值並移除它:
in 關鍵字可以檢查一個值是否在列表中;
not in 表示不在:
+ 號可以連接兩個列表:
extend 方法可以向該列表添加多個元素:
使用 extend 將元素添加到已經存在的列表是更好的方式,比 + 快。
sort 方法可以對列表進行排序:
key 可以傳遞一個用於生成排序值的函數,例如通過字元串的長度進行排序:
bisect.bisect 找到元素應當被插入的位置,返回位置信息
bisect.insort 將元素插入到已排序列表的相應位置保持序列排序
bisect 模塊的函數並不會檢查列表是否已經排序,因此對未排序列表使用bisect不會報錯,但是可能導致不正確結果
切片符號可以對大多數序列類型選取子集,基本形式是 [start:stop]
起始位置start索引包含,結束位置stop索引不包含
切片還可以將序列賦值給變數:
start和stop可以省略,默認傳入起始位置或結束位置,負索引可以從序列尾部進行索引:
步進值 step 可以在第二個冒號後面使用, 意思是每隔多少個數取一個值:
對列表或元組進行翻轉時,一種很聰明的用法時向步進值傳值-1:
dict(字典)可能是Python內建數據結構中最重要的,它更為常用的名字是 哈希表 或者 關聯數組 。
字典是鍵值對集合,其中鍵和值都是Python對象。
{} 是創建字典的一種方式,字典中用逗號將鍵值對分隔:
你可以訪問、插入或設置字典中的元素,:
in 檢查字典是否含有一個鍵:
del 或 pop 方法刪除值, pop 方法會在刪除的同時返回被刪的值,並刪除鍵:
update 方法將兩個字典合併:
update方法改變了字典元素位置,對於字典中已經存在的鍵,如果傳給update方法的數據也含有相同的鍵,則它的值將會被覆蓋。
字典的值可以是任何Python對象,但鍵必須是不可變的對象,比如標量類型(整數、浮點數、字元串)或元組(且元組內對象也必須是不可變對象)。
通過 hash 函數可以檢查一個對象是否可以哈希化(即是否可以用作字典的鍵):
集合是一種無序且元素唯一的容器。
set 函數或者是用字面值集與大括弧,創建集合:
union 方法或 | 二元操作符獲得兩個集合的聯合即兩個集合中不同元素的並集:
intersection 方法或 操作符獲得交集即兩個集合中同時包含的元素:
常用的集合方法列表:
和字典類似,集合的元素必須是不可變的。如果想要包含列表型的元素,必須先轉換為元組:
原創文章,作者:QERVI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317514.html