Task1 赛题理解

一、赛题

零基础入门金融风控-贷款违约预测
该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量
训练数据总共有8万条。部分截图如下:

测试数据总共有2万条
变量信息如下:

二、评测标准

提交结果为每个测试样本是1的概率,也就是y为1的概率。评价方法为AUC评估模型效果(越大越好)。

三、结果提交

提交前请确保预测结果的格式与sample_submit.csv中的格式一致,以及提交文件后缀名为csv。

形式如下:

id,isDefault
800000,0.5
800001,0.5
800002,0.5
800003,0.5

Task2 数据分析

一、学习内容

数据总体了解:

  • 读取数据集并了解数据集大小,原始特征维度;
data.shape
  • 通过info熟悉数据类型;
data.info()

  • 粗略查看数据集中各特征基本统计量;
data.describe()

  • 缺失值和唯一值:
    缺失值
    data_train.isnull()

    data_train.isnull().any().sum()# 统计有多少列有缺失值
    查看缺失值的比例,并形成字典
have_null_fea_dict = (data_train.isnull().sum()/len(data_train)).to_dict()
# nan可视化
missing = data_train.isnull().sum()/len(data_train)
missing = missing[missing > 0]
missing.sort_values(inplace=True)
missing.plot.bar()


纵向了解哪些列存在 “nan”, 并可以把nan的个数打印,主要的目的在于查看某一列nan存在的个数是否真的很大,如果nan存在的过多,说明这一列对label的影响几乎不起作用了,可以考虑删掉。如果缺失值很小一般可以选择填充。 另外可以横向比较,如果在数据集中,某些样本数据的大部分列都是缺失的且样本足够的情况下可以考虑删除。 Tips: 比赛大杀器lgb模型可以自动处理缺失值,Task4模型会具体学习模型了解模型哦!

唯一值–查看训练集测试集中特征属性只有一值的特征
one_value_fea = [col for col in data_train.columns if data_train[col].nunique() <= 1]


2.3.5 查看特征的数值类型有哪些,对象类型有哪些

  • 深入数据-查看数据类型
    • 特征一般都是由类别型特征数值型特征组成,而数值型特征又分为连续型和离散型
    • 类别型特征有时具有非数值关系,有时也具有数值关系。比如‘grade’中的等级A,B,C等,是否只是单纯的分类,还是A优于其他要结合业务判断。
    • 数值型特征本是可以直接入模的,但往往风控人员要对其做分箱,转化为WOE编码进而做标准评分卡等操作。从模型效果上来看,特征分箱主要是为了降低变量的复杂性,减少变量噪音对模型的影响,提高自变量和因变量的相关度。从而使模型更加稳定
  • 类别型数据
numerical_fea = list(data_train.select_dtypes(exclude=['object']).columns)# 数值型,通过列的数据类型区分
category_fea = list(filter(lambda x: x not in numerical_fea,list(data_train.columns)))# 数值型
  • 数值型数据
  • 离散数值型数据
  • 连续数值型数据
#过滤数值型类别特征
def get_numerical_serial_fea(data,feas):numerical_serial_fea = []numerical_noserial_fea = []for fea in feas:temp = data[fea].nunique()if temp <= 10:#这里只是一个粗略的划分?10怎么来的numerical_noserial_fea.append(fea)continuenumerical_serial_fea.append(fea)return numerical_serial_fea,numerical_noserial_fea
numerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(data_train,numerical_fea)
  • 数值类型变量分析
data_train['term'].value_counts()#离散型变量

data_train['policyCode'].value_counts()#离散型变量,无用,全部一个值
data_train['n11'].value_counts()#离散型变量,相差悬殊,用不用再分析

  • 数值连续型变量分析
#每个数字特征得分布可视化
f = pd.melt(data_train, value_vars=numerical_serial_fea)
g = sns.FacetGrid(f, col="variable",  col_wrap=2, sharex=False, sharey=False)
g = g.map(sns.distplot, "value")



2.3.6 变量分布可视化
单一变量分布可视化

plt.figure(figsize=(8, 8))
sns.barplot(data_train["employmentLength"].value_counts(dropna=False)[:20],data_train["employmentLength"].value_counts(dropna=False).keys()[:20])
plt.show()


根据y值不同可视化x某个特征的分布
首先查看类别型变量在不同y值上的分布

