Python WOE的使用

这个WOE包是在做评分卡的时候从网上找到的,最新的为0.1.4版本,地址如下:

https://pypi.org/project/woe/#files

woe模块实现: 输入中会指名变量作为离散值还是连续值进行IV计算。

针对离散值,将每个值作为一个分组,计算个分组woe值,再计算IV值
针对连续值: 
计算将整体数据作为一个分组的IV值(命名为IV0)。
对所有值排序,根据最大,最小值平均划分100个取值区间(99个区间分割点,每个分割点可以将整体数据分割为左右两部分)
针对每个分割点,尝试将左右两部分作为两个分组,计算IV值(如果此种分组中,左右有一个分组中数据少于总体数据量的5%,不计算此分组IV)。获取99中分组方式中的最大IV值(IVmax)。
假如此最大IV值(IVmax)大于不分组IV值的101%(IV0),不进行分割。否则,以此分割点将数据整体分为左右两个组。每个组独立重新进行1步骤,进入下一轮循环。
根据记录所有分组点进行数据整体分组,计算IV。

下载完毕之后,打开压缩包,在example目录下找到config.csv并打开。

打开后就是对各个字段的设置,三个字段的意思我想分别是是否要分箱,是否是连续值,是否是模型特征。

配置完成后,运行HereWeGo.py的代码,注意配置训练数据的路径:

# -*- coding:utf-8 -*-
__author__ = 'boredbird'
import os
import pandas as pd
import woe.config as config
import woe.feature_process as fp
import woe.eval as eval

config_path = os.getcwd()+'\\woe\\examples\\config.csv'
data_path = os.getcwd()+'\\woe\\examples\\UCI_Credit_Card.csv'
cfg = config.config()
cfg.load_file(config_path,data_path)

for var in cfg.bin_var_list:
    # fill null
    cfg.dataset_train.loc[cfg.dataset_train[var].isnull(), (var)] = 0

# change feature dtypes
fp.change_feature_dtype(cfg.dataset_train, cfg.variable_type)

rst = []

# process woe transformation of continuous variables
for var in cfg.bin_var_list:
    rst.append(fp.proc_woe_continuous(cfg.dataset_train,var,cfg.global_bt,cfg.global_gt,cfg.min_sample,alpha=0.05))

# process woe transformation of discrete variables
for var in cfg.discrete_var_list:
    # fill null
    cfg.dataset_train.loc[cfg.dataset_train[var].isnull(), (var)] = 'missing'
    rst.append(fp.proc_woe_discrete(cfg.dataset_train,var,cfg.global_bt,cfg.global_gt,cfg.min_sample,alpha=0.05))

feature_detail = eval.eval_feature_detail(rst,'output_feature_detail.csv')

之后会输出一个output_feature_detail.csv文件,即分箱并计算iv的结果。

注意,字段不要用中文。

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WOE(Weight of Evidence), 或称为信息增益比率,是用于离散特征编码的一种统计方法,在数据建模中特别适用于分类问题。在Python中,特别是在处理缺失值或进行数据预处理时,WOE被用来对连续变量进行分箱(Binning),将其转换为类别形式以便更好地融入到模型中。 WOE的主要目的是衡量一个特征对于预测目标的影响程度,特别是当这个特征具有非线性关系时。计算过程通常是这样的: 1. **计算基尼指数**(Gini Index):这是一个度量不平等程度的指标,用于衡量某个变量取不同值时,整个样本随机划分后的不确定性。 2. **计算WOE值**:WOE是针对每个特征值,使得基尼系数变化的最大负对数,表示该特征值改变后不确定性下降了多少。 3. **累计WOE**:将所有特征值按照从小到大排序,计算累计的WOE值,通常用作新特征的创建,例如将原始数值映射到一个连续的范围。 Python中没有直接内置的WOE分箱工具,但你可以使用第三方库如`sklearn-preprocessing`中的`WOEEncoder`或者自定义实现。以下是一个简单的例子展示了如何使用`WOEEncoder`: ```python from sklearn.preprocessing import WOEEncoder # 假设你有一个DataFrame df,其中包含要进行WOE编码的列'feature' encoder = WOEEncoder() encoded_df = encoder.fit_transform(df[['feature']]) # 新的DataFrame 'encoded_df'将会有一个新的列'encoded_feature',这是基于'feature'的WOE编码 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值