深度之眼AI自媒体联合科赛平台银行客户二分类算法比赛参赛经验分享

本文主要是介绍深度之眼AI自媒体联合科赛平台银行客户二分类算法比赛参赛经验分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

比赛简介

近段时间参加了"深度之眼"联合"科赛"推出的银行客户二分类算法比赛,在“深度之眼”指导李老师的视频教学指导下,有幸复现出baseline。这里首先感谢平台和李老师。比赛链接:「二分类算法」提供银行精准营销解决方案。

赛题描述

数据集:选自UCI机器学习库中的「银行营销数据集(Bank Marketing Data Set)」

这些数据与葡萄牙银行机构的营销活动相关。这些营销活动以电话为基础,一般,银行的客服人员需要联系客户至少一次,以此确认客户是否将认购该银行的产品(定期存款)。因此,与该数据集对应的任务是「分类任务」,「分类目标」是预测客户是(' 1 ')或者否(' 0 ')购买该银行的产品,可以看出来是典型的二分类问题。

数据与评测算法

本次评测算法为:AUC(Area Under the Curve) 。关于这个评价指标的介绍网上有很多博客,这里不是本文探讨的重点部分。

训练集简单描述

官方给出train_set.csv和test_set.csv,其中train_set.csv供选手用于训练,test_set.csv供选手用于预测。train_set.csv中包含的每列特征信息如下所示。

test_set.scv测试集中除了不含有最后需要预测的 'y' 分类这一列,其他所含列信息与train_set.csv类似。训练集一共18个字段,数据的品质很高,没有Nan或脏数据。其中数值型特征有8个,分类型特征有9个,标签为 'y'。

 

baseline代码

相关模块引入

import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn.model_selection import train_test_split
import lightgbm as lgb
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
from sklearn import metrics
from sklearn.model_selection import GridSearchCV
import warnings
warnings.filterwarnings("ignore")

数据读入

#读入数据
dataSet = pd.read_csv("D:\\AI\\game\\2019Kesci二分类算法比赛\\dataSet\\train_set.csv")
testSet = pd.read_csv("D:\\AI\\game\\2019Kesci二分类算法比赛\\dataSet\\test_set.csv")
dataSet.head()
 IDagejobmaritaleducationdefaultbalancehousingloancontactdaymonthdurationcampaignpdayspreviouspoutcomey
0143managementmarriedtertiaryno291yesnounknown9may1502-10unknown0
1242techniciandivorcedprimaryno5076yesnocellular7apr9912512other0
2347admin.marriedsecondaryno104yesyescellular14jul772-10unknown0
3428managementsinglesecondaryno-994yesyescellular18jul1742-10unknown0
4542techniciandivorcedsecondaryno2974yesnounknown21may1875-10unknown0
testSet.head()

 

 IDagejobmaritaleducationdefaultbalancehousingloancontactdaymonthdurationcampaignpdayspreviouspoutcome
02531851housemaidmarriedunknownno174nonotelephone29jul3083-10unknown
12531932managementmarriedtertiaryno6059yesnocellular20nov1102-10unknown
22532060retiredmarriedprimaryno0nonotelephone30jul1303-10unknown
32532132studentsingletertiaryno64nonocellular30jun59841055failure
42532241housemaidmarriedsecondaryno0yesyescellular15jul3684-10unknown

简单查看下数据分布

dataSet.describe()
 IDagebalancedaydurationcampaignpdayspreviousy
count25317.00000025317.00000025317.00000025317.00000025317.00000025317.00000025317.00000025317.00000025317.000000
mean12659.00000040.9353791357.55508215.835289257.7323932.77205040.2487660.5917370.116957
std7308.53271910.6342892999.8228118.319480256.9751513.136097100.2135412.5683130.321375
min1.00000018.000000-8019.0000001.0000000.0000001.000000-1.0000000.0000000.000000
25%6330.00000033.00000073.0000008.000000103.0000001.000000-1.0000000.0000000.000000
50%12659.00000039.000000448.00000016.000000181.0000002.000000-1.0000000.0000000.000000
75%18988.00000048.0000001435.00000021.000000317.0000003.000000-1.0000000.0000000.000000
max25317.00000095.000000102127.00000031.0000003881.00000055.000000854.000000275.0000001.000000

看下String型每列特征值具体有哪些

