【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价

news2024/9/9 7:59:41

原文链接:https://tecdat.cn/?p=37184

原文出处:拓端数据部落公众号 

分析师:Yuyan Ye

在金融科技的浪潮中,量化投资方法以其数据驱动和模型导向的特性,日益成为资本市场分析的重要工具。
特别是,长短期记忆网络(LSTM)、Wavenet以及LightGBM等先进的机器学习算法,因其在时间序列预测中的卓越性能,被广泛应用于股票价格预测领域。LSTM作为一种特殊的循环神经网络,擅长捕捉时间序列数据中的长期依赖关系[1]。而Wavenet,最初设计用于生成原始音频波形[2],其在金融市场的非线性模式识别中也展现出了潜力。此外,LightGBM作为一种基于梯度提升决策树的算法,以其训练速度快、效率高而受到量化投资者的青睐[3]。

本文将通过视频讲解,展示如何基于 LightGBM 的多因子选股策略,并结合一个Python用LSTM、Wavenet、LightGBM预测股价的代码数据,为读者提供一套完整的实践数据分析流程。

基于 LightGBM 的多因子选股策略

在科学技术高速发展及计算机领域重大突破的背景下,金融量化事业蓬勃兴起。本文聚焦国内量化投资环境,以沪深 300 成分股 2014 年 1 月至 2020 年 12 月的 26 个因子数据为基础,构建多因子选股模型。模型构建涵盖数据预处理、因子筛选、模型参数寻优、模型构建与结果分析及优化等环节。该模型基于 LightGBM 算法,以沪深 300 成份股为备选股票池,旨在筛选出具有投资价值的股票。总体而言,此多因子选股模型能够持续获取正收益。

目录

股票作为一种所有权凭证,公司发行股票旨在筹集资金并向股民承诺分红。自股票诞生以来,尽管股票投资风险较大,但相较于债券和基金投资,其灵活性强、门槛低且收益潜力高,深受广大投资者青睐。然而,我国股票市场种类繁多,如何在当前背景下实现股票投资并获取稳定超额收益,成为投资者和学者的重要研究课题。

量化投资与传统定性投资的理论基础相似,均旨在构建能把握市场趋势、获取额外或超额收益的投资组合。二者的核心差异在于选股方式,量化投资凭借算法和模型学习投资经验,借助强大计算能力的计算机选股,而传统投资依赖主观经验。凭借计算机的运算能力和机器学习模型算法优势,量化投资在资本市场上有望大放异彩,成为投资领域的重大创新。

原理

本文选用基于 LightGBM 算法的多因子选股模型。LightGBM 是 boosting集合模型之一,可高效实现 GBDT。它采用损失函数的负梯度作为当前决策树的残差近似值,用以拟合新的决策树。

优点

与原理和功能相近的 XGBoost 相比,LightGBM 具有内存占用低、训练效率高、准确率优、支持并行化学习、可处理大规模数据以及直接支持类别特征等诸多优势。

大多数机器学习工具无法直接支持类别特征,需转化为 one-hotting 特征,影响效率。而 LightGBM 优化了对类别特征的支持,可直接输入,且在决策树算法中增加类别特征决策规则。

在特征并行方面,不同机器在不同特征集合上寻找最优分割点并同步;数据并行则是本地构造直方图后全局合并寻找最优点。LightGBM 针对这两种并行方法均做了优化,特征并行中本地保存全部数据避免通信,数据并行中分散规约降低通信和计算量,利用Histogram 做差进一步减少通信量。

本文通过聚宽平台的数据接口获取沪深 300 指数成份股上市公司 2014 年 1 月至 2020 年 12 月的相关财务数据。聚宽平台是量化交易平台,提供专业清洗的数据及常用因子和第三方数据库,还提供专用数据接口。

本文每月对沪深 300 股票进行如下处理:

  1. 删除上市不足 3 个月的股票数据,因其股价变动大。

  2. 删除截面期停牌的股票数据,停牌期间不交易。

  3. 剔除历史上被特别处理的股票,因其股价变动大且有退市风险。

  4. 对缺失值按聚宽行业分类用行业均值填充。

  5. 进行中性化和标准化处理。

经上述预处理,最终获得 5040 只股票数据。

在资本市场中,股票超额收益由不同因子共同作用产生,因子选取对选股模型至关重要。为充分解释股票超额收益,本文从多维度选取 26 个合理因子,并分为六类:

  1. 成长因子:包括营业收入同比增长率、经营活动中产生的现金流量净额入同比增长率、净利润同比增长率,代表公司实力和发展前景。

  2. 估值因子:包括净利润现金含量/总市值、净利润同比增长率/市盈率、市盈率的倒数、市净率的倒数、市销率的倒数和净资产收益率,反映股票市场价值。

