朴素贝叶斯分析

数据观察

我们的目标是判断数据中的客户哪些是可以借款的,客户的借款信用是我们判断的依据之一,可以通过朴素贝叶斯的方法来分类客户的借款信用情况。观察表格数据可知,最主要可以判断客户借款信用的主要数据包括初始评价、历史正常还款期数、历史逾期还款期数、历史成功借款金额、总待还本金。而据观察,手机认证、户口认证、视频认证、学历认证、征信认证、淘宝认证等数据,并不影响客户的借款信用。

分析思路

评价从高到低分别有A、B、C、D、E、F共6个等级,我们可以将其转化成分值段,分别对应着180~151、150~121、120~91、90~61、60~31、30~0,借款成功的概率(不保留小数部分)范围就分别为100%~84%,83%~67%,66%~51%,50%~34%,33%~17%,16%~0。

而我们将初始评价取分值段的中间值,即A、B、C、D、E、F分别对应着165、135、105、75、45、15,则初始的借款成功概率(不保留小数部分)分别为92%、75%、58%、41%、25%、9%,记借款成功的事件为o;

将历史逾期还款期数除以历史所有还款期数(即历史正常还款期数与历史逾期还款期数之和)算出逾期还款概率,这里将逾期还款事件记为a,则1-P(a)即为及时还款概率,这里记为P(b),记及时还款事件为b;

用总待还本金除以历史成功借款金额算出其欠款占比,这里记为Pc,以此衡量其成功还款概率,这里记为Pd,Pd=1-Pc,记事件成功还款为d;

我们将在客户及时还款概率和成功还款概率情况下计算其新的成功借款概率P(e),并重新划分评价等级。计算公式如下:

算法思路

(1)定义一个打开文件的函数,并提取有效的数据并保存成一定的数据格式,方便后续的使用和分析;

(2)计算所需的各概率值P(b)、P(d)、P(b|o)、P(d|o)等;

(3)计算其新的成功借款概率P(e);

(4)重新划分各客户的信用评价等级。

算法实现

from openpyxl import load_workbook#打开数据文件wb = load_workbook('bankLoan.xlsx')sheet = wb['Sheet1']shRow = sheet.max_row#保存成字典形式def sheet_Dict(sheet,shRow):shDict = {}for i in range(2,shRow):shDict.setdefault(sheet.cell(row=i,column=1).value,[sheet.cell(row=i,column=6).value,sheet.cell(row=i,column=18).value,sheet.cell(row=i,column=19).value,sheet.cell(row=i,column=20).value,sheet.cell(row=i,column=21).value])    return shDict#调用sheetDict=sheet_Dict(sheet,shRow)#设空字典存放后续计算的概率值,n用来计数不同等级出现次数,后面算(P0 |Pb )和(P0 |Pd )dtDict={}n1=0n2=0n3=0n4=0n5=0n6=0#开始算条件概率值for key,value in sheetDict.items():l=[]#空列表存放概率值l.append(value[0])#先放初始等级,l[0]#根据初始等级的不同,先放其对应的初始成功借款概率值,l[1]if value[0]=="A":l.append(0.92)n1+=1elif value[0]=="B":l.append(0.75)n2+=1elif value[0]=="C":l.append(0.58)n3+=1elif value[0]=="D":l.append(0.41)n4+=1elif value[0]=="E":l.append(0.25)n5+=1elif value[0]=="F":l.append(0.09)n6+=1#存放Pd成功还款概率,l[2]if value[1]==0:l.append(0)else:l.append(1-value[2]/value[1])   #存放Pb成功还款概率,l[3]if (value[3]+value[4])==0:l.append(0)else:l.append(1-value[4]/(value[3]+value[4]))#将新列表作为字典值dtDict.setdefault(key,l)#计算等级的占比即其概率,方便后续算(P0 |Pb )和(P0 |Pd )p1=(n1/(n1+n2+n3+n4+n5+n6))p2=n2/(n1+n2+n3+n4+n5+n6)p3=n3/(n1+n2+n3+n4+n5+n6)p4=n4/(n1+n2+n3+n4+n5+n6)p5=n5/(n1+n2+n3+n4+n5+n6)p6=n6/(n1+n2+n3+n4+n5+n6)#开始算(P0 |Pb )和(P0 |Pd )for key,value in dtDict.items():l=value#用一个列表取字典的值#判断不同等级下(P0 |Pb )和(P0 |Pd )的计算,l[4],l[5]if value[1]==0.92:l.append(value[2]*p1+(1-value[2])*(1-p1))l.append(value[3]*p1+(1-value[3])*(1-p1))elif value[1]==0.75:l.append(value[2]*p2+(1-value[2])*(1-p2))l.append(value[3]*p2+(1-value[3])*(1-p2))elif value[1]==0.58:l.append(value[2]*p3+(1-value[2])*(1-p3))l.append(value[3]*p3+(1-value[3])*(1-p3))elif value[1]==0.41:l.append(value[2]*p4+(1-value[2])*(1-p4))l.append(value[3]*p4+(1-value[3])*(1-p4))elif value[1]==0.25:l.append(value[2]*p5+(1-value[2])*(1-p5))l.append(value[3]*p5+(1-value[3])*(1-p5))elif value[1]==0.09:l.append(value[2]*p6+(1-value[2])*(1-p6))l.append(value[3]*p6+(1-value[3])*(1-p6))#算出新的成功借款概率p=(l[1]*l[2]/l[4])*(l[1]*l[3]/l[5])#新划分等级,l[6]if 0.84<=p :l.append("A")elif 0.67<=p<=0.83 :l.append("B")elif 0.51<=p<=0.66 :l.append("C")elif 0.34<=p<=0.5 :l.append("D")elif 0.17<=p<=0.33 :l.append("E")elif p<=0.16 :l.append("F")#输出结果try:print('用户ID:',key,'旧信用评价等级:',l[0],'新信用评价等级:',l[6])except:pass

