statsmodels.tsa.exponential_smoothing.ets.ETSModel

class statsmodels.tsa.exponential_smoothing.ets.ETSModel(endog, error='add', trend=None, damped_trend=False, seasonal=None, seasonal_periods=None, initialization_method='estimated', initial_level=None, initial_trend=None, initial_seasonal=None, bounds=None, dates=None, freq=None, missing='none')[source]

ETS 模型。

Parameters:
endogarray_like

观察到的时间序列过程 \(y\)

errorstr, optional

错误模型。“加”(默认)或“乘”。

trendstr or None, optional

趋势成分模型。“加”、“乘”或无(默认)。

damped_trendbool, optional

是否包含阻尼的趋势分量。默认是 False。

seasonalstr, optional

季节性模型。“加”、“乘”或无(默认)。

seasonal_periodsint, optional

季节性(Holt-Winters)模型中完整季节性周期的期数。例如,对于具有年度周期的季度数据为4,对于具有每周周期的每日数据为7。如果seasonal不为None,则此项为必填。

initialization_methodstr, optional

状态空间模型的初始化方法。以下之一:

  • ‘估计’(默认)

  • ‘启发式’

  • ‘已知’

如果使用‘known’初始化,则必须传递initial_level,以及如果适用的话,initial_trendinitial_seasonal。 ‘heuristic’使用基于数据的启发式方法来估计初始水平、趋势和季节状态。‘estimated’使用与初始猜测相同的启发式方法,但在拟合过程中估计初始状态。默认是‘estimated’。

initial_levelfloat, optional

初始水平组件。仅在初始化是“已知”时使用。

initial_trendfloat, optional

初始趋势成分。仅在初始化方式为‘已知’时使用。

initial_seasonalarray_like, optional

初始的季节性成分。一个长度为seasonal_periods的数组。仅在初始化方式为‘known’时使用。

boundsdict or None, optional

一个以参数名称为键,相应边界区间为值(列表/元组/数组)的字典。 可用的参数名称取决于模型和初始化方法:

  • “平滑水平”

  • “平滑趋势”

  • “平滑季节性”

  • “阻尼趋势”

  • “初始级别”

  • “初始趋势”

  • “initial_seasonal.0”, …, “initial_seasonal.

默认选项是 None,在这种情况下,将使用如 [1] 中所述的传统(非线性)边界。

Attributes:
endog_names

内生变量的名称。

exog_names

外生变量的名称。

initial_state_names
k_endog
k_params
nobs_effective
param_names

(list of str) 人类可读的参数名称列表(用于参数)

short_name
start_params

(数组) 最大似然估计的初始参数。

state_names

注释

ETS模型是一组时间序列模型。它们可以被视为简单指数平滑到包含趋势和季节性的时间序列的泛化。此外,它们还有一个基础的状态空间模型。

ETS模型由误差类型(E;加法或乘法)、趋势类型(T;加法或乘法,阻尼或非阻尼,或无)和季节性类型(S;加法或乘法或无)指定。以下是一个非常简短的总结,更详细的介绍可以在[1]中找到。

\(\circ_b\)表示趋势操作(加法或乘法),用\(\circ_d\)表示连接趋势和阻尼因子\(\phi\)的操作(如果趋势是加法则为乘法,如果趋势是乘法则为幂),用\(\circ_s\)表示季节性操作(加法或乘法)。此外,令\(\ominus\)为相应的逆操作(减法或除法)。

通过这个,可以将ETS模型表述为一个预测方程和3个平滑方程。前者用于预测观测值,后者用于更新内部状态。

