给定过去购买的数据,可以使用哪种算法来预测耗材使用情况?


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中进行编码。我知道有很多库可以实现或多或少的任何算法。在这个问题中,我想探索可以使用的概念和技术,并把实际的实现留给读者练习。


1
亲爱的统计学家,我只想让您知道这个问题还没有被放弃。一旦找到时间和动力,我将立即回到该特定问题(请参阅:老板告诉我这样做),并将调查您的宝贵答案并最终将其中一个标记为已接受(对我而言,这意味着“实际实施”)。
Luke404 2013年

Answers:


12

问题涉及消费与时间的关系。这要求费率相对于时间进行回归(而不是总购买量随时间进行回归)。外推是通过构建为未来的购买量预测限制来。

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

数字

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

一个更精确的模型将说明以下事实:消费信息在较短的时间段内(或总购买量较小时)更加不确定,可以使用加权最小二乘拟合。考虑到这些数据的可变性以及所有购买商品的大小大致相等,因此不值得付出额外的努力。

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

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

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

请注意,这些建议集中于简单模型和简单预测,适合于预期的应用程序以及数据中明显的大差异。如果这些预测涉及一个大国的国防支出,那么我们将需要容纳更多的解释性变量,考虑时间相关性,并在模型中提供更多详细的信息。


是否定期采样数据,使用计数而不是费率是合适的吗?
MannyG

1
@MannyG是的,但这仅是因为计数将与费率成正比,而不是因为自己使用计数是适当的。当我们考虑到预测未来价值的真正含义时,很明显需要使用费率:您必须指定预测消耗量的时间间隔。因此,人们正在预测数量乘以时间以获得数量,这意味着该数量必须是每单位时间的数量:消耗
ub

@whuber对不起,但我不清楚您的答案中描述了哪些模型,以及在哪一点结束和又开始了什么。我有一个类似的问题,您的答案的某些部分似乎正是我所需要的,但是我必须对此事做更多的研究,如果您是在谈论不同的模型还是某个模型,我无法通过阅读您的回答来判断逐步改善。该模型是否有您要描述的权重的正式名称?您的第一个模型(指数递减)是否涉及权重?提前致谢。
阿吉斯

@rensokuken我描述了一个模型和一个加权数据的变体。该答案的后半部分建议如何确定权重。除了“加权最小二乘”以外,我不知道任何正式的名称。
Whuber

@whuber我明白了。在开始时您要描述这个,然后在添加权重时就描述这个,对吗?另外,您是否有任何资源与特定解决方案相关,并且适合初学者进行预测?感谢您的澄清。
阿吉斯

5

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

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

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

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


这取决于您拥有多少用户数据。如果足够(例如,> 1年内进行了100笔交易),则可以为该特定用户训练模型。否则,对所有用户使用通用模型可能会给您带来更好的结果。您可以使用交叉验证来衡量两种方法的性能。
ffriend

5

它不会定期进行“采样”,因此我认为它不符合时间序列数据的条件。

这是一个有关如何预测购买量的想法:将数据视为间歇性需求序列。也就是说,您确实有定期采样的时间序列,但是正值显然是不规则间隔的。罗布·海恩德曼(Rob Hyndman)有一篇很好的论文,介绍了使用克罗斯顿(Croston)方法预测间歇性需求序列的方法。尽管我也使用Python进行了大量编程,但是您可以使用Croston的方法以及其他时间序列预测方法节省很多探索时间,这些方法可以在Rob出色的R包预测中轻松获得。


1
+1提出新想法。但是,仔细阅读Shenstone&Hyndman论文的引言和结论,表明Croston的方法通常不是很好:该论文的重点是试图证明和理解一个流行的程序,但事实证明它是有限的。作者所能说的最好的是,尽管如此,“预测……可能仍然有用”。另外,该模型似乎无法按照OP的要求提供有关“当前电源水平”的其他数据。
whuber

3

我敢肯定,您正在尝试进行一些回归分析,以使一条线适合您的数据点。有很多工具可以帮助您-MS Excel是最易于访问的工具。如果您想推出自己的解决方案,则最好查阅您的统计信息(也许在这里这里)。为数据拟合一条线后,就可以推断未来。

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

EDIT2:好的,所以回答“我可以使用哪些技术?”这个问题。

  • 指数回归(如上所述)
  • 霍尔特法
  • 温特的方法
  • 有马

请查看此页面,以获取每个页面的简介:http : //www.decisioncraft.com/dmdirect/forecastingtechnique.htm


这使我问自己:什么我的数据点?而不是单次购买-不会考虑两次购买之间经过多少时间,也就不会考虑给定资源的总消耗。也许我应该对它们进行插值以定期获取一些平均值(例如,每周数量),然后将其用作时间序列数据输入来推断未来数据?

将时间差异视为绘图中“ x”值的差异。多数类型的回归分析将考虑差异。使用Excel中的GROWTH函数(使用指数回归)尝试样本数据。如果更改日期,则预计值将相应更改。

3

刚开始发表评论,但时间过长...

它不会定期进行“采样”,因此我认为它不符合时间序列数据的条件

这是一个错误的结论-当然是时间序列。时间序列可能会不规则地采样,只是往往需要不同于通常的方法。

这个问题似乎与水坝水位等随机问题有关(随着时间的流逝,水的使用率通常相当稳定,有时会或多或少地增加或减少,而有时水势相当稳定),而水坝水位却只会增加随着降雨的发生而迅速(基本上是跳跃)。纸张的使用和补给方式可能有些相似(尽管订购的数量可能会比降雨数量稳定得多,并且数量多得多,并且每当数量降低时就会出现)。

它也与保险公司的资本有关(但有所倒转)-除了初始资本之外,保费收入(净运营成本)和投资收入相当稳定(有时或多或少),而保险单付款往往相对较大金额。

这两件事都已经过建模,可能会为这个问题提供一些见识。


-1

您应该看看WEKA。它是一个工具和Java API,带有一组机器学习算法。特别是您应该寻找分类算法。

祝好运


分类算法如何给我定量预测?

@ Luke404:Weka有3种算法(分类,聚类和关联挖掘),他们决定将回归放入分类部分。但总的来说,您是对的,分类和定量预测有些不同。
ffriend

-1

我将使用线性最小二乘法将模型拟合为累积消耗量(即按日期运行的页面总数)。最初的假设是使用一阶多项式。但是残差表明在该示例中,第一级拟合数据欠佳,因此下一个逻辑步骤是将其提高至第二级拟合(即二次拟合)。这消除了残差中的曲率,平方项的系数略为负意味着消耗率随着时间的推移而下降,鉴于大多数人随着时间的推移可能倾向于使用较少的纸张,因此这似乎很直观。对于这些数据,我认为您无需超出二阶拟合,因为您可能会开始过度拟合,因此得出的外推值可能没有意义。

您可以在下面的图中查看拟合(包括外推)和残差。

适合 剩余的

如果可以的话,最好执行自举以更好地估计预测误差。


由于累积消耗中的残差将高度相关,因此该方法在统计学上似乎不合理。使用二次拟合只能解决这个基本问题。它无法治愈。
ub

-2

我认为您可以使用运筹学来获取数据。

您为什么不尝试找到一些方程式,将每个时间段的用纸量,用纸量等作为变量?

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.