时间序列预测:使用ARIMA模型进行数据分析
时间序列预测:使用ARIMA模型进行数据分析
本文将介绍如何使用ARIMA模型对时间序列数据进行分析和预测。ARIMA模型是一种常用的时间序列模型,可以有效地捕捉时间序列数据中的自相关性和季节性趋势。
1. 数据准备
首先需要准备时间序列数据,并将其导入到Python环境中。假设我们已经准备好了一个名为'text.xlsx'的Excel文件,其中包含'time'和'Unnamed: 1'两列数据,分别代表时间和我们要分析的数据。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 设置合适的字体
font_path = 'C:/Windows/Fonts/simsun.ttc' # 修改为你系统中合适的字体路径
font_prop = FontProperties(fname=font_path, size=12)
# 读取数据
data = pd.read_excel('D:\M_hua\text.xlsx')
print(data.columns)
# 将时间列作为时间索引
data.set_index('time', inplace=True)
2. 平稳性检验
时间序列数据需要满足平稳性才能使用ARIMA模型进行分析。平稳性是指时间序列数据的均值和方差在时间上是稳定的。可以使用ADF检验来判断时间序列数据的平稳性。
# 查看原始数据的平稳性
def check_stationarity(series):
result = adfuller(series)
print('ADF检验结果:')
print('ADF Statistic:', result[0])
print('p-value:', result[1])
print('Critical Values:')
for key, value in result[4].items():
print(f'{key}: {value}')
# 查看原始数据的平稳性
print('原始数据的平稳性检验结果:')
check_stationarity(data.iloc[:, 0])
3. 数据预处理
如果原始数据不平稳,则需要对其进行预处理,使其满足平稳性。常用的预处理方法包括差分处理和季节性调整。
# 进行差分处理,直至平稳
diff_count = 0
while not adfuller(data.iloc[:, 0])[1] < 0.05:
data = data.diff().dropna()
diff_count += 1
# 绘制差分后数据图
plt.plot(data.index, data.values, label=f'差分{diff_count}阶数据')
plt.legend(prop=font_prop)
plt.xlabel('时间', fontproperties=font_prop)
plt.ylabel('数据', fontproperties=font_prop)
plt.title(f'差分{diff_count}阶数据', fontproperties=font_prop)
plt.show()
4. 模型拟合
使用ARIMA模型对数据进行拟合。ARIMA模型由三个参数组成:p、d、q。
- p:自回归模型的阶数
- d:差分模型的阶数
- q:移动平均模型的阶数
# 构建ARIMA模型,并拟合数据
model = ARIMA(data, order=(1, 0, 1))
result = model.fit()
# 输出模型系数
print('模型系数:')
print(result.summary().tables[1])
5. 结果可视化
将拟合结果可视化,可以直观地观察模型的拟合效果。
# 获取差分序列拟合值
fitted_values = result.fittedvalues
# 可视化拟合结果
plt.plot(np.arange(len(data)), data.values, label='差分后数据')
plt.plot(np.arange(len(data)), fitted_values.values, color='red', label='拟合结果')
plt.legend(prop=font_prop)
plt.xlabel('时间', fontproperties=font_prop)
plt.ylabel('数据', fontproperties=font_prop)
plt.title('ARIMA模型拟合结果', fontproperties=font_prop)
plt.show()
6. 未来数据预测
使用拟合好的模型对未来数据进行预测。
# 预测未来二十天的数据
forecast = result.get_forecast(steps=20)
forecast_mean = forecast.predicted_mean
forecast_conf_int = forecast.conf_int()
# 可视化预测结果
plt.plot(data.index, data.values, label='差分后数据')
plt.plot(forecast_mean.index, forecast_mean.values, color='red', label='预测结果')
plt.fill_between(forecast_conf_int.index, forecast_conf_int.iloc[:, 0], forecast_conf_int.iloc[:, 1], color='gray', alpha=0.3)
plt.legend(prop=font_prop)
plt.xlabel('时间', fontproperties=font_prop)
plt.ylabel('数据', fontproperties=font_prop)
plt.title('ARIMA模型预测结果', fontproperties=font_prop)
plt.show()
# 输出预测结果
print('预测结果:')
forecast_mean.index = pd.date_range(start=data.index[-1], periods=len(forecast_mean))
print(forecast_mean)
7. 总结
本文介绍了使用ARIMA模型进行时间序列预测的步骤,并提供了完整的Python代码。通过平稳性检验、模型拟合、结果可视化以及预测未来数据等步骤,可以有效地对时间序列数据进行分析和预测。
注意: 请根据实际情况修改代码中的文件路径和列名。
原文地址: https://www.cveoy.top/t/topic/bQB7 著作权归作者所有。请勿转载和采集!