train_loan_fr = data_train.loc[data_train['isDefault'] == 1]
train_loan_nofr = data_train.loc[data_train['isDefault'] == 0]
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(15, 8))
train_loan_fr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax1, title='Count of grade fraud')
train_loan_nofr.groupby('grade')['grade'].count().plot(kind='barh', ax=ax2, title='Count of grade non-fraud')
train_loan_fr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax3, title='Count of employmentLength fraud')
train_loan_nofr.groupby('employmentLength')['employmentLength'].count().plot(kind='barh', ax=ax4, title='Count of employmentLength non-fraud')
plt.show()


其次查看连续型变量在不同y值上的分布

total = len(data_train)
total_amt = data_train.groupby(['isDefault'])['loanAmnt'].sum().sum()
plt.figure(figsize=(12,5))
plt.subplot(121)##1代表行,2代表列,所以一共有2个图,1代表此时绘制第一个图。
plot_tr = sns.countplot(x='isDefault',data=data_train)#data_train‘isDefault’这个特征每种类别的数量**
plot_tr.set_title("Fraud Loan Distribution \n 0: good user | 1: bad user", fontsize=14)
plot_tr.set_xlabel("Is fraud by count", fontsize=16)
plot_tr.set_ylabel('Count', fontsize=16)
for p in plot_tr.patches:height = p.get_height()plot_tr.text(p.get_x()+p.get_width()/2.,height + 3,'{:1.2f}%'.format(height/total*100),ha="center", fontsize=15) percent_amt = (data_train.groupby(['isDefault'])['loanAmnt'].sum())
percent_amt = percent_amt.reset_index()
plt.subplot(122)
plot_tr_2 = sns.barplot(x='isDefault', y='loanAmnt',  dodge=True, data=percent_amt)
plot_tr_2.set_title("Total Amount in loanAmnt  \n 0: good user | 1: bad user", fontsize=14)
plot_tr_2.set_xlabel("Is fraud by percent", fontsize=16)
plot_tr_2.set_ylabel('Total Loan Amount Scalar', fontsize=16)
for p in plot_tr_2.patches:height = p.get_height()plot_tr_2.text(p.get_x()+p.get_width()/2.,height + 3,'{:1.2f}%'.format(height/total_amt * 100),ha="center", fontsize=15)

查看某一个数值型变量的分布,查看变量是否符合正态分布,如果不符合正太分布的变量可以log化后再观察下是否符合正态分布。
如果想统一处理一批数据变标准化 必须把这些之前已经正态化的数据提出
正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。

**上面我们用value_counts()等函数看了特征属性的分布,但是图表是概括原始信息最便捷的方式。

数无形时少直觉。

同一份数据集,在不同的尺度刻画上显示出来的图形反映的规律是不一样的。python将数据转化成图表,但结论是否正确需要由你保证。**

2.3.6 时间格式数据处理及查看

#转化成时间格式  issueDateDT特征表示数据日期离数据集中日期最早的日期(2007-06-01)的天数
data_train['issueDate'] = pd.to_datetime(data_train['issueDate'],format='%Y-%m-%d')
startdate = datetime.datetime.strptime('2007-06-01', '%Y-%m-%d')
data_train['issueDateDT'] = data_train['issueDate'].apply(lambda x: x-startdate).dt.days
plt.hist(data_train['issueDateDT'], label='train');
# plt.hist(data_test_a['issueDateDT'], label='test');
plt.legend();
plt.title('Distribution of issueDateDT dates');
#train 和 test issueDateDT 日期有重叠 所以使用基于时间的分割进行验证是不明智的


2.3.7 掌握透视图可以让我们更好的了解数据

#透视图 索引可以有多个,“columns(列)”是可选的,聚合函数aggfunc最后是被应用到了变量“values”中你所列举的项目上。
pivot = pd.pivot_table(data_train, index=['grade'], columns=['issueDateDT'], values=['loanAmnt'], aggfunc=np.sum)

pivot

  • 数据间相关关系
  • 特征和特征之间关系
  • 特征和目标变量之间关系
  • 用pandas_profiling生成数据报告
import pandas_profiling
pfr = pandas_profiling.ProfileReport(data_train)
pfr.to_file("./example.html")

