说明:这是第一次参加比赛,成绩不理想,高手勿喷。。。


比赛链接:点这里

一、赛题解读

1、任务

2、数据

3、评分标准

4、解决任务方法

通过分析数据标签可以知道这是一个不平衡样本的分类问题,对于这类问题,可以从以下方法对任务进行处理:
(1)建立分类模型,处理不平衡数据,然后分类
(2)将分类问题转为异常值检测问题

二、代码详解

1、数据处理

1.1 数据探索

1.1.1 数据标签的分析

(1)导入相关的包以及读取数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')  #忽略警告
%matplotlib inline
pd.set_option('display.max_columns',None)  #显示所有特征
import time,datetimetest_df=pd.read_csv(r'C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\test.csv')
train_df=pd.read_csv(r'C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\train.csv')
target_df=pd.read_csv(r"C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\train_target.csv")
y=target_df['target']
submit_id=test_df['id']

(2)查看标签数据

labels=target_df['target'].value_counts()
print(labels)
print("标签0所占样本的比例:",target_df.loc[target_df['target']==0].count()/len(target_df))
print('标签1所占样本的比例:',target_df.loc[target_df['target']==1].count()/len(target_df))
labels.plot.bar()


显然,这是一个极度不平衡的数据分类,对于这类的数据,处理方法可以参考第一种
第二种等解决办法。

1.1.2 单特征分析

1、删除Id、证件号分析

(1)合并数据
请注意:合并数据目的是为了查看数据分布和做特征工程,当做数据处理的时候需要将训练集和测试集分开处理。

all_data=pd.concat([train_df,test_df])
all_data.head()


(2)查看数据基本信息

all_data.info()


从结果可知,总样本有155590,有103列,除去id唯一值属性,总共有102个特征,其中放float64有3个,int64有100个(包括id)

(3)删除id、证件号(certId)进行可视化,并将证件号拆分

all_data.drop('id',axis=1,inplace=True)
sns.distplot(all_data['certId'])


搜集资料可知,可认为是身份证前六位的数字,代表的是地址码,表示常住户口所在县的行政区划代码,第一二位表示所在省,三四位表示所在市(1-20,51-70表示省直辖市;21-50表示地区或者自治州),五六位表示所在县(1-18表示市直辖区或者地区,21-80表示县,81-99表示省直辖县级市)
所以,将证件号拆分为3个部分,并删除证件号

all_data['certId_province']=all_data['certId'].apply(lambda x:str(x)[0:2])
all_data['certId_city']=all_data['certId'].apply(lambda x:str(x)[2:4])
all_data['certId_county']=all_data['certId'].apply(lambda x:str(x)[4:6])all_data.drop('certId',axis=1,inplace=True)
2、离散变量:贷款类型分析
all_data['loanProduct'].value_counts().plot.bar()
plt.xlabel('Type of loanProduct')
plt.ylabel('Count')

3、连续变量:年龄(age)的分析
sns.distplot(all_data['age'])


从图中看出,age属性不服从正态分布,出现严重的长尾现象,需要对其进行处理

