最重要的训练信号是预测误差,它是观测值 yτy_{\tau} 与预测值 y^τ\hat{y}_{\tau} 在时间 yτy_{\tau} 处的差值。

eτ=yτy^ττ{t+1,,t+H} e_{\tau} = y_{\tau}-\hat{y}_{\tau} \qquad \qquad \tau \in \{t+1,\dots,t+H \}

训练损失汇总了不同评估指标中的预测误差。

from utilsforecast.data import generate_series
models = ['model0', 'model1']
series = generate_series(10, n_models=2, level=[80])
series_pl = generate_series(10, n_models=2, level=[80], engine='polars')

1. 依赖尺度的误差

平均绝对误差 (MAE)

MAE(yτ,y^τ)=1Hτ=t+1t+Hyτy^τ \mathrm{MAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} |y_{\tau} - \hat{y}_{\tau}|


来源

mae

 mae (df:~DFType, models:List[str], id_col:str='unique_id',
      target_col:str='y')

*平均绝对误差 (MAE)

MAE 通过计算给定时间点预测值与真实值之间的偏差,然后将这些偏差在整个序列长度上取平均值,来衡量预测方法的相对预测精度。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
def pd_vs_pl(pd_df, pl_df, models):
    np.testing.assert_allclose(
        pd_df[models].to_numpy(),
        pl_df.sort('unique_id').select(models).to_numpy(),
    )
pd_vs_pl(
    mae(series, models),
    mae(series_pl, models),
    models,
)

均方误差

MSE(yτ,y^τ)=1Hτ=t+1t+H(yτy^τ)2 \mathrm{MSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} (y_{\tau} - \hat{y}_{\tau})^{2}


来源

mse

 mse (df:~DFType, models:List[str], id_col:str='unique_id',
      target_col:str='y')

*均方误差 (MSE)

MSE 通过计算给定时间点预测值与真实值之间的平方偏差,然后将这些偏差在整个序列长度上取平均值,来衡量预测方法的相对预测精度。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    mse(series, models),
    mse(series_pl, models),
    models,
)

均方根误差

RMSE(yτ,y^τ)=1Hτ=t+1t+H(yτy^τ)2 \mathrm{RMSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}) = \sqrt{\frac{1}{H} \sum^{t+H}_{\tau=t+1} (y_{\tau} - \hat{y}_{\tau})^{2}}


来源

rmse

 rmse (df:~DFType, models:List[str], id_col:str='unique_id',
       target_col:str='y')

*均方根误差 (RMSE)

RMSE 通过计算给定时间点预测值与观测值之间的平方偏差,然后将这些偏差在整个序列长度上取平均值,来衡量预测方法的相对预测精度。最后,RMSE 将与原始时间序列处于同一尺度,因此只有当其他序列共享一个共同尺度时,才能进行比较。RMSE 与 L2 范数有直接关联。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    rmse(series, models),
    rmse(series_pl, models),
    models,
)

来源

bias

 bias (df:~DFType, models:List[str], id_col:str='unique_id',
       target_col:str='y')

*预测估计器偏差。

定义为 预测值 - 实际值*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    bias(series, models),
    bias(series_pl, models),
    models,
)

2. 百分比误差

平均绝对百分比误差

MAPE(yτ,y^τ)=1Hτ=t+1t+Hyτy^τyτ \mathrm{MAPE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{|y_{\tau}-\hat{y}_{\tau}|}{|y_{\tau}|}


来源

mape

 mape (df:~DFType, models:List[str], id_col:str='unique_id',
       target_col:str='y')

*平均绝对百分比误差 (MAPE)

MAPE 通过计算给定时间点预测值与观测值之间的百分比偏差,然后将这些偏差在整个序列长度上取平均值,来衡量预测方法的相对预测精度。观测值越接近零,MAPE 损失函数对相应误差的惩罚越大。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    mape(series, models),
    mape(series_pl, models),
    models,
)

对称平均绝对百分比误差

SMAPE2(yτ,y^τ)=1Hτ=t+1t+Hyτy^τyτ+y^τ \mathrm{SMAPE}_{2}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{|y_{\tau}-\hat{y}_{\tau}|}{|y_{\tau}|+|\hat{y}_{\tau}|}
来源

