作为参加数据比赛已经有8个月的一名新人,最近阅读了几位kaggle maser开源的代码,发现其中有一些有意思的内容,记录一些对于这些问题的思考。

一:问题描述

题目中涉及到严格的时间概念,例如:预测未来N天的流量(人流,销售等),预测未来N天内的用户-对象对(用户-商品等)的问题等,都可以利用滑窗法解决。诸如类似形式的问题,尤其是要有严格的时间概念的问题。

二:基本方法

假设:题目描述为预测未来N天的流量信息,其中N的取值为大于等于1。基本诸如此种问题,题目会给出前X天的详细信息。这样,我们就知道,其完整的数据为 X+N 的形式,其中 N 是需要我们预测的部分,其真实值未知。

具体题目:recruit-restaurant-visitor-forecasting

通过机器学习的方法解决此类问题,需要构造与问题描述类似的样本格式。

我们需要在 X 中构造出与 X+N 格式一致的样本,这种情况下,切分X为两个部分,[X-M,M],其中M=N的长度。这样,就拥有了带有标签的数据,其中M是我们线下预测的部分其本质是符合线上的N的部分,而X-M类似于在[X,N]中的X部分。

线上预测部分:[X,N]

线下模拟部分:[X-M,M]

在这种情况下,由于仅仅划分了一部分的X为线下模拟部分,其数据量太小。因此,我们可以通过 滑窗法 增加更大部分的样本,以覆盖尽可能多的数据达到能够让我们的模型学习到更多的情况。

我们对于X-M进一步分割为 [X-M-L,L] 其中L=M=N

现在的数据格式

线上预测部分:[X,N]

线下模拟部分:[X-M,M],[X-M-L,L]

通过一次又一次的对数据的形式划分,可以得到充足的数据。

其中,对于L,M,N其数值也可以不等。

例如N=39,L=28,N=14,这种情况下,针对具体问题,需要通过验证的方式去调试。

++++++++++++++++++++++++++++++++++++++++++++++++++++++

划分好了类似的数据,这样我们需要明确哪些数据可以进行统计,同时也要知道那些数据作为需要预测的Y。

回顾问题,我们要预测N,那么N天内的销量就是我们待预测Y_pred,这样我们已经线下划分了不同的子区间,那么根据对应关系,其M就可以提取出真实的Y,而在X-M对应于在[X,N]区间的X,这个部分可以尽情的做数据的统计。

普遍在代码实现时,在[X-M,M]区间中,我们会首先提取M中的真实值Y和唯一标识ID,之后再X-M中不停的统计,最后通过唯一标识ID拼接到这个M中。

这样就把[X-M,M]转化为一个带有Y的data。

梳理一下最后的结果

[X,N]最后为不带Y的data,

[X-M,M]带有Y的data,

[X-M-L,L]带有Y的data.

假设我们提取了很多数据,我们可以自己划分train,valid

train 为 {[X-M-L,L] , [X-M-L-K,L-K],}

val 为 [X-M,M]

之后可以通过模型训练并进行对[X,N]的预测。

特征的提取需要结合具体题目,没有一定的套式。

诸如此种方式逐步可以增加更多的数据,其数据基本格式模拟线上的基本形式。 

这个问题可以通过一个假设,假设人为定义一个长度14天+1天的窗口,将窗口的最后一个位置标记为红色,前面14个位置标记为蓝色。这样,我们可以在数据上移动这个窗口,随意停到一个位置,都会有14个蓝色和1个红色,这样红色的部分认为是需要预测的部分,14个蓝色的部分认为是构造历史特征的部分。当然,这14个蓝色的历史特征部分,也可以继续划分为距离红色的格子前1天,3天,5天这样的统计特征,还可以细化在某种条件下的特征构建等。

例如,刚刚结束的天池,杭州地铁预测,这种方法可以构造出许多样本,进行训练和预测。详情,可以方位天池大数据官网。

三:U-I-Rank问题

假设:某宝购物平台要预测一天的用户购买情况,这种情况下也是一个和时间有关的问题,不过这个问题中,我们既要预测用户买不买,同时也要预测买啥。

问题转换:这个问题,我们可以同时提取USER-ITEM对,转化为用户-产品对的形式,理解为:将user-item作为唯一标识,最终选择user-item预测概率最大的topN作为结果。

注意:这类问题可以建立为两个模型,当你选择好历史行为区间和目标预测区间后,可以构造出U-I预测和U预测两个情况,分别预测用户是否购买和用户是否购买这个商品等。

具体题目链接:天池新人赛

关于天池新人赛的题目在CSDN上面有很多人分享了思路,可以作为参考。

四:总结

对比以上所说的两类问题,都是和时间有密切关系且都是预测未来N天的一些Label值,都可以采取这类方式做最基本的处理。

这里简单描述了针对时间严格的问题的一种方案,我也是初学者,如有不足或者问题,请指出。

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