import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
# 生成一个示例时间序列
# 随机数种子
np.random.seed(42)
time_index = pd.date_range(start='2022-01-01', periods=100, freq='D')
random_values = np.random.randn(100)
time_series = pd.Series(random_values, index=time_index)
# 拟合MA模型
order = (0, 0, 30) # 这里是一个MA(30)模型,可以根据需要调整阶数
ma_model = ARIMA(time_series, order=order)
result_ma = ma_model.fit()
# 进行预测
forecast_steps = 10
forecast = result_ma.get_forecast(steps=forecast_steps)
forecast_mean = forecast.predicted_mean
# 将原始时间序列和预测序列连接起来
combined_series = pd.concat([time_series, forecast_mean])
# 可视化
plt.plot(combined_series[:-forecast_steps], label='original')
plt.plot(combined_series[-forecast_steps:], label='MA forcast', color='red')
plt.legend()
plt.show()
这段代码用于拟合一个移动平均(MA)模型到给定的时间序列 time_series
中。让我逐步解释:
order = (0, 0, 30) # 这里是一个MA(30)模型,可以根据需要调整阶数
这一行定义了要拟合的MA模型的阶数。MA模型通常由三个参数表示 (p, d, q)
,其中 p
是自回归(AR)部分的阶数,d
是差分的次数,q
是移动平均(MA)部分的阶数。在这里,(0, 0, 30)
表示我们正在拟合一个纯粹的MA模型,阶数为30。也就是说,我们考虑了过去30个时间点的滞后值来拟合模型。
ma_model = ARIMA(time_series, order=order)
这一行创建了一个ARIMA(Autoregressive Integrated Moving Average)模型对象,使用了指定的阶数。虽然我们使用了ARIMA类,但由于 order
中的 p
和 d
都是零,因此实际上我们只是在拟合一个MA模型。
result_ma = ma_model.fit()
这一行用于拟合模型,将模型适配到给定的时间序列 time_series
上。拟合后,模型的相关参数和其他统计信息存储在 result_ma
中。
总体来说,这段代码的目的是通过使用ARIMA模型的MA部分,拟合一个移动平均模型到给定的时间序列上,并存储拟合结果以供后续分析和预测使用。
这部分代码用于使用已经拟合好的 MA 模型进行未来值的预测。让我逐步解释:
forecast_steps = 10
这一行定义了你想要预测的未来步数。在这个例子中,你预测未来的10个时间点。
forecast = result_ma.get_forecast(steps=forecast_steps)
这一行使用已经拟合好的 result_ma
模型,调用 get_forecast
方法,以获取未来的预测。参数 steps
指定了你想要预测的步数,即预测未来多少个时间点。
forecast_mean = forecast.predicted_mean
这一行从预测结果中提取了平均值。在时间序列预测中,通常会得到一些额外的信息,但这里我们只提取了预测的平均值。
因此,最终的 forecast_mean
是根据 MA 模型对未来10个时间点的平均值预测。这些值可以用于可视化,评估模型的性能,或者进行进一步的分析。