蓝盟IT小贴士,来咯!
现实世界的数据量越来越多,容易受到噪声、缺失值、不一致数据等的影响。 如果数据库太大,有不同的源,则必定存在不完整的数据问题。 这是不可避免的。 必须对数据进行预处理,以尽量减少数据的各种问题对建模的影响。
在实际操作中,数据预处理通常分为两大步骤:数据清洗和数据基本分析。 这两个步骤并不一定按照优先顺序进行,通常相互影响。 例如,某些错误数据(不可能的极值)必须通过基本的统计分析发现。
有一种说法是,数据预处理占大部分工作量,有的甚至达到总工作量的80%,而建模和算法的实际工作量其实只有20%。 这个结论在面对互联网和传统的IT领域,特别是大量的非结构化数据时,确实是事实。
因此,第一步是数据清理。 为了清理数据,必须知道可能存在问题,并设计出相应的解决问题的方法。
原始数据可能有以下三个问题。
数据丢失:数据丢失的问题在高频数据中尤为常见。 另外,很多投资者都是自己实时下载的数据,所以即使以后发现也很难弥补。
噪声或偏离:系统或人为错误导致数据出现明显错误。 例如,一只股票的价格应该在12元左右,但是突然产生了100元的价格数据。
数据不一致:许多投资者使用多个数据源进行交叉检查,以确保数据的准确性。 此时,经常会发生数据不一致的情况。 即使是同一数据源,也可能发生数据不一致。 例如期货行情的数据、Wind、文华、MC的数据都有可能发生不一致的问题,数据频率越高,不一致的可能性越高。
01缺失值
对于缺少的值,在实际操作中需要两个程序。 一个是检查缺少值的程序,另一个是填充缺少值的程序。 一般流程为:首先检查缺失值,研究缺失值,选择填补方法,进行填补,然后再次检查。 这样,重复循环直到数据丢失落入可接受的范围内。
缺失值也有各种类型。 一是“正常缺失”。 例如,如果股票在某一天停止升值,就没有当天的交易数据。 一个是“异常缺失”,比如明明有交易,却没有交易数据。
例如,下载5分钟的数据后,20160104的数据全部丢失,但Wind上的数据表示当天的交易状况为“交易”。 实际情况是当天发生“熔断”,是新的结构,所以Wind没有充裕的时间准备表示当天交易状态的场地。 这是数据的“正常缺失”,只是交易状态和数据不一致。检查缺失值时,需要清楚地分辨这两种缺失。 因为根据缺损值的不同,处理方法也不同。 检查缺失值后,需要进行处理。 首先处理“异常缺损”。 一般流程具体如下。
1 )检查提取数据是否有错误。 数据源本身可能是完整的,但在提取数据时出现了问题。 例如,笔者在使用市场上某家的金融高频数据时,下载了5分钟的数据计算了高频波动率,发现存在很多缺失的数据。 在该公司后台调查后发现,他们的数据库中其实有这个数据,这表明在下载数据的过程中出现了问题。
2 )从其他数据源中提取。 数据源本身也有缺少数据的数据源。 在这种情况下,可以进一步寻找其他数据源进行补充。
算法填充。 在某些情况下,无法使用多个数据源进行补充,并且数据本身有空间,无法进行补充。 此时,可以后退求下一步,用算法填充。
常用的算法有前向填充和后向填充两种。 正向填充是指使用前面的数据填充空值。 填充是指使用使用后的最新数据填充空值。
02噪声或偏离点
噪声和离群的问题一般有两种情况。 一个是由数据错误引起的,例如本来应该是10.0的数据,但错误显示为10000时。 另一个本身是真实的数据,但却是离群点。 例如,在金融危机中的收益率和波动率有可能非常极端,成为偏离点。
一般的处理步骤如下。
1 )用一定的算法识别离群点。 一般来说,根据使用该数据的标准偏差的几倍来判断。 例如,在正太分布中,正负标准偏差3倍以上的概率为99.7%,可以将其认定为可疑的偏离点。
2 )人工判断偏离点是由错误的数据引起的,还是正常的偏离点。
3 )处理离群点。 一般来说,错误的离群点需要修改或删除。 正常的偏离点需要另外建模分析。
03数据不一致
为了确保数据的准确性,可能需要使用多个数据源进行交叉检查。 例如,我在研究港股时,比较了Wind和Bloomberg的后复权数据,发现两者有很大的差距。 这就是数据不一致的问题,但我不知道哪个是正确的。 因此,将同花顺和CSMAR的数据加入后进行比较,发现后者与Wind的数据一致。 确认是Bloomberg的问题,采用了Wind的数据。
文/上海蓝盟 IT外包专家