Local EPUB Text
数据清洗
我们已经探讨了数据的种类和数据的重要性,接下来我们讨论宽客在管理原始数据时会遇到的各种问题以及他们如何加以解决。尽管原始数据供应商、二手数据供应商以及第三方数据供应商都做了很多努力,数据仍然会出现缺失或错误的情况。如果忽视了这一点,这一问题会给宽客带来严重后果。这里我们对几种常见的这类问题加以讨论,并介绍一些用以解决这些问题的常见方法。值得注意的是,尽管以下所描述的数据问题看起来很明显,但在一个每小时处理上百万数据(甚至在1分钟内,尤其是对高频交易者而言)的量化交易系统中注意到这些问题却很有挑战性。
正如我们已经提及的那样,第一类常见的数据问题是缺失值。当部分信息确实存在,但由于各种原因数据提供者无法提供这些数据,便会发生数据缺失现象。若没有数据,交易系统什么也做不了,所以数据缺失是个很严重的问题。更糟糕的是,仅使用存在的部分数据,交易系统可能计算出错误的结果。解决缺失数据问题有两种常用方法。一种方法是建立允许数据出现缺失的系统,在某些时间段没有数据时系统并不会草率运行。例如,很多数据库会自动将缺失值赋值为零。毕竟,零和缺失有很多共同之处。但是,在一些情形下却有很大不同,如目前的价格为零(例如我们持有某产品的多头,在该头寸上将获得100%的损失)和目前的价格未知。
为解决这一问题,很多宽客在其数据库和交易系统中对零和空值加以区分。常用的处理缺失值的一个方法是,使用最近的一个已知价格数据,直到一个新的价格数据可用为止。第二种方法是在缺失值出现的位置进行插补,补上一个合理的数据。这个方法对于历史数据有用,对实时数据并不奏效;但对实时数据也有很多方法可以使用。
看一个半导体公司股票的例子。假设我们恰好知道在缺失值出现时点之前和之后的半导体公司股票的价格(这也是这种方法可用于恢复数据库里的缺失值的原因所在)。我们可以简单地将缺失时点的股票价格取为之前之后两个时点价格的平均值。进一步假设我们知道缺失时点附近时间段的股指、科技板块、半导体行业和主要竞争对手的表现。通过把缺失时点附近的这些信息以及相关事件结合起来,可能会计算出一个更加合理的股票价格。尽管我们无法保证事实上也不太可能得到精确值,但至少我们可以得到不会带来系统故障的合理数值。
第二类常见的数据问题是错误观测值。例如,小数点错误就很常见。以英国股票价格为例,有时以英镑为单位,而有时又以便士为单位。显然,如果系统默认收到的数字是以英镑为单位,而接收到的数据又没有明确标示数据单位,这时就会出大问题。10英镑被记作1000便士,但仅标记1000的话,会导致模型以为价格快速大幅上升,从而导致各种混乱(例如,如果价格突然莫名其妙地上涨了100倍,没有数据复核机制的系统可能会大幅卖出该股票)。此外,价格数据可能出现错误。交易所和其他数据源经常会排除坏点(bad prints),就是指那些根本不会出现的数值或者至少不会以数据源所预示的方式出现的数据。
目前解决这一问题最为常用的是被称为异常值过滤(spike filter)的方法。异常值过滤方法寻找价格数据中那些幅度特别大、突然的变动,并对这些变动进行平滑或直接删除。注意到,有时异常值确实存在,这使得问题更加复杂。这时,异常值过滤方法可能会拒绝掉一个有效数据,或者忽略异常值或者将其替换为一个错误的值。图8-1演示了这样一个例子。在2008年7月15日这一交易日,美元兑墨西哥比索迅速下跌了近3个百分点,然后又在几秒钟内回复到正常水平。
图8-1 2008年7月15日墨西哥比索9月到期合约价格异常图
但这种情况并不仅仅出现在交易不活跃的金融产品上。10年期的德国国债是世界上交易最为活跃的期货合约之一,曾经在2008年3月28日交易日期间几秒钟之内大跌了1.4%,之后很快恢复到正常水平(见图8-2)。
图8-2 2008年3月28日德国国债期货6月到期合约价格异常图
异常值过滤方法可能会将该点的价格作为坏点对待,但这却是真实存在的一个点。为了减少这一问题的影响,一些宽客使用异常值过滤方法来提醒,辅以系统监管人员进一步查看该数值,检测这一问题。基于所查看到的事实,人工可以做出判断,对这一异常价格应该怎么处理。当某一个数据有多个数据源时,另一种常用的有效方法是使用来自不同数据源的数据进行交叉核实。如果相互匹配,这很可能是个正确的价格数据。如果无法匹配,至少其中一个是有问题的。当然,当两个供应商的数据不匹配时应采取什么措施,属于另一个话题。还有一种清洗数据的常用方法和处理缺失数据的方法类似,通过观察坏点出现时点前后的值或者根据相关金融产品的表现来得到一个近似值。
另一个常见的数据错误类型和公司的行为有关,例如配股和分红等。假设一只股票按照3:1进行配股,一般地股票价格会下降2/3,以抵消股票数额的增加[1]。如果数据供应商没有记录这次配股,因而没有调整历史数据以反映公司行为。这时量化交易系统可能会受到误导,认为股价一夜之间下跌了67%。这一问题的解决主要依赖对公司行为的独立追踪以及之前提到的异常值过滤方法的人工监管。
另一个令人头疼的问题是,有时数据中会含有错误的时间戳。这一问题通常出现在日间数据或实时数据中,但其他数据中也存在这个问题。这是个比较难解决的问题。显然,时间序列的路径至关重要,尤其对关注阿尔法收益的量化交易者而言需要指明金融产品的买入卖出以及清仓时机。这时,如果因为数据源的错误导致时间序列被打乱,会带来很大麻烦。宽客可能会相信系统实际上运行错误的结果[2],或系统实际上运行正常时却认为其运行错误[3]。如果量化交易公司对数据进行实时存储,可以通过对接收到数据的时间戳和存储数据时的内部时间进行比对,以确保时间戳的正确性,这可能是解决这一问题最行之有效的办法。但这么做需要可靠地对数据进行实时存储,并利用软件对每个数据点的时间戳和系统时间进行比对而不会过于拖慢系统速度,这些都增加了解决这一问题的难度。需要指出的是,这一方法只适用于实时抓取和存储数据的量化交易系统。对于那些购买数据的宽客而言,他们只能通过对来自不同数据源的数据进行交叉检验来解决这一问题。
最后,需要提到一个不太明显的数据问题,被称为前视偏差(look-ahead bias),我们将在本书中对该主题进行多次探讨。前视偏差是指在某些事情真实发生之前便错误地假设已经知道了相关信息,还有另一种形象的表述“昨天之前就知道了昨天的新闻”。之后我们将深入讨论前视偏差问题,目前我们只对数据上的一类这种偏误加以讨论。具体而言,该问题是由数据的不同步性造成的。
数据不同步的一个常见例子是每个季度美国各个公司上报给监管当局的财务报表文档。公司在每个季度末上报财务报表,但这些报告通常在季度末4~8周之后才会公开发布。假设2010年第1季度已经结束。2010年5月1日,顶点建筑公司(Acme Concrete)报告公司第1季度的利润是每股1美元,而宽客在3月31日的预计只有每股0.5美元,因而这是个利好的消息。而一旦能得到这个数字,绝大部分数据供应商就会在3月31日报道顶点建筑公司第1季度的利润是每股1美元,而不会等到5月1日真正公布这一数字。
3年以后,一个宽客利用供应商提供的收益数据对交易策略进行验证。数据中记录着顶点建筑公司2010年第1季度的每股收益是1美元,宽客便会信以为真,而实际上在5月1日发布之前他是不可能知道这一数字的。在模型验证过程中,宽客看到模型在4月就会买入顶点建筑公司的股票,因为每股1美元的收益使得4月开始这只股票的市盈率就很好,但实际上模型直到5月1日以后才会得到每股1美元收益这个数字。在5月初时交易策略会突然带来很大利润,因为这时收益数据公布于众。这种问题在宏观经济数据(如失业率)中也存在,在有些指标初次发布几个月后会进行修正。如果不对这类数据的修正记录进行仔细追踪,宽客可能会遇到在之前股票例子中同样的问题:他以为自己在过去能够获得修正过的数据,而实际上他只能得到不太准确的初始数据。
如果宽客忽视了这一类型的数据错误,他就会犯第一类错误:认为自己的策略很有效会带来收益,但事实上只是看起来如此而已。因为在此过程中发生了很严重的数据错误。为解决数据中的前视偏差问题,宽客可以记录下更新后的数据发布的日期,并且在模型验证时只在合理的时间段才使用这些数据。此外,宽客也可以在他们所关注的数据上加人工滞后项,这样模型对该指标的敏感度得以延误,足以克服前视偏差。数据的前视偏差问题在研究中很特殊,在下一章我们将继续讨论。真实交易中并不存在前视偏差之类的问题,现实中宽客们希望尽可能快地将所有相关数据纳入到他们的交易系统中。
另一类源于数据不同步性的前视偏差则是世界上不同交易市场收盘时间各不相同造成的。SPY(跟踪标准普尔500指数的ETF)在下午4点15分结束交易,但构成标准普尔500指数的股票4点后就不再交易。欧洲股票市场在纽约时间上午11点到晚上12点间不进行交易。一天中纽约开盘时亚洲市场已经收市了。很多情形下,美国的新闻和交易活动对欧洲和亚洲市场的重大影响直到第二天才能体现出来。
例如,2008年10月10日周五一个交易日内,日经225指数下跌幅度超过9%。但纽约开盘时这边已经收盘了,而欧洲市场同一天则下跌了7%到10%不等。当欧洲市场收盘时,标准普尔500指数当天下跌幅度为6%左右。但10日在美国东部时间下午两点,这时其他地方都开始进入周末而美国市场还有两个小时的交易时间,标准普尔500指数突然飙升,收盘时只跌了1%多一点。在日本,13日周一休市。欧洲市场周一强力反弹,几个主要市场收盘时上涨幅度都超过11%,而纽约市场日中“只”涨了6%。但当日收盘时,美国市场的涨幅也超过了11%,超过了欧洲市场。接下来周二一个交易日,日经指数上涨了14%。在接下来的交易日,欧洲市场涨了约3%,而美国市场微跌。忽略这种不同步性会为收盘价的分析带来很大问题,因为同一天中这些收盘价的时间各不相同。
前视偏差问题对研究和资产管理以及主观判断型交易者有很多不易察觉的影响,以上我们举了几个例子。宽客面临的关键挑战在于如何处理以各种形式呈现的这一问题。
[1] 为简单起见,我们没有考虑配股效应,但很多人认为确实存在。该理论认为,股票真实的下降程度并不会像根据配股的规模计算出来得那么严重,因为人们喜欢购买被低估的股票。
[2] 理论上这被称为第一类错误,指在假设检验问题中接受一个假阳性的结果,即原假设错误时却认为原假设正确。
[3] 理论上这被称为第二类错误,指在假设检验问题中接受一个假阴性的结果,即原假设正确时却认为原假设错误。