金融风控-贷款违约预测-训练营 - Task3
一、 学习知识点概要
- 特征预处理、缺失值、异常值处理、数据分箱等特征处理方法
- 特征交互、编码、选择的相应方法
二、学习内容
2.1 特征预处理、缺失值、异常值处理、数据分箱等特征处理方法
2.1.1 准备工作
# 需要提前安装的包
!pip install catboost --user
# 导入所需库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
from tqdm import tqdm
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.preprocessing import MinMaxScaler
import xgboost as xgb
import lightgbm as lgb
from catboost import CatBoostRegressor
import warnings
from sklearn.model_selection import StratifiedKFold, KFold
from sklearn.metrics import accuracy_score, f1_score, roc_auc_score, log_loss
warnings.filterwarnings('ignore')
# 读取数据操作
data_train =pd.read_csv('train.csv')
data_test_a = pd.read_csv('testA.csv')
2.1.2 数据预处理
- 缺失值的填充
- 将缺失值指定为值0
- 填充缺失值前一个或后一个的值
缺失值的处理
- 时间格式处理
- 查看特征类型,筛选出有时间格式的特征
- 将其类型转换为时间格式,构造时间特征
- 类别特征处理
# 部分类别特征
cate_features = ['grade', 'subGrade', 'employmentTitle', 'homeOwnership', 'verificationStatus', 'purpose', 'postCode', 'regionCode', \
'applicationType', 'initialListStatus', 'title', 'policyCode']
for f in cate_features:
print(f, '类型数:', data[f].nunique())`
2.1.3 异常值处理
数据可能会存在一些异常值,所以在数据处理的过程中我们也需要识别并将异常值剔除避免对接下的建模和调参产生影响
- 基于3segama(σ)原则
一个数据分布近似正态,那么大约 68% 的数据值会在均值的一个标准差 σ 范围内,大约 95% 会在两个标准差 σ 范围内,大约 99.7% 会在三个标准差 σ 范围内。
# 识别异常值
def find_outliers_by_3segama(data,fea):
data_std = np.std(data[fea])
data_mean = np.mean(data[fea])
outliers_cut_off = data_std * 3
lower_rule = data_mean - outliers_cut_off
upper_rule = data_mean + outliers_cut_off
data[fea+'_outliers'] = data[fea].apply(lambda x:str('异常值') if x > upper_rule or x < lower_rule else '正常值')
return data`
# 得到特征的异常值后可以进一步分析变量异常值和目标变量的关系
data_train = data_train.copy()
for fea in numerical_fea:
data_train = find_outliers_by_3segama(data_train,fea)
print(data_train[fea+'_outliers'].value_counts())
print(data_train.groupby(fea+'_outliers')['isDefault'].sum())
print('*'*10)
- 基于箱型图
找了更加详细的相关解答
箱型图检查异常值
2.1.4 数据分箱
分箱:连续变量离散化,将多状态的离散变量合并成少状态
数据分箱的原因:特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定。
- 固定宽度分箱
通过固定宽度分箱,每个分箱中会包含一个具体范围内的数值。这些范围可以自定义也可以通过自动分段来生成,它们可以是线性的,也可以是指数性的。 - 分位数分箱
分位数可以将数据化分为相等的若干份数的值。例如,可以使用中位数将数据划分为两半,或使用四分位数将数据分为4等份。 - 卡方分箱
卡方分箱是典型的基于合并机制的自底向上离散化方法。其基于如下假设:如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。此处衡量分布相似性的指标就是卡方值。卡方值越低,类分布的相似度越高
特征工程之分箱–卡方分箱
特征离散化(一) 之 卡方分箱
2.2 特征交互、编码、选择的相应方法
2.2.1 特征交互
- 特征和特征之间组合
- 特征和特征之间衍生
2.2.2 特征编码
- one-hot编码
独热编码(哑变量),将原始特征变量转换成以原始特征值分类的多维度的变量,并用是否(0,1)这种方式的新特征值替代和量化。 - label-encode编码
将原始特征值编码为自定义的数字标签完成量化编码过程 - 机器学习"编码特征"解析
2.2.3 特征选择
- 1 Filter
- 方差选择法
- 相关系数法(pearson 相关系数)
- 卡方检验
- 互信息法
- 2 Wrapper (RFE)
- 递归特征消除法
- 3 Embedded
- 基于惩罚项的特征选择法
- 基于树模型的特征选择
三、学习问题与解答
- 3σ原则跟箱型图原则的比较
3σ原则对数据分布有一定限制,而箱型图并不限制数据分布,只是直观表现出数据分布的本来面貌。其识别异常值的结果比较客观,而且判断标准以四分位数和四分位间距为标准,多达25%的数据可以变得任意远而不会扰动这个标准,鲁棒性更强。 - one-hot encoding 和 label-encoding两种编码的区分和使用
通过查找资料,下面链接中有简洁明了的解答
机器学习"编码特征"解析
四、学习思考与总结
- 这一个关于数据特征处理的部分对于整个项目整个模型来说是至关重要的,影响着接下来建模的走向
- 这一部分学起来还是有点难度的,特别是代码有点复杂,需要更多的耐心和坚持