您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[山西证券]:基于神经网络的模型框架:机器学习量化模型 - 发现报告
当前位置:首页/其他报告/报告详情/

基于神经网络的模型框架:机器学习量化模型

2024-07-02黎鹏、崔豪轩山西证券赵***
基于神经网络的模型框架:机器学习量化模型

山证金工团队 分析师:黎鹏 执业登记编码:S0760523020001邮箱:lipeng@sxzq.com 研究助理:崔豪轩 邮箱:cuihaoxuan@sxzq.com 投资要点: 主题报告 2024年7月2日 机器学习量化模型 基于神经网络的模型框架 神经网络框架搭建: 本文构建了深度学习网络模型基础框架,旨在利用模型对权益市场的未来价格的上涨概率进行预测,并根据模型结果指导摆动交易决策。研究过程中,模型通过设定自定义损失函数等方法提高模型准确度,模型迭代升级效率以及实现动态权重分配。 模型框架与波段交易: 通过结合模型预测结果和波段交易策略,尝试在获取高精度预测的同时,利用波段交易策略的灵活性和适应性来调整投资决策,从而在不同的市场环境中实现更优的收益表现。 回测结果 策略组合在回测期间内的平均年化收益率为4.26%,在2018年与2023年间表现较差,部分年间并未跑赢大盘指数;2024年截止6月初,模型取得24.23%的超额收益。 风险提示:报告内容根据公开数据整理得出,结论基于历史价格信息和统计规律,但二级市场受各种即时性政策以及宏观经济影响易出现统计规律之外的走势,所以相关结论无法代表市场未来走势;模型存在失效风险,由于模型构建、参数估计、假设条件等方面存在的不确定性或错误,可能导致模型预测结果与实际情况产生显著偏离;报告阅读者需审慎参考报告结论 请务必阅读最后一页股票评级说明和免责声明1 目录 1.研究背景:4 1.1综述4 2.轮动策略框架搭建:4 2.1因子选取5 2.2数据处理5 2.3ETF行业分类6 2.4模型的搭建8 2.5波段交易8 3.模型结果展示:10 4.未来研究方向与总结16 5.风险总结16 图表目录 图1:模型的输入数据示意图6 图2:k-means与DBSCAN算法分类对比图7 图3:同心圆数据分布算法分类对比图8 图4:蒙特卡洛drop示意图10 图5:策略单位净值走势11 图6:策略单位净值走势对比图14 图7:策略2024年收益拆分情况(元)15 表1:策略年化收益11 表2:国债利率因子检验成果12 表3:存款利率因子检验成果12 表4:动力煤价格因子检验成果13 表5:策略年化收益-与沪深300对比14 表6:策略年化收益-与中证500对比15 1.研究背景: 1.1综述 在金融市场中,投资者总是在追寻可以提高投资回报和降低风险的方法。行业轮动策略是一种通过在不同经济周期中调整投资组合的行业配置来实现这一目标的有效手段,策略可以根据市场环境的变化,动态调整投资组合,从而在经济周期的不同阶段实现最佳回报。例如,当经济处于扩张阶段时,某些行业如科技和消费品可能表现更好;而在经济衰退阶段,防御性行业如公用事业和医疗保健则可能提供更好的保护。通过准确识别和把握这些行业轮动的机会,投资者可以在不同的市场环境中获取超额收益。 有效实施行业轮动策略需要对经济状况和行业所处周期进行准确预测,任何预测上的偏差都可能会导致策略做出错误的判断,接而导致策略表现不佳。但是,部分研究者发现(Jacobsen,Stangl,&Visaltanachoti,2009),即使对经济周期进行了完美的预测,行业轮动策略相对大盘指数的超额收益也只有2.3%。尽管相关报告的撰写时间较为久远,但是这也体现出了行业轮动策略的局限性。 本篇文章介绍了一种基于行业ETF的短期行业轮换交易策略框架。在每个交易周期中,框架中所搭建的深度学习模型会根据历史价格,交易量等因子分析市场信息判断出投资哪个行业在下一个周期中最有可能带来超额收益,并且据此发出交易指令。相关ETF会在每个交易周期的开始时进行排名、筛选和购买,并在当前交易期结束时全部清算。策略模型会随着交易周期逐步迭代以及升级,确保模型与当前经济周期保持一致。 2.轮动策略框架搭建: 我们的策略框架包括三个步骤:首先,每个季度,我们会根据ETF的名字以及持股对所有行业ETF进行分类,对于每个行业的ETF,我们会选出该行业中最具有代表性的ETF作为此类的代表。其次,一个基于历史数据训练出的深度学习模型会对下周的市场表现进行预测。最后,交易策略会根据模型给出的样本外预测结果发出交易指令。 2.1因子选取 我们的在搭建模型的过程中使用的因子可以大致分为两类:ETF的市场表现以及辅助性的宏观经济数据。ETF的市场表现指的是每个基金的价格、成交量、基金每日的价格波动等因子,辅助性经济数据包括10年期国债收益率、人民币货币指数、存款利率等宏观经济指标。理论上,加入各个行业独有的指标会更好地提升模型的准确度,比如对于地产ETF来说,使用钢铁价格作为因子可以很好的提升模型在预测该行业走势时的准确度,但是在搭建框架时,我们选择尽可能的减少不同行业之间的差异性,选择统一的因子来构建模型。 2.2数据处理 本篇报告中,我们使用的数据的时间范围从2015年1月1日起至2024年6月14日。其中,各个行业 的深度学习模型会使用至少两年以上的数据进行训练,因此策略回测的时间范围从2017年第一季度开始。本研究中用于开发交易策略的ETF包括了截止2024年6月1号前市场上所有公开交易的行业ETF。由于部分行业的ETF的成立时间较短,为了保证模型拥有足够的数据量进行训练,我们在回测过程的仅会选取截止回测日期时,成立了至少两年以上的ETF。 ETF的市场表现和辅助数据会在离散时间点进行采样,我们首先剔除掉了非交易日的数据,同时,为了让模型将预测的重点放在ETF基金的一周内的整体上涨情况,而不是本周内的波动上,我们在训练模型时也过滤掉了除了周五收盘价以外的所有数据。如图1所示,将所选ETF的交易数据和宏观辅助输入数据的基数分别设为l和m,那么第t周的训练样本就将由包含当前和前N-1周记录的价格、成交量和其他数据的矩阵构建。每个输入数据矩阵Xt的维度为N×(l+m),同时长度为l的二进制标签向量yt+1描述了第t+1周的价格增长百分比。将每个矩阵和向量对齐后,便能形成一组样本z=(Xt,Yt+1)。 图1:模型的输入数据示意图 资料来源:山西证券研究所 同时,我们将所有的非目标数据进行了归一化处理,确保数据的均值为零,且拥有单位方差。训练标签y表示下一周的价格走势,其价格上涨表示应买入相关的ETF。在训练模型期间,当与上周相比,本周的ETF价格上升了至少100个基点时,我们将为二进制标签y定义为1,反之为0。通过这种方式定义目标值,交易模型被要求预测两个不同的未来值(即星期一开盘价和星期五收盘价)。因此,模型框架并没有将周中的波动率纳入考量。 2.3ETF行业分类 在回测周期中对ETF进行行业分类时,我们使用的分类方法是DBSCAN,一种基于密度的聚类算法。这种分类方法通过在数据点密度较高的区域发现簇来进行工作,一般由两个参数控制:邻域半径(epsilon)和最小点数(minPts)。DBSCAN会首先根据在一个点在其半径为epsilon的邻域内是否至少有minPts个点来判定这个点是否为一个核心点;如果此点并不是一个核心点,但是处于某个核心点的领域内,那么他便为一个边界点;如果此点并不符合以上任意一个定义,那么我们将此点划分为噪声点。DBSCAN通过这样的方法找到所有核心点并将它们及其邻域内的点连接起来形成簇,该算法能够自动识别数据中的噪声点,并将它们排除在任何簇之外。 与其他聚类算法相比,DBSCAN能够发现任意形状以及密度的簇,且不需要预先指定簇的数量。这使得它在面对k-means等传统聚类算法具有优势。同时,算法也能够识别并排除数据中的噪声点,对不同密度 的簇进行识别:DBSCAN可以发现具有不同密度的簇,这是很多其他算法难以做到的。 这里我们随机生成一组数据用来简单的对比DBSCAN和传统的k-means算法之间的区别。正如之前所提到的,在使用k-means算法时,我们需要首先预先指定簇的数,但是在实际的研究过程中,由于数据的可变性和随机性,我们往往难以在进行进一步研究前就给定簇的具体数量,只能通过不断尝试后才能决定相关数值。相比之下,DBSCAN算法更加灵活,可以通过把附近的点分成一组的方式来自动决定簇的数量, 这使得算法在分辨例如非线性分布的数据时能力较强。 图2:k-means与DBSCAN算法分类对比图 资料来源:山西证券研究所,python生成数据 这里我们再随机生成一组非线性的数据,为了更好地对比两种算法间的区别,我们选择了同心圆的数据分布图。通过对比两种算法的分类结果,我们可以很明显的看出,DBSCAN能够正确识别出两个环形簇,并将它们准确分开;相比之下,K-means算法无法正确识别出同心圆簇,而是将内外圆的部分点错误地分配到相同的簇中,导致聚类结果不符合原始数据的分布。 图3:同心圆数据分布算法分类对比图 资料来源:山西证券研究所,python生成数据 2.4模型的搭建 正如我们之前所提及的,对于每个不同的行业,我们会使用其至少前两年的历史数据训练模型并且进行拟合。我们使用循环神经网络构建相关模型,网络中包含了四个内部层,以及为了缓解梯度消失和数据拟合过度的ReLU和dropout等标准技术。循环神经网络会通过捕捉时间序列数据的动态变化与目标数据的数值学习两者之间关系,并且在后续过程中根据学习到的内容做出预测。当模型训练完成后,这些模型将用于预测ETF下一周的价格走势,并且发出交易指令;模型会使用最新的因子数据进行预测,预测的结果会通过Sigmoid函数转变为概率值,该函数数值越大则代表下周该行业价格上涨的概率越大。 在每个交易周结束前,我们都会清算所有当前持有的ETF,记录相关行业的利润和亏损。交易完成后,模型会使用最新观察到的相关数据进行迭代更新,并生成下一周的ETF购买信号。同时,为了更好将动态模型优化与组合回报相结合,我们使用了一种自定义损失函数,该函数结合了近期资本的收益和亏损。 2.5波段交易 在我们的神经网络模型给出下周的预测后,我们将预测结果和波段交易策略相结合,以获取更高和稳定的回报率。策略包含了以下的步骤 “买入”信号:信号的生成基于深度学习模型对ETF未来走势的预测。在每周末,模型会根据最新数据生成预测,并确定哪些ETF有可能在接下来的一周内上涨。若某个ETF的预测结果超过当前的门限向量,则生成“买入”信号。门限向量在每个交易周后会动态更新,其数值是通过计算基于ROC曲线分析中的Youden'sJ指数所得到的。Youden'sJ统计量是一种用于评估二分类模型性能的指标,该指标通过计算真阳性率和真阴性率之差的绝对值的最大值来确定最佳分界点,其计算公式为: �=�� �𝑃+�� +��−1 �𝑁+�� 在我们的研究中,使用Youden'sJ统计量的目的是为了提高交易信号的准确性,从而在保证较高灵敏度的同时,尽可能减少错误信号。通过优化门限,我们可以在面对市场波动时能够灵活调整,从而提高整体交易策略的收益和稳定性。 清空组合:所有头寸在当前交易周收盘前进行清算,并且模型会记录当期各个行业的资本利得,相关数据会在稍后的模型分析和迭代步骤中使用。 数据分析与模型更新:许多研究都证实过,基于神经网络得出的预测结果可能是非常嘈杂且不可靠的。对于同一只基金,模型在对该基金下一周价格走势的判断在多次模拟中具有不一致性,其对未来价格变动的估计具有很高的可变性,并且在连续的实验运行中呈现出不均匀的分布。为了应对这种不确定性,我们在模型的输出层使用了蒙特卡罗dropout来实现置信度测量,即在每个交易周内,对每个资产进行大量的预测;每次预测时,随机丢弃神经元从而形成不同的子网络,这有助于增强模型的泛化能力。 图4:蒙特卡洛drop示意图 资料来源:山西证券研究所,AWS 这种方法使得我们的预测结果实际上生成了一个深度模型的集成,通过多次预测并生成预测分布,我们可以量化每个交易信号的置信度,从而在执行交易时更加谨慎和精确。对于每个资产s,我们会分析其预测值�^�的统计