邏輯回歸實(shí)戰(zhàn)2--同盾分?jǐn)?shù)與同盾多頭借貸

python金融風(fēng)控評(píng)分卡模型和數(shù)據(jù)分析微專(zhuān)業(yè)課:http://dwz.date/b9vv

同盾科技公司
同盾科技是中國(guó)智能分析和決策領(lǐng)域領(lǐng)軍企業(yè),以人工智能、云計(jì)算、大數(shù)據(jù)三大核心技術(shù)體系為基礎(chǔ),基于對(duì)數(shù)據(jù)的探索洞察和深刻理解,將深度學(xué)習(xí)、聯(lián)邦學(xué)習(xí)等領(lǐng)先技術(shù)與業(yè)務(wù)場(chǎng)景深度融合,為金融、保險(xiǎn)、互聯(lián)網(wǎng)、政務(wù)、零售、物流等行業(yè)提供智能分析與決策服務(wù),賦能并激發(fā)客戶(hù),幫助客戶(hù)做出更佳決策。截至目前,累計(jì)已有超過(guò)一萬(wàn)家客戶(hù)選擇了同盾的產(chǎn)品及服務(wù)。
受客戶(hù)信賴(lài)的同時(shí),同盾備受?chē)?guó)內(nèi)外頂尖資本關(guān)注,已獲多輪共數(shù)億美元融資。此外,同盾也獲得了政府、公眾與行業(yè)的持續(xù)認(rèn)可,成功入選國(guó)家科技創(chuàng)新2030“新一代人工智能”重大項(xiàng)目課題組,榮獲2019工信部中國(guó)互聯(lián)網(wǎng)成長(zhǎng)型企業(yè)20強(qiáng)、2019世界人工智能創(chuàng)新大賽20強(qiáng) 、2019年銀行家雜志“十佳智能風(fēng)控創(chuàng)新獎(jiǎng)”、2019亞洲銀行家年度風(fēng)險(xiǎn)數(shù)據(jù)與分析技術(shù)實(shí)施大獎(jiǎng)等殊榮。
同盾有強(qiáng)大爬蟲(chóng)團(tuán)隊(duì),收集數(shù)據(jù)質(zhì)量在國(guó)內(nèi)相對(duì)較好。但2019年公安部嚴(yán)厲打擊非法爬蟲(chóng)行為,同盾公司受到不小影響。

同盾科技比較出名的就是同盾分?jǐn)?shù),一般中小企業(yè)用同盾分?jǐn)?shù)來(lái)過(guò)濾壞客戶(hù),同盾分?jǐn)?shù)大于80分的客戶(hù)基本強(qiáng)行拒絕準(zhǔn)入。下圖是同盾分?jǐn)?shù)和同盾多頭借貸對(duì)應(yīng)表。我們可以驗(yàn)證一下同盾分?jǐn)?shù)效果。
excel保留兩個(gè)字段,一個(gè)字段是二分類(lèi)變量,一個(gè)字段是數(shù)值

?同盾分?jǐn)?shù)越高,多頭命中概率越高

預(yù)測(cè),當(dāng)同盾分?jǐn)?shù)為20,60,80分時(shí),同盾多頭借貸命中概率。這里就可以看出同盾80分時(shí),預(yù)測(cè)壞客戶(hù)概率達(dá)到0.87,已經(jīng)非常高了,可以用于做強(qiáng)規(guī)則hard-rule強(qiáng)拒壞客戶(hù)。
?

卡方檢驗(yàn)數(shù)據(jù)偏大,對(duì)模型保持謹(jǐn)慎


