金融时间序列中强大的异常值检测

机器算法验证 时间序列 异常值
2022-01-23 15:45:27

我正在寻找一些强大的技术来消除金融时间序列数据(即tickdata)中的异常值和错误(无论是什么原因)。

逐笔金融时间序列数据非常混乱。它在交易所关闭时包含巨大的(时间)差距,并在交易所再次开放时进行巨大的跳跃。当交易所开放时,各种因素都会在错误的价格水平(它们没有发生)和/或不代表市场(例如,由于输入错误的买价或卖价而导致的飙升)引入交易。tickdata.com 的这篇论文(PDF) 很好地概述了这个问题,但提供的具体解决方案很少。

我可以在网上找到的大多数提到这个问题的论文要么忽略它(假设tickdata 被过滤),要么将过滤作为一些隐藏任何有用过滤步骤的巨大交易模型的一部分。

有人知道在这个领域有更深入的工作吗?

更新: 这个问题表面上看起来很相似,但是:

  • 金融时间序列(至少在分时水平)是非周期性的。
  • 开场效应是一个大问题,因为即使您真的很想也不能简单地使用最后一天的数据作为初始化(因为否则您将一无所有)。外部事件可能会导致新一天的开盘价在绝对水平和前一天的波动性上都有很大差异。
  • 传入数据的频率非常不规则。在一天的开盘和收盘附近,每秒数据点的数量可能比白天的平均值高 10 倍。另一个问题涉及定期采样的数据。
  • 金融数据中的“异常值”表现出一些特定的模式,这些模式可以用在其他领域不适用的特定技术检测到,我正在部分寻找那些特定的技术。
  • 在更极端的情况下(例如闪崩),在更长的时间间隔(> 10 分钟)内,异常值可能占数据的 75% 以上。此外,传入数据的(高)频率包含有关情况异常方面的一些信息。
3个回答

问题肯定是的。

机械规则,如 +/- N1乘以标准偏差,或+/- N2乘以 MAD,或 +/- N3 IQR 或 ...失败,因为总会有一些不同的系列,例如:

  • 银行同业拆借利率等定价可能会在一段时间内保持不变,然后突然跳跃
  • 类似地,对于某些脱离钉住汇率的外汇
  • 某些工具是隐含的点差;这些可能在一段时间内接近于零,并且突然间跳跃流形

去过那里,做过,......在以前的工作中。您可以尝试使用套利关系船将每个系列括起来(例如,假设假定美元/欧元和欧元/日元很好,您可以计算出美元/日元应该是的区间;同样适用于标的等衍生品。

商业数据供应商在这方面做出了一些努力,而那些作为他们客户的用户知道......它仍然不排除错误。

当我回到电脑前时,我会添加一些论文参考,但这里有一些简单的建议:

绝对从处理退货开始。这对于处理不规则的间距至关重要,您自然会得到很大的价格差距(尤其是在周末前后)。然后,您可以应用一个简单的过滤器来去除远远超出规范的回报(例如,与大量标准偏差相比)。收益将调整到新的绝对水平,因此较大的实际变化将导致仅损失一个分时。我建议使用从 1 步和n步获取的返回值的两通滤波器来处理异常值集群。

编辑 1:关于使用价格而不是回报:资产价格往往不是固定的,因此 IMO 可能会带来一些额外的挑战。考虑到不规则性和幂律效应,如果您想将它们包含在过滤器中,我建议您进行某种调整。您可以按时间间隔或波动率缩放价格变化。您可以参考“已实现的波动性”文献对此进行一些讨论。在 Dacorogna 等人中也进行了讨论。人。

要考虑波动率的变化,您可以尝试根据过去一周一天中的同一时间计算波动率(使用季节性)。

我已经(有一些延迟)改变了我的答案,以反映您对无条件疯狂/中位数缺乏“适应​​性”的担忧。

您可以使用强大的统计框架来解决随时间变化的波动性问题。这是通过使用条件方差的稳健估计量(而不是我之前建议的无条件方差的稳健估计量)来完成的:GARCH 模型的 M 估计。然后你将有一个稳健的、随时间变化的估计(μ^t,σ^t)这与通常的 GARCH 拟合产生的不同。特别是,它们不是由一些遥远的异常值驱动的。因为这些估计不是由它们驱动的,所以您可以使用它们来可靠地标记异常值,使用历史分布

xtμ^tσ^t

您可以在本文中找到更多信息(以及 R 包的链接)

Boudt, K. 和 Croux, C. (2010)。多元 GARCH 模型的稳健 M 估计。