三、所有代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
import seaborn as sns
warnings.filterwarnings('ignore')  #忽略警告
%matplotlib inline
pd.set_option('display.max_columns',None)  #显示所有特征
import time,datetimetest_df=pd.read_csv(r'C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\test.csv')
train_df=pd.read_csv(r'C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\train.csv')
target_df=pd.read_csv(r"C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\data\train_target.csv")
y=target_df['target']
submit_id=test_df['id']all_data=pd.concat([train_df,test_df])
all_data.head()all_data.drop('id',axis=1,inplace=True)all_data['certId_province']=all_data['certId'].apply(lambda x:str(x)[0:2])
all_data['certId_city']=all_data['certId'].apply(lambda x:str(x)[2:4])
all_data['certId_county']=all_data['certId'].apply(lambda x:str(x)[4:6])all_data.drop('certId',axis=1,inplace=True)bins=[17,30,40,50,120]
labels=['青年','中年','壮年','老年']
all_data['age_cut']=pd.cut(all_data['age'],bins=bins,labels=labels)
all_data.drop('age',axis=1,inplace=True)all_data['dist_province']=all_data['dist'].apply(lambda x:str(x)[0:2])
all_data['dist_city']=all_data['dist'].apply(lambda x:str(x)[2:4])
all_data['dist_county']=all_data['dist'].apply(lambda x:str(x)[4:6])
all_data.drop('dist',axis=1,inplace=True)all_data.loc[all_data['edu']==-999,'edu']=80
all_data.loc[all_data['edu']==47,'edu']=50bins=[0,8,20,100]
labels=['低','中','高']
all_data['lmt_cut']=pd.cut(all_data['lmt'],bins=bins,labels=labels)
all_data.drop('lmt',axis=1,inplace=True)all_data['certValidStop']=all_data['certValidStop'].apply(lambda x:str(x)[0:10])
all_data['certValidStop']=all_data['certValidStop'].astype(float)
all_data['certValidBegin']=all_data['certValidBegin'].astype(float)
all_data['stop_time']=all_data['certValidStop'].apply(lambda x:time.strftime("%Y--%m--%d %H:%M:%S", time.localtime(x)))
all_data['begin_time']=all_data['certValidBegin'].apply(lambda x:time.strftime("%Y--%m--%d %H:%M:%S",time.localtime(x)))
all_data.drop(['certValidBegin','certValidStop'],axis=1,inplace=True)all_data['stop_year']=all_data['stop_time'].apply(lambda x:int(x.split(' ')[0].split('--')[0])-70)
all_data['stop_month']=all_data['stop_time'].apply(lambda x:x.split(' ')[0].split('--')[1])
all_data['stop_day']=all_data['stop_time'].apply(lambda x:x.split(' ')[0].split('--')[2])all_data['begin_year']=all_data['begin_time'].apply(lambda x:int(x.split(' ')[0].split('--')[0])-70)
all_data['begin_month']=all_data['begin_time'].apply(lambda x:x.split(' ')[0].split('--')[1])
all_data['begin_day']=all_data['begin_time'].apply(lambda x:x.split(' ')[0].split('--')[2])
all_data.drop(['stop_time','begin_time'],axis=1,inplace=True)all_data['residentAddr']=all_data['residentAddr'].apply(lambda x:str(x)[0:6])
all_data['residentAddr']=all_data['residentAddr'].astype(float)
mea=all_data.loc[all_data['residentAddr']!=-999,'residentAddr'].mean()
all_data.loc[all_data['residentAddr']==-999,'residentAddr']=int(mea)
all_data.loc[all_data['highestEdu']==-999,'highestEdu']=0
all_data.loc[all_data['linkRela']==-999,'linkRela']=3all_data['resident_province']=all_data['residentAddr'].apply(lambda x:str(x)[0:2])
all_data['resident_city']=all_data['residentAddr'].apply(lambda x:str(x)[2:4])
all_data['resident_county']=all_data['residentAddr'].apply(lambda x:str(x)[4:6])
all_data.drop('residentAddr',axis=1,inplace=True)for i in all_data['ethnic']:if i !=0:all_data.loc[all_data['ethnic']==i,'ethnic']=1cat_cols=['loanProduct','gender','edu','job','basicLevel','ethnic','highestEdu','linkRela','setupHour','weekday','isNew','certId_province','certId_city','certId_county','age_cut','dist_province','dist_city','dist_county','lmt_cut','stop_year','stop_month','stop_day','begin_year','begin_month','begin_day','resident_province','resident_city','resident_county']
cat_df=all_data[cat_cols]
ori_df=all_data.drop(cat_cols,axis=1)for i in cat_df.columns:cat_df[i]=cat_df[i].astype(str)
cat_dummy=pd.get_dummies(cat_df)
all_feat=pd.concat([cat_dummy,ori_df],axis=1)
all_feat.shapetrain=all_feat.iloc[:train_df.shape[0],:]
test=all_feat.iloc[train_df.shape[0]:,:]from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(train,y)from xgboost import XGBClassifier
from sklearn.metrics import roc_auc_score,accuracy_scorexgb=XGBClassifier()
xgb.fit(x_train,y_train)pred=xgb.predict(x_test)
print(accuracy_score(y_test,pred))
roc_auc_score(y_test,pred)from sklearn.feature_selection import SelectFromModelselect=SelectFromModel(xgb,prefit=True)
new_all_feat=select.transform(all_feat)
new_all_feat.shapetrain2=new_all_feat[:train_df.shape[0],:]
test2=new_all_feat[train_df.shape[0]:,:]x_train2,x_test2,y_train2,y_test2=train_test_split(train2,y)xgb2=XGBClassifier()
xgb2.fit(x_train2,y_train2)predict2=xgb2.predict_proba(test2)[:,1]
predict2submit=pd.DataFrame()
submit['id']=submit_id
submit['target']=predict2
submit=submit.set_index('id')
submit.head()submit.to_csv(r'C:\Users\Chen\数据挖掘比赛\厦门国际银行“数创金融杯”\submit\submit84.csv')

