机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

特征工程

特征工程,是根据数据集已有的特征,删除、加工产生新特征,从而改善模型的预测效果。著名的计算机科学家、人工智能与机器学习领域的领军人物吴恩达(Andrew Ng)有一句名言:“applied machine learning is basically feature engineering.” 具体上说,特征工程包括:

  • 特征构造:从数据集产生新特征。

  • 特征选择:仅选择最重要的特征或降维方法。

下面开始我们的特征工程!

Polynomial Features

在这个方法里,我们产生存在的特征的幂次或交互项作为新特征。例如,
EXT_SOURCE12EXT\_SOURCE_1^2EXT_SOURCE12​, EXT_SOURCE1×EXT_SOURCE2EXT\_SOURCE_1\times EXT\_SOURCE_2EXT_SOURCE1​×EXT_SOURCE2​.

现在,我们使用EXT_SOURCE and DAYS_BIRTH产生新的多项特征。为了避免过度拟合,我们选择的阶数不超过3.

# Make a new dataframe for polynomial features
poly_features = app_train[['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3', 'DAYS_BIRTH', 'TARGET']]
poly_features_test = app_test[['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3', 'DAYS_BIRTH']]# imputer for handling missing values
from sklearn.preprocessing import Imputer
imputer = Imputer(strategy = 'median')poly_target = poly_features['TARGET']poly_features = poly_features.drop(columns = ['TARGET'])# Need to impute missing values
poly_features = imputer.fit_transform(poly_features)
poly_features_test = imputer.transform(poly_features_test)from sklearn.preprocessing import PolynomialFeatures# Create the polynomial object with specified degree
poly_transformer = PolynomialFeatures(degree = 3)
# Train the polynomial features
poly_transformer.fit(poly_features)# Transform the features
poly_features = poly_transformer.transform(poly_features)
poly_features_test = poly_transformer.transform(poly_features_test)
print('Polynomial Features shape: ', poly_features.shape)

Polynomial Features shape: (307511, 35)

产生了35个多项特征,为了取得名字我们必须使用多项特征方法get_feature_names.

print(poly_transformer.get_feature_names(input_features = ['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3', 'DAYS_BIRTH']))


我们接着看看这些新特征是否与target有相关性。

# Create a dataframe of the features
poly_features = pd.DataFrame(poly_features, columns = poly_transformer.get_feature_names(['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3', 'DAYS_BIRTH']))# Add in the target
poly_features['TARGET'] = poly_target# Find the correlations with the target
poly_corrs = poly_features.corr()['TARGET'].sort_values()# Display most negative and most positive
print(poly_corrs.head(10))
print(poly_corrs.tail(5))



有几个新特征的相关性比原始特征大,当建立机器学习模型时,我们尝试包括或不包括这些特征,看看它们是否对模型学习有帮助。

# Put test features into dataframe
poly_features_test = pd.DataFrame(poly_features_test, columns = poly_transformer.get_feature_names(['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3', 'DAYS_BIRTH']))# Merge polynomial features into training dataframe
poly_features['SK_ID_CURR'] = app_train['SK_ID_CURR']
app_train_poly = app_train.merge(poly_features, on = 'SK_ID_CURR', how = 'left')# Merge polnomial features into testing dataframe
poly_features_test['SK_ID_CURR'] = app_test['SK_ID_CURR']
app_test_poly = app_test.merge(poly_features_test, on = 'SK_ID_CURR', how = 'left')# Align the dataframes
app_train_poly, app_test_poly = app_train_poly.align(app_test_poly, join = 'inner', axis = 1)# Print out the new shapes
print('Training data with polynomial features shape: ', app_train_poly.shape)
print('Testing data with polynomial features shape:  ', app_test_poly.shape)

Training data with polynomial features shape: (307511, 275)
Testing data with polynomial features shape: (48744, 275)

Domain Knowledge Features

除了从模型角度出发产生的多项特征,我们还可以从问题出发加工特征。在这里,我们根据金融知识,想使用这5个特征:

  • CREDIT_INCOME_PERCENT: 相对于客户收入的贷款比例。

  • ANNUITY_INCOME_PERCENT: 相对于客户收入的年贷款比例。

  • CREDIT_TERM: 月付款长度。

  • DAYS_EMPLOYED_PERCENT: 相对于客户年龄的工作日比例。

app_train_domain = app_train.copy()
app_test_domain = app_test.copy()app_train_domain['CREDIT_INCOME_PERCENT'] = app_train_domain['AMT_CREDIT'] / app_train_domain['AMT_INCOME_TOTAL']
app_train_domain['ANNUITY_INCOME_PERCENT'] = app_train_domain['AMT_ANNUITY'] / app_train_domain['AMT_INCOME_TOTAL']
app_train_domain['CREDIT_TERM'] = app_train_domain['AMT_ANNUITY'] / app_train_domain['AMT_CREDIT']
app_train_domain['DAYS_EMPLOYED_PERCENT'] = app_train_domain['DAYS_EMPLOYED'] / app_train_domain['DAYS_BIRTH']
app_test_domain['CREDIT_INCOME_PERCENT'] = app_test_domain['AMT_CREDIT'] / app_test_domain['AMT_INCOME_TOTAL']
app_test_domain['ANNUITY_INCOME_PERCENT'] = app_test_domain['AMT_ANNUITY'] / app_test_domain['AMT_INCOME_TOTAL']
app_test_domain['CREDIT_TERM'] = app_test_domain['AMT_ANNUITY'] / app_test_domain['AMT_CREDIT']
app_test_domain['DAYS_EMPLOYED_PERCENT'] = app_test_domain['DAYS_EMPLOYED'] / app_test_domain['DAYS_BIRTH']