数据挖掘实践(金融风控)相关推荐

  1. 零基础入门数据挖掘之金融风控-贷款违约预测

    零基础入门数据挖掘之金融风控-贷款违约预测 摘要 1.数据概况 2.数据读取 3.分类指标评价计算 摘要 在实践中学,很高兴有这次机会,与志同道合的小伙伴一起学习,本次主要通过天池实际比赛项目学习数据 ...

  2. 【数据挖掘】金融风控 Task02 数据分析

    [数据挖掘]金融风控 Task02 数据分析 1. 探索性数据分析(EDA)概述 1. 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classi ...

  3. 【数据挖掘】金融风控 Task01 赛题理解

    [数据挖掘]金融风控 Task01 赛题理解 1.赛题介绍 1.1赛题概况 1.2 数据概况 1.3 预测指标 1.3.1 混淆矩阵 1.3.2 准确率.精确率.召回率.F1 Score 1.3.3 ...

  4. 数据挖掘之金融风控-贷款违约预测 02数据分析

    数据挖掘之金融风控-贷款违约预测 02数据分析 数据挖掘之金融风控-贷款违约预测 02数据分析 1. 学习目标 2. 学习内容 3. 学习过程 3.1 导入库并读取数据集 3.2 数据集基本信息 3. ...

  5. 金融风控 Task02 数据分析

    [数据挖掘]金融风控 Task02 数据分析 探索性数据分析(EDA)概述 1 探索性数据分析概念 1.2 探索性数据分析目的 1.3 探索性数据分析(EDA)与传统统计分析(Classical An ...

  6. 数据挖掘实践(金融风控)——task1:赛题理解

    文章目录 数据概况 数据读取 评估指标 数据概况 数据量超过120w,包含47列变量信息,其中15列为匿名变量.80万条作为训练集,20万条作为测试集A,20万条作为测试集B,变量含义如下: id 为 ...

  7. 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析

    数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 目录 数据挖掘实践(金融风控-贷款违约预测)(二):数据分析 1.引言 2.基本知识点 2.1缺失值(Missing data) 2.1.1缺失 ...

  8. 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程

    数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 目录 数据挖掘实践(金融风控-贷款违约预测)(三):特征工程 1.引言 2.特征预处理 2.1缺失值填充 2.2时间格式处理 2.3类别特征处理 ...

  9. 数据挖掘实践(金融风控-贷款违约预测)(五):模型融合

    数据挖掘实践(金融风控-贷款违约预测)(五):模型融合 目录 数据挖掘实践(金融风控-贷款违约预测)(五):模型融合 1.引言 2.模型融合的方式 2.1 Voting/Averaging 2.2 B ...

最新文章

  1. pandas.describe()参数含义
  2. 读取手柄_中高端游戏手柄比选,北通宙斯才是游戏的最佳拍档
  3. 20145326蔡馨熤《信息安全系统设计基础》第1周学习总结
  4. 文巾解题 1344. 时钟指针的夹角
  5. 显卡、显卡驱动、cuda 之间的关系是什么?
  6. php怎么写官网,PHP - Manual: 简介 (官方文档)
  7. 计算机诞生发展分类特点及应用,计算机的诞生与发展,及其特点
  8. 有没有检查c语言编译错误的软件,求大佬解答,为什么这个程序编译软件检查不出错误...
  9. easyui form 提交
  10. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(3)
  11. 3G时代 一起走近无线运维的3A标准——柳州市劳动和社会保障局
  12. 职场中显情商低的三种行为
  13. Photoshop学习(十六):利用蒙版合成图像
  14. 你我许的誓言也许抵不过岁月的云烟
  15. Lambda表达式练习【应用】
  16. 取消改写模式(python)
  17. 调用微信二维码识别开源库
  18. [Vuetify] 解决mainterialicon加载慢
  19. 废旧光驱拆解与丝杆测试
  20. CentOS7部署网盘网站

热门文章

  1. 数据结构二:排序(插入排序和希尔排序)
  2. 微型计算机温度控制系统课程设计,微机原理及其应用 微型计算机温度控制系统设计课程设计报告.doc...
  3. 排队问题解题思路_高考文科数学是最“拉分”的!6种题型分析与10大解题方法...
  4. Python 网络爬虫笔记3 -- Beautiful Soup库
  5. AI决策,企业转型新范式
  6. c++17(24)-枚举与switch
  7. 工业用微型计算机(11)-指令系统(8)
  8. linux内核杂记(16)-系统调用(3)
  9. 【机器学习】小孩都看得懂的 GAN
  10. 本周日,王海峰、朱军、李宏毅等大咖邀你加入这场AI开发者盛宴