具体因子描述和选择原因见表 1。

表 1 26 因子介绍

分类具体指标指标描述
成长因子净利润同比增长率(Profit_G_q)净利润增长率指企业当期净利润比上期净利润的增长幅度,指标值越大代表企业盈利能力越强。
营业收入同比增长率(Sales_G_q)营业收入增长率指企业在一定期间内取得的营业收入与其上年同期营业收入的增长的百分比,以反映企业在此期间内营业收入的增长或下降等情况。
经营活动中产生的现金流量净额同比增长率(OCF_G_q)是经营现金毛流量扣除经营营运资本增加后企业可提供的现金流量,是本期经营活动现金净流量减去上期经营活动现金净流量占上期经营活动现金净流量。经营活动现金净流量能够反映出的财务状况,是对经营活动现金净流量进行操纵的手段。
估值因子净利润现金含量/总市值(OCFP)净利润现金含量指生产经营产生的净现金流量占净利润的百分比。净利润现金含量越大,说明销售收集能力越强,成本越低,财务压力越小。
净利润同比增长率/市盈率(G/PE)净利润指利润总额减所得税后的余额,是当年实现的可供出资人(股东)分配的净收益,也称为税后利润。它是一个企业经营的最终成果
市盈率的倒数(EP)市盈率是股票价格除以每股收益的比率。市盈率反映了在每股盈利不变的情况下,当派息率为 100%,并且所得股息没有进行再投资的条件下,经过多少年投资可以通过股息全部收回。
市净率的倒数(BP)市净率是指股价除以每股净资产的比率。 市净率可用于股票投资分析,一般来说市净率较低的股票,投资价值较高,相反,则投资价值较低。
市销率的倒数(SP)市销率是总市值除以主营业务收入的值,市销率越低,说明该公司股票的投资价值越大。
净资产收益率(ROE)净资产收益率是净利润与平均股东权益的百分比,是公司税后利润除以净资产得到的百分比率,该指标可以很好地反映出股东权益的收益水平,体现了自有资本获得净收益的能力,一般用以衡量公司自有资本的使用效率。
财务质量因子资产收益率(ROA)资产收益率是税后净利润占总资产的百分比,是用来衡量每单位资产创造多少净利润的指标。资产收益率是业界应用最为广泛的衡量银行盈利能力的指标之一,该指标越高,表明企业资产利用效果越好,说明企业在增加收入和节约资金使用等方面取得了良好的效果。
扣除非经常损益后的净利润率(profit_margin)扣除非经常损益后的净利润率是净利润率指标的补充,剔除非经常性损益对净利润带来的影响,能够比较真实客观地反映企业的实际业务盈利能力,是在分析企业业务盈利能力时常用的指标之一。
总资产周转率(asset_turnover)资产周转率是企业一定时期的销售收入净额与平均资产总额之比,它是衡量资产投资规模与销售水平之间配比情况的指标,可以很好地体现企业经营期间全部资产从投入到产出的流转速度并反映企业全部资产的管理质量和利用效率。
净利润现金含量(net_operating_cash_flow)净利润现金含量指生产经营产生的净现金流量占净利润的百分比。净利润现金含量越大,说明销售收集能力越强,成本越低,财务压力越小。
净资产(net_assets)净资产代表公司本身拥有的财产,也是股东们在公司中的权益。因此,又叫作股东权益。在会计计算上,相当于资产负债表中的总资产减去全部债务后的余额。
杠杆因子流动比率(current_ratio)流动比率是指流动资产总额占流动负债总额的百分比。流动比率用来衡量企业流动资产在短期债务到期以前,可以变为现金用于偿还负债的能力。虽然流动比率越高,企业资产的流动性越大,但是比率太大表明流动资产占用较多,会影响经营资金周转效率和获利能力。
财务杠杆比率(financial_leverage)财务杠杆是指企业利用负债来调节权益资本收益的手段。财务杠杆比率指反映公司通过债务筹资的比率。
非流动负债/净资产(debt_quity_ratio)非流动负债是指偿还期在 1 年或超过 1 年的一个营业周期以上的债务,包括长期借款、应付债券、长期应付款等。除以净资产,反映了企业的非流动还债能力。
现金比率(cash_ratio)现金比率是在企业因大量赊销而形成大量的应收账款时,考察企业的变现能力时所运用的指标,是货币资金与有价证券之和占流动负债的百分比。现金比率越高,说明变现能力越强
技术因子相对强弱指标(RSI)其原理就是通过计算股价涨跌的幅度来推测市场运动趋势的强弱度,并据此预测趋势的持续或者转向。实际上它显示的是股价向上波动的幅度占总的波动幅度的百分比,如果其数值大,就表示市场处于强势状态,如果数值小,则表示市场处于弱势。
离差值(DIF)10 日 EMA 数值减去 30 日 EMA 数值。在持续的涨势中,10 日 EMA 在 30 日 EMA 之上。其间的正差离值(+DIF)会愈来愈大。反之在跌势中,差离值可能变负(-DIF)也愈来愈大。
DEADIF 的 15 日移动平均
异同移动平均线(MACD)利用收盘价的短期指数移动平均线与长期指数移动平均线之间的聚合与分离状况,对买进、卖出时机作出研判的技术指标。
其他因子流动性因子(liquidity)换手率也称“周转率”,指在一定时间内市场中股票转手买卖的频率,是反映股票流通性强弱的指标之一。在技术分析的诸多工具中,换手率指标是反映市场交投活跃程度最重要的技术指标之一。因此,在本模型中,我们也把其作为因子之一。
贝塔因子(beta)是由个股 60 个月收益与上证综指回归得到的 beta 值。Beta 因子可以用于衡量系统性风险大小,因此有必要将这一因子加入到模型中。
动量因子(momentum)是个股过去 N 个时间窗口的收益回报。

