开发者社区> 问答> 正文

天猫推荐算法大赛Top 7  Bazinga团队访谈

Bazinga团队由3名队员组成,他们有两位来自中科院计算所,一位来自中科院软件所。最近一次公布F1得分是6.11。

CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体谈一下特征抽取、训练模型的建立,以及模型训练的思想。
Bazinga
1. 数据分析

原始数据是天猫用户4个月的行为日志,日志的格式为(user_id,brand_id,action_type,date),其中四种行为分为用户的点击、购买、收藏和添加购物车。总共的日志条目达到了亿级,均匀分布在给定的4个月中。总的用户数为千万级,品牌数为万级。需要预测的目标是用户在下个月会对哪些品牌有购买行为。评价指标是经典的F1指标。
2. 数据清洗


    经过对数据的分析我们发现用户的平均行为为50次,品牌的平均行为为2万次,品牌的信息量明显多于用户,所以在品牌层面的信息相对可靠。在用户平均行为次数为50的大背景下,我们发现少量用户的一些异常行为,主要是有些疯狂点击不购买的用户,这些用户不仅不会对预测带来收益,反而会成为我们的模型中的噪声。于是我们对数据进行了一次过滤,过滤掉了点击次数太大,而没有购买的用户的所有行为记录。在剩下的数据上去构造样本、特征并进行模型学习。
    3. 建模


      得到一份干净的数据后,我们就要构建本地的测试数据。现在的数据划分如下图所示。八月份的数据是不可见的线上测评数据,在线下,我们切分出7月的数据作为我们的本地测试的数据。

      我们将这个问题看做是一个条件概率预测问题。就是给定历史行为,预测下个月的购买行为。这个问题可以形式化为:
      由于这是个有监督的学习问题,我们需要知道构造出来的一个(用户,品牌)样本的分类标签是什么,而我们的模型是基于时序的,所以我们引入一个分割点的概念,分割点将时间轴分成两个部分,分割点的前面是用户的历史行为,分割点的后面是这个历史行为造成的结果,也就是我们所说的分类的标签。简单说来,我们用历史行为进行特征的提取,并构造样本,而这个样本是正样本还是负样本,需要看分割点后面的时间区间上这个样本对是否有购买行为。
      在分割点的选取方面,我们分为了两种选取方式,一种是固定分割点,一种是滑动分割点。固定分割是一种很自然的分割方式,也是此次比赛中大部分队伍所采用的一种方式。滑动分割点是对固定分割点的一个扩展,可以产生更多的样本,充分利用历史信息。具体见下图:

      4. 特征



        我们构造了如下特征。


        Pair Features

        User Features

        Brand Features

        Counting Features

        action#

        action#

        action#


        action day#

        action day#

        action day#


        valid click#

        distinct action brand#

        distinct action user#


        valid click day#

        distinct first action brand#

        distinct first action user#


        action per brand per day#

        action per user per day#

        CVR Features

        cvr (buy#, click#)

        cvr (buy#, click#)

        cvr (buy#, click#)


        cvr (buy day, click day)

        cvr (buy day#, click day#)

        cvr (buy day#, click day#)


        cvr (distinct buy brand#, distinct click brand#)

        cvr (distinct buy user#, distinct click user#)

        Ratio Features

        ratio (click#, click day#)

        ratio (click a#, click b#) X C52

        ratio (click a#, click b#) X C52


        ratio (buy#, buy day#)

        ratio (buy a#, buy b#) X C52

        ratio (buy a#, buy b#) X C52

        Flag Features

        action flag

        action flag

        action flag

        other rules

        Global Features

        first / last action day

        first / last action day


        first / last buy day

        first / last buy day

        first / last buy day


        active range length

        frequent user ratio

        1. Counting特征指的是不同粒度上对行为数的聚合。
        2. CVR特征指的是转化率特征。
        3. Ratio特征是指同一种行为在不同粒度上的比例特征。
        4. Flag特征是指一种0-1标志特征,表示是否存在这种状态,可以用来融合进各种规则。
        5. Global特征是指与时间区间无关的全局特征。





        1. 5. 模型


          主要用到的模型有GBRT和RF模型,这两种模型是基于决策树的模型,都是将若干个弱决策树用某种方式聚合成森林来进行训练和预测。不同的是GBRT是在梯度上建立决策树,用Boosting的思想进行融合;而RF是在采样出数据和特征后建立决策树,并用Bagging的思想进行融合。
          6. 融合


            在得到两个基础模型产生的结果后,我们用了一个简单的两级线性融合的方法对我们的模型进行融合。第一级融合是根据本地训练集的结果学出来一个lr(Logistic Regression)线性模型进行融合;第二级则是简单地对第一级的预测结果进行平均融合。
            7. 流程化


              所有的前面的步骤我们都进行了流程化,也就是运行一个脚本便可以从最原始的数据表,运行到最后的提交结果表。
              CSDN:谈谈比赛感想。
              Bazinga这次比赛,给了我们一次体验工业界大数据的宝贵机会。与之前在实验室接触到的小规模数据集不同,大数据不仅拥有更大的数据规模,数据本身更加复杂,处理的难度更大。在参赛伊始,我们认真地分析了比赛的任务,并通过查阅资料去理解真实的业务场景。从利用简单的规则做出最早的几次提交,到后来利用机器学习的方法来提高预测的效果,我们对问题的认识进一步的加深,对数据也有更多的理解。值得一提的是,在这次比赛中,我们团队的三位成员很好地进行了团队协作。每位成员都会负责推进一块子任务,同时,我们也会保持充分的沟通,遇到困难大家一起讨论,寻找解决方案。高效的团队协作让我们一直保持着较好的成绩。大赛组委会也为我们颁发了“最佳团队奖”。
              CSDN:ODPS使用感受,优点及建议。
              BazingaODPS具有很好的数据存储能力和计算能力,并且简单易用。但在实际使用过程中,我们也发现一些需要改进的地方。比如,可以加强一下MapReduce作业的可视化,让我们可以方便地查看当前执行的精度,预计完成时间等信息。

              展开
              收起
              夜之魅 2014-08-29 17:36:17 10997 0
              2 条回答
              写回答
              取消 提交回答
              • 看看~
                2014-09-01 22:22:00
                赞同 展开评论 打赏
              • 沙发
                2014-08-30 18:20:54
                赞同 展开评论 打赏
              问答排行榜
              最热
              最新

              相关电子书

              更多
              数据+算法定义新世界 立即下载
              袋鼠云基于实时计算的反黄牛算法 立即下载
              Alink:基于Apache Flink的算法平台 立即下载