卡方最优分箱

2024-05-26 14:58
文章标签 最优 卡方 分箱

本文主要是介绍卡方最优分箱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


```python
def Chi2(df, total_col, bad_col,overallRate):'''#此函数计算卡方值:df dataFrame:total_col 每个值得总数量:bad_col 每个值的坏数据数量:overallRate 坏数据的占比: return 卡方值'''df2=df.copy()df2['expected']=df[total_col].apply(lambda x: x*overallRate)combined=list(zip(df2['expected'], df2[bad_col]))chi=[(i[0]-i[1])**2/i[0] for i in combined]chi2=sum(chi)return chi2
> #最大分箱数分箱 def ChiMerge_MaxInterval_Original(df, col, target,max_interval=5):
>     '''
>     : df dataframe
>     : col 要被分项的特征
>     : target 目标值 0,1 值
>     : max_interval 最大箱数
>     :return 箱体
>     '''
>     colLevels=set(df[col])
>     colLevels=sorted(list(colLevels))
>     N_distinct=len(colLevels)
>     if N_distinct <= max_interval:
>         print("the row is cann't be less than interval numbers")
>         return colLevels[:-1]
>     else:
>         total=df.groupby([col])[target].count()  #按分类特征分组,计算总数
>         total=pd.DataFrame({'total':total})      
>         bad=df.groupby([col])[target].sum()      #按分类特征分组,计算不良总数
>         bad=pd.DataFrame({'bad':bad})
>         regroup=total.merge(bad, left_index=True, right_index=True, how='left')
>         regroup.reset_index(level=0, inplace=True)  #自动重置索引,添加从0到n的索引值
>         N=sum(regroup['total'])
>         B=sum(regroup['bad'])
>         overallRate=B*1.0/N
>         groupIntervals=[[i] for i in colLevels]
>         groupNum=len(groupIntervals)
>         while(len(groupIntervals)>max_interval):
>             chisqList=[]
>             for interval in groupIntervals:
>                 df2=regroup.loc[regroup[col].isin(interval)]
>                 chisq=Chi2(df2,'total','bad',overallRate)
>                 chisqList.append(chisq)
>             min_position=chisqList.index(min(chisqList))
>             if min_position==0:
>                 combinedPosition=1
>             elif min_position==groupNum-1:
>                 combinedPosition=min_position-1
>             else:
>                 if chisqList[min_position-1]<=chisqList[min_position + 1]:
>                     combinedPosition=min_position-1
>                 else:
>                     combinedPosition=min_position+1
>             #合并箱体
>             groupIntervals[min_position]=groupIntervals[min_position]+groupIntervals[combinedPosition]
>             groupIntervals.remove(groupIntervals[combinedPosition])
>             groupNum=len(groupIntervals)
>         groupIntervals=[sorted(i) for i in groupIntervals]
>         print(groupIntervals)
>         cutOffPoints=[i[-1] for i in groupIntervals[:-1]]
>         return cutOffPoints

这篇关于卡方最优分箱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004790

相关文章

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

华为OD机试 - 最优结果的a数组数量 - 贪心思维(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述

清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 及 通过使用文件或者套节字来识别进程的fuser命令

一、清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现         最近又接触了一些线性求解的问题,以前主要都是在高中数学里接触到,都是使用笔算,最后通过一些函数式得出最小或者最大值,最近的研究生学业上接触到了一个Excel solver分析工具,对这种线性求最优解的问题感觉使用起来真是得心应手。在使用这个工具前,EXCEL里需要先装上solver工具,装起来很也简单,网上

【POJ】2728 Desert King 最优比率生成树——01分数规划【经典】

最近在刷巨巨们放出来的专题,然后没做几题就卡住了,果然还是太弱了T U T... 这次做到了一题01分数规划求解的生成树问题。 题目大意是这样的:给你一个无向完全图,每条边i都有两个权值,长度a[ i ],花费b[ i ],需要选出其中的一些边构造一颗生成树,生成树需要满足条件:∑ b [ i ] / ∑ a [ i ]最小。 这样我还是先来介绍一下01分数规划吧~ 给定一个上述的问

2024国赛数学建模备赛|30种常用的算法模型之最优算法-非线性规划

1.1   非线性规划的实例与定义 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有 单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都 有自己特定的适用范围。 下面通过实例归纳出非线性规划数学模型的一般形式,介绍有关非线性规划的基本 概念。 最佳投资方案应是投资

超好用的图纸加密软件排行榜 | 2024图纸加密软件的七款最优选择!

数字化设计日益普及的今天,图纸作为设计与工程的核心载体,其安全性成为了企业和设计师们最为关注的焦点之一。 面对日益复杂的数据泄露风险,如何有效地保护图纸文件的安全呢? 下面,我们就来探讨一下2024图纸加密软件的最优选择,为您介绍七款超好用的图纸加密软件! 一、域智盾:专业级图纸加密的领军者 ①透明加密 采用基于Windows文件系统驱动开发的透明加密技术,结合高强度国际流行加密算法

最短路径算法:迪杰克斯拉(Dijkstra)算法(基于贪心思想)【从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题】【能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低】

Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Viterbi和Dijkstra算法看起来比较像,两者的区别: Dijkstra算法适应范围更广。Viterbi算法用在特殊的有向无环图中,而Dijkstra算法可以用在

Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】

Python实现连续数据的离散化处理主要基于两个函数:pandas.cut和pandas.qcut,pandas.cut根据指定分界点对连续数据进行分箱处理,pandas.qcut可以指定箱子的数量对连续数据进行等宽分箱处理(注意:所谓等宽指的是每个箱子中的数据量是相同的) 应用cut、qcut实现数据的区间分组应用get_dummies实现数据的one-hot编码 数据离散化 可以用来减少

【Spfa】noip2009 最优贸易

最优贸易 (trade.pas/c/cpp) 【问题描述】 C 国有n 个大城市和 m 条道路,每条道路连接这n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为1 条。    C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同。但是,同