smape

 smape (df:~DFType, models:List[str], id_col:str='unique_id',
        target_col:str='y')

*对称平均绝对百分比误差 (SMAPE)

SMAPE 通过计算给定时间点预测值与观测值之间的相对偏差(按预测值和观测值绝对值之和进行缩放),然后将这些偏差在整个序列长度上取平均值,来衡量预测方法的相对预测精度。这使得 SMAPE 的范围在 0% 到 100% 之间,这比当目标值为零时可能不确定的普通 MAPE 更可取。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    smape(series, models),
    smape(series_pl, models),
    models,
)

3. 独立于尺度的误差

平均绝对尺度误差

MASE(yτ,y^τ,y^τseason)=1Hτ=t+1t+Hyτy^τMAE(yτ,y^τseason) \mathrm{MASE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{|y_{\tau}-\hat{y}_{\tau}|}{\mathrm{MAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau})}


来源

mase

 mase (df:~DFType, models:List[str], seasonality:int, train_df:~DFType,
       id_col:str='unique_id', target_col:str='y')

*平均绝对尺度误差 (MASE)

MASE 通过将预测值与观测值之间的平均绝对误差与季节性朴素模型的平均绝对误差进行比较,来衡量预测方法的相对预测精度。MASE 部分构成了 M4 竞赛中使用的总体加权平均值 (OWA)。*

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
seasonalityint时间序列的主要频率;
每小时 24,每日 7,每周 52,每月 12,每季度 4,每年 1。
train_dfDFType训练数据框,包含 id 和实际值。必须按时间排序。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    mase(series, models, 7, series),
    mase(series_pl, models, 7, series_pl),
    models,
)

相对平均绝对误差

RMAE(yτ,y^τ,y^τbase)=1Hτ=t+1t+Hyτy^τMAE(yτ,y^τbase) \mathrm{RMAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}, \mathbf{\hat{y}}^{base}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{|y_{\tau}-\hat{y}_{\tau}|}{\mathrm{MAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{base}_{\tau})}


来源

rmae

 rmae (df:~DFType, models:List[str], baseline:str, id_col:str='unique_id',
       target_col:str='y')

*相对平均绝对误差 (RMAE)

计算两组预测值(来自两种不同的预测方法)之间的 RMAE。小于 1 的值表示分子中的预测比分母中的预测更好。*

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
modelsList标识模型预测值的列。
baselinestr标识基准模型预测值的列。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    rmae(series, models, models[0]),
    rmae(series_pl, models, models[0]),
    models,
)

均方尺度误差

MSSE(yτ,y^τ,y^τseason)=1Hτ=t+1t+H(yτy^τ)2MSE(yτ,y^τseason) \mathrm{MSSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{(y_{\tau}-\hat{y}_{\tau})^2}{\mathrm{MSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau})}
来源

msse

 msse (df:~DFType, models:List[str], seasonality:int, train_df:~DFType,
       id_col:str='unique_id', target_col:str='y')

*均方缩放误差 (MSSE)

MSSE 通过将预测值和观测值的均方误差与季节性朴素模型的均方误差进行比较,来衡量预测方法的相对预测准确度。

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
seasonalityint时间序列的主要频率;
每小时 24,每日 7,每周 52,每月 12,每季度 4,每年 1。
train_dfDFType训练数据框,包含 id 和实际值。必须按时间排序。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    msse(series, models, 7, series),
    msse(series_pl, models, 7, series_pl),
    models,
)

均方根缩放误差

RMSSE(yτ,y^τ,y^τseason)=1Hτ=t+1t+H(yτy^τ)2MSE(yτ,y^τseason) \mathrm{RMSSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau}) = \sqrt{\frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{(y_{\tau}-\hat{y}_{\tau})^2}{\mathrm{MSE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau})}}
来源

rmsse

 rmsse (df:~DFType, models:List[str], seasonality:int, train_df:~DFType,
        id_col:str='unique_id', target_col:str='y')

*均方根缩放误差 (RMSSE)

MSSE 通过将预测值和观测值的均方误差与季节性朴素模型的均方误差进行比较,来衡量预测方法的相对预测准确度。

