zoukankan      html  css  js  c++  java
  • A公司 推荐算法大赛 总结

    一、介绍

    ♦通过用户前四个月(04.15~08.15)的用户行为预测用户第五个月(08.15~09.15)将会购买的品牌。用户共有四种行为(type)分别是:点击(0)、购买(1)、购物车(2)、收藏(3)。
    数据原始内容如下:

    tianmao

    比赛评价方式按照F1排名,F1=2×P×R/(P+R)其中,P是准确率为命中的数量除以用户的预测数,R是召回率为命中的数量除以真实的购买数。采用F1评分,在正负样本数不平衡的系统中代替正确率作为系统的评价指标。

    二、方法介绍与特征选择

    ♦逻辑回归随机森林。首先,在使用逻辑回归时,需要对特征进行零均值处理,使每一维特征均在一定的范围内,随机森林虽然对所选特征有更好的鲁棒性,但将每一维特征规范化为近似服从正太分布时往往会有更好的分类效果。其次,在特征数量上,两者适用范围从几维到几百维均可,一般在训练数据充足的情况下随机森林较逻辑回归有更好的结果,在训练数据较少时选择逻辑回归,还有,如果模型需要“自适应”或需要在使用过程中不断学习,则选择逻辑回归,因为随机森林模型一但确定就无法再进行修改,若预测新情况只能重新训练。注意,在实现大的模型方法前一定先用小规模数据进行测试,去分析理解问题;一定要划分训练集验证集测试集,一定要先在本地进行模型评估再考虑应用到大规模数据处理中。
    特征选择,需要考虑的特征往往包括以下三点,用户品牌关系特征,用户特征,品牌特征。结合本次比赛,时间序列相关的推荐算法,如何将时间考虑进特征的选择是重点也是难点。现在思考如何对用户品牌关系建模,如果我们对所有的用户对品牌行为建一个模型,则该模型的含义是将所有的用户与品牌无差别的对待,即认为所有的用户具有相同的用户行为(如看过n次就会买,之前买过还会买,不考虑某些用户经常网购,有些用户则反之),所有的品牌产品具有相同的产品特性(不考虑产品的属性如高端耐用品,日常消耗品等)。换言之对用户品牌的无差别对待的结果是,当某用户U对某品牌B在T时间内点击数达到a,某买数达到b,收藏数达到c,购物车数达到d的概率超过P时则预测下个月用户U将购买品牌B。接下来将上面的UBTabcd具体化为训练用的特征。对T时间,在时间序列的推荐系统中,往往时间距离“现在”越接近,则准确率越高,又通过分析大赛提供的数据,周期性的每七天出现较高交易数,所以在时间的划分上采用距”现在”两天,七天,十四天,二十八天…作为时间的划分段。而对于abcd采用相应时间段的行为累计数。再考虑用户特征,品牌特征可按照相同的方式,划分天数,统计不同时间段的信息作为特征并将以上三部分特征进行组合(注:拼接时往往不能直接将特征A连接在特征B后)。通过添加用户特征与品牌特征,我们的模型最终想表达含义即:当具有某用户属性条件的用户U对具有某品牌属性的品牌B在T时间内点击数达到a,某买数达到b,收藏数达到c,购物车数达到d的概率超过P时则预测下个月用户U将购买品牌B。
    ♦需要注意的是,采用单纯的累计会导致不同特征间相关性较差,这也将影响模型效果。所以可以加入多项式特征如x*y,x2…等。其次,可以添加由其他方法计算得到的特征,如考虑时间衰退的方法为品牌、用户评分(基于用户点击的评分方法),用以评价该商品的近期热度,该用户的近期购买热度等。此外还可以考虑用户与用户之间的关系,品牌与品牌之间的关系。如以下情况,用户A与B均购买了X1X2X3…XnY产品,但A还购买了Z 产品,则B也可能购买Z产品;又如购买台灯时可能一并买个灯泡,或是经典的啤酒与尿布案例,即产品XY之间若具有很强的相关度则用户在购买X后,算法可以预测未来会购买Y,实现过程可参考PageRank实现过程。在计算以上特征的时候,简单的方法是使用MapReduce架构,设置Map阶段的Key值以及对应Key值的Value值,再于Reduce阶段进行收集合并。

    三、数据过滤预处理

    ♦在机器学习系统的搭建过程中,往往将所有数据分成训练集,验证集与测试集,其中在调节模型参数模型时选择验证集,在评价模型时使用测试集。若训练数据较少,且正负样本数差距较大时,我们可以采用异常检测的方法,即对正常样本建模,评估每个样本属于正常的可能性,去掉异常的样本数。

    四、模型融合

    ♦常用的方法有boosting方法,选择训练集的部分数据用于训练多个模型,最终结果选择多个模型的均值。如随机森林为多个决策树融合的结果。又如,在本次比赛中,可以先通过训练多个随机森林模型分别使用(或使用全部特征)UB特征,U特征,B特征得到预测概率P1P2P3,之后使用逻辑回归,做最后的分类。

  • 相关阅读:
    SecureCRT
    MySQL
    流式计算概述
    WEB加密算法
    drop、truncate和delete的区别
    JVM参数
    HTTP1.0与HTTP1.1区别
    HTTP请求方法
    Java查看JVM转态的命令总结
    go二次更新
  • 原文地址:https://www.cnblogs.com/sunshinewill/p/3927406.html
Copyright © 2011-2022 走看看