为构建多因子量化模型,需三类数据:预训练数据、模型训练数据和预测数据。前两类为有标签股票数据,预测数据无标签。(见表 2)2014 年 1 月至 2020 年 12 月期间,每月为一截面,获取相应股票的 26 个因子数据。2014 - 2018 年数据中,标签依据各股票下月日度收益率均值评定:若下月日度收益率均值位于所有股票前 30,则设为 1;若位于后 30,设为 -1;其余舍去。如此处理,每个截面期可得 60 条数据。

表 2 数据集分类及用途

数据类型数据时间数据作用数据描述
预训练数据2014 年 1 月 - 2017 年 12 月调整模型超参数,完成模型基本设定两类股票:该月份涨幅前三十的股票取为 1,涨幅后三十的股票取为 -1
模型训练数据2018 年 1 月 - 2020 年 11 月取每月调仓前前 4 个月到前 1 个月共三个月的数据,代入模型进行训练
预测数据2018 年 1 月 - 2020 年 12 月取每月调仓前当月数据,代入之前训练好的模型进行预测上涨的股票沪深 300 只股票,无数据标签

本文先以 2014 年 1 月至 2017 年 12 月的预训练数据调整 LightGBM 模型的最优参数。

参数调优在机器学习领域至关重要,因很多模型算法无解析解,需通过多种方法求解参数。其主要目的是改进模型,调整参数,使模型预测表现更优,以实现选股目标。虽非本文重点,但可提升模型表现,是建模不可或缺的环节。本文对每组超参数进行交叉验证,选取评分最高的超参数用于进一步模型训练。

预训练得到的最优参数设置如表 4 所示,模型最佳得分为 0.605148,精确度尚可。

表 4 预训练数据下的模型最优参数

为进一步检验量化选股模型的实用性和收益率,本文通过历史数据训练模型并选出高收益股票,在模拟炒股平台测试选股收益。具体流程为:每次训练时,滚动取前 4 个月数据,如 2018 年 1 月 31 日选股,选取 2017 年 10 月至 2018 年 1 月数据,用 2017 年 10 月至 12 月训练模型,代入 2018 年 1 月 300 支股票数据预测,选出概率大于 0.8 的股票进行模拟炒股投资。


由上图可知,本策略收益率为 186.49%,年化收益率为 43.40%,超额收益率为 121.60%,基准收益率为 29.29%。策略收益后期高于沪深 300 指数收益率。总体而言,此多因子选股模型能够持续获取正收益。

可观察到,尽管三年策略总收益达 186.49%,但直至 2019 年 10 月 24 日之前,策略效果不显著,且回撤一度达 33.35%。为降低策略下行风险,进行优化并设置不同止损策略。

设置 10%的止损策略:对跌破成本价 10%的股票予以清仓。


可观察到策略回撤从 33%降至 28%。

止盈止损策略采用动态止盈止损:对当前股价低于持股期间最高价的百分之五的股票平仓,以严格控制股票收益回撤。


可观察到策略最大回撤进一步降至 19%,但策略收益大幅下降,因该止损策略可能错过股票池中某些股票的回升期。

LSTM、Wavenet、LightGBM预测苹果公司股价

1. 数据加载与可视化

