热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

来者如临高山,往者以观逝水--天猫品牌推荐算法比赛总结

四个月的比赛总算是落下帷幕了,作为单线程的动物,没有办法边写总结报告(其实就是拖延症)。比赛结束,总算可以静下心来想一些东西。我是从年级的群里知道阿里的这个比赛的,一直都推荐挺感兴趣的,那段

四个月的比赛总算是落下帷幕了,作为单线程的动物,没有办法边写总结报告(其实就是拖延症)。比赛结束,总算可以静下心来想一些东西。

我是从年级的群里知道阿里的这个比赛的,一直都推荐挺感兴趣的,那段时间又刚好看了一些推荐方面的书籍,就拿准备拿这个机会练练手,在第一赛季的时候比赛特别疯狂,第一次提交成绩是在326号,F1成绩是0.17%,当天排名在1428名,印象中是用的协同过滤算法,根据用户购买过的物品来做协同过滤,所有的点击,收藏和加购物车的信息全部都没有用,没过几天,阿里来到我们学校做宣传,突然间发现各种经典的推荐算法在这个比赛中都不怎么适用,就开始使用规则,比如说对于在日期半个月以前的用户点击这个物品多少次以上推荐购买,用户购买过多少次以上的推荐购买,用户在最近几天内点击多少次的推荐购买。用简单的规则来猜测用户的购买行为,F1成绩大概在6.5%左右,鉴于比赛太过凶残,基本上每天不提交就能掉个几十名。后期也尝试过贝叶斯,lr来做,那个时候对于特征的理解并不深,感觉成绩并不是很好。那段时间基本上都是每天早上两点多自然醒的看成绩,最后第一赛季以7.07%的成绩进入第二赛季。

第一赛季在简单规则上迟到了甜头之后,第二赛季一开始也是用sql大概写了下第一赛季规则的思路,成绩涨到4.6%左右(用了大概十天),开始和善善用lr来做,第一赛季我们俩都没有用过lr,所以,一直在尝试,比如说我们用最简单的点击来当做特征,做预测,熟悉了下lr的流程。然后,还尝试过用一个星期内有交互的ub对的点击值做归一化处理后做训练,四个月所有交互的ub对的所有点击值做归一化做预测,得到效果竟然不错,现在看来那个时候也真的是各种脑洞大开。我们也尝试了抽取LR特征,和其他队伍交流,才发现我们的差距,他们已经尝试了所有的算法,我们还在LR上面打转,连提取特征的方法都是暴力的提取,才有了时间片的概念,开始使用mr提取特征,估计刚刚开始用mr来写,特征经常写错,陷入了大概有十几天都没有进步的情况,每天晚上和善善在实验室写代码写到楼下的人来催,然后一路上很开心的设想:哎呀,明天马上就要上5了,怎么办,要进首页了,好紧张好激动。但是每天早上起床,总是一脸郁闷,没有一次是能够实现的。到了二十三号的晚上做融合的时候,写了三个版本,写完之后一直在算概率,感觉进步的希望不大,就推倒所有的思路,把我们现有的可以提交的版本分成长期预测以及短期预测,长期预测一般都是用户比较稳定会购买的品牌,短期预测是用户最近的需求,然后对所有分到长期预测的结果取交集,对所有短期预测的数据也一样取交集,在把两个合并。当天的成绩是达到了5.31%。当天排名是25,第一次进入到了第二版面。

第二赛季的第一个月结束后,又开始进入了一段蛰伏期,长期不进步,主要是有了几个坑,首先,我们都是通过两个月的数据预测第三月的,比如说比赛有四个月的数据,我们用了第一二月做特征,第三个月做y值,来做训练,然后第二三月做特征,进行线下预测,与用第四个月的购买情况来做评估。第三四月份直接用线下训练的模型做预测。后面改成,重新训练二三月份的数据,成绩大概提升了0.2%,其二,把两个月的数据换成三个月的数据,成绩也是相应的有提升。后来,根据这段时间的各种特征的尝试,写了第一个版本比较完整的特征,对于品牌特征主要从四个方面进行思考(品牌属性,品牌热度,最近行为,一些比值),用户特征也是主要从四个方面进行思考(购买能力,用户属性,最近行为,一些比值),对于ub交互信息主要是划分时间片,提取的都是简单的特征。算法也从rf逐步转移到gbrt,后面几天稳步提升,到了第二个月的24号,F1成绩是5.82%

第二赛季的最后一个月再次大换血的重新整理一份特征,这次特征的思考方式主要是想到衡量标准,所有的衡量标准只能想到个数,天数,品牌数,用户数,次数(不同品牌不同天),行为有点击,购买,收藏,加购物车,操作,按照这些量,加上时间片,组合了一份我觉得基本特征都包含在内的大杂烩特征。大杂烩特征第一次测是用的rf,成绩是5.69%,一度心碎,估计一下子加的特征太多了。本来想要抛弃的,第二天因为也没有其他东西可以交,就跑了一份gbrt交了,得到的成绩是5.88%,后面发现里面有部分特征是写错的,估计gbrt对特征的容错性比较强。然后在此基础上有加入了一些极值,单份成绩没有变,但是两份的融合结果涨到了5.92%,再然后,就是经常改改特征,基本上都是单份没有提高,融合慢慢提高,在20名左右徘徊,换数据前的最终F1值是5.98%

