AutoGluon时间序列预测评估指标详解
引言
在时间序列预测任务中,选择合适的评估指标对于模型性能的衡量至关重要。AutoGluon作为一个强大的自动化机器学习框架,提供了丰富的时间序列预测评估指标。本文将全面介绍AutoGluon中的各种评估指标,帮助读者理解如何根据具体需求选择合适的指标,并指导如何自定义评估指标。
评估指标概述
AutoGluon中的评估指标分为两大类:
- 点预测指标:用于评估单值预测的准确性
- 概率预测指标:用于评估概率分布预测的质量
所有指标在AutoGluon中都以数值越大越好的形式呈现,这意味着某些指标会乘以-1进行转换。
如何选择评估指标
选择评估指标时,需要考虑三个关键问题:
1. 需要点预测还是概率预测?
- 如果需要概率预测,应选择基于分位数损失的
WQL
或SQL
指标 - 如果需要点预测,则选择其他指标
2. 是否更关注大值时间序列的预测精度?
- 如果是,选择尺度依赖指标:
WQL
、MAE
、RMSE
、WAPE
- 如果否,选择尺度无关指标:
SQL
、MASE
、RMSSE
,或百分比指标MAPE
、SMAPE
3. (仅点预测)需要预测中位数还是均值?
- 预测中位数:使用
MAE
、MASE
或WAPE
- 预测均值:使用
MSE
、RMSE
或RMSSE
点预测指标详解
平均绝对误差(MAE)
衡量预测值与实际值之间的平均绝对差异,对异常值不敏感。
平均绝对百分比误差(MAPE)
以百分比形式表示预测误差,便于跨尺度比较,但对零值敏感。
平均绝对标度误差(MASE)
将误差标准化为基准预测方法的误差,适合比较不同时间序列的预测性能。
均方误差(MSE)
平方预测误差的平均值,对大误差给予更高惩罚。
均方根误差(RMSE)
MSE的平方根,与原始数据单位一致。
均方根对数误差(RMSLE)
先对数值取对数再计算RMSE,减小大值的影响。
均方根标度误差(RMSSE)
RMSE的标度化版本,适合跨序列比较。
对称平均绝对百分比误差(SMAPE)
MAPE的对称版本,解决了原始MAPE的一些问题。
加权绝对百分比误差(WAPE)
以总实际值为分母的百分比误差,比MAPE更稳定。
概率预测指标详解
标度分位数损失(SQL)
评估分位数预测准确性的标度无关指标。
加权分位数损失(WQL)
考虑时间序列值的加权分位数损失,对大值序列更敏感。
自定义评估指标
当内置指标不满足需求时,可以创建自定义指标:
- 继承
TimeSeriesScorer
基类 - 实现
compute_metric
方法 - 设置相关属性(
greater_is_better_internal
等)
自定义指标示例
均方误差实现
class MeanSquaredError(TimeSeriesScorer):
greater_is_better_internal = False
optimum = 0.0
def compute_metric(self, data_future, predictions, target, **kwargs):
return sklearn.metrics.mean_squared_error(
y_true=data_future[target],
y_pred=predictions["mean"]
)
分位数损失实现
class MeanQuantileLoss(TimeSeriesScorer):
needs_quantile = True
greater_is_better_internal = False
optimum = 0.0
def compute_metric(self, data_future, predictions, target, **kwargs):
quantile_columns = [col for col in predictions if col != "mean"]
total_loss = 0.0
for q in quantile_columns:
total_loss += sklearn.metrics.mean_pinball_loss(
y_true=data_future[target],
y_pred=predictions[q],
alpha=float(q)
return total_loss / len(quantile_columns)
模型训练损失定制
对于深度学习模型,可以通过修改distr_output
参数来改变训练损失:
from gluonts.torch.distributions import NormalOutput, QuantileOutput
predictor.fit(
train_data,
hyperparameters={
"PatchTST": [
{"distr_output": NormalOutput()}, # 使用负对数似然损失
{"distr_output": QuantileOutput(quantiles=[0.1, 0.5, 0.9])} # 使用分位数损失
]
}
)
总结
AutoGluon提供了丰富的时间序列预测评估指标,理解这些指标的特点和适用场景对于构建高质量的预测模型至关重要。通过本文的介绍,读者应该能够:
- 根据业务需求选择合适的评估指标
- 理解不同指标的计算方式和特点
- 在必要时创建自定义评估指标
- 针对特定模型定制训练损失函数
正确选择和使用评估指标是构建有效时间序列预测系统的关键一步,希望本文能为读者在使用AutoGluon进行时间序列预测时提供有价值的指导。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考