首先,我们加载并可视化了苹果公司(AAPL)的股票价格数据集。通过使用Pandas库,我们读取了CSV文件,并使用head函数展示了数据集的前几行,以确保数据的完整性和准确性。

df = pd.read_csv("/PL.csv")
df.head()


接下来,我们使用Matplotlib库绘制了股票收盘价随时间变化的图表,以60%的透明度和自动调整的尺寸,为读者提供了一个直观的视角来理解数据的波动性。

plt.figure(figsize=(20,8))
plt.plot(date, close)

2. 数据预处理

在数据预处理阶段,我们采用了最小-最大归一化方法来缩放数据,确保所有特征值都位于0到1的范围内。这有助于改善模型的性能,特别是在处理具有不同量级的数据时。

scaler = MinMaxScaler(feature_range=(0,1))


此外,我们将数据集划分为训练集和测试集,其中训练集占总数据的79.5%,以确保模型在足够多的数据上进行训练,同时保留足够的数据用于评估模型的泛化能力。

train_size = int(len(close)*0.795)

3. 模型评估

在模型评估阶段,我们使用了长短期记忆网络(LSTM)对训练集和验证集进行了预测。预测结果与实际数据的对比,为我们提供了模型性能的初步评估。

lstm_train_predicton = loaded_lstm.predict(lstm_trainx)
lstm_val_prediction = loaded_lstm.predict(lstm_valx)

4. 结果可视化

为了更直观地展示模型的预测结果,我们绘制了LSTM和Wavenet模型的预测值与实际数据的对比图。图表的尺寸和透明度经过调整,以便于读者清晰地观察预测值与实际值之间的差异。

plt.figure(figsize=(20,8))
plt.plot(date[-len(orig_y_val):], lstm_val_pred, label='LSTM')
plt.plot(date[-len(orig_y_val):], wave_val_pred, label='Wavenet')
# plt.plot(date[-len(orig_y_val):], lgbm_val_pred, label='LightGBM')
plt.plot(date[-len(orig_y_val):], orig_y_val, label='Real data')

我们还提供了一个放大的视图,以便读者能够更细致地观察模型预测的精确性。

plt.figure(figsize=(20,8))
plt.plot(date[-len(orig_y_val):], lstm_val_pred, label='LSTM')

参考文献

[1] Hochreiter, S., & Schmidhuber, J. (1997). Long Short-Term Memory. Neural Computation, 9(8), 1735-1780.
[2] Van Den Oord, A., Dieleman, S., Zen, H., Simonyan, K., Vinyals, O., Graves, A., ... & Kavukcuoglu, K. (2016). WaveNet: A Generative Model for Raw Audio. arXiv preprint arXiv:1609.03499.
[3] Ke, G., Meng, Q., Finley, T., Wang, T., Chen, W., Ma, W., ... & Liu, T. Y. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. Advances in Neural Information Processing Systems, 30.

关于分析师

在此对分析师Yuyan Ye对本文所作的贡献表示诚挚感谢,他在首都经济贸易大学完成了金融与监管科技专业的本科学位,专注人工智能领域。擅长Python、深度学习、机器学习、数据采集、数据可视化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最全的软件测试面试八股文【附答案+文档】

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升…

美容院会员管理系统|美业收银系统源码-已注册的客户,如何异店添加?

情景举例说明: 客户“张三”在A店已注册、消费,然后又到B店去消费。如何通过APP端和PAD端添加客户? ▶▶▶ • 在“客户管理”或“收银台”添加客户区域 • 搜索客户注册手机的完整手机号找到该客户 • 将其添加到本店即可

JavaScript 和 HTML5 Canvas实现图像绘制与处理

前言 JavaScript 和 HTML5 的 canvas 元素提供了强大的图形和图像处理功能,使得开发者能够在网页上创建动态和交互式的视觉体验。这里我们将探讨如何使用 canvas 和 JavaScript 来处理图像加载,并在其上进行图像绘制。我们将实现一个简单的示例&#xf…

揭秘住宅IP代理:原理、用途以及应用分析

在大数据时代,互联网成为我们生活与工作中不可或缺的一部分。然而,随着网络环境的日益复杂,隐私保护、网络访问限制等问题也逐渐凸显;以及跨境业务蓬勃发展。在这样的背景下,住宅IP代理作为一种技术解决方案&#xff0…

6、指针

6 指针 6.1 指针的本质(间接访问的原理) 指针:变量的地址 指针变量:用一个变量来存放另一个变量的地址,该变量即为指针变量 指针变量占内存大小,32位程序占4字节,64位占8字节 取地址操作符、取…

数据结构_study(三)