\[\begin{split}\hat{y}_{t|t-1} &= (l_{t-1} \circ_b (b_{t-1}\circ_d \phi)) \circ_s s_{t-m}\\ l_{t} &= \alpha (y_{t} \ominus_s s_{t-m}) + (1 - \alpha) (l_{t-1} \circ_b (b_{t-1} \circ_d \phi))\\ b_{t} &= \beta/\alpha (l_{t} \ominus_b l_{t-1}) + (1 - \beta/\alpha) b_{t-1}\\ s_{t} &= \gamma (y_t \ominus_s (l_{t-1} \circ_b (b_{t-1}\circ_d\phi)) + (1 - \gamma) s_{t-m}\end{split}\]

这里的符号遵循[1]\(l_t\)表示时间\(t\)的水平,b_t表示趋势,s_t表示季节性成分。\(m\)是季节性周期的数量,\(\phi\)是趋势阻尼因子。参数\(\alpha, \beta, \gamma\)是平滑参数,分别称为smoothing_levelsmoothing_trendsmoothing_seasonal

请注意,上述的预测和平滑方程并没有区分不同的误差模型——对于加法误差和乘法误差,它们是相同的。但不同的误差模型会导致不同的似然模型,因此会导致不同的拟合结果。

错误模型指定了如何更新真实值 \(y_t\)。在加性错误模型中,

\[y_t = \hat{y}_{t|t-1} + e_t,\]

在乘法误差模型中,

\[y_t = \hat{y}_{t|t-1}\cdot (1 + e_t).\]

使用这些误差模型,可以为ETS模型制定状态空间方程:

\[\begin{split}y_t &= Y_t + \eta \cdot e_t\\ l_t &= L_t + \alpha \cdot (M_e \cdot L_t + \kappa_l) \cdot e_t\\ b_t &= B_t + \beta \cdot (M_e \cdot B_t + \kappa_b) \cdot e_t\\ s_t &= S_t + \gamma \cdot (M_e \cdot S_t+\kappa_s)\cdot e_t\\\end{split}\]

\[\begin{split}B_t &= b_{t-1} \circ_d \phi\\ L_t &= l_{t-1} \circ_b B_t\\ S_t &= s_{t-m}\\ Y_t &= L_t \circ_s S_t,\end{split}\]

\[\begin{split}\eta &= \begin{cases} Y_t\quad\text{if error is multiplicative}\\ 1\quad\text{else} \end{cases}\\ M_e &= \begin{cases} 1\quad\text{if error is multiplicative}\\ 0\quad\text{else} \end{cases}\\\end{split}\]

并且,当使用加性误差模型时,

\[\begin{split}\kappa_l &= \begin{cases} \frac{1}{S_t}\quad \text{if seasonality is multiplicative}\\ 1\quad\text{else} \end{cases}\\ \kappa_b &= \begin{cases} \frac{\kappa_l}{l_{t-1}}\quad \text{if trend is multiplicative}\\ \kappa_l\quad\text{else} \end{cases}\\ \kappa_s &= \begin{cases} \frac{1}{L_t}\quad\text{if seasonality is multiplicative}\\ 1\quad\text{else} \end{cases}\end{split}\]

当使用乘法误差模型时

\[\begin{split}\kappa_l &= \begin{cases} 0\quad \text{if seasonality is multiplicative}\\ S_t\quad\text{else} \end{cases}\\ \kappa_b &= \begin{cases} \frac{\kappa_l}{l_{t-1}}\quad \text{if trend is multiplicative}\\ \kappa_l + l_{t-1}\quad\text{else} \end{cases}\\ \kappa_s &= \begin{cases} 0\quad\text{if seasonality is multiplicative}\\ L_t\quad\text{else} \end{cases}\end{split}\]

当拟合一个ETS模型时,参数 \(\alpha, \beta\)、gamma、phi 和初始状态 l_{-1}, b_{-1}, s_{-1}, ldots, s_{-m} 被选择为对数似然的最大化值。

参考文献

[1] (1,2,3)

Hyndman, R.J., & Athanasopoulos, G. (2019) 预测:原理与实践,第三版,OTexts: 墨尔本,澳大利亚。OTexts.com/fpp3。访问于2020年4月19日。

方法

clone(endog[, exog])

fit([start_params, maxiter, full_output, ...])

通过最大化对数似然来拟合ETS模型。

fit_constrained(constraints[, start_params])

使用一些受等式约束的参数拟合模型。

fix_params(params)

将参数固定为特定值(上下文管理器)

from_formula(公式, 数据[, 子集, 删除列])

状态空间模型未实现

hessian(params[, approx_centered, ...])

似然函数的Hessian矩阵,在给定参数处求值

information(params)

模型的费舍尔信息矩阵。

initialize()

初始化(可能重新初始化)一个模型实例。

loglike(params, **kwargs)

模型的对数似然值。

predict(params[, exog])

模型拟合后,predict 返回拟合值。

prepare_data(数据)

准备用于状态空间表示的数据

score(params[, approx_centered, ...])

模型的得分向量。

set_bounds(bounds)

设置参数估计的边界。

set_initialization_method(initialization_method)

为状态空间模型设置新的初始化方法。

smooth(params[, return_raw])

使用给定参数的指数平滑

update(*args, **kwargs)

use_internal_loglike()

属性

endog_names

内生变量的名称。

exog_names

外生变量的名称。

initial_state_names

k_endog

k_params

nobs_effective

param_names

(list of str) 人类可读的参数名称列表(适用于模型中实际包含的参数)。

short_name

start_params

(数组) 最大似然估计的初始参数。

state_names


Last update: Oct 16, 2024