将R预测包与缺失值和/或不规则时间序列一起使用


16

R forecast包以及zoo用于不规则时间序列和内插缺失值的包给我留下了深刻的印象。

我的应用程序是在呼叫中心流量预测方面,因此(几乎)总是缺少周末的数据,可以通过很好地处理zoo。此外,一些离散的点可能会丢失,我只是用的r NA为。

事实是:所有的预测包的漂亮的魔法,比如eta()auto.arima()等等,似乎期望普通ts的物体,不包含任何丢失的数据,即等间隔的时间序列。我认为在现实世界中仅存在等时时间序列的应用确实存在,但是-我认为-非常有限。

几个离散的问题NA的值可容易地通过使用任何的提供内插函数来解决zoo,以及通过forecast::interp。之后,我运行了预测。

我的问题:

  1. 有人建议更好的解决方案吗?
  2. (我的主要问题)至少在我的应用程序域中,呼叫中心流量预测(据我所能想象的大多数其他问题域),时间序列不是等距的。至少我们有重复的“工作日”计划或类似的计划。什么是最好的处理方式,同时仍然使用预测包的所有酷魔术?

    我是否应该“压缩”时间序列以填充周末,进行预测,然后再次“充气”数据以在周末重新插入NA值?(我认为这是一种耻辱吗?)

    是否有计划使预测程序包与不定期的时间序列程序包(如Zoo或其兼容程序)完全兼容?如果是,何时和否,为什么不呢?

我对预测(以及一般的统计数据)还很陌生,所以我可能会忽略一些重要的事情。


欢迎来到该网站并进行预测!仅等间隔时间序列在现实世界中的应用绝对不是非常有限。我碰巧对您的超市中的预测有足够的了解,以应付促销需求,并且相信我,那数百万个时间序列(在1,000个商店中有20,000 SKU是非常普遍的)确实是等距的。(对不起,但是您有点要求...)但是我会在一分钟内尝试为您提供更有用的帮助。
斯蒂芬Kolassa

2
关于呼叫中心数据为何不等距的问题,您能否更明确地说明?(也许我误解了您所说的“等距”的意思。)我见过的呼叫中心预测方法通常将传入呼叫划分为15分钟的间隔,这符合我对“等距”的定义。然后,我们必须处理复杂的季节性(每天,每周内,每年),这可能对您有帮助?可以通过stats.stackexchange.com/questions/44704/…来回答您的问题吗?如果没有,请告诉我们您还需要什么。
Stephan Kolassa 2013年

5
auto.arima可以处理缺失值。
罗伯·海德曼

1
感谢您提出的所有建设性意见!史蒂芬(Stephan),我的数据不能以两种方式等距分布:1.许多呼叫中心仅在周六和周日关闭。有些仅在周日关闭。因此,两个相邻数据点之间的“正常”间隔是一天,而从周五到周一则是三天。因此空间不相等,即不等距。其次,在某处可能只是随机丢失数据,因为他们只是忘记了当天或任何时间打开测量设备。我希望我的观点明确。
entreprogreur 2013年

1
只是一个(挑衅性的)想法。如果您说呼叫中心在周末关闭。这样您就不会丢失任何数据。您的时间范围跨Mo-Fr。5天。等距。在我看来,对周末进行插值在形式上似乎是错误的,因为您知道没有通话发生,并且您估算的任何信息都是错误的。我认为您永远无法通过发明数据来改进估算...
有意义的意思

Answers:


1

我不是R专家,所以也许有一种更简单的方法,但是我以前曾遇到过。我之前所做的是实现一个函数,该函数测量实际日期之间的距离(以时间单位),并将其保存在现有时间序列的新列中。所以我们有这样的东西:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

这样,如果您的时间序列尚未与实际的时间点序列(或错误的格式等)相关联,那么您仍然可以使用它。

接下来,编写一个为您创建新时间序列的函数,如下所示:

首先,您计算在选择日期之间时间序列实际上将有多少个时间单位,然后在zoo或ts中创建该时间线,或者使用空值进行任何选择。

其次,获取不完整的时间序列数组,并根据选择的限制,使用循环将值填充到正确的时间轴中。当您遇到单位距离不为一的行(缺少天(单位))时,请填写插值。

现在,由于这是您的功能,因此您实际上可以选择如何进行插值。例如,您决定如果距离小于两个单位,则使用标准线性插值。如果缺少一周,则需要执行其他操作,如果达到丢失日期的特定阈值,则会发出有关数据的警告-实际上是您想像的任何内容。

如果循环到达结束日期,则返回新的ts。

此类功能的优势在于,您可以根据间隙的长度使用不同的插值或处理程序,并以您选择的格式返回干净创建的序列。写入后,它可以使您从任何形式的表格数据中获得简洁的信息。希望这对您有所帮助。


谢谢您,IMA,这个有用的答案!因此,我现在要做的是:对于离散的缺失值,我使用插值法(以及用户提供的“调整”)来填充缺失的数据。IMA,您的进一步完善的答案非常有帮助。对于“常规”缺失数据(例如周末),我将数据转换为仅用于预测目的的第二个“伪” ts,然后将结果转换回“正确”时间序列,因此预测也将具有缺失值在周末。对于在周末如何处理常规“空白”的更优雅的建议,我仍将不胜感激。
entreprogreur 2013年

@entreprogreur,我没有回答,IMA回答了。IMA在此获得全额荣誉。我只是对格式进行了调整,以便可以很好地显示。
gung-恢复莫妮卡

1

在进行进一步的统计处理之前,应用插值时应非常小心。您对插值所做的选择会给数据带来偏差。您肯定要避免这种情况,因为它可能会改变预测的质量。我认为,对于您提到的那些遗漏的值,这些值在时间上是规则间隔的,并且与活动的停止相对应,因此将这些天排除在模型之外可能更正确。在呼叫中心的小世界(您正在为其构建的模型)中,最好考虑到关闭时只是停止时间而不是发明不存在的活动的度量。另一方面,ARIMA模型是在数据均等分布的假设下建立的。据我所知,ARIMA无法适应您的情况。如果您在实际工作日仅缺少一些度量,则可能被迫使用插值法。


0

正如@Remi所指出的,我不会在根据该数据估算模型之前对数据进行插值。这是一个坏主意。一个极端的例子:假设您有两个数据点2013年1月和2014年1月。现在在10月到2013年12月之间插入10个月度点,并在月度日期进行回归。实际上,情况不会这么糟,但它是同一个想法:您充其量只能充实您的统计信息。

解决方法是使用可处理丢失数据的时间序列方法。例如,状态空间方法。看看astsa R包。它随附一本关于时间序列分析的优秀书籍。这样可以很好地处理丢失的数据。Matlab现在在ssm包中具有类似的功能。您必须学习将模型转换为状态空间形式,但是如果您想摆脱auto.arima“魔术”,则无论如何都必须学习这一点。

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.