这个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的结果。
注意,字段不要用中文。