【学术论文】K近邻及其集成模型的股票价格预测

摘要

为了验证股票的价格运动与过去应该是相似的这一假设,运用K近邻算法,将价格运动简单划分为涨跌两类进行预测,进行假设验证。使用滑窗方法比较现在的价格运动与何时的历史价格更为相似,将多个K近邻模型组合成集成模型,实现模型的泛化和策略收益的调整。使用中证500指数的历史价格数据进行预测实证,2017年~2018年9月的预测结果显示单个K近邻模型策略获得76.72%的收益,现在的价格运动与遥远的过去更为相似,集成模型能更好地控制风险。该模型利用K近邻模型的含义验证了股票价格运动具有相似性,可以作为证券交易的择时策略。

中文引用格式: 张伟楠,鲁统宇,孙建明. K近邻及其集成模型的股票价格预测[J].电子技术应用,2019,45(5):9-13,22.
英文引用格式: Zhang Weinan,Lu Tongyu,Sun Jianming. Stock price predication based on KNN and its ensemble model[J]. Application of Electronic Technique,2019,45(5):9-13,22.

0 引言

预测资产的未来价格一直以来都是个人投资者和机构投资者的重要问题。其中,股票价格的预测是非常困难的,因为股票市场是不确定的、非线性的复杂动态系统,而且受众多因素影响。对于专业交易员,基本面分析和技术分析是最常见的两种交易决策方式。基本面分析主要是用宏观的经济、工业和商业指标。技术分析主要是使用历史价格数据和相关的技术指标,事实上是假设原先的价格会对以后的价格有影响。

从历史时间序列来预测价格与FAMA E F的有效市场假说[1]违背。按照这一假说,有效市场无法从历史价格中预测未来价格。但事实上,有很多研究与这一假设是相违背的,特别是基于技术分析的研究。在股票市场上,技术分析主要运用的方法可以简单分为统计和人工智能(机器学习)两大类。通常价格的时间序列天然具有无序、有噪声、非线性等特性,不是一个固定的形态[2]。因此,统计方法在股票指数的预测上表现不佳,本文决定使用机器学习方法来对股指价格进行预测。

以往研究中,单个KNN模型难以满足预测股票价格的需要,混合模型和改进模型更为常见。Li Hui等按照K近邻的思路来对财务困境特别是破产预警问题进行预测[3]。TEIXEIRA L A和OLIVEIRA A L I结合K近邻和常用的技术分析工具进行实证,认为预测短期股票价格趋势是可行的[4]。赵俊杰利用ReliefF算法确定特征的权值,对K最近邻特征投影算法进行改进[5]。NAYAK R K等提出了一个支持向量机和K近邻混合的模型预测印度股票指数。比较其他模型,他们认为这一模型能够很好地利用高维数据、有更好的预测能力[6]。Chen Yingjun和Hao Yongtao提出了一个基于特征的加权支持向量机和加权的K近邻混合模型。权重通过计算信息增益来确定,在上证综指和深证综指上进行实证,具有不错的预测表现[7]集成模型在股票价格预测研究中也十分常见。PATEL J等比较了神经网络(ANN)、支持向量机(SVM)、随机森林(RF)、朴素贝叶斯(NB),随机森林有更好的预测表现[8]。随后,PATEL J等混合了ANN模型、RF模型、SVR模型,其中VR-ANN模型有着最好的整体表现[9]。Zhang Xiaodan等将AdaBoost算法与概率支持向量机结合,成功地解决了转折点的不均衡问题[10]

本文希望利用技术指标有效地对股票指数进行预测。K近邻(K-Nearest Neighbor,KNN)算法利用预测数据最接近的训练数据进行预测。尽管这不能实现对价格运动的解释,但有很好的经济学含义,即过去发生的价格运动与现在的价格运动在特征上是相似的。本文使用K近邻算法对股票价格的运动模式进行识别和预测,解决投资交易中的择时问题;随后使用滑窗方法,比较不同历史数据的相似情况;最后使用多个K近邻模型构成一个投票的集成模型,增强模型的预测能力和泛化能力。

1 实验原理

1.1 K近邻模型

K近邻学习是机器学习中一种常见的监督学习方法,其工作机制非常简单。在给定训练样本后,基于某种度量找出训练集与测试集中最接近的K个样本,即所谓的K个邻居来预测样本类别。度量通常使用标准欧几里德距离。预测通常使用“投票法”,选择K个样本中最多的类别作为预测结果。显然K是一个很重要的参数,会对分类结果产生重要的影响。本文基于这样的假设:在股票市场上,过去发生过的情况仍会发生,股票价格运动在特征上是相似的。预测前,使用交叉验证来确定训练数据中最优参数K。K近邻虽然简单,但其预测能力不可小觑。当给定测试样本x,其最近邻样本为z,则最近邻分类器出错概率,即x与z类别标记不同的概率为:

1.2 集成模型

