如何根据以前的时间序列数据预测流量?


18

如果我有一家零售商店,并且有办法衡量每分钟有多少人进入我的商店,并对数据加盖时间戳,我如何预测未来的人流量?

我研究过机器学习算法,但不确定使用哪种算法。在我的测试数据中,与我尝试过的其他方法(例如KNN(我认为是合理的参数和距离函数))相比,逐年趋势更为准确。

似乎这似乎与财务模型类似,您可以在其中处理时间序列数据。有任何想法吗?


也许这份白皮书可能有用。knime.org/files/knime_bigdata_energy_timeseries_whitepaper.pdf关于建模包括季节性在内的时间序列。-罗莎莉亚(Rosaria)
罗莎莉亚

Answers:


17

像KNN这样的模型的问题在于它们没有考虑季节性(趋势随时间变化)。要考虑这些因素,您应该使用时间序列分析。

对于诸如您的计数数据,您可以使用广义线性自回归移动平均模型(GLARMA)。幸运的是,有一个实现它们的R包(glarma)。

小品是该工具背后的理论一个很好的资源。


2
Rob J. Hyndman教授预测了另一个非常有用的预报和时间序列分析软件包。
Def_Os

你知道这是否已经用其他语言实现了吗?我并不是R的专业人士。我肯定至少会读这篇文章。
user1132959 2014年

我不熟悉一个。如果您想使用python,则可以在使用python 进行其余大部分编程时,使用rpy2包来调用glarma函数。大多数其他语言也具有这种连接器。
Christopher Louden 2014年

10

我认为上述克里斯托弗的答案是完全明智的。作为一种替代方法(或者可能只是在他所提供的建议之外),我可能首先要稍微可视化数据以大致了解正在发生的事情。

如果您尚未执行此操作,则可以尝试添加日期的月份和星期几作为功能-如果最终坚持使用KNN,这将有助于模型提高季节性。

作为进行此操作的另一种方式,您可以考虑从一个非常基础的模型(例如OLS)开始。这些模型在产生合理的预测时通常会走很长一段路。

最后,我们对您的数据了解得越多,我们就越容易帮助您生成建议-您正在观察什么时间范围?您目前正在使用哪些功能?等等

希望这可以帮助 -


是的,可视化是任何分析中必不可少的第一步。
Christopher Louden 2014年

我确实添加了月份,月份,星期几和年份作为功能。我什至尝试线性降低“最近度”值。我认为我没有尝试过OLS。我观察到的时间范围可能从几周到几年不等。就可视化而言,我确实尝试过这样做。问题是,我们希望该软件能够自动预测不同的客户,而无需人工干预。
user1132959 2014年

3

您可以尝试神经网络。您可以在此处此处找到有关如何在时间序列上应用NN的2个绝佳解释。

请注意,最佳做法是:

  • 对输入数据进行反季节化/反趋势化(以便NN不会学习季节性)。
  • 重新缩放/归一化输入数据。

因为您要寻找的是回归问题,所以激活函数应该是linear,而不应该是,sigmoid或者,tanh并且您的目标是最小化sum-of-squares error(作为对negative log-likelihood分类问题中最大化的反对)。


我一直在寻找神经网络作为一种选择,但不知道我将使用哪种参数。我得试一试。
user1132959 2014年

Sigmoid和Tanh很好,希望通过非线性来学习更复杂的相互作用,并且权重会将它们映射到网络认为必要的任何范围内
Jan van der Vegt

3

正如@Christopher Lauden前面提到的,时间序列分析最适合此类情况。但是,如果您希望采用更传统的“机器学习方法”,那么我过去所做的就是将您的数据作为功能重叠在重叠的时间窗口中,然后用它来预测未来几天(或几周) )的流量。

您的特征矩阵如下所示:

t1 | t2 | ... | tN
t2 | t3 | ... | tN+1
t3 | t4 | ... | tN+2
...
tW | tW+1 | ... |tN+W

tI一天的交通在哪儿I。您要预测的功能是最后一列之后的第二天的流量。本质上,使用流量窗口来预测第二天的流量。

任何种类的ML模型都可以做到这一点。

编辑

针对这个问题,“您能否详细说明如何使用此特征矩阵”:

特征矩阵的值指示一段时间内的过去流量(例如,超过1周的每小时流量),我们使用它来预测将来某个指定时间段的流量。我们获取历史数据,并建立历史流量的特征矩阵,并在将来的某个时间段(例如,特征窗口中的第二天后)用流量标记出来。使用某种回归机器学习模型,我们可以获取历史流量数据,并尝试建立一个模型来预测流量在历史数据集中的移动方式。前提是未来的流量将类似于过去的流量。


您能否详细说明如何使用此功能矩阵?您是否要根据跨天的流量变化来学习?
user1132959 2014年

我编辑了回复,希望可以使它更加清晰。
gallamine 2014年

2

好吧,首先,如果没有深入的知识,我什至不会使用机器学习之类的东西。如果有这个时间序列,我会做的简单的事情是:

  1. 编写sql查询,以了解您在哪个时间段拥有最繁忙,平均和低流量。
  2. 然后尝试可视化整个时间序列,您可以使用基本的模式匹配算法来拾取模式。

这两件事将帮助您了解数据集在告诉您什么。这样一来,您可能会处于使用机器学习算法的更好状态。

另外,我目前正在按时间序列构建一些东西,使用时间序列分析将比机器学习有更多帮助。例如,您可以使用模式识别算法,该算法每天使用数据显示模式,而算法则使用多达3到6个月的数据来捕获模式。


0

我建议不要使用神经网络或类似方法,因为我认为,根据您在商店中的经验(例如,可能存在每日/季节性趋势和一定程度的平滑度),您已经拥有了很好的先验知识,并且我想象的是相对少量的数据。IMO的更好选择是采用诸如高斯进程或SVM之类的内核方法。


0

使该线程恢复活力,因为这对于在这里遇到类似问题的其他人可能很有用。

Facebook最近发布并开放了其内部预测工具之一,称为Prophet https://facebookincubator.github.io/prophet/

它既可以作为R&Python软件包提供,也被证明是对机器学习背景不甚了解的人的有趣解决方案。但是,一些其他ML知识可以调整和优化生成的模型。

我建议先尝试先知。此解决方案的快速优势是模型构建和测试的简便性和速度:您实际上可以在几分钟内获得下降的投影。它在时间序列上的表现非常好,“自然”地捕获了手头数据的季节性。

在幕后,它类似于通用加性模型(GAM)-有关专用纸的更多详细信息:https//facebookincubator.github.io/prophet/static/prophet_paper_20170113.pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.