2018年京东JDATA算法 大赛:如期而至-用户购买时间预测,方案分享
前言
去年6月份和实习生一起参加京东jdata2018算法大赛,取得了17名的成绩,本来以为这个成绩对于第一次参加算法大赛的我们来说已经算是不错了,但在听了决赛答辩之后感觉今后的路还很长,需要学习的东西太多,现在把我们的方案以及对比赛的理解和大家分享,欢迎大家讨论。
1、赛题描述
1.1数据说明
- 用户基本信息表:
- 商品基本信息表:
- 用户订单表:
- 用户行为表:
- 用户评论表:
- 数据描述:
- 数据下载地址:
JData_A榜数据下载 密码:oi9t
JData_B榜数据下载 密码:h0mp
1.2赛题任务:
1.3评分标准:
S1评分思路分析:
- 实验:
在50000个用户中有25000用户有实际购买情况但排序不同的评分情况:
前25000:0.5353
后25000:0.4647
随机分布:0.4999 - 结论:
1、S1的得分是S2的基础,因此要首先保证S1的分不能太低
2、要在保证精确度的前提下,尽量让实际购买的用户往前排
2、总体思路
2.1 方案总体思路
- S1/S2的思路基本一致
3、特征工程
3.1 总体示意
假设:用户是否购买以及购买日期只和近期的行为习惯有关
训练集构建思路:尽可能多的利用数据
时间窗口的选择思路:离标签月越近分的越详细
3.2 特征选择
- 与购买相关的特征:
订单数/商品数/商品种类/购买次数/有购买行为的天数/有购买行为的月数 - 与浏览和收藏相关的特征:
行为(浏览或收藏)商品数/行为(浏览或收藏)商品种类/行为(浏览或收藏)天数/收藏商品数/收藏商品种类/有收藏行为的天数 - 地理信息:
用户下单过的地点数/用户订单数最大的地点编号
参数信息:
用户所购买商品price/para1/para2/para3的最大值最小值平均值中位数 - 用户花费:
用户的总花费 - 用户购买集中度:
用户购买集中度=购买的商品次数/购买的商品种类 - 用户商品忠诚度:
用户购买同一sku的最大次数 - 用户购买转化率:
用户购买转化率=用户购买的商品种类/用户有行为(浏览或收藏)的商品种类 - 日期特征:
购买的最小的day/最大的day/平均的day
近3个月/5个月 月首购买日期的最大、最小、平均、中位数 - 特征时间窗口:7天/14天/1月/3个月/5个月
- 品类维度:总体/(101,30)目标品类
- 最终特征维度:347
- 其他:未使用离散化/one-hot
3.3数据清洗与平滑
由于618的存在,用户在6月的购买模型可以认为是噪声,去除训练集汇总6月作为标签月的特征集同时对特征进行ln(1+x)平滑处理
4、模型选择
- GBDT\XGBoost\LightGBM
目前各大赛事及工程应用中最流行最高效门槛最低的选择 - 开个脑洞:
一般来说S1用分类比较普遍,通过对用户购买概率从大到小排序来完成S1任务,但是由于S1分析可得,S1得分不仅和精确率相关也和排列顺序有关,那么有没有一种方法在保证精确率的同时能获得更好的顺序呢?我们在S1的任务中另辟蹊径,通过回归用户订单数的方式来对用户排序最终获得了更好的效果 - bagging有放回采样
- 调参
使用sklearn中提供的GridSearch进行参数搜索调整参数
参数调整顺序:
1、learning rate/n_estimators调整
2、树参数(max_depth/min_sample_split/max_feature/subsample)调整
3、learning rate/n_estimators调整 - 融合的考虑
时间原因未进行融合
5、最终系统模型
6、小结
- 本次比赛有很多收获,也有很多遗憾,收获都写上了,这里就说说遗憾,首先,在模型融合方面考虑的不多,线下训练由于计算资源有限以及平时工作比较忙的原因甚至没有使用交叉验证,直接用8月用户购买行为作为标签进行的线下训练,如果能够进行充分交叉验证和调参,再加上stacking或者blending也许会有更好的效果。
- 特征上面我们考虑相对是比较全面的,但是听了决赛答辩之后,还是漏掉了几个强特征,比如用户标签月最后一天的购买情况,用户的购买间隔,物品消耗时长等。
- 特征重构及变换上面我们也有很多可以改进的地方,例如通过LDA对sku进行重聚类,计算用户和商品的共现矩阵,hawkes模型的应用等等。
- 一些比赛技巧上我们也有待加强,例如可以通过重写损失函数的方法,将S2的损失函数由系统默认的MSE改为赛题对S2的评分,据说这个方法在线上有百分位的提升。
- 模型融合的思考:
这次京东的大赛分为A榜和B榜两个不同的数据集,最终取B榜数据为最终排名,这极大考验模型的稳定性,有些选手A榜成绩不错,但是B榜就掉链子了,我们是从A榜的33名到B榜的17名,说明整体模型的稳定性还不错。另外通过观察现场决赛答辩,我们发现前三名的选手都没有或者只用了非常轻度的模型融合,这也从侧面反映了,单模型在稳定性上的优势。实际生产系统不是比赛,要求模型长期稳定的运行,持续输出较好的结果,而不是追求某一次的极大精度。这次比赛也让我们在使用模型融合方面有了很多的思考。 - 深度学习应用的思考:
限于时间、精力和硬件资源的限制,本次比赛并未尝试使用深度学习相关技术,从赛题题意上来说是可以使用LSTM/GRU等模型进行尝试的,另外如果赛题方能够提供具体的用户聊天和评论具体信息,也可以应用Bert、ELMo、GPT等深度语言模型进行尝试。
项目地址及其他
项目的源代码,大家可以通过:https://github.com/Francis1986/Jdata_2018下载,如果对大家有帮助,可以点个赞。
本文如需转载请注明出处,感谢!
2018年京东JDATA算法 大赛:如期而至-用户购买时间预测,方案分享相关推荐
- JData大数据竞赛18年赛题-如期而至-用户购买时间预测
年前做的,也是学习别人的作品作为记录 一.赛题 表1:sku基本信息表(jdata_sku_basic_info) 表2:用户基本信息表(jdata_user_basic_info) 表3:用户行为表 ...
- 京东JData算法大赛决赛圆满完成 30万冠军巨奖花落“鲁班七号”
6月6日,由京东集团和英特尔联合主办,创造算法大赛单体赛参赛人数世界纪录的京东JData算法大赛举行了线下决赛,60万元大奖和Special offer均已名花有主,针对"高潜用户购买意向预 ...
- 京东JData算法大赛小结(公司内部赛)
总体解决方案 本文将高潜用户购买意向预测,抽象为一个二分类问题.从用户,商品,品牌,用户-商品,用户-品牌五个维度进行特征提取.将观察天未来5天有购买行为的用户-商品对标记为正样本,观察天过去30天至 ...
- 京东JData算法大赛——高潜用户购买意向预测
赛题分析 京东提供了用户在2016-02-01-2016-04-15时间区域内用户对商品的行为评价等数据,预测2016-04-16-2016-04-20时间区间内用户的下单情况. 赛题和阿里的第一个竞 ...
- 京东JData算法大赛-高潜用户购买意向预测(github源码)
向AI转型的程序员都关注了这个号
- 用pandas进行数据分析:结合JData ”用户购买时间预测“数据分析实例(三)
表3:用户行为表(jdata_user_action) 1. 读取数据,并获取数据基本信息 2. 获取部分特征的频率统计和最大/最小值 3. 获取行为次数的统计
- 【浪叫兽】京东JData算法赛经验总结
申明:本文由浪叫兽对京东JData算法大赛的总结,行文略微口语化,但是不得不说,真正琢磨过数据的人才能发 现更多内在的东西.Mark,学习一下. 0.055规则很简单的,就是type5 大于 2,就这 ...
- JData数据处理及高潜用户购买意向预测
竞赛概述: 本次大赛以京东商城真实的用户.商品和行为数据(脱敏后)为基础,参赛队伍需要通过数据挖掘的技术和机器学习的算法,构建用户购买商品的预测模型,输出高潜用户和目标商品的匹配结果,为精准营销提供高 ...
- 腾讯广告算法大赛 | 复赛第二周最佳进步奖得主心得分享
腾讯广告算法大赛 | 复赛第二周最佳进步奖得主心得分享 我们关注着每个团队的成长, 即使你认为自己并不出众, 但腾讯广告算法大赛, 乐于发现你的闪光点. 这不, 我们特邀本周最佳进步奖得主分享成长之路 ...
最新文章
- nginx rails 详细站点配置入门教程
- ubuntu14.04部署Ganglia
- 因封杀Adobe 美司法部对苹果展开反垄断调查
- 121_Power Query之R.Execute的read.xlsxODBC
- Mac上重装pycharm打不开的解决方法
- python程序设计小程序_请问有会用Python编程语言编几个小程序的吗?谢谢题目如下。...
- POJ 3421 X-factor Chains
- Git发生SSL certificate problem: certificate ha错误的解决方法
- Linux中安装WPS
- matlab 流固耦合,流固耦合的研究与发展综述
- C++ OpenCV 将黑点框出来
- matlab绘制vti群速度,声波测井中的相速度与群速度讨论.PDF
- Axure原型设计灯箱效果
- 网络渗透测试实训周笔记3.0
- HC05蓝牙模块配对步骤及AT模式设置方法
- zabbix监控cisco路由器线路连通性——通过snmp获得cisco设备ip sla监控结果
- 计算机操作系统 概述(题库答案)
- 计算机职业技术教育,计算机职业教育论文
- windows下配置Tomcat为系统服务
- 全栈开发工程师修炼指南