栈 先进后出,LIFO(last in first out),只能在表尾做插入删除操作的线性表 栈顶:允许插入和删除的一端 栈底:最先进栈 空栈:没有数据元素 压栈、入栈:插入操作 弹栈、出栈&#xf…

ubuntu20复现NBV探索

官网代码 后退地平线下一个最佳景观规划师 这个代码有些久远,issue里面有人已经在ubuntu20里面使用了3dmr,但是他那个代码我也运行不成功,docker网络一直也不佳,所以还是自己重新修改源码靠谱。 最终实现的代码等有时间上传到gi…

Day26 | 贪心算法 134. 加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列

语言 Java 134. 加油站 题目链接:加油站 题目 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发…

【每日一题】【map和set】RC-v7 熊猫血 C++

2024 睿抗机器人开发者大赛CAIP-编程技能赛-高职组(省赛) RC-v7 熊猫血 题目描述 在“一年一度喜剧大赛”上有一部作品《少爷和我》,讲的是霸道管家龙傲天和憨厚少爷刘波的故事。管家有着霸总文学主人公所有的毛病,包括会咳出熊…

服务运营 | NRL:疫苗供应链优化建模:综述与未来机遇(上)

编者按: 本次推文将解读近期发表在Naval Research Logistics中的Optimization modeling for pandemic vaccine supply chain management: A review and future research opportunities一文。这篇文章总结与反思了大流行时期的疫苗供应链管理,具体包括疫…

C#基于SkiaSharp实现印章管理(5)

印章中最常见的特殊形状通常是五角星,空心、实心的都可能存在,本文学习并实现在印章内部绘制五角星形状。   百度五角星的绘制方法,主要分为三种:   1)五角星各点坐标固定,直接调用编程语言的绘制线条或…

线性结构、线性表、顺序表、链表、头插法、尾插法、中间插入或删除一个节点

梳理几个名词: 逻辑地址:就是说是第几个元素。 物理地址:也就是存储地址,在计算机里具体存放的位置。 线性表的存储结构分为: (1)顺序存储结构:将数据依次存储在连续的整块物理空…

综合项目部署——eleme前端部署(eighteen day)

显示没有空格没有注释的内容: [rootstatic-server ~]# grep -Ev "#|^$" /usr/local/nginx/conf/nginx.conf 1、多虚拟主机的配置 [rootstatic-server ~]# vim /usr/local/nginx/conf/nginx.conf [rootstatic-server ~]# /usr/local/nginx/sbin/nginx #启…

如何破解绩效管理的难题?

绩效管理的核心问题 💼 在现代企业运营中,绩效管理一直被视为提升工作效率和实现公司战略目标的重要手段。然而,实际操作中,我们经常会遇到一系列棘手的问题,这些问题不仅影响了绩效管理的有效性,还常常让…

winform程序中拷贝文件夹最快速方法

1、先将一个项目的文件夹拷贝到另一个项目的目录下 下图将ParameterSetting文件夹拷贝到Datalib文件夹下 2、直接复制该文件,然后到vs界面去粘贴 复制ParameterSetting文件夹,然后在Datalib项目这里鼠标右键单击,然后点击“粘贴”&#xff0…

机器学习(五) -- 无监督学习(2) --降维2

系列文章目录及链接 上篇:机器学习(五) -- 无监督学习(2) --降维1 下篇: 前言 tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被…

《动手做科研》06. 如何产生新的研究想法

地址链接:《动手做科研》06. 如何产生新的研究想法 欢迎加入我的知识星球,定期分享AI论文干货知识! 导读: 提出好的研究想法是相当困难的,特别是当你刚接触一个领域时——这需要对文献中的空白有所了解。然而,产生研究想法的过程可…

数学建模--智能算法之模拟退火算法

目录 算法原理 应用场景 实现方法 代码示例: MATLAB: Python: 总结 模拟退火算法在数学建模中的具体应用案例有哪些? 如何选择模拟退火算法的参数(如初始温度、冷却率等)以优化求解过程&#xff1…

根据json构建uml类图代码工具实现

文章目录 1.UML简介1.1 什么是UML建模1.2 使用UML建模的好处 2.当前UML在研发场景下痛点3.UML工具的优化实现3.1 json结构设计3.2 json类图解析器实现3.3 在线uml类图渲染实现3.3.1 前端渲染页面3.3.2 后端数据接口 3.4 在线渲染效果 4. 总结 【摘要】本文介绍UML基本概念及相关…

Linux中安装C#的.net,创建运行后端或控制台项目

安装脚本命令: 创建一个sh文件并将该文件更改权限运行 sudo apt update wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb sudo apt-get upd…