统计学,风控建模经常遇到卡方分箱算法ChiMerge。卡方分箱在金融信贷风控领域是逻辑回归评分卡的核心,让分箱具有统计学意义(单调性)。卡方分箱在生物医药领域可以比较两种药物或两组病人是否具有显著区别。但很多建模人员搞不清楚卡方分箱原理。先给大家介绍一下经常被提到的卡方分布和卡方检验是什么。欢迎各位学习python信用评分卡建模(附代码),腾讯课堂和网易云课堂入口分别如下:python信用评分卡建模(附代码)-学习视频教程-腾讯课堂​ke.qq.comhttps://study.163.com/course/courseMain.htm?courseId=1005214003&share=2&shareId=400000000398149​study.163.com

分类变量检验方法

卡方分布绘图

如果多个符合正态分布的独立随机变量z1,z2,z3.....zk,

z1+z2+z3+....z_k呈现卡方分布,自由度k.

有几个正态分布相加,就有几个自由度

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

'''

python金融风控评分卡模型和数据分析:https://ke.qq.com/course/package/31250?tuin=dcbf0ba

讲师学院教学主页:https://ke.qq.com/teacher/231469242?tuin=dcbf0ba

'''

import numpy as np

import matplotlib.pyplot as plt

import scipy.stats as stats

import seaborn as sns

import math,pylab,matplotlib,numpy

from matplotlib.font_manager import FontProperties

#设置中文字体

font=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=15)

n=10

#绘制自由度为n的卡方分布图,n表示生成卡方数组的个数

def Get_chisquareDatas(n):

#标准正太分布

normalDistribution=stats.norm(0,1)

list_data=[]

for i in range(n):

normal_data=normalDistribution.rvs(30)

chisquare_data=normal_data**2

list_data.append(chisquare_data)

return list_data

def Plot_chisquare(n):

list_data=Get_chisquareDatas(n)

sum_data=sum(list_data)

plt.hist(sum_data)

Plot_chisquare(2)

Plot_chisquare(3)

Plot_chisquare(10)

官方绘图代码

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

'''

python金融风控评分卡模型和数据分析:https://ke.qq.com/course/package/31250?tuin=dcbf0ba

讲师学院教学主页:https://ke.qq.com/teacher/231469242?tuin=dcbf0ba

'''

from scipy.stats import chi2

import matplotlib.pyplot as plt

import numpy as np

fig, ax = plt.subplots(1, 1)

df = 20

mean, var, skew, kurt = chi2.stats(df, moments='mvsk')

#绘制函数的起始点和终止点

#pdf为概率密度函数

#百分比函数(PPF) :the inverse of the CDF. PPF 函数和连续分布函数CDF相逆,

#比如输入哪一个点,可以得到低于等于20的概率?

#ppf(0.01, df)表示输入哪个点,得到概率低于0.01

initial=chi2.ppf(0.01, df)

end=chi2.ppf(0.99, df)

x = np.linspace(initial,end, 100)

#概率密度函数用于绘图

ax.plot(x, chi2.pdf(x, df), 'r-', lw=5, alpha=0.6, label='chi2 pdf')

plt.title("df is %d"%df)

plt.show()

卡方检验代码

可汗学院的问题

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

'''

python金融风控评分卡模型和数据分析:https://ke.qq.com/course/package/31250?tuin=dcbf0ba

讲师学院教学主页:https://ke.qq.com/teacher/231469242?tuin=dcbf0ba

'''

'''

卡方公式(o-e)^2 / e

期望值和收集到数据不能低于5,o(observed)观察到的数据,e(expected)表示期望的数据

(o-e)平方,最后除以期望的数据e

'''

import numpy as np

from scipy import stats

from scipy.stats import chisquare

list_observe=[30,14,34,45,57,20]

list_expect=[20,20,30,40,60,30]

std=np.std(data,ddof=1)

print(chisquare(f_obs=list_observe, f_exp=list_expect))

p=chisquare(f_obs=list_observe, f_exp=list_expect)[1]

'''

返回NAN,无穷小

'''

if p>0.05 or p=="nan":

print"H0 win,there is no difference"

else:

print"H1 win,there is difference"

contigency table联立表

测试数据

第一行:草本药1,草本药2,安慰剂

第二行:生病和非生病

H0:草本药和疾病无关系

H1:草本药和疾病有关系

可汗学院计算出来的卡方值2.53;自由度2,显著性0.1,的关键值4.6

卡方值2.53

python代码与可汗学院算出结果一致,此版本体现算法推导过程。缺点就是要自己计算出期望值列表

-*- coding: utf-8 -*-

'''

python金融风控评分卡模型和数据分析:https://ke.qq.com/course/package/31250?tuin=dcbf0ba

讲师学院教学主页:https://ke.qq.com/teacher/231469242?tuin=dcbf0ba

卡方公式(o-e)^2 / e期望值和收集到数据不能低于5,o(observed)观察到的数据,e(expected)表示期望的数据(o-e)平方,最后除以期望的数据e
联立表contigency table计算'''

from scipy.stats import chisquare

list_observe=[34,38,28,50]
list_expect=[29.76,42.2,32.24,45.77]

row=2

colume=2

def Contigency_table(row,colume,list_observe,list_expect):

degreeFreedom=(row-1)*(colume-1)