集成学习是结合使用给定学习算法的几个基本估计器的预测,以便通过单个估计器来提高模型的泛化能力。其中,bagging是常见的一类方法,其建立在原有训练集的随机子集黑匣子估计的几个基础学习器,然后汇总它们各自的预测,形成最终的预测算法。这类方法减少基本估计量方差,将随机化引入到其构建过程中,最后合并出来。在许多情况下,bagging构成了一种非常简单的改进单一模型的方式,而不需要适应基础的基本算法。Boosting是另一种将弱学习器提升为强学习器的算法:先从训练集中训练出一个基础学习器,在根据其表现对样本分布进行调整,基础学习器中错误的训练样本受到更多关注,进行调整来训练下一个基础学习器,循环往复,直到基础学习器数量达到最初设定的值t。最后将t个基础学习器进行加权结合。

为了增强预测能力,本文使用多个K近邻分类器组成一个集成分类器,在单个K近邻模型的分类投票后进行再次投票。由于K近邻分类中参数K对结果影响重大,本文将使用不同参数K的K近邻分类器来组成一个集成分类器。尽管训练数据的最优K值未必是预测数据中最优的,但假设这一K值也是十分接近最优值的,只是不能准确地知道确切值。使用训练数据中最优K值的邻域构建多个K近邻模型。最后进行投票,与单个K近邻模型的分类投票原则“少数服从多数”不同,使用“一票否决”增加了预测的准确度,避免错误交易和不必要交易带来的损失。

2 预测仿真

2.1 数据情况

本文使用中证500指数(CSI500)的价格数据,时间从2007年~2018年9月,数据包括收盘价、开盘价、最高价、最低价、5日均价(收盘价)、成交额和涨跌额。数据均来Wind金融终端。这些都是常用数据,不存在缺失项问题,所有数据进行统一的标准化处理。对价格运动进行简单划分,按照收益率将所有交易日划分为涨和跌两种模式。与绝大多数之前研究不同,本文不以0收益率为划分界限,按照中位数(50%分位数)进行划分,前50%标记为类别‘1’(涨),后50%标记为类别‘0’(跌)。

在图1中,可以看到中证500指数的收益分布大致对称,中位数与0十分接近。通过上面的类别划分,可以得到两类数量相当的训练数据,避免了类别不平衡问题。

观察图2中特征间的相关系数,可以看到价格的收盘价(close)、开盘价(open)、最高价(high)、最低价(low)和5日均价(5d)有非常强的线性相关,成交额(amt)也与价格指标有很强的正线性相关,但涨跌额(chg)与其他指标的相关系数很小,可以认为涨跌与其他指标不存在线性相关性。考虑相关系数,为了尽可能地减少数据特征和保留完整的经济学意义,本文只使用最高价(high)、最低价(close)、五日均价(5d)、成交额(amt)和涨跌额(chg)5个特征。

考虑实际交易具有可操作性,所有特征进行滞后一天处理,即用前一天的数据预测下一天的涨跌。在操作上,本文假设允许进行双向操作,预测为涨的交易日做多,预测为跌的交易日做空。由于涨跌模式的变化通常比较频繁,因此考虑了手续费对收益的影响,每次交易收取千分之1.5的费用。

2.2 K近邻模型预测

将2007年~2016年的数据作为训练数据,2017年~2018年9月的数据作为预测数据。首先使用单个K近邻模型进行中证500指数的涨跌预测。由于K近邻模型中,参数K的作用十分重要,本文使用网格搜索,使其在训练数据中最优,得到K=17是训练数据的最优参数,随后对预测数据进行预测。单个KNN策略的收益情况如下,由于参考K=17,将此策略简称为K17KNN,该策略考虑手续费简称为K17KNN_fee,收益表现如图3所示。

在表1中,预测的21个月中,单个KNN模型获取140.40%的收益,扣除手续费仍然有76.72%的收益。手续费对收益情况有相当大的影响。观察波动率、最大回撤和夏普比率,看到单个KNN模型通过参数K调优可以获得一个不错的交易结果。

2.3 滑窗方法预测

K近邻是一种懒惰算法,基本没有训练模型的过程。这意味着预测结果严重依赖于训练数据的质量。K近邻模型有着十分强烈的内在含义,即预测样本与哪些训练样本在特征上更接近(相似)。使用这一模型可以解答一个有趣的问题,现在股票价格的运动与遥远的历史更接近还是与刚刚的过去更接近。理论上,对现在的股票价格运动而言,遥远的过去可能有更接近的价格表现,刚刚的过去则有基本一致的宏观背景。

在K近邻模型下,调整训练数据,观察预测结果来回答这一问题。使用滑窗方法来调整训练数据,较短的窗口代表刚刚的过去,较长的窗口来代表遥远的历史。利用不同训练数据的收益差别,观察模型的预测差别,即数据间相似情况的差别。

在图4~图6中,return代表策略的累计收益,return_fee代表策略考虑手续费后的累计收益。使用不同长度窗口的滑窗KNN模型,对2017年~2018年9月进行预测,不同窗口长度的KNN模型之间预测效果差异很大。整体而言,窗口越长策略收益越好。也就是说,现在股票价格与遥远的历史数据更接近,而不是刚刚过去的数据。

2.4 集成模型预测

