一种指数行情的异常检测方法
文献发布时间:2023-06-19 13:49:36
技术领域
本发明涉及证券行情系统的异常检测技术领域,具体来说是一种指数行情的异常检测方法。
背景技术
Level-1行情是上海证券交易所基本行情,指根据《上海证券交易所交易规则》规定发布的即时行情信息。即时行情信息包含:集合竞价数据、证券行情数据、指数行情数据。
除了股票行情之外,指数行情也是投资者进行交易的重要参考数据。指数行情从生成开始,需要经过交易所、证券公司、信息商等单位的不同系统、不同网络,层层转发,才能最终展示到投资者的面前。为了保证证券交易的连续和公平,指数行情在生成和传输的每个环节上,既要保证数据的完整性,又要保证数据的正确性。数据的完整性比较好检测,可以根据每次发送的消息数量比较得出,不一致则异常。数据的正确性却是一个技术难题,主要难点在于,指数行情数据中最新价每时每刻都在变化,除了涨跌幅限制之外,没有一个基准值来判断最新价格是否正确。
因此,在提供指数行情数据完整性和准确性的前提下,为保证快速、及时发现指数行情的异常,需要设计一种指数行情最新价出现异常的异常检测方法。
发明内容
本发明的目的在于解决现有技术中指数行情最新价出现异常的问题,提供一种基于统计模型的指数行情的异常检测方法。
为了实现上述目的,设计一种指数行情的异常检测方法,其特征在于方法步骤包括
历史数据训练:
步骤a.获取指数行情的历史数据,并对历史数据进行标准化处理,得到一个按照时间序列排序的记录,每条记录是指历史上某个时间点的所有指数的最新价;
步骤b.根据所有的历史数据,利用peason算法计算指数之间的相关系数,得到一个n阶的相关性矩阵,n表示指数的数量,相关性系数的值在[-1,1]区间内;
步骤c.设置相似度阈值,超过阈值的元素置为1,其余的元素置为0,将上一步骤的相关性矩阵,转化为新的相关性矩阵;
步骤d.利用相关性矩阵,构造一个n顶点的无向图,顶点表示指数,边表示相关性系数;
步骤e.利用社区检测算法将所有指数进行分组,确保同一分组内的指数具有相同的波动形态;
步骤f.在每一个分组内,根据一个时间窗口,将历史数据进行分割。一个时间窗口内包含m条记录,指数分别转化为m维向量,如:(X1,X2,…,Xm),(Y1,Y2,…,Ym),再计算指数两两之间的欧式距离;
步骤g.训练完成后,将分组结果、指数两两距离保存成历史模型;
实时检测:
步骤h.实时读取指数行情,根据分组结果,分发到对应的分组队列中进行检测;
步骤i.比较实时数据中的指数与历史模型中的指数是否一致,不一致则产生一条指数新增或者指数减少的异常信息;
步骤j.实时数据中的最新价与昨日收盘价进行比较,超过了涨跌幅限制,则产生一条超过涨跌幅的异常信息;
步骤k.在同一个分组内,获取与上述时间窗口大小一致的实时数据,计算指数两两之间的欧式距离,并与历史模型中的指数距离进行比较,如果超过历史模型中距离的上下限,则记录实时指数相关系数为0,反之记录实时指数相关系数为1;
步骤l.将所有指数的相关系数,构造成相关性矩阵,进一步的转化为一个无向图;
步骤m.根据无向图,利用社区检测算法将所有指数进行分组;
步骤n.如果分组的数量大于1,则表示分组结果与历史数据分组结果不一致;
步骤o.利用少数服从多数原则,数量少的分组中的指数被判定为异常指数,产生一条分组异常的异常信息。
优选的,步骤a中存在缺失的数据,使用线性填充方法进行填充。
优选的,peason算法具体如下:
其中,X,Y表示两个指数,n表示指数的样本值个数,μ
优选的,计算指数两两之间的欧式距离的方法具体如下:
其中,x和y代表两个指数,n是时间窗口中的样本数量。
本发明同现有技术相比,其优点在于:
1.上述方法提高了指数行情异常检测的准确率、缩短了指数行情异常发现的时间;
2.上述方法可以通过调整训练过程中的参数,不断优化分组结果,达到较为准确的分组;
3.历史训练和实时检测分为两个系统模块,独立运行,降低了模块之间的耦合度,保证系统的高可用和扩展性;
4.以多线程的方式处理实时行情检测,提高异常检测的并行处理能力。
附图说明
图1是根据实施例1中所述的历史数据训练的流程示意图;
图2是根据实施例1中所述的实时数据检测的流程示意图。
具体实施方式
下面结合附图对本发明作进一步说明,本发明的结构和原理对本专业的人来说是非常清楚的。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
根据本实施例,提供了一种基于统计模型的指数行情异常检测方法的实施例,本方法用于解决证券行情系统中的指数异常检测的问题,确保及时发现指数行情的异常数据。
在以下实施方式中,在行情发布系统生产环境中进行,在统一监控中部署。图1和图2示出了该系统的流程示意图,该系统包括:
S101:每天下午16点00分启动指数行情历史训练系统,读取历史数据,历史数据是一个时间序列的数据。
S102:将历史数据进行标准化,采用的计算公式为:(当日最新价-前日收盘价)/当日最新价。如果存在缺失的数据,使用线性填充方法进行填充。
S103:计算指数两两之间的相关性,具体步骤如下:
S103-1:对所有指数两两进行相关性计算,采用peason相关性算法,具体计算方法为:
其中,X,Y表示两个指数,n表示指数的样本值个数,μ
S103-2:根据上一步骤的相关系数,构造一个相关性矩阵,举例如下:
S103-3:将相关性矩阵中低于阈值(阈值一般在)的数值置为0,使得弱相关和负相关的指数变为不相关,生成新的相关性矩阵。
S103-4:将相关性矩阵主对角线的值置为0,使得同一指数变为不相关,生成新的相关性矩阵。
S104:根据指数相关性将所有指数进行分组,具体步骤如下:
S104-1:将相关性矩阵,转换成一个无向图。其中,指数对应图中的顶点对应指数,边对应相关性。
S104-2:利用基于模块度的社区检测算法(Louvain算法),将所有指数分组。
S105:根据分组结果,在一个时间窗口内,计算指数两两之间的距离,具体步骤如下:
S105-1:依次选取一个分组,如果该分组只有一个指数,则选取下一个分组,否则进入第(2)步。
S105-2:根据时间窗口将历史数据分割,比如设置时间窗口值为30秒。
S105-3:按照时间先后顺序,取出第一个时间窗口内所有指数的数据,进入第(3)步。
S105-4:计算两两指数之间的欧式距离,具体计算方法如下:
其中,x和y代表两个指数,n是时间窗口中的样本数量。
S105-5:循环执行第(3)步,直到处理完所有时间窗口,进入第(6)步。
S105-6:循环执行第(1)步,直到处理完所有分组。
S106:将上述步骤中的分组结果和指数距离保存成历史模型文件。
S107:历史数据训练结束
S201:每天上午9点00分启动指数行情实时检测系统,读取历史模型,获取分组结果和指数距离。
S202:读取实时数据,根据分组结果将不同指数分配在不同组内进行异常检测。
S203:如果实时数据和历史模型中的指数不一致,则生成一条“指数新增”或者“指数减少”的异常信息
S204:如果实时数据中,指数的最新价超过了昨日收盘价的涨跌幅限制,则生成一条“超过涨跌幅”的异常信息。
S205:计算同一分组内的指数,两两之间的欧式距离。具体计算方法如下:
其中,x和y表示两个指数,n表示时间窗口中的样本数量。
S206:与历史模型中的指数距离进行比较。具体步骤如下:
S206-1:计算历史模型中指数距离的上下限,采用样本均值加减3个标准差的方法。
S206-2:比较实时指数距离与上下限,如果指数距离不超过上下限,则将实时指数距离置为1,超过上下限,置为0。
S206-3:根据实时指数距离,构造一个n阶对称矩阵。
举例如下:
S207:根据同一分组内的指数距离,再次进行分组,具体步骤如下:
S207-1:将结果矩阵,转换成一个无向图。其中,指数对应图中的顶点,矩阵元素值对应图中的边的权重。
S207-2:利用基于模块度的社区检测算法(Louvain算法),将所有指数分组。
S207-3:将分组后的结果,按照组内元素从多到少排序,尝试大分组能否合并小分组。如果能合并,则合并;不能合并,则跳过。
S208:根据上一步骤的分组结果,进行异常判断,具体判断规则如下:
S208-1:如果分组数量只有一个,表示指数正常。
S208-2:如果分组数量超过一个,根据少数服从多数原则,判定指数少的分组异常。
S209:实时检测结束。
- 一种指数行情的异常检测方法
- 一种基于核密度估计和指数平滑算法的异常用户检测方法