机器学习中的股票市场预测2025年8月11日 | 阅读9分钟 股票交易所这个词指的是一些交易,在其中公开上市公司的股份进行交易。这些金融活动通过传统的交易所和场外(OTC)市场进行,这些市场在规定的规则下运作。“股票交易所”和“股票交易”经常被互换使用。金融交易所的经纪人在一个或多个股票交易所交易股票,这些交易所是整个股票市场的重要组成部分。 金融交易所允许证券的买卖双方进行会面、交流和交易。市场为公司股份的价格发现提供了可能,并作为整体经济的晴雨表。买卖双方可以确保获得公平的价格、可观的流动性以及透明度,因为市场参与者在公开市场上竞争。第一个股票交易所是伦敦证券交易所,于1773年在一家咖啡馆开始,经纪人在此聚会交易股票。美国第一个股票交易所于1790年在费城成立。梧桐协议(Buttonwood Agreement),之所以得名是因为它是签署在一棵梧桐树下,标志着纽约华尔街在1792年的开始。该协议由24名经纪人签署,是美国第一个股票交易组织。经纪人于1817年将其事业重命名为纽约证券交易委员会。股票交易所是一个受到监管和控制的环境。在美国,主要监管机构包括证券交易委员会(SEC)和金融业监管局(FINRA)。 使用的库NumPyNumPy(Numerical Python)是一个开源的Python库,在科学和工程的几乎所有领域都有应用。它是Python中处理数学数据的标准,也是科学Python和PyData生态系统的核心。 PandasPandas被定义为一个开源库,提供Python中高性能的数据操作。Pandas的名称源自“panel data”这个词,意思是计量经济学中的复杂数据。它用于Python中的数据分析,由Wes McKinney于2008年开发。 MatplotlibMatplotlib是一个用于在Python中创建静态、动画和交互式可视化的综合库。Matplotlib使简单的事情变得容易,复杂的事情成为可能。创建出版质量的图表。创建可缩放、平移、更新的交互式图形。 Scikit-learnScikit-learn是一个开源的数据分析库,也是Python生态系统中机器学习(ML)的标准。关键概念和功能包括:算法动态策略,包括:分类:基于模式识别和分类数据。 XG Boost这包含了Extreme Gradient Boosting机器学习算法,它是帮助我们实现高预测精度的算法之一。 代码 导入数据集任何命名的文件集合称为数据集。数据集可以包含数据,例如医疗记录或保险记录,供系统上运行的程序使用。数据集也用于存储应用程序或操作系统本身所需的信息,例如源程序、宏库或系统变量或参数。对于包含可显示文本的数据集,您可以打印它们或在控制台上显示它们(许多数据集包含加载模块或其他二进制数据,这些数据并非完全可打印)。数据集可以被命名,允许通过名称引用数据集而不指定其存储位置。 本文使用的数据集或CSV文件可以通过此链接下载 输出 Date Open High Low Close Adj Volume Opening Highest Lowest Closing Trading price price price price volume that day that day 2010-07-07 16.4000 16.629999 14.980000 15.8000 15.8000 6921700 2010-07-08 16.1399 17.520000 15.570000 17.4599 17.4599 7711400 2010-07-09 17.5800 17.900000 16.549999 17.4000 17.4000 4050600 2010-07-12 17.9500 18.070000 17.000000 17.0499 17.0499 2202500 2010-07-13 17.3899 18.639999 16.900000 18.1399 18.1399 2680100 这是CSV文件的前五行。我们可以看到部分日期的交易数据缺失,原因是周末和节假日股市休市,因此这些日期没有交易。 输出 (1705, 7) 从上面的输出中,我们可以清楚地看到,数据集或CSV文件中的可用列数为7,可用行数为1705。 输出 Open High Low Close Adj Volume Opening Highest Lowest Closing Trading price price price price volume that day that day count 1705.0000 1705.0000 1705.0000 1705.000 1705.000 1.7050e+03 mean 130.13992 132.520000 128.57000 130.4599 133.4599 4.2707e+06 std 94.58002 95.900000 92.549999 94.4000 95.4000 4.2707e+06 min 16.9500 16.070000 14.000000 15.04990 15.0499 1.1850e+05 25% 30.3899 30.639999 29.900000 29.13995 29.10399 1.19435e+06 50% 156.5453 162.45450 153.45645 158.48455 159.54548 3.1807e+04 75% 224.5464 220.56545 215.56545 225.54565 222.56445 5.6621e+09 Max 285.54556 290.55455 280.54545 286.56545 286.56545 3.1763e+02 探索性数据分析EDA是一种使用可视化技术分析数据的方法。它用于发现趋势、模式,或通过统计摘要和图形表示来检验假设。在执行特斯拉股票价格数据的EDA时,我们将分析股票价格在一段时间内的变动情况,以及季度末如何影响股票价格。 示例 输出 ![]() 从上面的图表中,我们可以看到特斯拉股票正显示出如图所示的上升趋势。 输出 Date Open High Low Close Adj Volume Opening Highest Lowest Closing Trading price price price price volume that day that day 2010-07-07 16.4000 16.629999 14.980000 15.8000 15.8000 6921700 2010-07-08 16.1399 17.520000 15.570000 17.4599 17.4599 7711400 2010-07-09 17.5800 17.900000 16.549999 17.4000 17.4000 4050600 2010-07-12 17.9500 18.070000 17.000000 17.0499 17.0499 2202500 2010-07-13 17.3899 18.639999 16.900000 18.1399 18.1399 2680100 在ds.head()的输出中,如果我们仔细观察,可以看到“close”列中的数据与“Adj Close”列中的数据是相同的,我们应该检查是否所有列都如此。 特征工程特征工程有助于从现有特征中提取一些有价值的特征。这些附加特征有时有助于整体提高模型的性能,并且绝对有助于获得对数据的更深入见解。 输出 Date Open High Low Close Adj Volume day month year Opening Highest Lowest Closing Trading price price price price volume that day that day 2010-07-07 16.40 16.62 14.98 15.80 15.80 69217 7 7 2010 2010-07-08 16.13 17.52 15.57 17.45 17.45 77114 8 7 2010 2010-07-09 17.58 17.90 16.54 17.40 17.40 40506 9 7 2010 2010-07-12 17.95 18.07 17.00 17.04 17.04 22025 12 7 2010 2010-07-13 17.38 18.63 16.90 18.13 18.13 26801 13 7 2010 在这里,我们将日期列拆分成了三个更细的列:日、月和年,它们已经存在于日期列中了。 输出 Date Open High Low Close Adj Volume Day month year Quarter Opening Highest Lowest Closing Trading price price price price volume that day that day 2010-07-07 16.40 16.62 14.98 15.80 15.80 69217 7 7 2010 0 2010-07-08 16.13 17.52 15.57 17.45 17.45 77114 8 7 2010 0 2010-07-09 17.58 17.90 16.54 17.40 17.40 40506 9 7 2010 0 2010-07-12 17.95 18.07 17.00 17.04 17.04 22025 12 7 2010 0 2010-07-13 17.38 18.63 16.90 18.13 18.13 26801 13 7 2010 0 三个月为一个季度。每家公司都会准备其季度业绩并向公众发布,以便人们可以分析公司的业绩。这些季度业绩对股票价格有很大影响,这就是为什么我们添加了这个特征,因为它可能是一个有用的特征供学习模型使用。 输出 ![]() 通过分析上述条形图,我们可以说,特斯拉股票在2013年至2014年间上涨了两次。 这是对上述分组数据的一些重要观察结果。
我们在上面添加了一些有助于训练模型的附加列。我们添加了目标特征,它指示是否应该购买,我们将训练模型来预测它。然而,在继续之前,我们应该检查目标是否通过饼图进行了平衡。 输出 ![]() 当我们将特征添加到数据集中时,我们需要确保没有高度相关的特征,因为它们无助于学习过程和算法的处理。 输出 ![]() 从上面的热力图中,我们可以看出OHLC之间存在高度相关性,这是显而易见的,而附加特征之间彼此或与先前提供的特征没有高度相关性,这意味着我们可以继续构建我们的模型。 数据分割和归一化输出 (1435, 3) (190, 3) 在选择要训练模型的特征后,我们应该对数据进行归一化,因为归一化后的数据会导致模型训练稳定且快速。之后,所有数据都已按90/10的比例分为两部分,以便我们可以在隐藏数据上评估模型的性能。 模型开发和评估现在是时候训练一些先进的机器学习模型(逻辑回归、支持向量机、XGB分类器)了,然后根据它们在训练和验证数据上的性能来选择最适合当前需求的ML模型。 对于评估指标,我们将使用ROC-AUC曲线,但原因如下:与预测硬概率(0或1)相比,我们希望它能预测软概率,即介于0到1之间的连续值。而且,对于软概率,ROC-AUC曲线通常用于衡量预测的准确性。 代码 输出 Logistic Regression(): The Training Accuracy of the model is: 0.5148967 The Validation Accuracy of the model is: 0.5468975 SVC(kernel = ?poly?, probability = True): The Training Accuracy of the model is: 0.47108955 The Validation Accuracy of the model is: 0.4458765 XGB classifier(): The Training Accuracy of the model is: 0.7856421 The Validation Accuracy of the model is: 0.58462215 在这三个模型中,我们训练的XGB分类器表现最好,但它容易过拟合,因为训练精度和验证精度之间的差异太大了。 输出 ![]() 混淆矩阵 结论我们可以看到,最先进的ML模型的准确率并不比简单地以50%的概率猜测要好。这可能是因为数据不足或使用了过于简单的模型来执行股票市场预测这样复杂的任务。 下一主题Softmax分类器简介 |
我们请求您订阅我们的新闻通讯以获取最新更新。