厦门国际银行”数创金融杯“比赛思路及总结相关推荐

  1. 第三届厦门国际银行数创金融杯金融营销建模大赛-BaseLine

    第三届厦门国际银行数创金融杯金融营销建模大赛-BaseLine 1.大赛背景 随着科技发展,银行陆续打造了线上线下.丰富多样的客户触点,来满足客户日常业务办理.渠道交易等需求.面对着大量的客户,银行需 ...

  2. 34万奖金!第三届厦门国际银行数创金融杯金融营销大赛来啦!

    近日,厦门国际银行与厦门大学数据挖掘研究中心联合举办了"第三届厦门国际银行数创金融杯金融营销建模算法大赛",要求参赛者针对客户购买各类理财产品存单概率进行预测,并将预测结果作为营销 ...

  3. 火热进行ing:第三届「厦门国际银行“数创金融杯”建模大赛」邀您来战

    第三届厦门国际银行"数创金融杯"建模大赛自2021年12月开赛以来,吸引了不少来自校园和社会各界的金融数据爱好者们纷纷入场.大赛以财富产品精准营销为主题,设置了高达34万元的丰厚奖 ...

  4. 厦门国际银行数创金融杯建模大赛

    2020厦门国际银行数创金融杯建模大赛baseline分享 成绩:0.34 比赛地址:https://www.dcjingsai.com/v2/cmptDetail.html?id=439&= ...

  5. 2019年厦门国际银行“数创金融杯”数据建模大赛总结

    比赛介绍 比赛链接:此次大赛由厦门国际银行与厦门大学数据挖掘研究中心联合举办,厦门国际银行-厦门大学数据挖掘研究中心"数创金融"联合实验室承办. 数据下载地址:https://do ...

  6. baseline来啦!第三届厦门国际银行数创金融杯金融营销建模大赛(奖金34万!)

    1.大赛背景 随着科技发展,银行陆续打造了线上线下.丰富多样的客户触点,来满足客户日常业务办理.渠道交易等需求.面对着大量的客户,银行需要更全面.准确地洞察客户理财需求.在实际理财产品业务开展过程中, ...

  7. 【数据竞赛】厦门国际银行 “数创金融杯”数据建模大赛-冠军分享

    写在前面 冠军团队:三位靓仔 成员介绍:团队成员由当下国内赛圈著名选手组成,一月三冠选手宁缺,赛圈网红林有夕,以及最具潜力选手孙中宇组成. 首先还是非常感谢他们提供的冠军方案分享,下面就一起来看看是如 ...

  8. 2020厦门国际银行数创金融杯建模大赛(一)----赛题说明数据重塑Baseline

    比赛介绍 比赛连接 https://js.dclab.run/v2/cmptDetail.html?id=439 任务 随着科技发展,银行陆续打造了线上线下.丰富多样的客户触点,来满足客户日常业务办理 ...

  9. 蓝桥杯比赛培训笔记(基于STCCT107D训练板)

    "蓝桥杯"比赛培训笔记 更新说明 第一次大更新:删除了一部分冗余的代码,将代码部分改得更为规范了些. --2020年2月23日 第二次更新:在C语言相关中增添了"数组&q ...

最新文章

  1. ​DL_WITH_PY系统学习(第3章)
  2. python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单
  3. 《iOS 8案例开发大全》——实例006 实现复杂的查找和替代工作
  4. 在conda环境中pip使用清华源秒速安装skimage、opencv、tensorflow、pytorch1.2.0等p
  5. 大数据技术与应用实训心得_GXCGQ16D传感器与检测技术应用实训考核设备
  6. How to Use Hive-based Registry IN WINCE.NET
  7. mysql分区表mycat_MySQL 中间件之Mycat垂直分表配置
  8. 张家口市12320卫生热线呼叫中心预计今年初启动
  9. scrollspy 滚动监听插件
  10. 如何查看Linux系统的带宽流量
  11. Html input file控件使用accept过滤 限制的文件类型
  12. eplan p8详细安装步骤文库_eplan p8详细安装步骤
  13. java学习(分布式架构)
  14. HTTP 和 SOCKS 代理有什么区别,指纹浏览器搭配哪种代理合适
  15. OtherSoftwares
  16. DSP与广告位之间的关系
  17. teamviewer被检测为商业用途解决方法
  18. linux关闭8080端口,Linux修改iptables,取消8080的访问限制
  19. 计算机三级数据库技术——第一章 数据库应用系统开发方法学习笔记
  20. jquery、jQuery、JQuery是什么?

热门文章

  1. ubuntu apt-get install locales 失败处理
  2. Debian (Linux)安装UFW防火墙
  3. linux 卸载iscsi,iscsi挂载和删除
  4. Laravel 查询 多个or或者and条件
  5. TextView限制行数,点击展开显示全部
  6. 小学计算机绘画比赛,2016年义序中心小学计算机绘画比赛活动方案
  7. 泛域名(类似以用户名开头的域名:username.cnblogs.com)
  8. 设计模式 -- 访问者模式(Visitor Pattern)
  9. 服务器上传文件被挂起,打印机文件被挂起是啥意思
  10. 【狮子数学】chapter7-02-齐次微分方程(第107讲)