分析结果

可以看到,经过朴素贝叶斯方法将客户的信用等级进行重新分类,有一些客户的信用等级没有发生变化;有的是提升了,这意味着该客户在被评为原信用等级的情况下可以拿到更高的借款限额和更长的还款期限;有的是降低了,这意味着该客户在被评为原信用等级的情况下不应该拿到当前的借款限额和还款期限。

方法优劣

使用朴素贝叶斯方法分析数据的优点之一就是朴素贝叶斯的思路简单,在算法实现上也不困难,而且朴素贝叶斯还将各属性看作分别独立,让算法的实现更加简单;处理数据的时候可以处理多类别问题,比如在这次的分析中,就分析了A、B、C、D、E、F六个类别的信用等级;朴素贝叶斯的分类效率稳定

劣势主要在于对于输入数据的准备方式较为敏感,需要知道先验概率,还要计算后验概率;而先验概率取决于假设的模型,如果假设的模型出了错,那么分析得出的结果也是不准确的。

尝试用朴素贝叶斯分析借款信用等级相关推荐

  1. 朴素贝叶斯趣味挑战项目

    1.目的 定时爬取笑话网站,利用朴素贝叶斯分析,将不同笑话发给不同人群. 2.方案 (1)首先利用python爬虫抓取某个网站上的笑话. (2)提供训练样本,然后用朴素贝叶斯模型来判断当前的笑话是否属 ...

  2. 朴素贝叶斯分类器 文本分类_构建灾难响应的文本分类器

    朴素贝叶斯分类器 文本分类 背景 (Background) Following a disaster, typically you will get millions and millions of ...

  3. 算法工程师面试之朴素贝叶斯

    前言 文章来源: LawsonAbs@CSDN 弄懂一个算法是快乐的,V(^-^)V 是生成模型,是分类算法.使用的参数估计方法是极大似然估计(其实就是频率统计) 在定义朴素贝叶斯之前,先给出如下几个 ...

  4. 算法:关于生成抽样随机数的这些算法

    概述: 这里你是不是会说,生成随机数有什么难的?不就是直接使用Java封装好了的random就行了么?当然对于一般情况下是OK的,而且本文要说明的这些算法也是基于这个random库函数的. 本文主要是 ...

  5. 随机抽样java_java生成抽样随机数的多种算法

    本章先讲解Java随机数的几种产生方式,然后通过示例对其进行演示. 概述: 这里你是不是会说,生成随机数有什么难的?不就是直接使用Java封装好了的random就行了么?当然对于一般情况下是OK的,而 ...

  6. 用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类

    ❝ 关于自然语言处理(NLP)方面的文章.书籍非常之多,对于自然语言处理的上手,很多人是不知所措的.通过对本文的浏览,您应该能够对自然语言处理会有一个能够完整的有趣的基于Python的对自然语言处理的 ...

  7. 【转帖】药物设计软件【schrodinger】 all manual

    药物设计软件[schrodinger] all manual Schrödinger(薛定谔)是药物发现的完整软件包,包括:基于受体和配体结构的诱导契合和柔性对接模式:基于受体结构及配体极性的对接模式 ...

  8. Schrodinger 功能模块简介

    Schrödinger(薛定谔)是药物发现的完整软件包,包括:基于受体和配体结构的诱导契合和柔性对接模式:基于受体结构及配体极性的对接模式:基于受体结构及溶液环境性质的对接模式:组合化学库设计及基于组 ...

  9. 机器学习系列--Naive Bayes Classification

    Native Bayes 贝叶斯决策理论的核心思想:选择最高概率的决策.朴素贝叶斯是贝叶斯决策理论的一部分. 下面不加证明地直接给出贝叶斯定理: 朴素贝叶斯分类的正式定义如下: 因为分母对于所有类别为 ...

  10. 《Python Spark 2.0 Hadoop机器学习与大数据实战_林大贵(著)》pdf

    <Python+Spark 2.0+Hadoop机器学习与大数据实战> 五星好评+强烈推荐的一本书,虽然内容可能没有很深入,但作者非常用心的把每一步操作详细的列出来并给出说明,让我们跟着做 ...

