最先进的Prophet时间序列模型预测石油股票

在这里插入图片描述

一、时间序列是什么?

时间序列预测模型是能够根据先前观察到的值预测 未来值的模型。时间序列预测广泛用于非平稳数据。非平稳数据被称为数据,其统计特性(例如均值和标准差)不随时间恒定,而是这些指标随时间变化。
这些非平稳输入数据(用作这些模型的输入)通常称为时间序列。时间序列的一些示例包括随时间变化的温度值、随时间变化的股票价格、随时间变化的房屋价格等。因此,输入是一个信号(时间序列),由按时间顺序进行的观察定义。
本文使用的模型Prophet是Facebook开发的,传统上,大多数机器学习模型使用一些观察(样本/示例)作为输入特征,但数据中没有时间 维度。

二、预测模型

Prophet模型是可以捕捉时间序列数据中季节性的模型,能够捕捉每日、每周和每年的季节性以及假期 影响。
模型数学方程式为:

y(t) = g(t) + s(t) + h(t) + e(t)

其中:

  • g(t) 代表趋势。Prophet 使用分段线性模型进行趋势预测。
  • s(t) 表示周期性变化(每周、每月、每年)。
  • h(t) 代表假期的影响(比如:假期影响企业)。
  • e(t) 是误差项。

Prophet 模型拟合过程通常非常快(即使对于数千次观察),并且不需要任何数据预处理。它还处理缺失数据和异常值。

三、环境搭建

请看这篇文章:prophet安装详细过程

四、历史数据获取

本文来分析原油 ,数据为2022年一月一号到二月28号:原油数据

导入模块:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

读取数据:

data = pd.read_csv(r"C:\Users\hp\Desktop\spyder\you.csv") 
data.head(5)

在这里插入图片描述
打印一些统计数据,例如上述特征(列)的平均值、中位数、最小值、最大值和标准差值

data.describe()

如下:
在这里插入图片描述
可见今年三个月平均价格是:86.895500,最高价格是95.800003

选出指标:

#仅选择重要特征,即日期和价格
data = data[["Date","Close"]] # 选择日期和价格
# 重命名特征:模型拟合需要这些名称
data = data.rename(columns = {
    
    "Date":"ds","Close":"y"}) #重命名数据集的列
data.head(5)

在这里插入图片描述

五、建立预测模型

我们不会将数据拆分为训练集和测试集,而是使用所有数据来拟合模型,然后让模型预测未来值:

from fbprophet import Prophet
m = Prophet(daily_seasonality = True) # the Prophet 模型
m.fit(data) # 使用所有数据拟合模型

如下:
在这里插入图片描述

六、绘制绘制预测未来10天

为什么只预测10天?因为太远了不靠谱,容易受各种外界影响:

future = m.make_future_dataframe(periods=10) #我们需要指定未来的天数
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the yuanyou Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()

在这里插入图片描述

该模型使用所有数据进行训练(黑点)并预测了未来10天。这预测结果似乎有点离大浦,希望不是真的!

七、绘制趋势、每周、季节性、每年和每日分量

如果您想查看预测组件,即趋势、每周、季节性、每年和每日组件:

m.plot_components(prediction)
plt.show()

分别如下:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
还是这样的结果更加合理,因为只预测了10天,所以看一下天和周就行了,从第一张图看出:油在未来几天还在涨价。从第二张图可以看出,在星期五就会降价。

八、免责声明

虽然本数学模型似乎已经是最先进的股票预测模型,但是我无法保证你使用它能盈利赚钱,本次练习仅为个人练习使用,本博主技术不佳,还请指教。欢迎你与我一起qq群交流:428335755,非学习勿扰。

猜你喜欢

转载自blog.csdn.net/weixin_46211269/article/details/123183757