print(dataSet['job'].unique())['management' 'technician' 'admin.' 'services' 'retired' 'student''blue-collar' 'unknown' 'entrepreneur' 'housemaid' 'self-employed''unemployed']print(dataSet['marital'].unique())['married' 'divorced' 'single']print(dataSet['education'].unique())['tertiary' 'primary' 'secondary' 'unknown']print(dataSet['default'].unique())['no' 'yes']print(dataSet['housing'].unique())['yes' 'no']print(dataSet['loan'].unique())['yes' 'no']print(dataSet['loan'].unique())['no' 'yes']print(dataSet['contact'].unique())['unknown' 'cellular' 'telephone']print(dataSet['month'].unique())['may' 'apr' 'jul' 'jun' 'nov' 'aug' 'jan' 'feb' 'dec' 'oct' 'sep' 'mar']print(dataSet['poutcome'].unique())['unknown' 'other' 'failure' 'success']print(dataSet['y'].unique())[0 1]

String类型数据转化

#暂时不构建特征,首先将string类型数据转化成Category类型
for col in dataSet.columns[dataSet.dtypes == 'object']:le = preprocessing.LabelEncoder()le.fit(dataSet[col])dataSet[col] = le.transform(dataSet[col])testSet[col] = le.transform(testSet[col])dataSet.head()

 

 IDagejobmaritaleducationdefaultbalancehousingloancontactdaymonthdurationcampaignpdayspreviouspoutcomey
01434120291102981502-1030
12429000507610070991251210
23470110104110145772-1030
34284210-9941101851742-1030
4542901029741022181875-1030

可以看出来,所有的String类型特征值已经被转化成相应的数字类别特征值。

数据normalization

scaler = preprocessing.StandardScaler()
scaler.fit(dataSet[['age','balance','duration','campaign','pdays','previous']])
dataSet[['age','balance','duration','campaign','pdays','previous']] = scaler.transform(dataSet[['age','balance','duration','campaign','pdays','previous']])
testSet[['age','balance','duration','campaign','pdays','previous']] = scaler.transform(testSet[['age','balance','duration','campaign','pdays','previous']]dataSet.head()

 

 IDagejobmaritaleducationdefaultbalancehousingloancontactdaymonthdurationcampaignpdayspreviouspoutcomey
010.1941514120-0.35554610298-0.419241-0.246187-0.411617-0.23040430
120.10011490001.23957910070-0.617708-0.5650612.1030630.54833310
230.5703010110-0.417885110145-0.703321-0.246187-0.411617-0.23040430
34-1.2164084210-0.783913110185-0.325845-0.246187-0.411617-0.23040430
450.10011490100.538857102218-0.2752550.710435-0.411617-0.23040430

 可以看出来相应的特征已经被normalization。

构建模型之前预处理

baseline版本暂时没有做深入的特征工程,简单做了下数据预处理之后,使用lightgbm融合xgboost进行建模,具体如下:

dataSet_new = list(set(dataSet.columns) - set(['ID','y']))seed = 42
X_train, X_val, y_train, y_val = train_test_split(dataSet[dataSet_new], dataSet['y'], test_size = 0.2, random_state = seed)train_data = lgb.Dataset(X_train, label = y_train)
val_data = lgb.Dataset(X_val, label = y_val, reference = train_data)

建模和参数调节

params = {'task': 'train','boosting_type': 'gbdt','objective': 'binary','metric': {'auc'},'verbose': 0,'num_leaves': 30,'learning_rate': 0.01,'is_unbalance': True}model = lgb.train(params,train_data,num_boost_round = 1000,valid_sets = val_data,early_stopping_rounds = 10,categorical_feature = ['job','marital','education','default','housing','loan','contact','poutcome'])

训练结果如下,可以看出来,689轮训练之后达到了早停,线上验证集测试auc为:0.934334。

lightgbm模型预测

pred1 = model.predict(testSet[dataSet_new])

引入xgboost模型调参

xg_reg = xgb.XGBRegressor(objective = 'reg:linear', colsample_bytree = 0.3, learning_rate = 0.1, max_depth = 8,alpha = 8, n_estimators = 500, reg_lambda = 1)
xg_reg.fit(X_train,y_train)

xgboost模型预测

pred2 = xg_reg.predict(testSet[dataSet_new])

生成提交文件

result = pd.DataFrame()
result['ID'] = testSet['ID']
result['pred'] = (pred1 + pred2) / 2
result.to_csv('D:\\AI\\game\\2019Kesci二分类算法比赛\\提交结果\\蜗壳星空_ver1.csv',index=False)

查看线上成绩和排名

可以看出来,排名167名,与top1的1.00的成绩还有相当大的差距。本文仅仅是提供一个baseline,并祝愿各位大佬在后面的阶段比赛顺利,取得满意的成绩!!!

 

这篇关于深度之眼AI自媒体联合科赛平台银行客户二分类算法比赛参赛经验分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382748

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个