基于PCA和AP的嵌套式KNN金融时间序列预测模型

2019-03-13 08:07
预测 2019年1期
关键词:聚类矩阵样本

, ,

(1.西南财经大学 天府学院 智能金融学院,四川 成都 610052; 2.成都大学 商学院,四川 成都 610106; 3.重庆金融学院 智能金融研究中心,重庆 400067)

1 引言

金融时间序列预测是一个极具挑战性的理论和技术问题,具有重要的经济意义,近年来引起了金融界和计算机界的广泛关注。金融时间序列概率可预测性已被大量文献所证实。在有效市场假说(EMH)的基础上,Box和Jenkins[1]提出了ARIMA模型,Engle[2]提出了ARCH模型,Bollerslev[3]提出了GARCH模型,认为金融市场的价格波动有可预测性,但并非是价格本身。而一些跨学科的研究人员采用从其他不同角度继续研究金融市场预测,包括常见的混沌理论模型[4],支持向量机(SVM)的预测模型[5],神经网络(NN)的预测模型[6],和基于k-最邻近元(KNN)的预测模型[7]。

在这些常用的预测模型中,Cover和Hart[8]提出的KNN可以处理高维数据,并能够简单直观地从特征空间中提取相似实例进行预测分析,由此被广泛应用于时间序列预测[9]。但是KNN有两个明显的缺陷会影响其性能也是众所周知的。第一,计算量过大,因为需要计算测试点与已知样本中的所有点的相似度,并找到k个最邻近元;第二,受不均衡样本影响,当不同类所含样本点数量差距较大时,测试点的k个最邻近元中,大样本类容易占多数而影响测试点的分类或者回归效果。为了解决这两个问题,本文提出了一种嵌套式KNN,称为Nested KNN。Nested KNN分成两层:第一层首先计算预测点前一时点t与各个聚类中心的相似度,并找到其最近的聚类中心和相应的聚类;第二层计算t与第一层输出的聚类中的各个点的相似度,并找到t的k个最邻近元。由于第一层只需要计算t与各个聚类中心的相似度,所以大大减少了算法的计算量;第二层只计算t与同一聚类中的各个点的相似度,因此避免了受不均衡样本的影响。

Tsai和Hsiao[10]指出特征提取是金融时间序列预测的关键。本文采用主成分分析(PCA)和仿射传播聚类(AP)对历史数据集进行特征提取,将输出的特征作为Nested KNN预测的输入。由此提出了一种将PCA、AP和Nested KNN组合起来的智能预测模型,简称为PANK模型(PCA+AP+Nested KNN)。该模型将用于实证预测欧元兑美元汇率及沪深300指数的走势。

2 PANK预测模型的结构框架

本文在KNN回归的基础上,提出了PANK金融时间序列预测模型。PANK模型通过PCA来减少原始金融时间序列中的冗余信息,生成富含有效信息的主成分,并将其输入AP进行聚类以找到时间序列的最优聚类方案和相应的聚类中心集,最后输入两层嵌套式Nested KNN进行回归预测。

一般地,我们取一段足够长的历史数据对模型进行训练和测试。首先,需要确定数据的时间框架,本文采用日数据,用日作为基本时间尺度。时间序列X(t)表示t时间(一天)的数据,包含了四个价格分量:开盘价X.O(t)、最高价X.H(t)、最低价X.L(t)、收盘价X.C(t)和交易量X.V(t)。在本文中,我们只考虑X.C(t),因此在后面的论述中X(t)仅包含X.C(t),在后续研究中我们将会加入更多的分量。

对于任意X(t),定义当日相对收益率

(1)

其中λ表示预测步长,最基本预测步长为1,因此在没有具体说明时,本文用RR(t)表示RR(t,λ)。取足够长的历史相对收益率数据

DR(t,T)=(RR(t),RR(t-1),…,

RR(t-(T-m)+1))

(2)