类型默认值详情
dfDFType输入数据框,包含 id、实际值和预测值。
modelsList标识模型预测值的列。
seasonalityint时间序列的主要频率;
每小时 24,每日 7,每周 52,每月 12,每季度 4,每年 1。
train_dfDFType训练数据框,包含 id 和实际值。必须按时间排序。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    rmsse(series, models, 7, series),
    rmsse(series_pl, models, 7, series_pl),
    models,
)

4. 概率误差

分位数损失

QL(yτ,y^τ(q))=1Hτ=t+1t+H((1q)(y^τ(q)yτ)++q(yτy^τ(q))+) \mathrm{QL}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{(q)}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \Big( (1-q)\,( \hat{y}^{(q)}_{\tau} - y_{\tau} )_{+} + q\,( y_{\tau} - \hat{y}^{(q)}_{\tau} )_{+} \Big)


来源

quantile_loss

 quantile_loss (df:~DFType, models:Dict[str,str], q:float=0.5,
                id_col:str='unique_id', target_col:str='y')

*分位数损失 (QL)

QL 通过非对称地加权绝对偏差来衡量分位数预测的偏差,这种加权方式使得损失更关注低估或高估的情况。
q 的常见值是 0.5,用于衡量与中位数的偏差。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到指定分位数的模型预测的映射。
q浮点数0.5用于比较预测值的分位数。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。

缩放分位数损失

SQL(yτ,y^τ(q))=1Hτ=t+1t+H(1q)(y^τ(q)yτ)++q(yτy^τ(q))+MAE(yτ,y^τseason) \mathrm{SQL}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{(q)}_{\tau}) = \frac{1}{H} \sum^{t+H}_{\tau=t+1} \frac{(1-q)\,( \hat{y}^{(q)}_{\tau} - y_{\tau} )_{+} + q\,( y_{\tau} - \hat{y}^{(q)}_{\tau} )_{+}}{\mathrm{MAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau})}
来源

scaled_quantile_loss

 scaled_quantile_loss (df:~DFType, models:Dict[str,str], seasonality:int,
                       train_df:~DFType, q:float=0.5,
                       id_col:str='unique_id', target_col:str='y')

*缩放分位数损失 (SQL)

SQL 衡量分位数预测的偏差,并按季节性朴素模型的平均绝对误差进行缩放。通过非对称地加权绝对偏差,损失更关注低估或高估的情况。q 的常见值是 0.5,用于衡量与中位数的偏差。这是 M5 不确定性竞赛中使用的官方指标,其中季节性周期设为 1。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到指定分位数的模型预测的映射。
seasonalityint时间序列的主要频率;
每小时 24,每日 7,每周 52,每月 12,每季度 4,每年 1。
train_dfDFType训练数据框,包含 id 和实际值。必须按时间排序。
q浮点数0.5用于比较预测值的分位数。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。

多分位数损失

MQL(yτ,[y^τ(q1),...,y^τ(qn)])=1nqiQL(yτ,y^τ(qi)) \mathrm{MQL}(\mathbf{y}_{\tau}, [\mathbf{\hat{y}}^{(q_{1})}_{\tau}, ... ,\hat{y}^{(q_{n})}_{\tau}]) = \frac{1}{n} \sum_{q_{i}} \mathrm{QL}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{(q_{i})}_{\tau})


来源

mqloss

 mqloss (df:~DFType, models:Dict[str,List[str]], quantiles:numpy.ndarray,
         id_col:str='unique_id', target_col:str='y')

*多分位数损失 (MQL)

MQL 基于预测分位数和观测值之间的绝对差,计算给定一组分位数的平均多分位数损失。

MQL 的极限行为可以通过连续分级概率评分 (CRPS) 来衡量完整预测分布的准确性。这可以通过数值积分技术实现,该技术对分位数进行离散化,并使用左黎曼近似处理 CRPS 积分,对均匀间隔的分位数进行平均。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到每个分位数的模型预测的映射。
分位数ndarray用于进行比较的分位数。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    mqloss(series, mq_models, quantiles=quantiles),
    mqloss(series_pl, mq_models, quantiles=quantiles),
    models,
)

缩放多分位数损失

