离散分箱

#对离散特征进行分箱(特征分箱需遵循分箱后样本随分箱结果有规律变化)

def get_dispersed_result_group(data,aim,label,label_loss):
	'''
	data : 数据集需包括aim和label
	aim : 要分组的特征名
	label :标签名
	label_loss : 标签的流失值,就是分箱后指定的需随结果规律变化的label值
	'''
	
	result_group = []
	result_rate = []
	group_lis = data[aim].value_counts().index
	for group in group_lis;
		need_data = data[data[aim] == group][label]
		if len(need_data) < 2:
			result_group.append(group)
			result_rate.append(0)
			break
		
		tem = need_data.value_counts().to_dict()
		
		loss_rate = tem[label_loss] / len(need_data)
		result_group.append(group)
		result_rate.append(loss_rate)
	
	n = len(result_rate)
	
	while n > 1:
		for point in range(1,n):
			front = point - 1
			behind = point
			if result_rate[front] > result_rate[behind]:
				result_rate[front],result_rate[behind] = result_rate[behind],result_rate[front]
				result_group[front],result_group[behind] = result_group[behind],result_group[front]
		n -= 1
	
	return aim,result_group,result_rate
	
def dispersed_box_data(data,aim,result_group):
	'''
	data : 全部数据
	aim :针对的特征
	result_group :排序后的分组
	'''
	if len(result_group) < 3:
		print("does not need cut !")
		return
	
	else:
		mid_index = len(result_group) // 2
		data[aim].replace(result_group[:mid_index],0,inplace=True)
		data[aim].replace(result_group[mid_index:],1,inplaceTrue)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值