0%

威尔莫特一致性指数 (WIA, Willmott’ s Index of Agreement)

WIA介绍

威尔莫特(1981)[1]提出了一个指数,是一种模型预测误差程度的标准化度量标准.

WIA 的取值在0到1之间。表示平均平方误差和潜在误差的比率。1表示估计值与实际值完全匹配,0表示估计值与实际值完全不匹配。

该指数可以检测观察到和模拟平均数和方差的加法和比例差异;然而,由于平方差分,d对极端值过于敏感。

WIA 可对单个模型的外部预测能力是否达到统计所需精度给出度量 , 一般认为 WIA 大于 0.6 时模型才有实际预测价值。

WIA 计算公式

$$
WIA = 1 - \frac{\sum_{i=1}^{n}(O_i - P_i)^2 }{\sum_{i=1}^{n}( \left | P_i - \bar{O} \right | + \left | O_i - \bar{O} \right | )^2} , 0\leq WIA \leq1
$$

其中,O 表示观测值,P 表示预测值,$\bar{O}$表示平均观测值。上述公式中的平均观测值计算方法为:
$$
\bar{O} =\sum_{i=1}^{n} \frac{O_i}{n}
$$

参考代码 - Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import math


def cul_WIA(oriList, preList):
if len(oriList) != len(preList):
raise Exception("len(ori_list) != len(pre_list) !")
temp1 = 0 # 分子
barO = 0 # 平均观测值
for i in range(len(oriList)):
temp1 += math.pow(oriList[i] - preList[i], 2)
barO += oriList[i]/len(oriList)
temp2 = 0 # 分母
for i in range(len(oriList)):
temp2 += math.pow(math.fabs(preList[i]-barO) +math.fabs(oriList[i]-barO),2)

return 1 - temp1 / temp2


if __name__ == '__main__':
ori_list = [1, 2, 3, 4, 5, 6, 7]
pre_list = [2, 3, 4, 5, 6, 7, 8]
WIA_error = cul_WIA(oriList=ori_list, preList=pre_list)
print(WIA_error)

参考文献
[1] Willmott, C.J., 1981. ON THE VALIDATION OF MODELS. Physical Geography 2, 184–194. https://doi.org/10.1080/02723646.1981.10642213

记录了科研实验中用到的各类误差函数

阅读全文 »

在时间序列预测的中,常需要比较算法的优劣。而 ARIMA 作为一种常用算法,需要与自己提出的算法进行比较。在科研论文的对比实验中,引入 ARIMA 的预测结果,尤为重要。

阅读全文 »