如何预测股票分析--线性回归

继续上一篇,接下来是股票分析中使用线性回归

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

线性回归模型生成一个确定自变量和因变量之间关系的方程。

线性回归方程可以写成:

 x1, x2, ....xn代表自变量,系数θ1,θ2,....θn代表权重。

使用时间(date)列提取特征,如- day, month, year, mon/fri等,然后拟合线性回归模型。

首先按升序对数据集进行排序,然后创建一个单独的数据集,这样创建的任何新特性都不会影响原始数据。

#setting index as date values 以date作为索引

df[‘Date‘] = pd.to_datetime(df.Date,format=‘%Y-%m-%d‘)

df.index = df[‘Date‘]

#sorting 升序排列

data = df.sort_index(ascending=True, axis=0)

#creating a separate dataset 创建一个单独的数据集

new_data = pd.DataFrame(index=range(0,len(df)),columns=[‘Date‘, ‘Close‘])

#将数据中的date和close都放到一个list中

for i in range(0,len(data)):

new_data[‘Date‘][i] = data[‘Date‘][i]

new_data[‘Close‘][i] = data[‘Close‘][i]

#create features  自己添加一些特征,同时第三行删除了一些数据

from fastai.structured import  add_datepart

add_datepart(new_data, ‘Date‘)

new_data.drop(‘Elapsed‘, axis=1, inplace=True)  #elapsed will be the time stamp

这将创建以下特征:

‘Year’, ‘Month’, ‘Week’, ‘Day’, ‘Dayofweek’, ‘Dayofyear’, ‘Is_month_end’, ‘Is_month_start’, ‘Is_quarter_end’, ‘Is_quarter_start’,  ‘Is_year_end’, and  ‘Is_year_start’.

注意:我使用了来自fastai库的add_datepart。如果您没有安装它,您可以简单地使用命令pip install fastai。您也可以使用python中的简单for循环来创建这些特性。我在下面展示了一个例子。

除此之外,我们还可以添加自己的一组特性,我们认为这些特性与预测相关。例如,我的假设是,本周的头几天和最后几天对股票收盘价的影响可能远远超过其他日子。因此,我创建了一个特性来识别给定的一天是星期一/星期五还是星期二/星期三/星期四。这可以用以下几行代码来完成:

new_data[‘Dayofweek‘][i] == 0 代表 周日 (因为数组下标标注都是从0开始的)

new_data[‘Dayofweek‘][i] == 4 代表 周一

mon_fri其实就是一个flag,如果是星期日或星期五,列值将为1,否则为0。

new_data[‘mon_fri‘] = 0

for i in range(0,len(new_data)):

if (new_data[‘Dayofweek‘][i] == 0 or new_data[‘Dayofweek‘][i] == 4):

new_data[‘mon_fri‘][i] = 1

else:

new_data[‘mon_fri‘][i] = 0

类似地,您可以创建多个有助于预测股价的特征

现在我们将把数据分成训练集和验证集来检查模型的性能。

#split into train and validation 分成训练集和验证

train = new_data[:987]

valid = new_data[987:]

#这里把训练集和验证集中的close的列剔除

x_train = train.drop(‘Close‘, axis=1)

y_train = train[‘Close‘]

x_valid = valid.drop(‘Close‘, axis=1)

y_valid = valid[‘Close‘]

#implement linear regression 使用sklearn的库函数构建模型

from sklearn.linear_model import LinearRegression

model = LinearRegression()

model.fit(x_train,y_train)

结果

#make predictions and find the rmse模型预测,计算rmse

preds = model.predict(x_valid)

rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))

#这下面两行是计算结果,可不执行

rms

121.16291596523156

RMSE值高于之前的方法,这清楚地表明线性回归的表现很差。让我们看看这个图,并理解为什么线性回归预测效果不是很好:

#plot 打印绘图

valid[‘Predictions‘] = 0

valid[‘Predictions‘] = preds

#下面这两行颠倒一下会好理解一些,分别取两个数据集的索引

valid.index = new_data[987:].index

train.index = new_data[:987].index

#打印训练集中close的部分(之前训练的时候删除了),打印测试集中close和预测值

plt.plot(train[‘Close‘])

plt.plot(valid[[‘Close‘, ‘Predictions‘]])

推论

线性回归是一种简单的技术,很容易解释,但也有一些明显的缺点。

使用回归算法的一个问题是,模型过度拟合了日期和月份。模型将考虑一个月前相同日期或一年前相同日期/月的值,而不是从预测的角度考虑以前的值。

从上图可以看出,2016年1月和2017年1月,股价出现下跌。该模型预测2018年1月也将如此。

线性回归技术可以很好地解决像大卖场销售这样的问题,在这些问题中,独立的特征对于确定目标值是有用的。