其中t表示所取得的数据中最近的时间点;T表示全部数据的总天数;m<

一般的PANK预测模型可以表达为

PANK:RR(t+λ)=NKNN(C(t),k)

(3)

其中NKNN表示嵌套式KNN;C(t)是AP聚类后生成的最优聚类结果,是预测模型提取的特征集;k是模型参数;RR(t+λ)是模型输出的预测日的相对收益率。具体地,PANK模型使用PCA和AP聚类生成特征集C(t),因此,PANK模型可以进一步地表达为

PANK:RR(t+λ)=NKNN{FE[AP(PCA(DR(t,m)))],k}

(4)

其中FE( )(Feature Extraction, FE)表示聚类提取特征值的过程。

3 PANK预测模型的三个组成部分及其算法

PANK模型由PCA、AP和Nested KNN三个部分组成。模型首先采用PCA提取富含原始数据信息的主分量,并输入AP进行信息传播聚类,生成特征集C(t),最后输入Nested KNN进行回归预测。下面将依次介绍PANK模型的各个组成部分及其算法流程。

3.1 主成分分析(PCA)

主成分分析(Principal Component Analysis, PCA)是1901年由Pearson提出并于1933年由Hotelling发展[11,12],是一种常用的减少冗余信息,对大数据进行降维的方法。在应用PCA提取主分量之前,需要采用滑动窗口(窗口宽度为m)技术截取历史数据[13],形成预测模型的输入,并形成预测模型训练输入输出数据集

DT(t,T-m)={D→R}

(5)

D=(DR(t-1,m)DR(t-2,m)…DR(t-(T-m),m))′

(6)

R=(RR(t)RR(t-1)…RR(t-(T-m)+1))′

(7)

PANK模型的第一步是PCA变换减少冗余数据,获取主分量,这实际也是一个奇异值分解过程。首先对历史数据矩阵D进行标准化处理和奇异值分解,可得矩阵Z

Z=UΣVT

(8)

其中U和V都是正交矩阵,分别是ZZT和ZTZ的特征向量矩阵。Σ是非负矩形对角矩阵,其左上角的子矩阵的对角元素λi(i=1,2,…,r)为ZZT的特征值。由此可以得到数据转换矩阵

P=ZTU=VΣTUTU=VΣT

(9)

其中矩阵P的各列依次为各个主成分。

