在财务时间序列中进行可靠的异常值检测


16

我正在寻找一些健壮的技术,以从财务时间序列数据(即tickdata)中删除异常值和错误(无论原因如何)。

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

我在网上可以找到的大多数论文都提到了此问题,或者忽略了该问题(假定报价数据已被过滤),或者将该过滤作为某种庞大的交易模型的一部分,该模型隐藏了任何有用的过滤步骤。

有谁知道在这方面做更深入的工作?

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

  • 财务时间序列是非周期性的(至少在刻度级别上)。
  • 开放效果是一个大问题,因为即使您真的愿意(因为否则您一无所有),您也不能简单地将最后一天的数据用作初始化。外部事件可能导致新的一天的开盘价在绝对水平和波动性上都与前一天大相径庭。
  • 传入数据的频率异常不规则。在一天中几乎每天打开和关闭时,每秒数据点的数量可能是一天中平均值的10倍。另一个问题涉及定期采样的数据。
  • 金融数据中的“异常值”表现出一些特定的模式,可以使用不适用于其他领域的特定技术来检测这些模式,而我(在某种程度上)正在寻找这些特定技术。
  • 在更极端的情况下(例如闪存崩溃),在更长的时间间隔(> 10分钟)内,异常值可能占数据的75%以上。另外,传入数据的(高)频率包含有关情况异常方面的一些信息。

1
由于数据的性质,我不认为这是重复的。在另一个问题上讨论的问题是定期观察时间序列,偶尔出现异常值(至少这就是我的解释方式)。由于交易所开放效应,逐笔交易数据的性质将导致不同的解决方案。
罗伯·海恩德曼

通用时间序列在线离群值检测简单算法的可能重复项建议将这个问题作为重复项予以解决。您能否在meta线程中让我们知道您的上下文是否与我所链接的问题不同?

@Rob但是交换打开效果仅决定何时必须运行算法。基本问题保持不变。即使在网络数据中,您也具有“办公室开放效应”,一旦办公室开放,流量就会达到峰值。至少,OP应该链接到该问题,在其中扫描答案并解释为什么那里的解决方案不起作用,以便可以为该问题发布合适的答案。

1
我同意@Rob。这种数据可能会带来独特的挑战,因此这不是重复的。
Shane 2010年

1
我认为它属于这里。问题在于分析不规则间隔的,非常嘈杂的时间序列。您是否看过Dacorogna,Olsen和其他一些人撰写的“高频金融入门”?还是同一作者的论文?
PeterR

Answers:


14

这个问题肯定很难

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

  • 诸如同业拆借利率之类的固定可能在一段时间内保持不变,然后突然跳跃
  • 类似地,例如某些固定汇率的外汇交易
  • 某些工具是隐含的利差;这些可能会在一段时间内接近零,并且突然之间会发生跳跃

去过那里,做了,...在上一份工作中。您可以尝试使用套利关系工具将每个系列括入括号中(例如,假定美元/欧元和欧元/日元被假定是好的,您可以在美元/日元应该是什么的范围内进行计算;同样对于基础等价物等的衍生产品)。

商业数据供应商为此付出了一些努力,那些使用它们的客户也知道……它仍然不能排除错误。


+1是,没有什么是完美的。Tickdata.com(提及其论文)还包括离群值,并且它们还会剔除过多的好数据(与其他来源进行比较时)。奥尔森的数据几乎是可怕的,我通常只是指示性的。银行向大型运营团队支付费用以进行此工作是有原因的。
Shane 2010年

我喜欢您关于使用已知套利关系的想法。在上一份工作中您是否尝试过此方法?
jilles de wit

不,我们从未完全将其正式化。但是我认为我们使用了一些简单的方法(即ETF与基础指数等)。但是已经有几年了。
Dirk Eddelbuettel

8

当我回到计算机时,将添加一些论文参考,但是这里有一些简单的建议:

绝对是从收益开始。这对于处理不规则的间距至关重要,因为在间距不规则的情况下,您自然可以得到很大的价格差距(尤其是在周末左右)。然后,您可以应用一个简单的过滤器以完全消除超出标准的收益(例如,相对于大量标准差)。收益率将调整为新的绝对水平,因此较大的实际变化将导致仅损失一滴答。我建议使用两次通过滤波器,并从1步和n步中获得收益,以处理离群值簇。

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

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


通过仅使用收益,您将很容易受到阶梯影响(即一系列价格从正常价格上升或下降,每个收益都可以接受,但作为一个整体,它们代表一个异常值)。理想情况下,您将同时使用收益率和绝对水平。
jilles de wit

5

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

μ^Ťσ^Ť

xtμ^tσ^Ť

你可以找到更多信息(和链接的R封装)在此文件

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


我已经尝试过类似的方法,但是这种方法不能很好地应对波动性的突然变化。这会导致在安静时段过滤不足,而在更忙碌的时间内过滤过度。
jilles de wit

我不明白这个“这会导致在安静的时期过滤不足,而在更忙的时间导致过滤过度”,请解释一下吗?
user603 2010年

在平静时期,价格波动性趋于降低,因此可以将离平均值较近的价格视为离群值。但是,因为您将MAD用于(大概)整个交易日(甚至更长),所以这些离群值离中值的距离小于3 MAD,因此不会被过滤。相反,对于价格变动较高的繁忙时段(可接受的价格变动将被过滤)。因此,问题减少为始终始终正确估计MAD,这就是开始的问题。
jilles de wit
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.