参考:https://www.jiqizhixin.com/articles/2019-01-04-16

原文地址:https://www.cnblogs.com/xingnie/p/12232109.html

时间: 2024-10-11 04:10:50

如何预测股票分析--线性回归的相关文章

如何预测股票分析--移动平均

近年来,随着全球经济与股市的快速发展,股票投资成为人们最常用的理财方式之一.本文研究的主要目标是利用机器学习技术,应用Python编程语言构建股票预测模型,对我国股票市场进行分析与预测. 今天主要来回顾的是 移动平均 参考机器之心的文章,对代码进行了中文的解释,同时加入了自己的见解 首先来处理一下数据,选用的是来自塔塔饮料的数据集,获取数据的方式可以查看 传送门 #import packages 导入pandas.numpy库 import pandas as pd import numpy a

如何预测股票分析--k-近邻

在上一篇中,我们学习了线性回归,这一次来看看k近邻的表现 K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别. #importing libraries #导入相对应的库函数(第一个是用来使用k n n的,第二个是用来网格搜索,第三个用来归一化) from sklearn import neigh

如何预测股票分析--先知(Prophet)

在上一篇中,我们探讨了自动ARIMA,但是好像表现的还是不够完善,接下来看看先知的力量! 先知(Prophet) 有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理.Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现.先知的输入是一个带有两列的数据框:日期和目标(ds和y). 时间序列预测一直是预测问题中的难点,人们很难找到一个适用场景丰富的通用模型,这是因为现实中每个预测问题的背景知识,例如数据

如何预测股票分析--自动ARIMA

在上一篇中,我们发现knn和线性回归一样,表现的不是特别好,来看看时间序列的表现 时间序列预测法其实是一种回归预测方法,属于定量预测,其基本原理是;一方面承认事物发展的延续性,运用过去时间序列的数据进行统计分析,推测出事物的发展趋势:另一方面充分考虑到偶然因素影响而产生的随机性,为了消除随机波动的影响,利用历史数据进行统计分析,并对数据进行适当处理,进行趋势预测. 自动ARIMA ARIMA是一种非常流行的时间序列预测统计方法.ARIMA模型使用过去的值来预测未来的值.ARIMA中有三个重要参数

如何预测股票分析--长短期记忆网络(LSTM)

在上一篇中,我们回顾了先知的方法,但是在这个案例中表现也不是特别突出,今天介绍的是著名的l s t m算法,在时间序列中解决了传统r n n算法梯度消失问题的的它这一次还会有令人杰出的表现吗? 长短期记忆(Long Short-Term Memory) 是具有长期记忆能力的一种时间递归神经网络(Recurrent Neural Network). 其网络结构含有一个或多个具有可遗忘和记忆功能的单元组成.它在1997年被提出用于解决传统RNN(Recurrent Neural Network) 的

通过机器学习的线性回归算法预测股票走势(用Python实现)

在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn库实现线性回归预测的技巧. 本文先讲以波士顿房价数据为例,讲述线性回归预测模型的搭建方式,随后将再这个基础上,讲述以线性预测模型预测股票的实现代码.本博文是从本人的新书里摘取的,新书预计今年年底前出版,敬请大家关注. 正文开始(长文预警) ------------------------------

用贝叶斯判别分析再次预测股票涨跌情况

可以转载,禁止修改.转载请注明作者以及原文链接 注:本文是从贝叶斯分类器的角度来讨论判别分析,有关贝叶斯分类器的概念可参考文末延伸阅读第1-2篇文章.至于Fisher判别分析,未来会连同PCA一同讨论. 判别分析也是一种分类器,与逻辑回归相比,它具有以下优势: 当类别的区分度高的时候,逻辑回归的参数估计不够稳定,它点在线性判别分析中是不存在的: 如果样本量n比较小,而且在每一类响应变量中预测变量X近似服从正态分布,那么线性判别分析比逻辑回归更稳定: 多于两类的分类问题时,线性判别分析更普遍. 贝

逻辑回归模型预测股票涨跌

http://www.cnblogs.com/lafengdatascientist/p/5567038.html 逻辑回归模型预测股票涨跌 逻辑回归是一个分类器,其基本思想可以概括为:对于一个二分类(0~1)问题,若P(Y=1/X)>0.5则归为1类,若P(Y=1/X)<0.5,则归为0类. 一.模型概述 1.Sigmoid函数 为了具象化前文的基本思想,这里介绍Sigmoid函数: 函数图像如下: 红色的线条,即x=0处将Sigmoid曲线分成了两部分:当 x < 0,y <

股票分析之沪深大盘资金分析

沪深的大盘主力资金是大盘指数上涨的动力,在工具中,大盘资金在 股票分析=>股票分析->MyForm中,如下图:     查看截止11月13日的大盘资金情况如下: