【Python时序预测系列】基于SARIMA实现单变量时间序列预测(源码)

一、引言

前文回顾:

【Python时序预测系列】基于Holt-Winters方法实现单变量时间序列预测(源码)

【Python时序预测系列】基于ARIMA法实现单变量时间序列预测(源码)

        SARIMA (Seasonal Autoregressive Integrated Moving Average) 是一种常用于时序数据预测的模型,它结合了自回归 (AR)、差分 (I) 和移动平均 (MA) 的概念,并考虑了数据的季节性。

二、实现过程

导入相关的库

import warnings
warnings.filterwarnings('ignore')
import pandas as pd
from statsmodels.tsa.holtwinters import ExponentialSmoothing
import matplotlib.pyplot as plt

2.1 读取数据集

# 读取数据集
data = pd.read_csv('data.csv')
# 将日期列转换为日期时间类型
data['Month'] = pd.to_datetime(data['Month'])
# 将日期列设置为索引
data.set_index('Month', inplace=True)

data:

图片

2.2 划分数据集

# 拆分数据集为训练集和测试集
train_data = data.iloc[:-12]
test_data = data.iloc[-12:]

# 绘制训练集和测试集的折线图
plt.figure(figsize=(10, 6))
plt.plot(train_data, label='Training Data')
plt.plot(test_data, label='Testing Data')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Training and Testing Data')
plt.legend()
plt.show()

训练集和测试集:

图片

2.3 建立模拟合模型进行预测

# 拟合 SARIMA 模型
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
model_fit = model.fit()
# 进行预测
predictions = model_fit.predict(start=test_data.index[0], end=test_data.index[-1])
# predictions = model_fit.forecasts(len(test_data))

SARIMAX(data, order=(p, d, q), seasonal_order=(P, D, Q, s))

  • 自回归阶数 (p):表示当前观测值与前几个观测值的相关性。

  • 差分阶数 (d):表示为使数据平稳所需的差分次数。

  • 移动平均阶数 (q):表示当前观测值与前几个观测值的移动平均相关性。

  • 季节性自回归阶数 (P):表示当前观测值与同一季节前几个季节的观测值的相关性。

  • 季节性差分阶数 (D):表示为使数据平稳所需的季节性差分次数。

  • 季节性移动平均阶数 (Q):表示当前观测值与同一季节前几个季节的移动平均相关性。

  • 季节周期 (s):表示数据的季节性周期长度。

predictions:

图片

2.4 预测效果展示

# 绘制测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(test_data.index, test_data, label='Actual')
plt.plot(predictions.index, predictions, label='Predicted')
plt.xlabel('Month')
plt.ylabel('Passengers')
plt.title('Actual vs Predicted')
plt.legend()
plt.show()

测试集真实值与预测值:

图片

# 绘制原始数据、训练集预测结果和测试集预测结果的折线图
plt.figure(figsize=(10, 6))
plt.plot(data, label='Actual')
plt.plot(train_data.index, model_fit.fittedvalues, label='Training Predictions')
plt.plot(test_data.index, predictions, label='Testing Predictions')
plt.xlabel('Year')
plt.ylabel('Passenger Count')
plt.title('International Airline Passengers - Actual vs Predicted')
plt.legend()
plt.show()

原始数据、训练集预测结果和测试集预测结果:

图片

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用Python中的支持向量机(SVM)模型来预测SARIMA模型的残差序列。以下是一个简的代码示例: ```python # 导入所需的库 import pandas as pd import numpy as np from statsmodels.tsa.statespace.sarimax import SARIMAX from sklearn.svm import SVR from sklearn.metrics import mean_squared_error # 读取数据 data = pd.read_csv('data.csv', index_col=0) # 拆分训练集和测试集 train_data = data[:'2019'] test_data = data['2020':] # 对训练集拟合SARIMA模型 model = SARIMAX(train_data, order=(1, 1, 1), seasonal_order=(0, 0, 0, 12)) model_fit = model.fit() # 对测试集进行预测 predictions = model_fit.predict(start='2020-01-01', end='2021-01-01', dynamic=False) # 计算残差序列 residuals = test_data - predictions # 使用SVM模型对残差序列进行预测 svm_model = SVR(kernel='linear') svm_model.fit(train_data.values.reshape(-1, 1), residuals.values.ravel()) svm_predictions = svm_model.predict(test_data.values.reshape(-1, 1)) # 计算预测误差 mse = mean_squared_error(residuals, svm_predictions) rmse = np.sqrt(mse) print("RMSE:", rmse) ``` 在这个示例中,我们首先读取了数据并将其拆分为训练集和测试集。然后,我们使用SARIMA模型对训练集进行拟合,并使用该模型对测试集进行预测。接下来,我们计算残差序列,并使用SVM模型对其进行预测。最后,我们计算预测误差并将其输出。注意,这只是一个简的示例,您可能需要根据您的具体需求进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据杂坛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值