季节性自回归集成移动平均模型(SARIMA)python代码
时间: 2023-06-24 14:08:33 浏览: 200
SCINet时间序列预测附python代码.zip
以下是使用Python实现季节性自回归集成移动平均模型(SARIMA)的代码:
首先,导入必要的库:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.statespace.sarimax import SARIMAX
```
接着,读取时间序列数据:
```python
df = pd.read_csv('data.csv', parse_dates=['datetime'], index_col='datetime')
```
其中,data.csv是一个包含日期时间和时间序列数据的CSV文件,datetime列被解析为日期时间格式,并被设置为索引列。
然后,检查和处理数据:
```python
# 检查缺失值
print(df.isnull().sum())
# 填充缺失值
df = df.fillna(method='ffill')
# 检查重复值
print(df.duplicated().sum())
```
我们发现缺失值并用前向填充方法进行填充,同时也检查了是否有重复值。
接下来,根据季节性和趋势性进行差分:
```python
# 差分
diff = df.diff(periods=1)
diff = diff.dropna()
# 绘制差分后的图像
plt.plot(diff)
plt.show()
```
这里我们选择了一阶差分,并绘制了差分后的时间序列图。
然后,对差分后的时间序列数据进行模型拟合和预测:
```python
# 拟合 SARIMA 模型
model = SARIMAX(df, order=(1, 1, 1), seasonal_order=(0, 1, 1, 12))
result = model.fit()
# 预测未来 12 个月
forecast = result.predict(start=len(df), end=len(df)+11, dynamic=True)
# 绘制预测结果
plt.plot(df, label='Actual')
plt.plot(forecast, label='Forecast')
plt.legend()
plt.show()
```
这里我们使用了SARIMA模型,其中order和seasonal_order参数分别设置了ARIMA模型的阶数和季节性阶数。我们用拟合好的模型对未来12个月的数据进行预测,并将结果绘制在时间序列图上。
最后,输出模型评估指标:
```python
# 输出模型评估指标
print(result.summary())
```
这里我们使用result.summary()输出了模型的各项指标,如AIC、BIC、残差等。
阅读全文