欢迎光临散文网 会员登陆 & 注册

逻辑回归实战2--同盾分数与同盾多头借贷

2020-07-23 16:23 作者:python风控模型  | 我要投稿

python金融风控评分卡模型和数据分析微专业课:http://dwz.date/b9vv

up主金融微专业课

同盾科技公司

同盾科技是中国智能分析和决策领域领军企业,以人工智能、云计算、大数据三大核心技术体系为基础,基于对数据的探索洞察和深刻理解,将深度学习、联邦学习等领先技术与业务场景深度融合,为金融、保险、互联网、政务、零售、物流等行业提供智能分析与决策服务,赋能并激发客户,帮助客户做出更佳决策。截至目前,累计已有超过一万家客户选择了同盾的产品及服务。

受客户信赖的同时,同盾备受国内外顶尖资本关注,已获多轮共数亿美元融资。此外,同盾也获得了政府、公众与行业的持续认可,成功入选国家科技创新2030“新一代人工智能”重大项目课题组,荣获2019工信部中国互联网成长型企业20强、2019世界人工智能创新大赛20强 、2019年银行家杂志“十佳智能风控创新奖”、2019亚洲银行家年度风险数据与分析技术实施大奖等殊荣。

同盾有强大爬虫团队,收集数据质量在国内相对较好。但2019年公安部严厉打击非法爬虫行为,同盾公司受到不小影响。

同盾科技比较出名的就是同盾分数,一般中小企业用同盾分数来过滤坏客户,同盾分数大于80分的客户基本强行拒绝准入。下图是同盾分数和同盾多头借贷对应表。我们可以验证一下同盾分数效果。

excel保留两个字段,一个字段是二分类变量,一个字段是数值

 同盾分数越高,多头命中概率越高

预测,当同盾分数为20,60,80分时,同盾多头借贷命中概率。这里就可以看出同盾80分时,预测坏客户概率达到0.87,已经非常高了,可以用于做强规则hard-rule强拒坏客户。

 

卡方检验数据偏大,对模型保持谨慎

下面是python脚本

# -*- coding: utf-8 -*-

"""
Created on Wed Mar  7 10:07:49 2018
 微信公众号:pythonEducation
@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
#中文字体设置
from matplotlib.font_manager import FontProperties
font=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=14)
  
#该函数的其他的两个属性"notebook"和"paper"却不能正常显示中文
sns.set_context('poster')
   
fileName="同盾多头借贷与同盾分数回归分析.csv"
reader = csv.reader(open(fileName))

#获取数据,类型:阵列
def getData():
    '''Get the data '''
       
    inFile = '同盾多头借贷与同盾分数回归分析.csv'
    data = np.genfromtxt(inFile, skip_header=1, usecols=[01],
                                    missing_values='NA', delimiter=',')
    # Eliminate NaNs 消除NaN数据
    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['同盾分数'= np.unique(inData[:,0])
    df['同盾多头借贷命中'= 0
    df['同盾多头借贷未命中'= 0
    df['total'= 0
    df.index = df.同盾分数.values
       
    # Count the number of starts and failures
    #inData.shape[0] 表示数据多少
    for ii in range(inData.shape[0]):
        #获取第一个值的温度
        curTemp = inData[ii,0]
        #获取第一个值的值,是否发生故障
        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 '''
    #点积,比如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):
    #阵列,数值
    array_values = data[:,0]
    #阵列,二分类型
    array_type = data[:,1]
   
    plt.figure(figsize=(10,10))
    setFonts()
    #改变指定主题的风格参数
    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轴列表值,同盾分数
    list_values = [row[0for row in inData]
    list_values = [int(i) for in list_values]
    #获取列表最大值和最小值
    max_value=max(list_values)
    print("max_value:",max_value)
    min_value=min(list_values)
    print("min_value:",min_value)
    #最大值和最小值留有多余空间
    = np.arange(min_value, max_value+1)
    = logistic(x, beta, alpha)
    print("test")
    plt.hold(True)
    plt.plot(x,y,'r')
    #设置y轴坐标刻度
    plt.yticks([01])
    #plt.xlim()返回当前的X轴绘图范围
    plt.xlim([min_value,max_value])
    outFile = picName
    plt.ylabel("同盾多头借贷命中概率",fontproperties=font)
    plt.xlabel("同盾分数",fontproperties=font)
    plt.title("逻辑回归-同盾分数VS同盾多头借贷命中概率",fontproperties=font)
    #产生方格
    plt.hold(True)
    #图像外部边缘的调整
    plt.tight_layout
    plt.show(outFile)
       
#用于预测逻辑回归概率
def Prediction(x):
    = logistic(x, beta, alpha) 
    print("probability prediction:",y)
'''
Prediction(80)
probability prediction: 0.872046286637
  
Prediction(100)
probability prediction: 0.970179520648
  
'''
       
#获取数据 
inData = getData()
#得到频率计算后的数据
dfFit = prepareForFit(inData) 
#Generalized Linear Model 建立二项式模型
model = glm('同盾多头借贷未命中 +同盾多头借贷命中 ~ 同盾分数', data=dfFit, family=Binomial()).fit() 
print(model.summary())
chi2=model.pearson_chi2
'''Out[37]: 46.893438309853522  分数越小,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")
#测试
Prediction(20)
Prediction(60)
Prediction(80)


python机器学习生物信息学系列课(博主录制):http://dwz.date/b9vw

up主 python机器学习生物信息学系列课

微信公众号:pythonEducation

欢迎关注博主主页,学习python视频资源


逻辑回归实战2--同盾分数与同盾多头借贷的评论 (共 条)

分享到微博请遵守国家法律