于时间序列预测,ARIMA等传统模型通常是一种流行的选择。虽然这些模型可以证明具有高度的准确性,但它们有一个主要缺点 - 它们通常不会解释“冲击”或时间序列的突然变化。让我们看看我们如何使用称为卡尔曼滤波器的模型来潜在地缓解这个问题。
我们以货币市场为例。货币对可能会有整体上升趋势,然后在抛售期间大幅下跌。传统的时间序列模型不一定能够立即解决这个问题,并且在考虑到趋势的突然变化之前可能需要几个时期。
因此,我们希望使用一个确实能够解释这种冲击的时间序列模型。让我们来看一个称为卡尔曼滤波器的便捷模型。
卡尔曼滤波器是一种状态空间模型,可以更快地调整冲击到时间序列。让我们看一下如何使用一个例子。
2015年1月,当瑞士国家银行决定从瑞士法郎取消瑞士法郎时,货币市场遭受了历史上最大的冲击之一。结果,瑞士法郎飙升,而其他主要货币则暴跌。
让我们看看卡尔曼滤波器如何调整这种冲击。
首先,让我们下载2015年1月的USD / CHF数据:
我们正在将货币数据转换为数据框,然后转换为日志格式以根据回报构建我们的时间序列。
现在,我们将尝试使用KFAS库使用卡尔曼滤波器对此时间序列进行建模。
让我们来看看上面的内容。
SSModel表示“状态空间模型”,并观察我们正在对SSMtrend回归USD / CHF时间序列,这表示我们的平滑估计或状态预测比实际序列提前一步。
Q和H表示我们不受约束的时不变协方差估计。估计这些的步骤可能非常复杂,因此出于我们的目的,我将把它们设置为默认值0.01。
当我们绘制时间序列时,我们提出了以下内容:
我们可以看到我们的a,att和alpha系列瞬间适应震动。
- a:对州的一步预测
- att:对州的过滤估计
- alphahat:平滑的状态估计
为了进行比较,我们还将计算10天移动平均值,以比较平滑性能与卡尔曼滤波器的平滑性能。
现在让我们将上面的内容与我们的原始系列结合起来,看看我们提出了什么:
这是生成的数据框:
过滤从噪声信号中提取信息并预测未来状态,是卡尔曼滤波器最合适的用途。另一方面,平滑更依赖于过去的数据,因为在某些情况下,平均最近的测量可能比使用最近的测量更准确。
在这个特定的例子中,我们可以看到在时间段31(这是美元/瑞士法郎急剧下跌前一天),阿尔法(状态的平滑估计)的值从1.002显着下降到0.97,然后下降在实际震荡当天到0.915。
这在直觉上是有道理的,因为货币在一个月之前的交易价格为0.9658。在这方面,平滑估计器允许比使用滤波估计a更好地预测信号,滤波估计a直到时间段33才调整冲击。
此外,请注意,还使用了10天的SMA。尽管alpha被用作更平滑的,我们看到alpha仍然比简单的移动平均值更快地调整了震动 - 这意味着卡尔曼滤波器提供了比简单使用基本平滑技术更好的预测。
因此,我们已经看到卡尔曼滤波器如何适应美元/瑞士法郎的突然变动。让我们再举一个货币冲击的例子。当英国在2016年6月投票支持“英国退欧”时,我们看到英镑/美元随后暴跌。
卡尔曼滤波器对此有何建模?我们来看看吧!
如在USD / CHF的例子中,我们从Quandl下载我们的GBP / USD数据并运行卡尔曼滤波器:
这是我们的数据图。同样,我们看到alpha在t = 22时的震荡前一天向下调整到1.438的水平:
同样,我们看到10天SMA需要将近10天才能完全调整震荡,再次表明平滑参数α在调整货币水平的巨大变化方面仍然证明是优越的。
结论
在本教程中,您了解到:
- 调整时间序列冲击的重要性
- 如何在R中使用KFAS实现卡尔曼滤波器
- 如何解释卡尔曼滤波器的输出
- 为什么卡尔曼滤波器是用于建模时间序列冲击的合适模型