最新文章

  1. 谁是中国大学理科的王者?
  2. Spring4-@Configuration的使用
  3. 给初恋女孩的信....
  4. Android常见面试题
  5. SAP ABAP和C4C,Hybris Commerce里一些性能分析工具
  6. 适用于ATI卡的GPU计算MD5的小程序源码,基于AMD APP SDK开发
  7. 井字棋小游戏c语言简单编码,C语言实现井字棋小游戏
  8. H3C交换机MAC VLAN原理及配置示例
  9. 【Oracle经典】132个oracle热门精品资料——下载目录
  10. 用GDB修改可执行文件的代码和变量(gdb)
  11. 修改计算机设备管理器信息,电脑硬件信息更改器(牛B硬件信息修改大师)
  12. 适配器模式(Adapter模式)详解
  13. [web前端] 去哪儿网前端架构师司徒正美:如何挑选适合的前端框架?
  14. 实例!从EIQ-ABC分析法到自动化方案规划设计
  15. 解决opencv打开视频上下翻转问题
  16. Excel “不能在隐藏工作簿中编辑宏,请选定“取消窗口隐藏”命令以显示工作簿”
  17. python自动输入饥荒控制台代码
  18. OSChina 周二乱弹 ——有一天你当了程序员巴巴
  19. 自定义View—弹性滑动
  20. Linux学习笔记(二) -- Linux学习笔记(二) – 解决VMware主窗口中的虚拟机窗口太小的方法

热门文章

  1. 985翻译硕士都在找的这款软件
  2. 电路设计中发光二极管用作指示灯时的限流电阻如何选择
  3. IDEA类和方法注释模板设置(非常详细)
  4. STM32F0免费版keil下载激活方式
  5. 进销存系统收费标准是怎样的?
  6. 机械臂运动空间的计算_深圳全气动式工业助力机械手定做
  7. 【企业微信】h5调试面板
  8. stm32f103测脉冲数用于带霍尔编码器的电机测速
  9. dell pc restore 修复计算机,dell 恢复出厂系统 修复计算机选项失效
  10. java保留字详解_java复习基础知识——java保留字