前面的单个K近邻模型已经能够实现不错的股票涨跌模式预测。但事实上,训练数据的最优K值未必是预测数据的最优K值,单个K近邻模型的表现未必稳定。为了进一步增强K近邻的预测能力和泛化能力,本文使用多个K近邻模型组成一个集成学习模型,也可以称为集成学习器。

除了训练数据的最优参数K=17,本文还使用17的邻域16和18来构建一个基于3个基础学习器的集成学习器。当3个学习器的预测均为涨时,做多;当3个学习器的预测均为跌时,做空;其他情况不操作。由于使用了3个KNN模型,即t=3,将此集成模型策略简称为t3_KNN,该策略考虑手续费简称为t3_KNN_fee,收益表现见图7。在表2中,t3集成模型与之前的单一模型对比,最大回撤和夏普比率基本相当,波动率得到有效减少,但其代价是收益率的下降。

进一步增加基础学习器的数量,使用K=15、16、17、18、19 5个基础学习器(即t=5)构成集成学习器进行预测。同样,此策略简称为t5_KNN,考虑手续费简称为t5_KNN_fee,收益表现见图8。在表3中,t5集成模型与t3集成模型相比,夏普比率相当,增加了收益和降低最大回撤,增加了一定的波动率。

进一步增加基础学习器的数量,使用K=14、15、16、17、18、19、20共7个基础学习器构成集成学习器进行预测。同样,此策略简称为t7_KNN,考虑手续费简称为t7_KNN_fee,收益表现见图9。在表4中,t7集成器与t5集成器相比,夏普比率、最大回撤和波动率相当,但收益得到进一步提升。可以进一步增加基础学习器的数量,但收益表现并非随着数量的增加而提高。以上的集成器与单个模型相比,是以收益为代价来降低最大回撤和波动率。随着基础学习器的增加,夏普比率相当,波动率和最大回撤会缓慢增加,收益逐步增加。

3 结论

使用K近邻算法对中证500指数的涨跌进行预测,交易上,预测为涨时做多,预测为跌时做空。考虑可行性,特征数据滞后一天,还考虑交易手续费,假设为千分之1.5。本文得出以下结论:

(1)单个K近邻模型在2017年~2018年9月间取得了76.72%的累计收益(含手续费)。这一收益表现验证了假设,即股票的价格运动与过去是相似的。

(2)考虑K近邻模型的内在含义,使用不同的训练数据,比较现在的股票价格运动与遥远的历史价格运动和刚刚过去的价格运动哪个更为相似。预测结果表明:尽管刚刚过去的数据与现在的股票价格运动有更一致的宏观背景,现在的股票价格运动还是与遥远的历史价格运动更为相似。

(3)使用多个KNN构成集成学习模型,K值是训练数据的最优参数17的左右邻域。逐步增加KNN的数量t,发现模型的夏普比率相当,收益率逐渐增加,代价为波动率和最大回撤的扩大。很难判断最优的数量t,但整体而言,集成模型能够更好地控制收益和风险间的关系,其收益表现更适合作为择时策略。

参考文献

[1] MALKIEL B G,FAMA E F.Efficient capital markets:a review of theory and empirical work[J].Journal of Finance,1970,25(2):383-417.

[2] GUEGAN D.Chaos in economics and finance[J].Annual Reviews in Control,2009,33(1):89-93.

[3] Li Hui,Sun Jie,Sun Boliang.Financial distress prediction based on OR-CBR in the principle of k-nearest neighbors[J].Expert Systems with Applications,2009,36(1):643-659.

[4] TEIXEIRA L A,OLIVEIRA A L I.A method for automatic stock trading combining technical analysis and nearest neighbor classification[J].Expert Systems with Applications,2010,37(1):6885-6890.

[5] 赵俊杰.基于特征加权的KNNFP改进算法及在故障诊断中的应用[J].电子技术应用,2011,37(4):113-116,121.

[6] NAYAK R K,MISHRA D,RATH A K.A Naive SVMKNN based stock market trend reversal analysis for Indian benchmark indices[J].Applied Soft Computing,2015,35(1):670-680.

[7] Chen Yingjun,Hao Yongtao.A feature weighted support vector machine and K-nearest neighbor algorithm for stock market indices prediction[J].Expert Systems with Applications,2017,80(1):340-355.

[8] PATEL J,SHAH S,THAKKAR P,et al.Predicting stock and stock price index movement using trend deterministic data preparation and machine learning techniques[J].Expert Systems with Applications,2015,42(1):259-268.

[9] PATEL J,SHAH S,THAKKAR P,et al.Predicting stock market index using fusion of machine learning techniques[J].Expert Systems with Applications,2015,42(1):2162-2172.

[10] Zhang Xiaodan,Li Ang,Pan Ran.Stock trend prediction based on a new status box method and AdaBoost probabilistic support vector machine[J].Applied Soft Computing,2016,49(1):385-398.

作者信息:

张伟楠,鲁统宇,孙建明

(中国计量大学 经济与管理学院,浙江 杭州310018)

 

(0)

相关推荐