下面是python腳本
# -*- coding: utf-8 -*-
"""
Created on Wed Mar? 7 10:07:49 2018
@author: 231469242@qq.com
"""
import
?csv
import
?numpy as np
import
?pandas as pd
from
?statsmodels.formula.api?
import
?glm
from
?statsmodels.genmod.families?
import
?Binomial
import
?matplotlib.pyplot as plt
import
?seaborn as sns
#中文字體設(shè)置
from
?matplotlib.font_manager?
import
?FontProperties
font
=
FontProperties(fname
=
r
"c:\windows\fonts\simsun.ttc"
,size
=
14
)
?
?#該函數(shù)的其他的兩個(gè)屬性"notebook"和"paper"卻不能正常顯示中文
sns.set_context(
'poster'
)
??
?fileName
=
"同盾多頭借貸與同盾分?jǐn)?shù)回歸分析.csv"
reader?
=
?csv.reader(
open
(fileName))
#獲取數(shù)據(jù),類(lèi)型:陣列
def
?getData():
????
'''Get the data '''
??????
?????
inFile?
=
?'同盾多頭借貸與同盾分?jǐn)?shù)回歸分析.csv'
????
data?
=
?np.genfromtxt(inFile, skip_header
=
1
, usecols
=
[
0
,?
1
],
????????????????????????????????????
missing_values
=
'NA'
, delimiter
=
','
)
????
# Eliminate NaNs 消除NaN數(shù)據(jù)
????
data1?
=
?data[~np.isnan(data[:,?
1
])]
????
return
?data1
??????
?def
?prepareForFit(inData):
????
''' Make the temperature-values unique, and count the number of failures and successes.
????
Returns a DataFrame'''
??????
?????
# Create a dataframe, with suitable columns for the fit
????
df?
=
?pd.DataFrame()
????
#np.unique返回去重的值
????
df[
'同盾分?jǐn)?shù)'
]?
=
?np.unique(inData[:,
0
])
????
df[
'同盾多頭借貸命中'
]?
=
?0
????
df[
'同盾多頭借貸未命中'
]?
=
?0
????
df[
'total'
]?
=
?0
????
df.index?
=
?df.同盾分?jǐn)?shù).values
??????
?????
# Count the number of starts and failures
????
#inData.shape[0] 表示數(shù)據(jù)多少
????
for
?ii?
in
?range
(inData.shape[
0
]):
????????
#獲取第一個(gè)值的溫度
????????
curTemp?
=
?inData[ii,
0
]
????????
#獲取第一個(gè)值的值,是否發(fā)生故障
????????
curVal??
=
?inData[ii,
1
]
????????
df.loc[curTemp,
'total'
]?
+
=
?1
????????
if
?curVal?
=
=
?1
:
????????????
df.loc[curTemp,?
'同盾多頭借貸命中'
]?
+
=
?1
????????
else
:
????????????
df.loc[curTemp,?
'同盾多頭借貸未命中'
]?
+
=
?1
????
return
?df
#邏輯回歸公式
def
?logistic(x, beta, alpha
=
0
):
????
''' Logistic Function '''
????
#點(diǎn)積,比如np.dot([1,2,3],[4,5,6]) = 1*4 + 2*5 + 3*6 = 32
????
return
?1.0
?/
?(
1.0
?+
?np.exp(np.dot(beta, x)?
+
?alpha))?
??????
?def
?setFonts(
*
options):
????????
return
?#繪圖?
def
?Plot(data,alpha,beta,picName):
????
#陣列,數(shù)值
????
array_values?
=
?data[:,
0
]
????
#陣列,二分類(lèi)型
????
array_type?
=
?data[:,
1
]
??
?????
plt.figure(figsize
=
(
10
,
10
))
????
setFonts()
????
#改變指定主題的風(fēng)格參數(shù)
????
sns.set_style(
'darkgrid'
)
????
#numpy輸出精度局部控制
????
np.set_printoptions(precision
=
3
, suppress
=
True
)
????
plt.scatter(array_values, array_type, s
=
200
, color
=
"k"
, alpha
=
0.5
)
????
#獲x軸列表值,同盾分?jǐn)?shù)
????
list_values?
=
?[row[
0
]?
for
?row?
in
?inData]
????
list_values?
=
?[
int
(i)?
for
?i?
in
?list_values]
????
#獲取列表最大值和最小值
????
max_value
=
max
(list_values)
????
print
(
"max_value:"
,max_value)
????
min_value
=
min
(list_values)
????
print
(
"min_value:"
,min_value)
????
#最大值和最小值留有多余空間
????
x?
=
?np.arange(min_value, max_value
+
1
)
????
y?
=
?logistic(x, beta, alpha)
????
print
(
"test"
)
????
plt.hold(
True
)
????
plt.plot(x,y,
'r'
)
????
#設(shè)置y軸坐標(biāo)刻度
????
plt.yticks([
0
,?
1
])
????
#plt.xlim()返回當(dāng)前的X軸繪圖范圍
????
plt.xlim([min_value,max_value])
????
outFile?
=
?picName
????
plt.ylabel(
"同盾多頭借貸命中概率"
,fontproperties
=
font)
????
plt.xlabel(
"同盾分?jǐn)?shù)"
,fontproperties
=
font)
????
plt.title(
"邏輯回歸-同盾分?jǐn)?shù)VS同盾多頭借貸命中概率"
,fontproperties
=
font)
????
#產(chǎn)生方格
????
plt.hold(
True
)
????
#圖像外部邊緣的調(diào)整
????
plt.tight_layout
????
plt.show(outFile)
??????
?#用于預(yù)測(cè)邏輯回歸概率
def
?Prediction(x):
????
y?
=
?logistic(x, beta, alpha)?
????
print
(
"probability prediction:"
,y)
'''
Prediction(80)
probability prediction: 0.872046286637
?
?Prediction(100)
probability prediction: 0.970179520648
?
?'''
??????
?#獲取數(shù)據(jù)?
inData?
=
?getData()
#得到頻率計(jì)算后的數(shù)據(jù)
dfFit?
=
?prepareForFit(inData)?
#Generalized Linear Model 建立二項(xiàng)式模型
model?
=
?glm(
'同盾多頭借貸未命中 +同盾多頭借貸命中 ~ 同盾分?jǐn)?shù)'
, data
=
dfFit, family
=
Binomial()).fit()?
print
(model.summary())
chi2
=
model.pearson_chi2
'''Out[37]: 46.893438309853522? 分?jǐn)?shù)越小,p值越大,H0成立,模型越好'''
print
(
"the chi2 is smaller,the model is better"
)
alpha?
=
?model.params[
0
]
beta?
=
?model.params[
1
]
Plot(inData,alpha,beta,
"logiscti regression"
)
#測(cè)試
Prediction(
20
)
Prediction(
60
)
Prediction(
80
)
python機(jī)器學(xué)習(xí)生物信息學(xué)系列課(博主錄制):http://dwz.date/b9vw

微信公眾號(hào):pythonEducation
