阿里大数据竞赛

不曾真正为之付出的人,永远也不会懂得珍惜

2014年8月5日 11:06

1、我们要做的是什么

根据官方描述,这次比赛要做的就是:根据用户4个月在天猫上对品牌的点击、收藏、购物车、购买等行为记录,预测第5个月哪些用户会购买哪些品牌。

1.1分解问题

再进一步细化,问题可以分为3个部分:在下一个月,哪些品牌可能被购买,哪些用户会进行购买,以及用户会购买的是哪些品牌。简而言之,就是找出决定“购买”这一行为是否会发生的3方面的因素:品牌特征,用户特征,用户-品牌特征。

1.2 如何训练和预测

以交叉验证为例,训练样本是取自第31-61天中的用户-品牌对集合A,而A中在第62-92天中存在购买的用户-品牌对为正样本,其余为负样本。然后预测第31-92天中的所有用户-品牌对有哪些可能会在第93-123天中发生购买。线上训练、预测类似。

P.S.:一直到7月下旬,我才猛然惊醒,自己的训练集构建是有错误的。一直以来标记的训练样本都是以“天”为单位,比如,用户B在第12天对品牌C发生了购买,那么我提取的特征都是针对第12天,而且还把第12天的数据当作特征抽取来源,但是实际上,这和我们要预测的情况是不一样的(要预测的是下一个月)。由此导致前面几个月分数一直不高,好在后来来得及纠正。本总结技术部分只拣最后的模型来讲。

2、数据清洗

2.1购买后的点击

根据@算者的提示,用户在购买之后的点击很可能只是为了查看是否已发货或者再次回味,而与新购买的发生并无直接关系,所以我选择了删除购买之后3天内的点击(且3天内并未有新的购买发生)。

P.S. :后来听@nextrush说,在不能完全确定可删的情况下,最好是保留原始数据。现在想来,确实如此,毕竟在最后3天,我们无法得知购买后的点击是否为新购买的铺垫,这就造成了训练与预测上的差异。

2.2 爬虫用户

根据一些对用户的简单统计,可以明显看出某些用户的行为是极其异常的,在S2未换数据前,有一个用户的点击达到了千万级别,远远超过排第二的用户,访问的品牌也基本覆盖了整个品牌集合,而且无任何其他操作(购买等),基本可以认定是爬虫。因为爬虫的行为可以说毫无意义,只是单纯的抓取商品信息,但是对于商品特征的构建造成干扰,于是在构建特征前就删除(换数据后没有此类爬虫)。

3、特征构建

总而言之,特征的构建要从会否“购买”出发,既要考虑什么样的用户会买、什么样的品牌能卖,也要考虑哪些用户不会买、哪些品牌不好卖,更重要的是,要分析好用户与品牌之间的关系,找出已交互里用户会买的那些。

3.1 品牌特征

之所以先说品牌特征,是因为一开始重点研究是就是这个。一开始的时候,想着用户很大程度会受搜索排序的影响,为了启发思路特地去研究天猫的排序规则,可惜@樱木说这是机密不能外泄,于是只能到网上找些卖家自己研究出来的指标、以及一些可能借用过来的指标。

于是,前前后后借用的、受启发而想到的特征,基本如下:

3.1.1 基本统计类特征

A. 销量(前3、7、15、30、124天,以下特征基本都是这么个周期,如无特别说明,谈论的各个指标均有特定周期)

B. 成交订单数(以同一天同一用户为一个订单)

C. 购买人数(周期内经过去重的购买人数)

D. 上面的3类特征分别再针对点击、收藏、购物车等操作进行统计。

3.2.2 转化率类特征

A.销量/点击数

B.成交订单数/点击订单数

C.购买人数/访问人数(这里考虑到部分点击数据丢失,就没以点击人数为分母了)

D.上面的3类特征分别再针对收藏、购物车等操作进行统计

3.2.3 比值类特征

A.返客率(某一周期内多次购买的用户数/总购买用户数)

B.老客户率(3天【或其他周期7、15、30】前曾购买过且在前3天内再次购买的用户数/3天内总购买用户数)

分别再针对收藏、购物车、点击等操作构建上述2个特征。

P.S.:这里返客率和老客户率均不含124这个周期。

C.跳出率(周期内只对品牌进行过1次点击操作的用户数/总用户数)

D.活跃度(周期内有3次及以上点击的用户数/总用户数)

E.人均点击数、人均购买量、人均收藏量、人均购物车量等

F.不在初次访问品牌时进行购买的订单数/总订单数(以此获得品牌在下个月被购买的可能性)

3.2 用户特征

用户特征的主要出发点是找出什么样的客户才可能买,结合之前对爬虫类用户的分析、以及对品牌特征构建的经验,得出如下特征:

3.2.1 基本统计类特征

A.购买量

B.成交订单数

C.购买品牌数(周期内去重)

D. 分别针对点击、收藏、购物车等操作再进行统计

3.2.2 转化率类特征

A.购买量/点击量

B.成交订单数/总订单数(一天访问一品牌为一订单)

C.购买品牌数/访问品牌数(品牌周期内去重)

D.分别再针对收藏、购物车等操作进行统计

3.2.3 比值类特征

A.用户活跃天数/当前日期(一般来说,越活跃的用户越不会买,大多特征源于对爬虫特点的分析)

B.发生购买的天数/总活跃天数

C.用户购买总量/购买天数

D.等等类似的一些可以反映用户购买可能性的特征

E.不在初次访问品牌时进行购买的订单数/总订单数(以此获得用户在下个月购买的可能性)