换数据之后,跑之前的最后成绩单份变成了5.99%,融合却不怎么能够提高,再加上最后一个星期的某次提交我还给失误了。最后的成绩在6.02%,幸好还在前三十。

这算是这次比赛四个月的一个流水账吧,有同学说走到现在,基本上很傻的方法都能做到这个成绩,我觉得这可能是因为做到了所以才这么说,如果说这仅仅是最傻的方法,我们也用了四个月才走到现在。在这个过程当中,对于很多算法,特征的抽取,正负样本的处理,采样方式,各种调参,特征的处理,y值处理,融合的方式都有了一个不一样的理解。这四个月,熬夜跑程序,早上四点起床看成绩,其中还经历连续感冒,胃镜,拔牙,各种身体上的折磨,最后竟然身残志坚的坚持下来了,真是佩服我自己!

第一赛季感谢主公,第二赛季感谢亲爱的好队友善善!

其他的一些总结与教训:

1、记录还是很有必要的,在记录的过程中经常会有很多的思路,这一点善善做的很好,向你学习。

2、有想法的时候,尽快实现,要不灵光一闪,经常就给闪没了。

3、多于其他队伍进行交流,从几次比较重要的提升都是因为和其他队的交流,才知道我们的缺陷。

4、在与其他队伍交流后能够多思考,思考其中影响的本质是什么,从中可以触类旁通,应用到其他方面。


推荐阅读
  • 解决Xcode PBXcp 错误:找不到文件或目录
    当在Xcode中遇到PBXcp错误提示'No such file or directory'时,通常是由于文件引用问题导致的。本文将介绍两种有效的方法来解决这一常见问题。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • 本文介绍了两种在MATLAB中用于识别和提取图像中封闭孔洞及其边界的高效方法。第一种方法通过图像填充和差分操作实现;第二种方法则基于Flood-Fill泛洪算法。 ... [详细]
  • 本文探讨了如何通过积累团队管理经验、促进团队成员的学习成长、建立公正的绩效考核体系以及明确奖惩机制来提升团队的整体效能。同时,文章还强调了领导者应具备的关键能力和如何通过团队成员的表现来评估领导者的管理水平。 ... [详细]
  • 多用户密码验证与加密登录系统
    本文介绍了一种基于多用户密码文件的加密登录方法,通过读取用户密码文件并使用简单的加密算法实现安全登录。文中详细描述了程序的设计思路及其实现过程。 ... [详细]
  • 本文通过一个经典问题——使用最少的老鼠在限定时间内找出含有毒药的瓶子,深入探讨了二分法的应用及其背后的逻辑原理。不仅展示了二分法在非传统排序问题中的有效应用,还扩展讨论了三分法的可能性与限制。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 本文详细探讨了 HAProxy 的基本概念及其与 LVS(Linux Virtual Server)的比较,特别是在内核空间与用户空间的工作差异。文章还深入介绍了 HAProxy 独有的数据结构——弹性二叉树,以及其在高并发场景下的表现。 ... [详细]
  • 有向无环图(DAG)的两种拓扑排序方法详解
    本文介绍了有向无环图(DAG)的两种拓扑排序方法。第一种方法通过不断移除没有前驱的顶点来实现排序;第二种方法则利用深度优先搜索(DFS),记录每个节点的首次和最后访问时间,最终根据这些时间的逆序得到拓扑排序结果。 ... [详细]
  • [编程题] LeetCode上的Dynamic Programming(动态规划)类型的题目
    继上次把backTracking的题目做了一下之后:backTracking,我把LeetCode的动态规划的题目又做了一下,还有几道比较难的Medium的题和Hard的题没做出来,后面会继续 ... [详细]
  • 择要:Fundebug的JavaScript毛病监控插件同步支撑Vue.js异步毛病监控。Vue.js从降生至今已5年,尤大在本年2月份宣布了严重更新,即Vue2.6。更新包含新增 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 深入解析链表成环问题:剑指Offer第22天的新视角
    本文将详细介绍链表成环问题的多种解法,包括哈希表法、JSON.stringify特殊解法及双指针法,并提供详尽的代码示例。阅读本文,你不仅能够掌握这一经典算法问题的核心技巧,还能了解到更多编程思维的拓展。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 利用50行Python代码打造经典游戏,既是休闲娱乐,也是编程学习的利器
    Free Python Games 是一个适合学生和初学者的项目,它不仅提供了高度的组织性和灵活性,还极大地激发了用户的探索与理解能力。 ... [详细]
author-avatar
苏小宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有