给定过去购买的数据,可以使用什么算法来预测消耗品的使用情况?

机器算法验证 时间序列 机器学习 预测
2022-03-08 06:59:10

考虑一个看似简单但有趣的问题,我想编写一些代码来预测我在不久的将来需要的消耗品,因为我之前购买的完整历史记录。我确信这类问题有一些更通用且经过深入研究的定义(有人认为这与 ERP 系统等中的某些概念有关)。

我拥有的数据是以前购买的完整历史记录。假设我正在查看纸张用品,我的数据看起来像(日期,表格):

2007-05-10   500
2007-11-11  1000
2007-12-18  1000
2008-03-25   500
2008-05-28  2000
2008-10-31  1500
2009-03-20  1500
2009-06-30  1000
2009-09-29   500
2009-12-16  1500
2010-05-31   500
2010-06-30   500
2010-09-30  1500
2011-05-31  1000

它不是定期“采样”的,所以我认为它不符合时间序列数据的条件。

我每次都没有关于实际库存水平的数据。我想使用这个简单而有限的数据来预测(例如)3、6、12 个月内我需要多少纸张。

到目前为止,我才知道我正在寻找的是所谓的外推法,仅此而已:)

在这种情况下可以使用什么算法?

什么算法,如果与前一个不同,也可以利用更多的数据点给出当前的供应水平(例如,如果我知道在日期 XI 还剩下 Y 张纸)?

如果您知道更好的术语,请随时编辑问题、标题和标签。

编辑:为了它的价值,我将尝试在 python 中编写代码。我知道有很多库或多或少地实现了任何算法。在这个问题中,我想探索可以使用的概念和技术,实际的实现留给读者作为练习。

4个回答

问题涉及消耗与时间的关系。这要求利率对时间的回归(而不是总购买量对时间的回归)。外推是通过构建未来购买的预测限制来完成的。

几种模型是可能的。 考虑到向无纸化办公室的转变(已经持续了大约 25 年:-),我们可能会采用指数(减少)模型。结果由以下消耗的散点图描绘,在其上绘制了指数曲线(通过普通最小二乘法拟合到消耗的对数)及其 95% 的预测限制。预计外推值将位于该线附近并在 95% 置信度的预测限值之间。

数字

垂直轴以线性比例显示每天的页面。深蓝色实线是合适的:它确实是指数的,但非常接近线性。指数拟合的效果出现在预测带中,在这个线性尺度上,预测带不对称地放置在拟合周围;在对数尺度上,它们将是对称的。

一个更精确的模型将解释消费信息在更短的时间内(或总购买量较小时)更不确定的事实,这可以使用加权最小二乘法进行拟合。鉴于这些数据的可变性以及所有购买规模的大致相等,额外的努力是不值得的。

这种方法适用于中间库存数据,可用于在中间时间插入消耗率。在这种情况下,由于中间消费量可能会有很大差异,因此建议采用加权最小二乘法。

使用什么重量? 我们可以将纸张消耗量(它必然以整张纸量计)视为每天独立变化的计数。因此,在短期内,计数的方差将与周期的长度成正比。每天计数的方差将与周期的长度成反比。因此,权重应与存货之间经过的时间成正比。因此,例如,2007-05-10 和 2007-11-11(约 180 天)之间消耗 1000 张纸的重量几乎是 2007-11-11 和 2007-12-之间消耗 1000 张纸的重量的五倍。 18、期限只有37天。

相同的权重可以容纳在预测区间中。这将导致预测一天内的消费量与预测三个月内的消费量相比的间隔相对较宽。

请注意,这些建议侧重于简单的模型和简单的预测,适合预期的应用和数据中明显的大可变性。如果预测涉及一个大国的国防开支,我们会希望容纳更多的解释变量,考虑时间相关性,并在模型中提供更详细的信息。

这绝对是机器学习问题(我更新了你帖子中的标签)。最有可能的是,这是线性回归简而言之,线性回归试图恢复 1 个因变量和 1 个或多个自变量之间的关系。这里的因变量是消耗品使用情况对于自变量,我建议购买之间的时间间隔。您还可以添加更多自变量,例如,每时每刻使用消耗品的人数,或任何其他可能影响购买量的因素。你可以在这里找到关于线性回归的很好的描述以及 Python 中的实现

理论上,也有可能不仅购买之间的时间间隔,而且时间本身也会影响金额。例如,由于某种原因,人们在一月份可能需要比四月份更多的纸张。在这种情况下,由于线性回归本身的性质,您不能使用月份数作为自变量本身(月份数只是一个标签,但将用作金额)。所以你有两种方法可以克服这个问题。

首先,您可以添加12 个附加变量,每个月一个如果它代表购买月份,则将每个变量设置为 1,否则设置为 0。然后使用相同的线性回归。

其次,您可以使用更复杂的算法,例如M5',它是线性回归和决策树的混合(您可以在数据挖掘:实用机器学习工具和技术中找到该算法的详细描述)。

它不是定期“采样”的,所以我认为它不符合时间序列数据的条件。

以下是关于如何预测购买的想法:将数据视为间歇性需求序列也就是说,您确实有一个定期采样的时间序列,但正值显然是不规则间隔的。Rob Hyndman 有一篇关于使用 Croston 方法预测间歇性需求序列的好论文。虽然我也用 Python 编写了很多程序,但通过使用 Croston 的方法以及其他时间序列预测方法,您将节省大量的探索时间,这些方法在 Rob 出色的 R 包预测中很容易获得。

我很确定您正在尝试进行一些回归分析以使一条线适合您的数据点。有很多工具可以帮助您 - MS Excel是最容易使用的。如果您想推出自己的解决方案,最好复习一下您的统计数据(也许在这里这里)。一旦你为你的数据拟合了一条线,你就可以推断出未来。

编辑:这是我在下面的评论中提到的 excel 示例的屏幕截图。粗体日期是我自己输入的未来随机日期。B 列中的粗体值是通过 Excel 的指数回归计算得出的外推值。 在此处输入图像描述

EDIT2:好的,所以回答“我可以使用什么技术?”的问题。

  • 指数回归(上面提到过)
  • 霍尔特方法
  • 冬天的方法
  • 有马

请参阅此页面以了解每个方面的一些介绍:http: //www.decisioncraft.com/dmdirect/forecastingtechnique.htm