📉 评估指标设计
October 30, 2025 · View on GitHub
接口规范
评估指标是评估模型性能的重要组成部分。在 BasicTS 中,评估指标是接受模型预测值、真实值及其他参数作为输入并返回标量值以评估模型性能的函数。
一个定义良好的评估指标函数应包含以下参数:
- prediction: 模型的预测值
- targets: 实际的真实值
- targets_mask: 可选参数,用于指定在哪些点上计算损失(一般用于掩码缺失值)。
prediction 和 target 是必需参数,而 targets_mask 是可选参数,但强烈建议采纳,以处理时间序列数据中常见的缺失值。
评估指标函数还可以接受其他额外参数,这些参数会从模型的返回值中提取并传递给指标函数。
BasicTS 内置评估指标
BasicTS 提供了多种常用的评估指标,例如 MAE、MSE、RMSE、MAPE 和 WAPE。您可以在 basicts.metrics 模块中找到这些指标的实现。
如何实现自定义评估指标
根据接口规范中的指南,您可以轻松实现自定义的评估指标。以下是一个示例:
class MyModel:
def __init__(self):
# 初始化模型
...
def forward(...):
# 前向计算
...
return {
'prediction': prediction,
'targets': target,
'other_key1': other_value1,
'other_key2': other_value2,
'other_key3': other_value3,
...
}
def my_metric_1(prediction, targets, targets_mask=None, other_key1=None, other_key2=None, ...):
# 计算指标
...
def my_metric_2(prediction, targets, targets_mask=None, other_key3=None, ...):
# 计算指标
...
遵循这些规范,您可以灵活地在 BasicTS 中自定义和扩展评估指标,以满足特定需求。
🧮 仪表盘
该节仅涉及细节内容,绝大部分情况下不会影响使用,可以跳过。
在BasicTS中,我们使用仪表盘(Meter类)在训练中维护指标值。BasicTS会默认使用平均仪表盘(AvgMeter类),逐步更新并维护对应指标的均值,这适用于绝大部分指标。
然而,也有一些指标不应该维护均值,例如RMSE,是先求平均再开平方,此时如果逐步累积最后再求平均则会产生错误(虽然一般不影响模型的训练结果)。此时,应该使用特殊的仪表盘,实现正确的增量计算。