print(chisquare(f_obs=list_observe, f_exp=list_expect,ddof=degreeFreedom)) p=chisquare(f_obs=list_observe, f_exp=list_expect)[1]

if p>0.05 or p=="nan":

print"H0 win,there is no difference"

else:

print"H1 win,there is difference"

Contigency_table(row,colume,list_observe,list_expect)

此版本不用算出期望值,更加方便,参考的是2*2联立表,自由度=1,critical value=2.7

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

'''

python金融风控评分卡模型和数据分析:https://ke.qq.com/course/package/31250?tuin=dcbf0ba

讲师学院教学主页:https://ke.qq.com/teacher/231469242?tuin=dcbf0ba

'''

#独立性检验test for independence,也是卡方检验chi_square

#前提条件:a,b,c,d 必须大于5

#2.706是判断标准(90概率),值越大,越有关,值越小,越无关

def value_independence(a,b,c,d):

if a>=5 and b>=5 and c>=5 and d>=5:

return ((a+b+c+d)*(a*d-b*c)**2)/float((a+b)*(c+d)*(a+c)*(b+d))

#返回True表示有关

#返回False表示无关

def judge_independence(num_independence):

if num_independence>2.706:

print ("there is relationship")

return True

else:

print("there is no relationship")

return False

a=34

b=38

c=28

d=50

chi_square=value_independence(a,b,c,d)

relation=judge_independence(chi_square)

python官网版本,更加方便和科学SciPy v1.5.4 Reference Guide​docs.scipy.org

import scipy.stats as stats

data = np.array([[43,9],

[44,4]])

V, p, dof, expected = stats.chi2_contingency(data)

print(p)

例子:

欢迎访问讲师教学主页:

python 卡方分布函数_卡方检验2-python代码实现相关推荐

  1. python zip函数_相当于Python的zip函数

    下面是一个更时髦的ECMAScript 6版本:zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c])) 插图等价物到Python{z ...

  2. python while函数_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

  3. python编写函数_浅谈Python 函数式编程

    匿名函数lambda表达式 什么是匿名函数? 匿名函数,顾名思义就是没有名字的函数,在程序中不用使用 def 进行定义,可以直接使用 lambda 关键字编写简单的代码逻辑.lambda 本质上是一个 ...

  4. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  5. python编写函数_如何用Python编写自己喜欢的R函数

    python编写函数 数据科学和机器学习的伟大现代斗争之一是" Python vs. R". 毫无疑问,近年来两者都已经取得了巨大的发展,成为数据科学,预测分析和机器学习的顶级编程 ...

  6. python with函数_详解Python中startswith()函数与endswith函数的使用方法

    下面小编就为大家带来一篇老生常谈Python startswith()函数与endswith函数.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 函数:startswit ...

  7. python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

    大家好!今天呢,我们来聊一聊如何加速你的 python 代码. Python 语言的优点可以列举出许多,语法简单易懂.模块丰富.应用广泛等等.但是世界上没有有完美的东西,python 一个明显缺点就是 ...

  8. python del函数_干货:Python的内存管理办法

    了解内存管理可以帮助您编写高效的Python代码.可能无法控制内存分配,但是您可以优化程序来更好地分配内存. 在python中,整个对象存储在内存中,对象可以是整数.字符串或列表,以及指向对象的变量. ...

  9. python union函数_如何掌握Python union()方法及怎么用?

    不断学习python的过程里,总能遇到各种形形色色的函数或者方法,本章给大家带来python union的用法,具体内容如下: union()方法 描述:union() 取并集,效果等同于 | ,重复 ...

最新文章

  1. webpack源码分析之三:loader
  2. Python Numba CPU下加速
  3. qprocess调用linux命令
  4. 深度优先遍历算法-03二叉树路径遍历问题
  5. 小学计算机课程表说课稿,小学信息技术《制作课程表》说课稿.doc
  6. linux smb 启动失败,[已解决]windows能看到smb,但是打不开
  7. 神经网络识别车牌字符
  8. click 在网页测试手机模式下无效,不能执行。调成非手机模式即可
  9. HDU 4553:约会安排(区间合并)
  10. linux配置时间服务器(ntp)
  11. php 大excel,如何用php生成一个大的Excel文件?
  12. 阿里播放器的使用Aliplayer
  13. cookie基础知识
  14. 生活中的逻辑谬误05.特例谬误
  15. mac下删除ntfs下的文件垃圾篓清空不干净的解决办法
  16. 苹果手机几月份最便宜_苹果手机越来越便宜了么?目前看来确实是这样的!
  17. sql日期格式转换函数_SQL转换日期函数和格式
  18. 别费劲找站长工具共享VIP了 这个工具也不错
  19. 程序猿秃顶算工伤吗?
  20. Java设计模式面试专题

热门文章

  1. matlab实验结果图片保存
  2. epoll LT ET 区别 | Nginx epoll 原理 listend 用 LT
  3. 解决端口被占用问题(以80端口为例)
  4. 《国产操作系统之银河麒麟》银河麒麟服务器操作系统引导过程
  5. 领导 - 如何培养您的团队的信心
  6. 一个人的孤独,一群人的狂欢!
  7. oracle中制表符,oracle中去掉文本中的换行符、回车符、制表符
  8. 小程序开发入门常见小问题-(1)
  9. staruml文字换行 - 魔改StarUML(不负责任版,2333
  10. http://cn.bing.com/ 微软的搜索引擎“bing 必应” 终于开通了……