statsmodels.tsa.forecasting.stl.STLForecast¶
-
class statsmodels.tsa.forecasting.stl.STLForecast(endog, model, *, model_kwargs=
None, period=None, seasonal=7, trend=None, low_pass=None, seasonal_deg=1, trend_deg=1, low_pass_deg=1, robust=False, seasonal_jump=1, trend_jump=1, low_pass_jump=1)[source]¶ 基于模型的预测使用STL去除季节性
预测是通过首先减去使用STL估计的季节性,然后使用时间序列模型(例如ARIMA)对去季节化的数据进行预测来生成的。
- Parameters:¶
- endogarray_like
要分解的数据。必须可以压缩到1维。
- model
Model 用于在去除季节性后预测内生变量的模型
- model_kwargs
dict[str,Any] 使用通过减去季节性产生的残差来初始化模型所需的任何额外参数。
- period{
int,None},optional 序列的周期性。如果为None且endog是pandas Series或DataFrame,尝试从endog中确定。如果endog是ndarray,则必须提供period。
- seasonal
int,optional 季节性平滑器的长度。必须是奇数整数,通常应大于等于7(默认)。
- trend{
int,None},optional 趋势平滑器的长度。必须是奇数整数。如果未提供,则使用大于 1.5 * 周期 / (1 - 1.5 / 季节性) 的最小奇数整数,遵循原始实现中的建议。
- low_pass{
int,None},optional 低通滤波器的长度。必须是大于等于3的奇数整数。如果未提供,则使用大于周期的最小奇数整数。
- seasonal_deg
int,optional 季节性LOESS的程度。0(常数)或1(常数和趋势)。
- trend_deg
int,optional 趋势LOESS的程度。0(常数)或1(常数和趋势)。
- low_pass_deg
int,optional 低通LOESS的阶数。0(常数)或1(常数和趋势)。
- robustbool,
optional 指示是否使用对某些类型的异常值具有鲁棒性的加权版本的标志。
- seasonal_jump
int,optional 正整数,确定线性插值步长。如果大于1,则每隔seasonal_jump个点使用LOESS,并在拟合点之间进行线性插值。较高的值可以减少估计时间。
- trend_jump
int,optional 正整数,确定线性插值步长。如果大于1,则每隔trend_jump个点使用LOESS,并且两点之间的值通过线性插值获得。较高的值可以减少估计时间。
- low_pass_jump
int,optional 确定线性插值步长的正整数。如果大于1,则每隔low_pass_jump点使用LOESS,并且两点之间的值通过线性插值计算。较高的值可以减少估计时间。
另请参阅
statsmodels.tsa.arima.model.ARIMAARIMA 建模。
statsmodels.tsa.ar_model.AutoReg支持复杂确定性的自回归建模。
statsmodels.tsa.exponential_smoothing.ets.ETSModel具有趋势的加法和乘法指数平滑。
statsmodels.tsa.statespace.exponential_smoothing.ExponentialSmoothing带有趋势的加性指数平滑。
注释
如果 \(\hat{S}_t\) 是季节性成分,那么去季节化序列的构建方式为
\[Y_t - \hat{S}_t\]趋势成分未被移除,因此时间序列模型应能够充分拟合和预测趋势(如果存在)。季节成分的样本外预测生成如下
\[\hat{S}_{T + h} = \hat{S}_{T - k}\]其中 \(k = m - h + m \lfloor (h-1)/m \rfloor\) 跟踪了周期长度为 m 的完整周期 1, 2, …, m 中的周期偏移量。
这个类主要是围绕
STL和一个用户指定的模型的一个便捷封装。假设模型遵循标准的 statsmodels 模式:fit用于估计参数并返回一个结果实例,results。results必须暴露一个方法forecast(steps, **kwargs)用于生成样本外预测。results也可能暴露一个方法get_prediction,该方法生成样本内和样本外的预测。
请参阅季节性分解笔记本以获取概述。
示例
>>> import numpy as np >>> import pandas as pd >>> from statsmodels.tsa.api import STLForecast >>> from statsmodels.tsa.arima.model import ARIMA >>> from statsmodels.datasets import macrodata >>> ds = macrodata.load_pandas() >>> data = np.log(ds.data.m1) >>> base_date = f"{int(ds.data.year[0])}-{3*int(ds.data.quarter[0])+1}-1" >>> data.index = pd.date_range(base_date, periods=data.shape[0], freq="QS")从ARIMA生成预测
>>> stlf = STLForecast(data, ARIMA, model_kwargs={"order": (2, 1, 0)}) >>> res = stlf.fit() >>> forecasts = res.forecast(12)生成带有趋势的指数平滑模型的预测
>>> from statsmodels.tsa.statespace import exponential_smoothing >>> ES = exponential_smoothing.ExponentialSmoothing >>> config = {"trend": True} >>> stlf = STLForecast(data, ES, model_kwargs=config) >>> res = stlf.fit() >>> forecasts = res.forecast(12)方法
fit(*[, inner_iter, outer_iter, fit_kwargs])估计STL和预测模型参数。