一周算法实践进阶day2:特征工程

本文介绍了在金融数据预测任务中如何使用IV值和随机森林进行特征选择。通过IV值和随机森林计算,筛选出对目标变量有预测能力的特征,并在模型训练中对比了特征选择前后的效果,发现特征减少对性能影响不大。
摘要由CSDN通过智能技术生成

数据说明

本次数据与之前数据不同: 下载
这份数据集是金融数据(非原始数据,已经处理过了),我们要做的是预测贷款用户是否会逾期。表格中 “status” 是结果标签:0表示未逾期,1表示逾期。

1任务

  • 特征选择:分别用IV值和随机森林进行特征选择。再用【算法实践】中的7个模型(逻辑回归、SVM、决策树、随机森林、GBDT、XGBoost和LightGBM),进行模型评估。

2概念介绍

2.1IV值进行特征选择

2.1.1基本介绍
在二分类问题中,IV值(Information Value)主要用来对输入变量进行编码和预测能力评估。

IV 值的取值范围是[0, ∞ \infty∞),其大小表示该变量预测能力的强弱。通常认为:

IV值 ** 预测 能力**
<0.02 无用
0.02-0.1 弱预测
0.1-0.3 中等预测
0.3-0.5 强预测
>0.5 可疑

一般选择中等和强预测能力的变量用于模型开发,一些学派也只提倡具有中等IV值的变量来进行模型开发。

2.1.2计算公式

(1)WOE(weight of evidence,证据权重),是对原始变量的一种编码形式。
(2)IV值:IV值的计算以WOE为基础,相当于是WOE值的一个加权求和。IV值主要用于特征选择,如果想对变量的预测能力进行排序,可以按 IV 值从高到低筛选。

IV在WOE前多乘了一个因子:
1)保证了IV的值不是负数;
2)很好的考虑了分组中样本占整体的比例(比例越低,这个分组对变量整体预测能力的贡献越低)。

这两者的详细介绍及公式请见参考1

2.2随机森林进行特征选择

用随机森林进行特征重要性评估的思想比较简单,主要是看每个特征在随机森林中的每棵树上做了多大的贡献,然后取平均值,最后比较不同特征之间的贡献大小。
贡献度的衡量指标包括:基尼指数(gini)袋外数据(OOB)错误率作为评价指标来衡量。
特征筛选(随机森林)的详细介绍请见
参考2

3完整代码及注释

#导入包
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score,roc_auc_score
import math
import numpy as np
from scipy import stats#包括统计工具和随机过程的概率过程
from sklearn.utils.multiclass import type_of_target#可以检查变量类型,连续或二分类等
from sklearn.model_selection import GridSearchCV#网格搜索(grid search)。
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import LinearSVC
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.ensemble import GradientBoostingClassifier
import warnings
warnings.filterwarnings("ignore")

#加载数据
data = pd.read_csv('data.csv',encoding='unicode_escape')#编码格式要注意
data.drop_duplicates(inplace=True)#是直接对原data进行操作,去除data中重复的行
print("数据行列数",data.shape)
#划分数据集
X = data.drop(['status','Unnamed: 0'],axis=1)
X_num = X.select_dtypes(include='number').copy()#数值型
X_str = X.select_dtypes(exclude='number').copy()#非数值型
y = data['status']

#缺失值处理
#发现缺失值方法:缺失个数、缺失率
#查看每列是否有缺失值
#print(data.isnull().sum())
# 使用缺失率(可以了解比重)并按照值降序排序 ascending=False
X_num_miss = (X_num.isnull().sum() / len(X_num)).sort_values(ascending=False)
#print(X_num_miss.head())
#print('----------' * 5)
X_str_miss = (X_str.isnull().sum() / len(X_str)).sort_values(ascending=False)
#print(X_str_miss.head())
#缺失值较多的列student_feature进行删除
X_num = X_num.drop(['student_feature'],axis = 1)
#高缺失率特征处理:EM插补、多重插补。这里先将缺失值归为一类。可以用平均数、中位数、众数、固定值(比如0)填充
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值