3.3 用户-品牌特征

3.3.1 基本统计类特征

A.截止到最后一天(比如交叉验证训练集的第61天)累计的点击(或衰减后点击)

B.同样的特征分别再针对收藏、购物车、购买等操作进行统计

C.截止到最后一天,用户对品牌进行过访问的次数、购买的次数、收藏的次数、购物车的次数(或经过时间衰减)

D.截止到最后一天,用户对品牌进行第一次访问(收藏、购物车、购买)到最后一次访问的时间间隔(或经过时间衰减)

E.用户最后一次访问(收藏、购物车、购买)距离下一个月第一天(如62)的时间间隔

3.3.2 比值类特征

A.购买该品牌次数/总购买次数

B.对该品牌的总点击(购买、收藏、购物车)数/访问次数

C.在对品牌A进行访问的那些天里,用户对A的点击数/那些天里的总点击数

D.在对品牌A进行访问的那些天里,A的销量/那些天里的所有品牌的总销量(这个特征在实现思路上消耗内存太大,未能实现)

4、模型选择

4.1 单模型

4.1.1 逻辑回归

特征子集的确定比较麻烦,并且不能处理和target具有非线性关系的特征。

4.1.2 随机森林

随机森林的优点是对于特征的选取要求不高(当然,可以的话还是去掉弱特征和线性相关较强的特征里较弱的特征),并且能帮助找出特征的重要性(在这里要感谢@licstar大神,谢谢他的无私奉献),但是缺点也很明显——由于要建树,导致预测耗时非常久。

4.1.3 GBRT

最后一天,匆匆忙忙上阵GBRT,感觉优点是快,几乎20分钟一次交叉验证,调了一天参数,最终还是比RF低一点点,融合之后居然升了0.02.

4.2 融合

4.2.1概率加权融合

由于之前模型思路上的错误,耽误了很多时间,最后其实只实现了一次融合,根据交叉验证中RF和GBRT的表现来对输出的概率加权。

4.2.2 对rank进行加权

对每个模型按概率输出的rank对用户-品牌对进行加权融合。这个方法来自@nextrush,还没来得及验证。

5、未能完成的工作

一直是想做未交互的,毕竟未交互的交易占了总量的近80%,奈何个人能力、精力有限,未能验证以下初步想法:

A.首先最重要的是对品牌以共现率进行聚类

B.找出容易被用户“迁移”的类别

C.找出用户最近重点关心的类别

D.然后以类似已交互的方法构建训练集、预测集

6、总结与反思

6.1 队友很重要

没有队友会很累,肉体上、精神上都累,更重要的是,一个人思维容易受限,建模和代码的bug难以发现,idea更是难以创新。应了那句African proverb ——"If you want to go fast, go alone. If you want to go far, go together." 当然,这里的队友显然是指能真正和你一起前进的队友。

6.2 交流很重要

好在虽然没有队友,还有官方群,有各位大神的讨论,虽然建模上没有得到太多启发,但是算法的选择和融合上受益良多。

6.3 思考最重要

记得内部赛有位前辈@iching说过“没有队友的你,更多的是昨天的自己和今天的自己在交流”。一个人在思考的时候容易受限,但正因如此,更应该多问问自己为什么一直没有提升,只有多想想,才有可能找到自己之前未能发现的错误,也才能迸发新的创意。当然,实在思想僵化的时候可以试着找些别的事情做,放松一下大脑,说不定灵感就来了呢!

6.4 永远不要放弃

在比赛的中途,能看到有很多队伍都放弃了,可能因为忙其他的,也可能因为不适应真正的大数据,或者不适应阿里的平台。无论如何,放弃的那一刻就注定了失败。可我想,我们来比赛,难得碰到阿里提供这么一个好的机会,尤其是@一婷姐的部门预算超支@山水哥这些一线员工忙里忙外,这一切的一切那么不容易,而我们也曾在S1那增长速度无比恐怖的baseline下起早贪黑,我们怎么能轻言放弃。

一开始参赛的目的无非学习、工作2个目的,可后来慢慢地随着自己一天天的投入,一次次的晚睡,一场场查分的欢喜或失落,比赛的意义早已超过最开始的动机。大概,只有真正为这场比赛付出过的人才懂得珍惜吧。

Reference

1、电子商务数据分析指标体系:

http://news.iresearch.cn/Zt/123380.shtml

这个链接里面讲到的东西基本上是我整个特征体系的主要灵感来源了。

2、Treelink算法介绍:

http://www.searchtb.com/2010/12/an-introduction-to-treelink.html

GBDT(MART) 迭代决策树入门教程 | 简介:

http://hi.baidu.com/hehehehello/item/96cc42e45c16e7265a2d64ee

对于GBRT不是很了解,甚至到最后也就用了一天,不过感觉是神器,比RF快很多,如果有时间继续调模型,说不定会比我RF模型更好。

3、随机森林算法:

http://www.zilhua.com/629.html

决策树建树算法:

http://zhouyichu.com/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/Decision-Tree-2.html

随机森林的了解,要从两方面,先了解决策树,再了解随机森林的思想和大概过程。

4、支持向量机通俗导论(理解SVM的三层境界):

http://blog.csdn.net/v_july_v/article/details/7624837

虽然一直没用这个算法,但是为了做了解,感觉这篇文章还是讲得很好的。

5、购买行为分析:

http://wiki.mbalib.com/wiki/%E8%B4%AD%E4%B9%B0%E8%A1%8C%E4%B8%BA

里面讲到的东西感觉很有用,可惜由于能力有限,很多理论未能建成数据模型。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值