如何合并月、日、周数据?

数据挖掘 时间序列
2021-09-14 03:57:39

谷歌趋势返回每周数据,所以我必须找到一种方法将它们与我的每日/每月数据合并。

到目前为止,我所做的是将每个系列分解为每日数据,例如:

从:

2013-03-03 - 2013-03-09 37

到:

2013-03-03 37 2013-03-04 37 2013-03-05 37 2013-03-06 37 2013-03-07 37 2013-03-08 37 2013-03-09 37

但这给我的问题增加了很多复杂性。我试图根据过去 6 个月的值或每月数据中的 6 个值来预测谷歌搜索。每日数据意味着对 180 个过去值的工作。(我有 10 年的数据,所以每月数据 120 点/每周数据 500+/每日数据 3500+)

另一种方法是在每周/每月数据中“合并”每日数据。但是这个过程会产生一些问题。一些数据可以被平均,因为它们的总和代表了一些东西。以降雨为例,给定一周的降雨量将是组成这些周的每一天的降雨量的总和。

就我而言,我正在处理价格、财务利率和其他事情。对于价格,在我的领域中通常会考虑交易量,因此每周数据将是加权平均值。对于财务费率,它有点复杂,因为涉及到一些公式来根据每日费率建立每周费率。对于其他事情,我不知道潜在的属性。我认为这些属性对于避免无意义的指标很重要(例如,平均财务利率是无意义的)。

所以三个问题:

对于已知和未知的属性,我应该如何从每日数据变为每周/每月数据?

我觉得像我所做的那样将每周/每月数据分解为每日数据有些错误,因为我引入了在现实生活中没有意义的数量。所以几乎相同的问题:

对于已知和未知的属性,我应该如何从每周/每月数据转到每日数据?

最后但同样重要的是:当给定两个具有不同时间步长的时间序列时,哪个更好:使用最低或最大时间步长?我认为这是数据数量和模型复杂性之间的折衷方案,但我看不出有任何强有力的论据可以在这些选项之间进行选择。

编辑:如果您知道一个工具(在 R Python 甚至 Excel 中)可以轻松完成,我们将不胜感激。

4个回答

当给定两个具有不同时间步长的时间序列时,哪个更好:使用最低或最大时间步长?

对于您的时间序列分析,您应该同时进行:使用每日数据集获得尽可能高的粒度,并使用每月数据集重复分析。使用每月数据集,您有 120 个数据点,即使您的数据具有季节性,也足以获得时间序列模型。

对于已知和未知的属性,我应该如何从每日数据变为每周/每月数据?

要从每日数据中获取每周或每月数据,您可以使用平滑函数。对于财务数据,您可以使用移动平均或指数平滑,但如果这些不适用于您的数据,那么您可以使用 R 中的样条平滑函数“smooth.spline”:https ://stat.ethz.ch/R -manual/R-patched/library/stats/html/smooth.spline.html

返回的模型将比原始的每日数据集具有更少的噪声,并且您可以获得所需时间点的值。最后,这些数据点可用于您的时间序列分析。

对于已知和未知的属性,我应该如何从每周/每月数据转到每日数据?

当您有每月或每周数据时,要获取每日数据,您可以使用插值。首先,您应该找到一个方程来描述数据。为此,您应该绘制数据(例如随时间变化的价格)。当你知道因素时,这个等式应该受到这些因素的影响。当因子未知时,您可以使用最佳拟合方程。最简单的是线性函数或分段线性函数,但对于财务数据,这将无法正常工作。在这种情况下,您应该考虑分段三次样条插值。此链接更详细地介绍了可能的插值函数: http: //people.math.gatech.edu/~meyer/MA6635/chap2.pdf

在 R 中,有一种方法可以对时间序列数据进行插值。在这里,您将创建一个向量,其中包含每周值和每日值间隙中的 NA,然后使用“interpNA”函数获取 NA 的插值。但是,此函数使用“近似”函数来获取插值,该函数应用线性或常数插值。要在 R 中执行三次样条插值,您应该改用“splinefun”函数。

需要注意的是,时间序列模型通常会进行某种平均来预测未来值,无论您是在查看指数平滑还是自回归综合移动平均 (ARIMA) 方法等。因此,预测每日值的时间序列模型可能不是最佳选择,但每周或每月模型可能会更好。

我不是这方面的专家,但我相信您的问题与时间序列聚合和分解有关。如果是这种情况,这里有一些希望相关的资源,它们可能有助于解决您的问题(前五项是主要的,但具有代表性,后两项是补充):

这不会是一个非常令人满意的答案,但这是我的看法......

对于已知和未知的属性,我应该如何从每日数据变为每周/每月数据?

对于已知和未知的属性,我应该如何从每周/每月数据转到每日数据?

两者的答案相同:您不能对未知属性执行此操作,而对于已知属性,这将取决于值的计算方式。

正如你所提到的:

(例如,平均财务利率是无意义的)

无论属性/值是已知的还是未知的,都没有适用于所有情况的单一转换。即使具有已知属性,您也可能需要对每种类型进行唯一的转换:均值、中值、众数、最小值、最大值、布尔值等。

当给定两个具有不同时间步长的时间序列时,哪个更好:使用最低或最大时间步长?

只要有可能,尽量保持最小可能步骤的完整粒度。假设您知道如何转换值,您总是可以汇总这些步骤(例如,逐月、逐月)......但在有损转换之后,您不一定能够从较大的步骤中重建较小的步骤.

对于已知和未知的属性,我应该如何从每日数据变为每周/每月数据?

聚合。

例如,您有人们每天搜索“小部件”的次数。将一个月的每日总计相加以获得每月总计。我需要查看有关在每个粒度收集的实际数据的更多细节,以便为您提供更完整的版本。

对于已知和未知的属性,我应该如何从每周/每月数据转到每日数据?

你不能。

在物理学中,一个类似的想法是奈奎斯特频率一般的想法是,如果不引入更多数据,就不能添加比数据中已有的信息更多的信息。仅给定某人运行查询的那一天,您如何知道该查询是在一天中的什么时间运行的?你也许可以做出一些推论,但回答这个问题的唯一方法是直接或间接地将更多信息带入系统。您可以做一些事情来对每月变量的每日状态做出明智的猜测(如 gchaks 所提到的,插值),但您的数据基本上仍然是每月数据,可以每天查看。

当给定两个具有不同时间步长的时间序列时,哪个更好:使用最小时间步长还是最大时间步长?

这完全取决于您要回答的内容。

较小的粒度将对噪声和其他异常更敏感。更大的粒度将能够更自信地回答问题,但会失去一些有用性。例如,如果您想了解人们何时开始查找场地以了解周末计划以了解何时为新的夜总会推出营销活动,那么您将希望查看每日数据,如果不是更小的话。如果您正在查看夜总会的总体趋势以确定您想投资的对象,那么每月可能会更好。