金融风控训练营 Task3 特征工程 学习笔记
本学习笔记为阿里云天池龙珠计划金融风控训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/activity/promotion/aicampfr
一、学习知识点概要
文章目录
二、学习内容
1. 内容介绍
- 数据预处理
- 缺失值的填充
- 时间格式处理
- 对象类型特征转换到数值
- 异常值处理
- 基于3segama原则
- 基于箱型图
- 数据分箱
- 固定宽度分箱
- 分位数分箱
- 离散数值型数据分箱
- 连续数值型数据分箱
- 卡方分箱(选做作业)
- 特征交互
- 特征和特征之间组合
- 特征和特征之间衍生
- 其他特征衍生的尝试(选做作业)
- 特征编码
- one-hot编码
- label-encode编码
- 特征选择
- 1 Filter
- 2 Wrapper (RFE)
- 3 Embedded
2. 代码示例
1. 此次学习所用到的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns #基于matplotlib的图形可视化
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')
2. 特征预处理
-
缺失值处理
参考于:
-
填充固定值
df.fillna(0,inplace=True) #填充0 df.fillna(df.mean(),inplace=True) #填充均值 df.fillna(df.median(),inplace=True) #填充中位数 df.fillna(df.mode(),inplace=True) #填充众数
-
填充上下条的数据
df.fillna(method='pad',inplace=True) #填充前一条数据的值,但前一条不一定有值 df.fillna(method='bfill',inplace=True) #填充后一条数据的值,但后一条不一定有值
-
填充插值得到的数据
用插值法拟合出缺失的数据,再进行填充
for f in features: #插值法填充 df[f] = df[f].interpolate() df.dropna(inplace=True)
-
填充KNN数据
填充近邻的数据,用knn计算临近的k个数据,再填充均值
from fancyimpute import KNN train_data_x = pd.DataFrame(KNN(k=6).fit_transform(train_data_x), columns=features)
-
填充模型预测的值
把缺失值作为新的label,建立模型得到预测值,然后进行填充
选择某个缺失值数量适当的特征采用随机森林RF进行拟合,其他缺失特征采用均值进行填充
-
-
时间格式处理
#转化成时间格式 for data in [data_train, data_test_a]: data['issueDate'] = pd.to_datetime(data['issueDate'],format='%Y-%m-%d') startdate = datetime.datetime.strptime('2007-06-01'