数学建模常用模型(六):时间序列预测
时间序列预测是数学建模中的一个重要领域,用于预测时间序列数据中未来的趋势和模式。时间序列预测可以帮助我们了解数据的演变规律,做出合理的决策和规划。
这是我自己总结的一些代码和资料(本文中的代码以及参考书籍等),放在github上供大家参考:https://github.com/HuaandQi/Mathematical-modeling.git
1.常用的时间序列预测方法
- 移动平均法(Moving Average):通过计算过去一段时间内的观测值的平均值来预测未来的值。简单移动平均(SMA)和加权移动平均(WMA)是常用的移动平均法。
- 指数平滑法(Exponential Smoothing):利用指数加权的方式对历史数据进行平滑处理,较新的数据具有更高的权重。简单指数平滑(SES)和双指数平滑(DES)是常见的指数平滑方法。
- 自回归移动平均模型(Autoregressive Moving Average Model,ARMA):ARMA模型结合了自回归(AR)和移动平均(MA)的特点,用于描述时间序列数据的自相关和移动平均结构。
- 季节性自回归移动平均模型(Seasonal Autoregressive Moving Average Model,SARMA):SARMA模型在ARMA模型的基础上考虑了时间序列数据的季节性特征。
- 长短期记忆网络(Long Short-Term Memory,LSTM):LSTM是一种递归神经网络,具有记忆单元和门控机制,适用于处理时间序列数据的长期依赖关系。
这些方法在时间序列预测中都有广泛的应用,选择合适的方法取决于数据的特点、预测的目标和模型的要求。在实际应用中,常常需要根据具体情况进行模型选择、参数调整和模型评估,以获得准确和可靠的预测结果。
2.程序实例
下面是一个使用Python进行时间序列预测的简单例子,我们将使用ARIMA模型来预测未来的气温变化。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
# 读取气温数据
data = pd.read_csv('temperature.csv')
# 将日期列转换为日期时间类型
data['Date'] = pd.to_datetime(data['Date'])
# 设置日期列为索引
data.set_index('Date', inplace=True)
# 绘制原始数据图
plt.figure(figsize=(10, 4))
plt.plot(data.index, data['Temperature'], label='Actual')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.title('Temperature Time Series')
plt.legend()
plt.show()
# 拆分训练集和测试集
train_data = data.loc['1980-01-01':'2010-12-31']
test_data = data.loc['2011-01-01':'2015-12-31']
# 创建ARIMA模型
model = ARIMA(train_data['Temperature'], order=(2, 1, 0))
# 拟合模型
model_fit = model.fit()
# 预测未来5年的气温
forecast = model_fit.forecast(steps=5)
# 打印预测结果
print("Forecasted Temperature:")
print(forecast)
# 绘制预测结果图
plt.figure(figsize=(10, 4))
plt.plot(data.index, data['Temperature'], label='Actual')
plt.plot(forecast.index, forecast, label='Forecast')
plt.xlabel('Date')
plt.ylabel('Temperature')
plt.title('Temperature Time Series Forecast')
plt.legend()
plt.show()
在这个示例中,我们首先读取气温数据,并将日期列转换为日期时间类型。然后,我们将数据拆分为训练集和测试集,以2010年为界限。接下来,我们创建了ARIMA模型,并使用训练集进行拟合。然后,我们使用拟合的模型进行未来5年气温的预测,并打印出预测结果。最后,我们绘制了原始数据和预测结果的图表。
3.运行结果
请确保将代码中的数据文件路径和模型参数进行适当的调整,以适应您自己的数据和预测需求。