用回归树预测股价

引言

在当今复杂多变的金融市场中,股价预测一直是投资者和金融分析师们不懈追求的目标。准确预测股价的走势能够为投资者带来丰厚的回报,因此很多投资公司和基金公司用极高的年薪雇佣了一批高学历的人才,致力于通过构建数学模型和机器学习模型来提高投资收益率。

然而,股价的变动受到众多因素的影响,包括宏观经济状况、行业趋势、公司财务状况、政治局势、市场情绪等等,这使得股价预测成为一项极具挑战性的任务。

近年来,随着机器学习技术的飞速发展,使用机器学习方法预测股价成为很多公司和研究者采用的方法之一。股价是一个连续数值,因此,我们可以使用上一章学到的回归树来建模。

数据准备

首先,我们得收集一些历史的股票数据用于构建模型。

以下是一些可以获取股价预测数据集的途径和相关数据集的示例:

  1. Kaggle:这是一个流行的数据科学竞赛平台,上面有许多与股票相关的数据集。例如,Google 股价预测数据集,包含了从 2016 年 6 月到 2021 年 6 月的每日 Google 股价数据,每条记录中有多项数据,如日期、开盘价、收盘价、高点、低点、交易量等。你可以在 Kaggle 网站上搜索并找到适合的数据集。
  2. 雅虎财经(Yahoo Finance):虽然它本身不是数据集,但一些数据集中的数据来源于此。例如,Netflix 股价数据集收录了 Netflix 自 2002 年开始至 2022 年的股价数据。
  3. 沪深 300 数据:包含了沪深 300 指数成分股的相关数据,可用于股票价格预测。例如,在一些研究中只选用了原始数据特征中的开盘价、收盘价、最高价、最低价、交易量等。

这里,我们以kaggle上的GOOGLE股票数据集为例。这里提供了数据集的下载链接,下载后解压会看到两个文件,Google_Stock_Train (2010-2022).csv 和 Google_Stock_Test (2023).csv。

这个数据集是GOOGLE公司从2010年到2023年的股票价格数据。每一行代表一个交易日的数据,包括多个列:

  • 日期(Date):记录股价数据的时间。
  • 开盘价(Open Price):当天股票开始交易时的价格。
  • 收盘价(Close Price):当天股票交易结束时的价格。
  • 最高价(High Price):当天股票达到的最高价格。
  • 最低价(Low Price):当天股票达到的最低价格。
  • 调整收盘价(Adj Close):进过调整后的收盘价,调整原因包括分红,拆股等原因。
  • 交易量(Volume):当天的股票交易数量。

示例数据如下

Date,Open,High,Low,Close,Adj Close,Volume
2010-01-04,15.689439,15.753504,15.621622,15.684434,15.684434,78169752
2010-01-05,15.695195,15.711712,15.554054,15.615365,15.615365,120067812
2010-01-06,15.662162,15.662162,15.174174,15.221722,15.221722,158988852
2010-01-07,15.250250,15.265265,14.831081,14.867367,14.867367,256315428
2010-01-08,14.814815,15.096346,14.742492,15.065566,15.065566,188783028
2010-01-11,15.126627,15.126627,14.865866,15.042793,15.042793,288227484
2010-01-12,14.956206,14.968969,14.714715,14.776777,14.776777,193937868
2010-01-13,14.426677,14.724224,14.361862,14.691942,14.691942,259604136
2010-01-14,14.612112,14.869870,14.584835,14.761011,14.761011,169434396

这个数据集已经按照时间帮我们划分好了训练集和测试集,因此我们不需要再做划分了。

与前面我们见过的训练集和测试集划分方式不同的时候,这个数据集按照时间顺序进行划分,原因是为了避免「事后诸葛亮」效应。如果我们将未来的数据未给模型训练,那么模型就能够拟合的非常好,但这种模型在真实的预测中,效果非常差!就像我们通过后视镜来选股建模一样,就像是「事后诸葛亮,事前猪一样」!在机器学习中,也叫数据穿越,未来的数据穿越到了过去来帮我训练模型!因此,通常在做时间强相关的任务建模时,我们需要按照时间来划分训练集和测试集。

样本构造

0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x