马京晶
关键词:股票预测;线性回归;逻辑回归;随机森林
0 引言
随着经济不断波动,中小企业及个人投资者逐渐将目光从传统的重资产领域转向更为灵活和活跃的股票市场。在充满机遇和挑战的金融领域,选择适切的股票投资策略尤为关键,股票的涨跌趋势预测成为投资者们关注的焦点之一。人工智能迅猛发展与金融衍生品不断完善,量化投资策略在国内得到了飞速发展[1],学者们纷纷运用机器学习等工具在股票的涨跌及涨跌幅度上进行研究。王兰等使用logistic回归对股票的涨跌趋势进行预测,对贵阳银行的历史股票价格趋势进行实例分析,结合混淆矩阵与 AUC评价方法进行模型评估取得了良好的效果[2];马贵永等针对农林牧渔行业采用随机森林及XGboost算法研究股票的趋势变动,利用准确率、AUC 值等指标对模型的预测效果进行评价,模型对农林牧渔行业股票趋势预测的准确率高达 91.55%[3];张晓涛等实现了采用线性回归的方法对股票趋势进行预测并设计与实现了基于线性回归的热门股票分析与推荐系统[4]。本论文旨在通过研究机器学习中的分类与回归两种监督学习方法,对股票价格趋势进行预测,探讨算法的原理、模型构建与评估方法,并得出对于股票市场的实际投资决策的洞见。
1 数据来源及数据处理
1.1 数据预处理
所用到的数据来自ModelWhale中2013—2023年最受关注的股票,包括麦当劳、苹果公司、亚马逊、阿里巴巴、谷歌、微软等30家企业数据,数据中主要包含以下属性:日期、开盘价、收盘价、最高价、最低价、调整后的收盘价以及成交量等7个属性,属性及描述如表1所示。
为了绘制K线图及建模分析,添加新列‘Date1。把日期Date的格式更改为Datetime类型赋值给Date1 并设置为索引,将数据按照日期升序排序,查看最后5 条数据,如图1所示。
1.2 K 线图分析
K线图是以每个分析周期的开盘价、最高价、最低价和收盘价绘制而成,K线图能够全面透彻地观察到市场的真正变化。从K线图中,既可看到股价的趋势,也同时可以了解到每日市况的波动情形。本文以麦当劳数据为例,选择Python 中的Pyecharts 库中的Kline()函数绘制K 线图,选择数据中的Open、Close、High、Low属性,将其组合成二维列表作为y轴数据,日期则作为x轴数据,进行可视化绘图。由于股票数据涉及的时间范围较长,运用DataZoomOpts全局配置项对x轴数据进行区域缩放,缩放前的可视化展示如图2(左)所示,图2(左)可观测在整个时间周期内股价的变化趋势。查看部分时间范围内的详细数据变化,拖动缩放滚动条调整时间轴,如图2(右)所示,图2 (右)中红色图柱代表收盘价大于开盘价,即股票上涨,灰色图柱代表收盘价小于开盘价,即股票下跌。线条最高点是最高价的数据,线条最低点是最低价的数据,图柱的高低点位则分别代表开盘价或收盘价的数据。由图2可以看出,股价整体在近10年内处于上升趋势,但局部涨跌各占50%左右概率。因此,在股票投资中,长期持有是一种稳健的策略,可确保在市场波动中保持相对稳定的回报。
2 回归模型构建与模型评估
2.1 线性回归
线性回归是一种基本的回归分析方法,通过拟合线性关系来预测目标变量,建立线性数学模型并进行评价预测来处理因变量与自变量之间的线性回归关系[5]。假设θi 是线性回归的权重参数,xi 代表样本点的数值,n 代表样本点的个数,建立回归方程,在高维空间形成一个面来拟合所有的数据点:
由于真实值和预测值之间存在一定的误差,用ε来表示误差,对于每个样本:
式中,y(i) 代表真实值,θT xi 代表预测值。对于线性回归算法来说,把误差项ε 作为损失值,算法希望损失值越小越好,即ε 越小越好。当样本量足够多的时候,误差ε(i) 是独立且服从高斯分布的,因此:
一般影响股价走势的因素有开盘价格、最高价、最低价和成交量[1]。本文将当日收盘价(Close) 作为时间序列的观察对象。选取日期(Date) 、当日开盘价(Open) 、当日最高价(High) 、当日最低价(Low) 和成交量(Volume) 这 5个变量作为自变量。首先使用sklearn 工具包中的StandardScaler()方法对数据进行标准化,然后将数据按照8:2 拆分训练集和测试集,采用sklearn工具包中的LinearRegression()模块对训练数据进行训练。
2.2 模型评估
在回归问题中,除了关心模型的准确率之外,还更关心预测值与实际值之间的接近程度,因此本文使用回归问题专用的评价指标如均方误差(MSE) 与R平方对线性回归模型进行评估。
(1) 均方误差
均方误差(MSE) 指标是衡量模型预测结果与实际值之间的误差。MSE的值越小代表模型的预测结果越接近实际值,反之则说明模型预测效果较差。MSE 的值可以用来比较不同模型的性能。
式中,n 为样本数量,yi 为观测值,yi 为模型的预测值。MSE的值一般不单独使用,用在多个模型进行比较的场合。
(2) R平方
R平方(R?) 指标是衡量模型拟合数据的拟合度。R?的值在0到1之间,越接近1代表模型越能够解释数据的方差,越接近0则说明模型对数据的解释程度较低[6]。
2.3 模型预测
将特征向量X和标签y合并成为一个DataFrame,并使用predict()方法预测新的收盘价,将新的收盘价数据添加至DataFrame中,形成新的数据如图4所示。其中forecast是预测值。
绘制预测值forecast与实际值close之间的对比折现图,如图5所示。从图5可以看出,两种线条几乎完全被覆盖住,说明模型拟合效果很好。
3 分类模型构建与模型评估
3.1 逻辑回归与随机森林
逻辑回归是一种用于解决分类问题的统计学习方法,用于预测给定输入实例属于某个类别的概率,在线性回归的基础上得到一个预测值,使用sigmoid 函数将该值映射到[0,1]的区间中,从而完成值到概率的转换。Sigmoid函数表达式如下所示:
随机森林是集成算法的一种,采用数据随机采样和特征随机选择两种方法将多个决策树并行放在一起使用,从而达到集成的目的[3]。随机森林因其具有能够处理高维度数据、能够评估判断特征的重要性排序等优势,被广泛用作分类问题。
本文为了将回归问题转换为分类问题来研究,需要在数据中添加新的属性。首先,计算Close字段与上一条数据的Close字段的差,将结果存储在新的字段“diff”中,然后判断“diff”字段是否大于0,大于0说明收盘价处于“涨”阶段,否则,股票收盘价则判断为“跌”,最后使用apply方法,根据条件生成新的标记字段“label”。处理结果如图6所示。
由1.2节中的K线图可知,文章所用数据的涨跌比例大约为1:1,数据较为均衡分布,因此可以用来预测股票的涨跌行为。接下来同样选取2.1节中5个属性作为自变量,即选取日期(Date) 、当日开盘价(Open) 、当日最高价(High) 、当日最低价(Low) 和成交量(Volume) 这5个变量作为自变量,选取标签属性(la?bel) 作为观测对象,按照7:3划分训练集和测试集,建立逻辑回归和随机森林模型。
3.2 模型评估
在分类问题中,模型评估的指标一般有准确率、召回率、F1 Score值、精度、ROC曲线和AUC值等,本文选择准确率、ROC曲线及AUC值作为评价指标。
(1) 准确率
准确率定义如下:
式中:TP为预测的行业指数上涨且实际结果也上涨的样本数据个数;TN为预测的行业指数下跌且实际结果也下跌的样本数据个数;FN为预测的行业指数下跌、实际结果却上涨的样本数据个数;FP为预测的行业指数上涨、实际结果却下跌的样本数据个数。
逻辑回归和随机森林的准确率如图7所示。
(2) ROC曲线和AUC值
首先,使用sklearn 工具中的roc_curve 函数计算ROC曲线,返回3个值:假正例率(错误地预测为正例的样本占所有实际负例样本的比例)、召回率(正确地预测为正例的样本占所有实际正例样本的比例)以及用于绘制ROC曲线的阈值(thresholds) ;然后,使用函数auc计算ROC曲线下的面积即AUC值,AUC值越接近1,说明模型性能越好。
ROC曲线及AUC值如图8所示。
由图8可知,随机森林的AUC值为0.731,逻辑回归的AUC值为0.462,随机森林的模型效果明显优于逻辑回归。
4 结论
综上所述,线性回归对股票价格预测准确率较高,R2 值接近1,随机森林对股票涨跌类型预测较准确,AUC值达0.731。股票收盘价预测是一个回归问题,收盘价是一个连续的数值,而不是一个离散的类别,线性回归更适合用于解决回归问题,在股票收盘价预测中,使用线性回归来预测数值更合理。
本文通过K线图分析及机器学习算法在股票价格趋势预测中的应用进行深入研究,为投资者、金融从业者以及研究者提供有益的参考和指导。尽管市场可能发生局部变化和短期动荡,但长期持有有助于规避瞬时波动,实现更为可靠的收益。