竞赛1-阿里天池-口碑客流量预测-题解总结

372/4046
赛题描述
https://tianchi.aliyun.com/competition/information.htm?spm=5176.100067.5678.2.WkzvDo&raceId=231591
给出过去16个月的口碑数据,2k商家,包括商家类型、用户支付行为、用户浏览行为,用这些数据来预测各个商家在接下来14天(11.01-11.14)每天的客流量。

竞赛1-阿里天池-口碑客流量预测-题解总结_第1张图片
评价指标
竞赛1-阿里天池-口碑客流量预测-题解总结_第2张图片
shop_info
竞赛1-阿里天池-口碑客流量预测-题解总结_第3张图片
user_pay
竞赛1-阿里天池-口碑客流量预测-题解总结_第4张图片
user_view

难点可视化时发现

  • 这其中包含双十一和国庆节的客流预测。但仅有三分之一的商家有去年双十一的信息
  • 每个商家开始加入口碑的时间不一,最晚从10月份开始
  • 近三个月有的商家记录不全



冠军题解
@CAT https://tianchi-gitlab.aliyun.com/race231591/gitlab-u2323
用了适合一般时间序列问题的时间序列加权回归模型(SJH)
将2016.10.11-2016.10.31及2016.9.20-2016.9.26共计28天作为训练时间段。选择了2016.10.18到2016.10.31共计14天、全部2000个商家的客流量作为线下测试集。排除了国庆节的干扰。
均值法,但不是简单的把训练集的均值当做回归,而是遍历,用Loss确定最佳回归值。
加权

  • 权重一:越靠近测试时间段的样本的权重越大
  • 权重二:对于一个商家,越远离该商家开始营业的时间的样本的权重越大。
  • 权重三:周期(一)(这部分没太看懂。。



第三名题解
drop-out的团队用的是knn,根据官方的测评标准SMAPE作为knn的距离,从历史数据中寻找最相似历史片段进行预测填充。同时他们队将数据以一周为单位聚合,每天的具体数据是以占一周百分比的形式保存。



第四名题解
https://tianchi-gitlab.aliyun.com/race231591/gitlab-u3844?spm=5176.836600.0.0.it2qKD

  • 数据预处理
    数据清洗包含三部分,通过规则清除,通过模型预训练清除及仅保留销量统计信息。
    1 )规则清除:比如单个买家异常消费,或对于一家店铺销量以历史过去14天销量的μ±2σ为限制,其中μ为均值,σ为均方根,以排除异常的销量数。
    2)通过模型预训练清除:商家日销量,可能存在一些难以预计的大幅波动,如促销,商家停业等。对于这些规则难以清除的异常值,采用预训练的方式清除。模型训练中首先采用欠拟合的算法模型预训练,并清除残差最大的10%(xgboost1,GBDT)和25%(xgboost2)的样本。
    3)仅保留销量统计信息:剔除用户ID。

  • 预测模型
    多套gradient boosting:xgboost1,xgboost2, GBDT
    历史均值+knn
    双十一修正:仅有约1/3的商家存在2015年双11的销量记录,需要通过这部分商家去年双11信息,预测其余商家双11销量表现。
    采用xgboost单模型训练,由于双11当天对应的工作日不同,2015年数据并不能很好反映出2016年双11节假日情况,且超市便利店类商店存在大量的数据缺失。为防止过拟合,参数设置均较为保守,最大深度为2,且加了较大的正则项,具体如下: max_depth = 2, learning_rate=0.01, n_estimators=500, reg_alpha=10, gamma = 1

  • 模型融合
    调整多套gradient boosting系数,得到的结果再和均值模型融合。最后对双十一模型进行微调。



第十六名题解
https://github.com/RogerMonkey/IJCAI_CUP_2017
用到的模型:ARIMA,GBDT,LR,RF,Extremely Randomized Trees
关于Extremely Randomized Trees的博客:http://blog.csdn.net/zhaocj/article/details/51648966



自己的思路 -- 372名
最后来说说自己的思路吧,也跟大神们的题解对比对比,找找不足。
这次比赛和@lyq组队,是我除了练习赛外参加的第一个数据竞赛,我们想到这首先是一个时间序列的回归问题,通过查找资料了解到处理时间序列常用的两周算法:STL分解和ARMA。
STL是Seasonal and Trend decomposition using loess局部加权回归作为平滑方法的一种时间序列分解方法,分解结果又sensoanl部分,trend部分和remainder三部分。
而ARMA是Auto-Regressive and Moving Average Model。对于非平稳序列(如本题)需要差分或二阶差分后再应用。
我们分工一个人做STL分解,一个人构造平稳序列使用ARMA,发现后者效果对于本题不好。所以我们采用了STL分解。


首先可视化发现,国庆部分的销量异常,双十一部分也有变动,所以首先从trainset中把国庆部分去掉。然后发现有的店是平日客流高峰,有的是周末高峰。
通过观察把商家最后分为四类:(根据数据缺失情况和客流情况)

  • 近三个月有缺失值的商家
  • 只有近三个月完整记录的商家
  • 春节后有完整记录,且周末高峰的商家
  • 春节后有完整记录,且平日高峰的商家
    节假日注意调休安排
    Clustering_by_pattern.py

分类高峰就是统计工作日和周末,然后看哪个日均多。Feature_holiday_workday.py
是否有缺失值就是规则统计



数据缺失严重的填了均值。
STL分解需要预处理,不然影响很大。异常点去除:规则去除+手动过一遍



分解后就要分别对得到的几部分做回归预测。季节性部分不变。trend用了LR,前n星期线性组合,GBDT。残差试了一下天气拟合。



双十一是怎么处理的。
线下测评就是往前推了两周。

统计每天每个店铺的平均view量和pay量,作为特征
user_view.py
user_flow.py
user_flow_clsddification.py 回头客(>5次)

加上所在位置、人均消费、评分、评论数、门店等级、一级品类作为特征

你可能感兴趣的:(竞赛1-阿里天池-口碑客流量预测-题解总结)