实际上,在时间序列组成的矩阵中,存在信息冗余,其信息主要集中于前面部分主分量上。因此,我们可根据对主成分累积贡献率(Cumulative Contribution Rate, CCR)的约束来提取前l(l<

(10)

3.2 仿射传播聚类(AP)

仿射传播聚类(Affinity Propagation, AP)是2007年Frey和 Dueck[14]在Science上提出的一种快速有效的新聚类算法,该算法事先将所有的数据点都看作是可能的聚类中心,通过不断的循环迭代,最终获得包含有一系列聚类中心和相应的聚类集的聚类方案。在含有N个数据点的样本中,AP算法首先计算每两个数据点之间的相似度,并组成相似度矩阵SN×N。在此基础上,每个数据点都被看作是潜在的聚类中心(称为exemplar),然后通过迭代循环,在信息的搜集和传递过程中不断竞争,最后产生一系列最优的聚类中心,并将各个数据点分配到最相似的聚类中心所代表的类中,形成AP最优的聚类结果[14]。下面将具体说明AP的算法流程。

在金融时间序列经过PCA后,将选出的主成分组成样本空间,计算每两个样本点i和j之间的相似度S(i,j)。在本文中,以欧氏距离作为相似度测度,后续的研究中将探索更适合金融时间序列相似度的测度方法,有

S(i,j)=-‖i-j‖2

(11)

同时生成了由所有的相似度S(i,j)组成的相似度矩阵S。

为了找到最合适的聚类中心,AP算法在相似度矩阵S的基础上,对每个样本点进行信息搜集和传递,并进行迭代循环。在每一个迭代循环过程中,对于任意一个潜在的聚类中心e,都从任意一个样本点i搜集信息R(i,e),同时,也为点i从潜在的聚类中心e搜集信息A(i,e)

(12)

(13)

其中R(i,e)表示点e对点i的吸引度(responsibility)或者说是点e适合作为点i的聚类中心的程度。A(i,e)表示点i对点e的归属度(availability)或者说是点i选择点e作为其聚类中心的适合程度。整个过程中R(i,e)和A(i,e)不断被计算迭代直到R(i,e)+A(i,e)达到最大值,点e才是选出来的最适合点i的聚类中心。

需要指出的是,在相似度矩阵的对角线上存在非常重要的偏向参数p,它表示每个点被选作聚类中心的倾向性。一般地,设定p的初始值pm为相似度矩阵S中元素的中值,下降步幅[15]

(14)

在迭代循环的过程中,若聚类个数收敛到某个值h时,以pstep逐渐减小p,并继续迭代,以获得不同聚类个数的不同聚类方案。为了在不同的聚类方案中,选取一个最优的,可引入能够有效反映聚类结构中的类内紧密性和类间分离性的Silhouette指标[15]。假设样本空间被分成了r个聚类Ci(i=1,2,…,r),可以计算点x*的Silhouette指标

(15)

其中d(x*,Ci)表示聚类Cj中的点x*与另一聚类Ci(i≠j)中所有的点之间的平均不相似度,a(x*)表示聚类Cj中的点与同聚类中其他所有点的平均不相似度。由此,可以计算出整个样本空间中所有点的Silhouette指标的平均值Silaverage

(16)

Silaverage值可以有效反映聚类结果的质量,Silaverage>0.5表示各个不同聚类间具有明显的可分离性,Silaverage值越大表示聚类质量越好[15]。

3.3 嵌套式k-最邻近元(Nested KNN)

作为一种简单、直观、有效的非参数模式识别方法,KNN既能用于分类,又能用于回归,因此被广泛应用[16,17]。但是KNN算法有两个非常明显的缺点:计算量过大和受不均衡样本影响。为了改进KNN算法的这两个不足之处,本文特别提出了一种嵌套式的KNN算法,称为Nested KNN。

对于一段足够长的、包含N个样本点的历史时间序列,可构建基于原始KNN的预测模型

x(t+λ)=KNN(N,k)

(17)

首先,用欧氏距离作为相似度测度,计算测试点x(t)与任意样本点xn(n=1,2,…,N)的相似度

S(x(t),xn)=-‖x(t)-xn‖2

(18)

将S进行排序,找到前k个最大的S值和最相似的k个最邻近元xj(j=1,2,…,k),其中k

(19)

针对KNN的两大不足之处,本文特别在以上模型的基础上,将KNN改进为两层嵌套式算法Nested KNN。该算法由三个函数:NKNN、NKNN1和NKNN0组成。其中NKNN作为主函数,对应整个算法的输入-输出,并调用NKNN1找到与输入测试点最相似的聚类中心和相应的聚类;NKNN1再调用NKNN0在前一步输出的聚类中找到与测试点最相似的k个最邻近元用于回归预测。具体如下:

函数NKNN1, 输入预测点Xt+λ的前一点Xt=DR(t,T)和AP聚类输出的r个类Ci(i=1,2,…,r)的集合C和各个聚类中心ei(i=1,2,…,r)的集合E,输出与Xt最相似的聚类中心enearest和相应的聚类Cnearest,即

(Cnearest,enearest)=NKNN1(Xt,C,E,k=1)

(20)

计算Xt与任意聚类中心ei(i=1,2,…,r)之间的相似度S(Xt,ei)。当S(Xt,enearest)为最大值时,enearest就是与Xt最相似的聚类中心,由此,可以得到以enearest为代表的聚类Cnearest,并将Xt归为此类。

函数NKNN0,输入Xt和Cnearest,输出Xt+λ,即

(Xt+λ)=NKNN0(Xt,Cnearest,k)

(21)

(22)

其中参数k直接影响输出结果。在实际的测试中,具体的不同样本都对应于不同的最优k值,因此,为了得到更好的预测效果,本文将通过模型训练,找到最优的k值。

函数NKNN,输入Xt、C和E,先调用NKNN1输出Cnearest和enearest,再调用NKNN0输出Xt+λ,即

(Xt+λ)=NKNN(Xt,C,E,k)

(23)

其中有Xt+λ=DR(t+λ,T),由此可以得出RR(t+λ)。

在Nested KNN算法中,NKNN1只需要计算测试点Xt与各个聚类中心之间的相似度,因此较KNN算法极大地减少了计算量。同时在NKNN0中,只需要计算测试点Xt与其最相似的聚类中心所在聚类Cnearest中的各个点之间的相似度,因此有效避免了不均衡样本的问题。

4 PANK预测模型的结构参数和效能测度

4.1 PANK预测模型的结构参数

在构建一个具体的PANK预测模型时,需要设定三个关键的模型结构参数:m,λ,k。其中m表示截取历史金融时间序列的滑动窗口宽度;λ表示预测未来时间序列的步幅;k表示所取最邻近元的个数。由此,可以将(3)式和(4)式中的PANK模型表达为

PANK:RR(t+λ)=NKNN{AP*[PCA(DR(t,m))],k}

(24)

其中AP*=FE(AP)表示聚类提取预测输入的过程。

4.2 PANK预测模型的效能测度

对于时间序列预测模型的效能测度,我们常见的指标有均方根误差(Root Mean Square Error, RMSE)[18]、平均绝对百分比误差 (Mean Absolute Percentage Error, MAPE)[19]和平均绝对误差(Mean Absolute Difference, MAD),用来测度实际值与预测值偏差。然而,对于量化投资而言,只有在预测趋势方向有了显著的正确率后,这些效能测度指标才有意义。因此,本文对于具体PANK预测模型的效能测度将采用衡量预测趋势方向正确性的命中率(Hit Rate,HR)[20]

(25)

5 PANK预测模型的实证分析

浮动汇率制度在世界市场有效,大家对外汇市场广泛关注,为了避免外汇市场风险,提出了各种汇率趋势预测的模型[21,22]。与此同时,中国的股市,如沪深300股指等也受到了研究者的关注[23]。在本文的模型实证部分,我们构建了两个具体的PANK预测模型,分别对欧元兑美元汇率和沪深300指数真实的历史数据进行预测实证。

5.1 PANK_EURUSD_D1预测欧元兑美元汇率日线收益率

PANK_EURUSD_D1预测模型针对欧元兑美元汇率日线收盘价数据,对t+1日线收益率进行预测,该模型可从(24)式具体化为

PANK_EURUSD_D1:RR(t+1)

=NKNN{AP*[PCA(EURUSD_D1_DR(t,m))],k}

(26)

模型训练和测试的历史数据集由2002年11月1日至2017年11月24日期间的3909个交易日数据组成,前面时段的3128个数据点用于样本内训练,后面时段的781个数据点用于样本外检验。表1显示了PANK_EURUSD_D1预测模型的样本外检验预测命中率结果,其中在m=25和k=5时,取得了最高的命中率0.80(80%),这表明PANK_EURUS_D1模型是一种性能优良的汇率预测模型。

表1 PANK_EURUSD_D1 预测欧元兑美元汇率t+1日线收益率的命中率

5.2 PANK_HS300_D1预测沪深300指数日线收益率

PANK_HS300_D1预测模型针对沪深300指数日线收盘价数据,预测t+1日线收益率,该模型可从(24)式具体化为

PANK_HS300_D1:RR(t+1)

=NKNN{AP*[PCA(HS300_D1_DR(t,m))],k}

(27)

模型训练和测试的历史数据集由2002年1月4日至2017年7月28日期间的3775个交易日数据组成,前面时段的3020个数据点用于样本内训练,后面时段的755个数据点用于样本外检验。表2显示了PANK_HS300_D1预测模型的样本外检验预测命中率结果,其中在m=25和k=3时,取得了最高的命中率0.80(80%)。该实证结果表明PANK_HS300_D1模型仍然具有良好的预测效能。

表2 PANK_HS300_D1预测沪深300指数t+1日线收益率的命中率

5.3 与KNN和AP+Nested KNN预测模型的实证比较

为了进一步对PANK模型的预测效能进行评价,本文另外构建了两个具体的KNN预测模型和两个具体的AP+Nested KNN预测模型与之进行比较。

KNN_EURUSD_D1:RR(t+1)

=KNN{[EURUSD_D1_DR(t,m)],k}

(28)

KNN_HS300_D1:RR(t+1)

=KNN{[HS300_D1_DR(t,m)],k}

(29)

AP+NKNN_EURUSD_D1:RR(t+1)

=NKNN{AP[EURUSD_D1_DR(t,m)],k}

(30)

AP+NKNN_HS300_D1:RR(t+1)

=NKNN{AP[HS300_D1_DR(t,m)],k}

(31)

为了更直观地对六个具体模型的预测效能进行比较,我们选取了每个模型预测的最高命中率。表3显示了对比结果,PANK预测模型不管是在外汇市场还是在股指上都有着最优的预测效果,由此可以说明PCA、AP和Nested KNN在PANK模型中都是有效果的,能够有效改进KNN模型的预测效果。表3中不同模型的预测效能对比结果表明PANK预测效能优于AP+Nested KNN,而AP+Nested KNN又是优于KNN预测模型的。这正如Krogh和Vedelsby[24]证明的一样,“当构成组合预测模型的单一模型足够精确且足够多样化时,组合预测模型一定能获得比单一模型更好的预测效果。”

表3 PANK模型与其他相关模型的预测效能比较

6 结论与展望

本文提出的PANK模型,是一种集成PCA、AP和Nested KNN算法的金融时间序列预测的计算智能模型。从整体结构上看,该模型具有PCA+AP的特征提取过程和Nested KNN回归预测两大部分,是具有创新性的。而模型中的Nested KNN算法是本文针对KNN算法本身的缺陷,提出的一种嵌套式的KNN改进算法。该算法由三个函数组成了两层计算:(1)在PCA+AP输出的聚类中心集中进行计算,并找到最相似的聚类中心及所在类。(2)在第一层输出的聚类中进行计算,并找到最相似的k个最邻近元进行回归预测。这样的分层计算比原始的KNN算法具有更有效的分类效果和更快的运算速度,从而能够更有效地对金融时间序列进行回归预测。为了验证PANK模型的有效性,本文在预测欧元兑美元汇率和中国基准指数沪深300上进行了实证,对日线收益率进行了预测。实证结果表明PANK模型的预测性能明显优于KNN和AP+Nested KNN预测模型,在每日时间框架内,最佳命中率均达到0.80(80%)。

在后续的研究中,我们的金融时间序列预测模型可以从以下方面进行改进研究:(1)将线性变换PCA换成一种更适合金融时间序列的非线性方法,比如“自编码器”。(2)将欧氏距离换成一个更适合金融时间序列相似性度量的方法,以提高模型预测性能。(3)将KNN换成更有效的非线性预测模型,比如“随机森林”。

猜你喜欢
聚类矩阵样本
一种傅里叶域海量数据高速谱聚类方法
基于知识图谱的k-modes文本聚类研究
一种改进K-means聚类的近邻传播最大最小距离算法
基于模糊聚类和支持向量回归的成绩预测
规划·样本
人大专题询问之“方城样本”
多项式理论在矩阵求逆中的应用
随机微分方程的样本Lyapunov二次型估计
矩阵
矩阵