使用GPR对苹果股票数据做时间序列预测遇阻求助
基于高斯过程回归(GPR)的苹果股价时间序列预测问题
我正在用Python中的**高斯过程回归(Gaussian Process Regression,GPR)**处理苹果股价的时间序列预测任务,目标是用10年的开盘/收盘/最高/最低股价数据训练模型,预测未来1个月的股价走势。
目前我尝试用过去1年的数据做GPR预测,但作为经验不足的开发者,过程中遇到不少问题。最终需求是用过去10年的多维度股价数据训练模型,预测未来1个月的走势,现在完全不清楚后续推进方向,希望得到建议和指导。
数据集格式
数据集包含日期(Date)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Volume)等字段。
实验1:当日特征预测当日收盘价(测试集准确率接近100%)
当我将当日的开盘/最高/最低等数据作为特征X、当日收盘价作为标签Y训练测试时,模型在测试集上的准确率接近100%:
- 普通训练测试拆分结果:实际收盘价与GPR预测值高度重合,拟合效果极佳
- 时间序列预测结果:预测曲线与实际走势几乎一致
代码实现
导入所需库
import pandas as pd import numpy as np import os import datetime as dt import matplotlib.pyplot as plt from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score from sklearn.model_selection import train_test_split from sklearn.gaussian_process import GaussianProcessRegressor from sklearn.ensemble import RandomForestRegressor from sklearn.gaussian_process.kernels import RBF from sklearn.preprocessing import MinMaxScaler, StandardScaler scaler = MinMaxScaler()
加载数据集
dirname = os.path.dirname(__file__) Data = pd.read_csv( os.path.join(dirname, 'APPL.csv')) dataY = Data['Close'].values dataX = Data.copy() dataX = Data.drop('Close', axis=1) dataX = Data.drop('Date', axis=1) TrainX, TestX, TrainY, TestY = train_test_split(dataX, dataY, test_size=0.3, random_state=42, shuffle=False) TrainX = scaler.fit_transform(TrainX) TestX = scaler.transform(TestX)
拆分测试数据用于绘图
PlotY = [] for i in TestY: PlotY.append(i) PlotX = [] j=0 for i in TestY: PlotX.append(j) j=j+1
GPR测试集验证
from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel kernel = WhiteKernel() + DotProduct() gpr = GaussianProcessRegressor(kernel=kernel) gpr.fit(TrainX, TrainY) ForecastGPR = gpr.predict(TestX) fig = plt.figure(figsize = (8, 8)) plt.plot(PlotX, PlotY, color="green", label='actual', ) plt.plot(ForecastGPR, label='Predicted', color='red', linewidth = 0.5) plt.xlabel("Time (Days)") plt.ylabel("Closing Price (USD)") plt.title("GPR Predictions vs Actual Values (30% Test data)", y = -0.15) plt.legend(['Actual Price', 'Predicted Price (GPR))'], bbox_to_anchor=(0., 1.02, 1., .102), loc=3, mode="expand", borderaxespad=0) plt.show()
评估指标输出
print("GPR R-squared", "{:.2%}".format(r2_score(TestY, ForecastGPR))) print("The Root Mean Squared Error:", round(np.sqrt(mean_squared_error(TestY, ForecastGPR)),2)) print("The Mean Absolute Error:", round(mean_absolute_error(TestY, ForecastGPR),2)) # 观测准确率99.52%
实验2:用天数特征预测未来收盘价(结果不符合预期)
当尝试以天数为特征X、收盘价为标签Y进行未来预测时,模型输出了不准确的平线,未来预测结果完全不符合预期,核心代码如下:
l = [] Data = pd.read_csv( os.path.join(dirname, 'APPL.csv')) dataY = Data['Close'].values # 总数据行数=2749 for i in range(2749): l.append(i) dataX= np.array(l).reshape(-1, 1) TrainX, TestX, TrainY, TestY = train_test_split(dataX, dataY, test_size=0.3, random_state=42, shuffle=False) TrainX = scaler.fit_transform(TrainX) TestX = scaler.transform(TestX) from sklearn.gaussian_process.kernels import DotProduct, WhiteKernel kernel = WhiteKernel() + DotProduct() gpr = GaussianProcessRegressor(kernel=kernel) gpr.fit(TrainX, TrainY) i = 2749 for i in range(2849): l.append(i) TestX = np.array(l).reshape(-1, 1) ForecastGPR = gpr.predict(TestX)
需求与求助
我的最终目标是用过去10年的多维度股价数据(开盘、最高、最低、收盘价等)训练GPR模型,预测未来1个月的股价走势。目前完全不清楚后续推进方向,恳请提供具体的建议与指导。
内容的提问来源于stack exchange,提问作者Aditya Agarwal
相关产品推荐
相关产品推荐

