【机器学习】线性回归实战案例三:股票数据价格区间预测模型(国外+国内数
据)
股票数据价格区间预测模型(国外+国内数据)
⼿动反爬⾍,禁⽌转载: blog.csdn/lys_828/article/details/121452962(CSDN博主:Be_melting)
知识梳理不易,请尊重劳动成果,⽂章仅发布在CSDN⽹站上,在其他⽹站看到该博⽂均属于未经作者授权的恶意爬取信息
案例三:股票数据价格区间预测模型(国外+国内数据)
2.3.1 模块加载与忽略警告设置
打开Jupyter notebook,然后新建⼀个python3⽂件,命名为股票时序数据回归预测模型1.ipynb。⽂件⾸个cell中导⼊数据分析常⽤模块和模型相关的模块,设置提⽰警告的过滤,代码如下。
import pandas as pd
教学反思总结import numpy as np
del_lection import train_test_split
from sklearn.linear_model import LinearRegression
import math
import aborn as sns
全国高考分数线
import datetime
import matplotlib.pyplot as plt
from matplotlib import style
import time
河南经济排名import warnings
warnings.filterwarnings('ignore')
2.3.2 加载数据和数据筛选
准备的数据集为⾕歌2004年的股票数据,读取过程中将Date字段进⾏时间字段转化,并设置为索引,然后查看数据的维度。
ad_csv('./data/google-stockdata.csv',index_col='Date',
par_dates=True)
df雷雨后
输出结果如下。(直接输出读取后⽂件数据对应的变量,最后⾯⼀⾏会有提⽰数据的维度,⼀共有3424⾏,12列,相当于最后输出了df.shape)
了解⼀下股票数据的基本信息,⼀般就是包含了前六个字段(包含索引),即股票的开盘时间、开盘价、最⾼点、最低点、收盘价和成交量。最后⾯的五个字段是经过复权后的衍⽣字段,⽽中间的两个字段是在案例中没有使⽤到。
2.3.3 探索式数据分析(EDA)
四年级奥数之前的两个案例中均展⽰了探索式数据分析的⼏个步骤,这⾥就不再进⾏赘述。但是对于字段中的缺失值的查看⼀定是要做的,如果存在着缺失值就要进⾏缺失值处理,确保传⼊模型的数据是⼀个完整的数据,输出结果如下。
伤口图片真实
在提供的数据中并没有缺失的数据,但是经过仔细研究发现股票数据中并没有⼀个标签字段,因此要进⾏线性回归模型创建前需要先解决标签数据的问题。本案例的⽬标:预测未来股票的价格区间,需要根据历史的股票价钱(收盘价)来预测未来股票价钱的情况。
考虑数据量进⾏时间范围的确定。数据量⼀共3424⾏,假定按照数据量除以100取上限进⾏预测天数的确定,然后就可以构造对应标签数值。为了便于理解这个构建标签数值的过程,可以进⾏⼀个简单的⽰例,先以5天为基准构建数据。为了不破坏数据和⽅便查看,对原数据进⾏备份后取出10条数据进⾏演⽰。
接着就是利⽤pandas应⽤基础中第10⼩结的内容,shift时间平移操作。⾸先提取经过复权后的收盘价字段并转化为DataFrame数据类型,进⼀步应⽤shift(-5)变换并赋值给新字段,最后就是新字段与原字段相减获得相差5天的数据。
df3=df2['Adj. Clo'].to_frame()
df3['col2']= df3['Adj. Clo'].shift(-5)
df3['delta']=df3['col2']-df3['Adj. Clo']
df3.head(7)
输出结果如下。(采⽤ shift 加上负值的⽅法 可以把同⼀组数据错位的放在⼀起,这个错位是把5天后的数据与当前天的数据放在同⼀⾏中,然后两个字段数值相减就可以获得对应天数股票价格的差值)锅贴饺子的做法
利⽤上⾯的原理,应⽤到整个股票数据集中,oppo手机锁屏密码忘记了怎么解锁
forecast_col ='Adj. Clo'
forecast_out =il(0.01*len(df)))
df['label']= df[forecast_col].shift(-forecast_out)
df[-40:-30]
输出结果如下。(为了核实是否处理正确,切⽚获取倒数第40到第30⾏的数据,输出结果中label字段数据有⼀半缺失⼀般完整,说明操作过程正确)
也可以直接查看各字段的缺失值进⾏核实,输出结果如下,最终就是创建的字段label中存在着35条缺失值,满⾜要求。
2.3.4 探究字段之间的关联性
完成了标签字段数据的构建,接下来就可以查看特征字段与标签字段的关联性,直接利⽤热⼒图进⾏展⽰输出。
确定标签字段后,在热⼒图中只需要查看标签字段label对应的⾏或者列即可,⽐如上图红框标注的列。根据图中的结果,⾸先看两个不相关的字段,也就是中间的那两个字段在整个案例中没有进⾏介绍也和标签字段⽆关,后续直接进⾏剔除;然后就是股票除时间外的剩下的5个信息与调整后的5个信息,由于标签字段就是利⽤调整后的收盘价字段构造的,所以会和调整后的收盘价相相关性为0.99,然⽽调整后的4个信息之间的相关性都为1,⾃然标签字段和剩下的3个信息直接的相关性也是0.99,⾄于未调整前的数据,是经过⼀定的计算转化⽽来,相关性数值相对较⼩⼀些,但是也是存在很强的相关性。
2.3.5 特征⼯程
根据关联性分析的结果重新提取字段数据,构建数据集,创建两个新字段为⾼低价变化差和涨跌幅,并进⾏缺失值的处理。
df = df[['Adj. Open','Adj. High','Adj. Low','Adj. Clo','Adj. Volume','label']]
df['HL_PCT']=(df['Adj. High']- df['Adj. Low'])/ df['Adj. Clo']*100.0
df['PCT_change']=(df['Adj. Clo']- df['Adj. Open'])/ df['Adj. Open']*100.0
df.dropna(inplace=True)
df.isnull().sum()