来自 500 家上市公司的 10 年财务数据数据使我获得了 295% 盈利的 ML 模型
来自 500 家上市公司的 10 年财务数据数据使我获得了 295% 盈利的 ML 模型
前言
四个月前,我踏上了构建股票价格预测机器学习模型的旅程。我在 Medium 上发布所有的发展,以保存记录并与观众分享一些有价值的东西。
如果您错过了,这里简要回顾一下所做的事情:
- 我计算并结合了 15个最重要的财务KPI 来自上市公司公布的报告。
- 我取消了有关的信息 重要的市场状况和未来的市场预期 .
- 我基于 3 年的数据创建了一个测试 ML 模型 ****用于预测得分为 75% 的 DOW30 公司。
现在是时候进一步推动这个项目了。作为上线前的下一个目标,我将使用扩展至 10 年的历史数据来测试标准普尔 500 指数公司的 ML 模型。
我们走吧!
第 I 部分输入数据
我积累 500 家公司的 10 年交易和财务数据 在标准普尔名单上。
总共有一点多一点 110 万行 数据的。
关于我们将用于预测的变量,总共有 25 个列表,分为四组:
- 一个变量是公司的业务部门;
- 15 个变量是财务 KPI 值,可让我们了解公司的健康状况;
- 6 描述了预期与实际收益和股息。 以上所有这些在上一篇文章中都有详细描述。
- 3 个变量与外部因素有关:10 年期美国国债收益率及其月度变化和波动率指数值(VIX,一种市场恐惧指标)
快速提醒 - 我避免任何时间序列分析,因为我认为股票交易不能用我们预测自行车共享的相同方法来解释。我假设事实公司的表现以及一些市场因素会影响评估。在这方面,我将尝试抓住机会。
为了将时间序列数据转换为回归模型,我测量了股票在 30 天内上涨或下跌的程度,并将其用作预测变量。
为了找到最匹配的预测时间框架,我将使用 6 个不同的时间段(读取为预测变量):
- 15 天内库存百分比变化。
- 30 天内库存百分比变化。
- 60 天内库存百分比变化。
- 90 天内库存百分比变化。
- 120 天内库存百分比变化。
- 150 天内库存百分比变化。
这意味着我需要测试至少 6 个模型并最终选择最好的一个。
为了节省时间,我将只使用一种证明了良好性能和出色执行时间的 ML 技术——Light GBM。
Photo by Element5 数字 on 不飞溅
第二部分。分析过程
我不得不承认,该项目的数据分析部分花费了我大量的时间,而结果却为零。即使在数据清理和额外处理之后,所有自变量都与目标不相关。
唯一高度相关的值是目标变量本身,这是不言自明的。
幸运的是,我使用的 ML 模型需要最少的数据按摩,并且可以处理低相关数据。我知道这不是最好的做法,但让我们保密,因为我不是在这里为学术证书辩护
我做了一些数据修剪以避免过度拟合,并删除了 80% 的数据。结果,我们在每家公司的每个交易周获得了大约一项记录。
我不希望您被次要数据处理步骤和拆分数据帧以进行训练/测试的所有细节所困扰,所以让我们跳过它并跳到最激动人心的部分。
第三部分。改变视角
众所周知,市场参与者有两种主要类型:投资者和交易者。交易者利用短期市场波动,通常不会长期持有股票,他们可以以相同的概率进入空头或多头头寸。
我个人发现了一种出售您不拥有的高风险股票的方法,因为您的损失可能会迅速超过可承受的金额。正如您可能理解的那样,即使我正在尝试在这里建立交易模型,我在精神上更倾向于投资者类型。
我想买一只股票,持有一段时间,然后卖出获利。说明这一点,我想将我的模型从回归类型误差最低的模型更改为具有最高精度和分类类型的模型。最好的情况是模型可以给我一个信号,让我以 99% 的概率买入股票,该股票会在一段时间内上涨。那么即使赌一百万美元也不会是一个冒险的事情。
拥有 99% 精度的模型将是过度拟合的危险信号,因此在这里谈论零风险可能还为时过早。但是我们将检查我们可以使用我们拥有的数据达到什么精度水平。
这是标准普尔 500 指数公司名单在过去 10 年中因变量的值分布。
您可以看到,在 25% 的案例中,公司在 15 天内增长超过 3.8%,在 30 天内增长 6%,在 150 天内增长超过 17%。可以肯定地说,如果我们能够猜到这 25%,那么我们就有很大的机会至少不会赔钱。
为了将我们的回归问题转化为分类,我将所有高于前 25% 阈值的值改为“1”,低于阈值的值改为“0”。
创建分类模型后,我得到的结果如下:
Testing six classification models with the six dependent variables
这些是每个日期范围的计算精度分数:
6 prediction periods and 6 precision scores
我们在所有日期范围内达到了 71-76% 的精度分数。这听起来很有希望,但到目前为止并不比 回归模型做了 .
然而我们应该记得,在转换为分类模型时,我们没有使用“0”值作为阈值,但我们试图预测前 25% 的表现。
现在让我们加回价格估值变化的数值,这样我们就可以比较有多少股票实际上已经失去了价值。
这是输出:
future_15dprice_change 精度为
**85.52%**
future_30dprice_change 精度为
**86.82%**
future_60dprice_change 精度为
**88.06%**
future_90dprice_change 精度为
**90.05%**
future_120dprice_change 精度为
**91.6%**
future_150dprice_change 精度为
**94.33%**
94.33%!
根据我们的数据,我们在 150 天的投资期限内实现了 94% 的最大精度!
这听起来像魔术。让我们验证结果!
第四部分。数据验证
我使用所有获得的数据来训练和测试模型。为了获得新的看不见的数据进行验证,我反复运行了一个脚本。这是训练数据集中的最新日期:
Max Date
训练数据集中的最大日期是 2022 年 7 月 1 日,我们将在那天之后使用看不见的数据进行验证
The validation dataset has 54 days
我在 8 月底写这篇文章,验证数据集中只有 54 天。我可以对两个目标变量进行测试:一个是预测 15 天和 30 天。
当我们调整现实世界的场景时,我们的模型将尝试猜测价格是否会高于“0”(意味着获胜或模型的“1”级)或低于“0”(“0”级)
结果如下:
15d and 30d validation dataset results
对于预测周期为 15 天的模型,精度从 85% 至 74% ,对于 30 天模型,分数下降 从 87% 到 63% 在训练数据集中。
与训练/测试数据相比,我们的验证数据集显着下降。它告诉我们有一种方法可以改进我们的模型以使数字更接近。
同时,我们实现的精度高于 50%,这使其成为在高度不可预测的领域中的可行模型。
第五部分。让我们谈谈数字
为了了解我们可能获得或失去什么,我们需要可视化每个场景中的平均数字,当我们
为此,让我们将预测的分类类别与实际类别和实际值联系起来。
结果:
在第一列中,您可能会发现“真实”与“预测”类别。例如,值“0.0 1.0”意味着它是关于在现实中失去价值(“0.0”)但预计会增长(“1.0”)的股票。其他列表示聚合值 MEAN、AVG、MIN 和 MAX。
对于验证数据集,我们的模型预测了 674 种股票预计会增值的情况。在这 674 个中:497 个被正确预测,在 177 个案例中我们犯了错误。
假设我们每笔交易下注 1000 美元,我们从上表中获取收益/损失的百分比。
这 ** “真正的积极”** 总计算为:
497 笔交易 x 1000 美元 x 1.0679% = 530'746 美元 (我们赚了 33,746 美元)
为了 ** “假阳性” ** 计算是:
177 笔交易 x 1000 美元 x (1–0.0264%) = 172'327 美元 (我们损失了 4,673 美元)
总“真阳性”与“假阳性”结果相结合:
$497K + $177K → $530'7K + $172'3K
67.4 万美元 → 70.31 万美元 (我们总共赚了 28'803 美元)
我们赚取的总金额的百分比:
$26.7K / $674K = 4.27%
它表明我们能够平均每两周(15 天)赚取投资金额的 4.27%。
让我们输入复利公式中的所有值,一年有 52 周(26 个周期乘以 2 周)。
15Days Forecast Model Annual Interest
那差不多 300% 经验证的周年申报表。
这比我预期的要好,我肯定需要试一试!
下一步是什么
我觉得现在到了直播的阶段!!!!
在此之前,我将尝试为前 5% 的表现者而不是 25% 微调模型。这里的原因是,我认为下注的最低金额应该是 1000 美元左右,对于预算有限的人,我应该减少我下注的交易数量,并且至少具有相同的准确率。
我还想用 60 天、90 天的预测期测试其他模型的性能。我的期望是,他们不会仅仅因为我们现在处于熊市中而在测试数据集上显示结果,并且该模型主要是根据牛市的历史数据进行训练的。无论如何,我会在没有个人偏见的情况下尝试。
这里可以进行大量优化,首先是微调模型并添加更多变量。
除此之外,我将设置一项日常工作来提取和组合数据,并发送电子邮件通知以及最有可能的投注列表。
我将继续记录我的冒险经历并在这里分享信息。
我希望你觉得它很有价值。
大家好,
我对在 Medium 上写作很陌生,很想听听您的反馈。如果您喜欢我所写的内容,请不要犹豫,竖起大拇指。如果您有任何问题或建议,请随时发表评论。我阅读了每条消息并尝试尽快回复。
您也可以访问我的 Patreon 页面,让我有动力在 medium.com 上写更多关于股票分析和相关主题的帖子
www.patreon.com/GenerousDataAnalyst
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明