MQL(yτ,[y^τ(q1),...,y^τ(qn)])=1nqiQL(yτ,y^τ(qi))MAE(yτ,y^τseason) \mathrm{MQL}(\mathbf{y}_{\tau}, [\mathbf{\hat{y}}^{(q_{1})}_{\tau}, ... ,\hat{y}^{(q_{n})}_{\tau}]) = \frac{1}{n} \sum_{q_{i}} \frac{\mathrm{QL}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{(q_{i})}_{\tau})}{\mathrm{MAE}(\mathbf{y}_{\tau}, \mathbf{\hat{y}}^{season}_{\tau})}
来源

scaled_mqloss

 scaled_mqloss (df:~DFType, models:Dict[str,List[str]],
                quantiles:numpy.ndarray, seasonality:int,
                train_df:~DFType, id_col:str='unique_id',
                target_col:str='y')

*缩放多分位数损失 (SMQL)

SMQL 基于预测分位数和观测值之间的绝对差,并按季节性朴素模型的平均绝对误差进行缩放,计算给定一组分位数的平均多分位数损失。MQL 的极限行为可以通过连续分级概率评分 (CRPS) 来衡量完整预测分布的准确性。这可以通过数值积分技术实现,该技术对分位数进行离散化,并使用左黎曼近似处理 CRPS 积分,对均匀间隔的分位数进行平均。这是 M5 不确定性竞赛中使用的官方指标,其中季节性周期设为 1。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到每个分位数的模型预测的映射。
分位数ndarray用于进行比较的分位数。
seasonalityint时间序列的主要频率;
每小时 24,每日 7,每周 52,每月 12,每季度 4,每年 1。
train_dfDFType训练数据框,包含 id 和实际值。必须按时间排序。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    scaled_mqloss(series, mq_models, quantiles=quantiles, seasonality=1, train_df=series),
    scaled_mqloss(series_pl, mq_models, quantiles=quantiles, seasonality=1, train_df=series_pl),
    models,
)

覆盖率


来源

coverage

 coverage (df:~DFType, models:List[str], level:int,
           id_col:str='unique_id', target_col:str='y')

y 在 y_hat_lo 和 y_hat_hi 之间的覆盖率。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
modelsList标识模型预测值的列。
水平int用于区间置信度的水平。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    coverage(series, models, 80),
    coverage(series_pl, models, 80),
    models,
)

校准


来源

calibration

 calibration (df:~DFType, models:Dict[str,str], id_col:str='unique_id',
              target_col:str='y')

y 低于模型预测值的比例。

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到模型预测的映射。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    calibration(series, q_models[0.1]),
    calibration(series_pl, q_models[0.1]),
    models,
)

CRPS

sCRPS(F^τ,yτ)=2Ni01QL(F^i,τ,yi,τ)qiyi,τdq \mathrm{sCRPS}(\hat{F}_{\tau}, \mathbf{y}_{\tau}) = \frac{2}{N} \sum_{i} \int^{1}_{0} \frac{\mathrm{QL}(\hat{F}_{i,\tau}, y_{i,\tau})_{q}}{\sum_{i} | y_{i,\tau} |} dq

其中 F^τ\hat{F}_{\tau} 是估计的多元分布,而 yi,τy_{i,\tau} 是其实现值。


来源

scaled_crps

 scaled_crps (df:~DFType, models:Dict[str,List[str]],
              quantiles:numpy.ndarray, id_col:str='unique_id',
              target_col:str='y')

*缩放连续排序概率评分*

计算 CRPS 的缩放变体,由 Rangapuram (2021) 提出,用于衡量预测分位数 y_hat 相对于观测值 y 的准确性。此指标平均分位数损失所定义的百分比加权绝对偏差。*

类型默认值详情
dfDFType输入数据框,包含 id、时间、实际值和预测值。
models映射从模型名称到每个分位数的模型预测的映射。
分位数ndarray用于进行比较的分位数。
id_colstrunique_id标识每个序列的列。
target_colstry包含目标值的列。
返回值DFType数据框,每行对应一个 id,每列对应一个模型。
pd_vs_pl(
    scaled_crps(series, mq_models, quantiles),
    scaled_crps(series_pl, mq_models, quantiles),
    models,
)