可视化新特征

plt.figure(figsize = (12, 20))
# iterate through the new features
for i, feature in enumerate(['CREDIT_INCOME_PERCENT', 'ANNUITY_INCOME_PERCENT', 'CREDIT_TERM', 'DAYS_EMPLOYED_PERCENT']):# create a new subplot for each sourceplt.subplot(4, 1, i + 1)# plot repaid loanssns.kdeplot(app_train_domain.loc[app_train_domain['TARGET'] == 0, feature], label = 'target == 0')# plot loans that were not repaidsns.kdeplot(app_train_domain.loc[app_train_domain['TARGET'] == 1, feature], label = 'target == 1')# Label the plotsplt.title('Distribution of %s by Target Value' % feature)plt.xlabel('%s' % feature); plt.ylabel('Density');plt.tight_layout(h_pad = 2.5)

从图上很难判断哪些特征有用,只能在建模时尝试加入它们。

未完待续

信贷违约风险评估模型(中篇):特征工程相关推荐

  1. R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table、独热编码、缺失值删除、DMatrix结构生成)

    R语言构建xgboost模型:使用xgboost模型训练tweedie回归模型,特征工程(dataframe转化到data.table.独热编码.缺失值删除.DMatrix结构生成) 目录

  2. 金融风控-- >申请评分卡模型-- >特征工程(特征分箱,WOE编码)

    这篇博文主要讲在申请评分卡模型中常用的一些特征工程方法,申请评分卡模型最多的还是logsitic模型. 先看数据,我们现在有三张表: 已加工成型的信息: Master表 idx:每一笔贷款的uniqu ...

  3. kaggle数据挖掘竞赛--信用卡违约风险评估模型

    本例程是通过客户提供的信息分析客户会产生违约的可能性.由此来判断是否要给客户提供贷款.背景内容不再多说,数据相关的解释在代码中会有注释.运行中缺失的包请自行安装,我这里的环境是anaconda 直接上 ...

  4. 信贷违约风险评估预测-kaggle项目

    kaggle原案例 目标:为了确保贷款的安全性,需要对客户的信用或者还款能力进行评估 数据导入并预览 import pandas as pd df = pd.read_csv("https: ...

  5. pyspark做movielens推荐模型特征工程

    重磅推荐专栏: <Transformers自然语言处理系列教程> 手把手带你深入实践Transformers,轻松构建属于自己的NLP智能应用! 前面文章讲了如何使用pyspark做特征工 ...

  6. 特征工程(二) :文本数据的展开、过滤和分块

    如果让你来设计一个算法来分析以下段落,你会怎么做? Emma knocked on the door. No answer. She knocked again and waited. There w ...

  7. 【数据竞赛】学特征工程就看这篇,解析IJCAI18亚军方案之特征工程

    1  搜索竞赛特征工程总结 很多搜索推荐的工业界大模型的特征工程核心可以分为用户侧,商品侧还有一些其他侧(一些i2i,u2i等的上游特征)三大类. 本篇文章,不考虑所有时间等因素,直接调研和搜索相关的 ...

  8. AI基础:特征工程-文本特征处理

    0.导语 特征工程到底是什么呢?顾名思义,其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用. 在此之前,我已经写了以下几篇AI基础的快速入门,本篇文章讲解特征工程基础第三部 ...

  9. 机器学习(1.机器学习概述、数据集的组成以及机器学习的特征工程)

    什么是机器学习?    机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测 为什么需要机器学习 解放生产力.解决专业问题.提供社会便利 机器学习应用场景 自然语言处理.无人驾驶. ...

  10. 特征工程(part1)--什么是特征工程

    学习笔记,仅供参考,有错必究 文章目录 特征工程 什么是特征工程 机器学习流程 数据 模型 特征 模型评价 特征工程 什么是特征工程 特征就是原始数据某个方面的数值表示,在机器学习流程中,特征是数据和 ...

最新文章

  1. php 毛玻璃,CSS3实现毛玻璃(图片模糊)效果
  2. ARM7寄存器分布图
  3. 简单比对照片是否相同_小新说法 | 如何认定商标是否侵权?
  4. javaScript DOM编程常用的方法与属性
  5. Java高并发编程详解系列-线程上下文类加载
  6. python线程数组_Python多线程
  7. iOS开发,轻松获取根控制器当前控制器的正确方式
  8. 数据分析在企业中的应用
  9. EFRCN对应频段号
  10. 手机安全修改IMEI的方法
  11. 语音信号处理(二):矩形窗和汉明窗时域波形和频域波形
  12. POJ P3764 The xor-longest Path
  13. 打开matlab窗口,不小心关闭了matlab的命令窗口怎么再打开?谢谢,十分急
  14. css单标签,自己练习的css动画(单标签)
  15. ES冷热分离架构设计:一招让你的ELK日志系统节省 50% 的硬盘成本
  16. C(判断一个字母是否为英语字母)
  17. js判断两个时间是否超过一年
  18. Spring04:自动装配
  19. 中国婚博会PHP高级工程师、安全顾问汤青松:浅析Web安全编程
  20. 【算法类】【预处理】利用skit-learn分割训练集测试集

热门文章

  1. 《嵌入式Linux基础教程》补充阅读建议电子数目下载
  2. 今天遇到一个SQL的问题
  3. 新华三模拟器Telnet/远程登录
  4. HW 基于接口/全局地址池的DHCP
  5. 动态路由之RIP协议、Bellman-Ford算法
  6. Android Q 将增强未知来源应用安装的安全性
  7. 【acl-访问控制列表】
  8. 【转】一致性hash算法与server列表维护
  9. vsftp启用root用户
  10. office word 2007快捷键大全