Diebold |
您所在的位置:网站首页 › M大还是dm大 › Diebold |
Diebold-Mariano检验
该博客动机DM检验背景DM检验理论开源代码
该博客动机
最近博主有一篇论文一审结果回来了,审稿人要求作者用Diebold-Mariano检验检测方法的有效性,但在网上搜了半天没找到对Diebold-Mariano检验(以下简称DM检验)的能懂的解释,最后还是看英文原文看懂的,因此博主在这里介绍DM检验,并在最后附上博主在github上开源的DM代码链接。 DM检验背景假设我们有两个模型(模型A和模型B)做一个时间跨度为T(这里假设T=3)的预测任务,根据预测结果得到在该时间范围内的预测结果,然后根据真实值计算预测误差,假设二者误差分别为: E a = [ 3.1 , 4.6 , 3.4 ] E_{a}=[3.1,4.6,3.4] Ea=[3.1,4.6,3.4] (模型A的误差) E b = [ 2.9 , 4.8 , 3.6 ] E_{b}=[2.9,4.8,3.6] Eb=[2.9,4.8,3.6] (模型B的误差) 可以看到二者误差相差不大,其中模型A的平均误差为3.70,模型B的平均误差为3.77,那么我们就可以肯定模型A的效果一定比模型B好吗,其实不一定,我们用的测试数据毕竟只是所有可能存在数据中采样出的一小部分,这可能是由于数据采样不够好使得A侥幸表现比B好。 那我们如何确认是不是侥幸,或者有没有可能算出模型A和模型B表现有显著差异(即模型A极大概率比模型B效果好)的概率?DM检验从统计学角度提供了计算方法。 DM检验理论同样假设模型A和B在时间长度为T的跨度上做预测,假设模型A 和模型B的误差序列为: E a = [ a 1 , a 2 , . . . a T ] E_{a}=[a^{1}, a^{2},...a^{T}] Ea=[a1,a2,...aT] E b = [ b 1 , b 2 , . . . b T ] E_{b}=[b^{1}, b^{2},...b^{T}] Eb=[b1,b2,...bT] 那么我们可以求得二者差值序列为 D = [ d 1 , d 2 , . . . , d T ] D=[d^{1}, d^{2},...,d^{T}] D=[d1,d2,...,dT],其中: d i = a i − b i d^{i}=a^{i}-b^{i} di=ai−bi 然后我们可以求得序列D的均值和标准差,其公式为: d m e a n = ∑ i = 1 T d i T d_{mean}=\frac{\sum\limits^{T}_{i=1}d^{i}}{T} dmean=Ti=1∑Tdi d s t d = ∑ i = 1 T ( d i − d m e a n ) 2 T − 1 d_{std}=\sqrt{\frac{\sum\limits_{i=1}^{T}(d^{i}-d_{mean})^{2}}{T-1}} dstd=T−1i=1∑T(di−dmean)2 然后可计算出DM统计量为: D M = d m e a n d s t d DM=\frac{d_{mean}}{d_{std}} DM=dstddmean 而DM检验理论认为 D M DM DM的分布满足标准正态分布。因此,通过在标准正态分布表中查询 D M DM DM对应的置信度就可以知道模型A和模型B有显著表现差异的置信度。 开源代码博主用python编程实现了DM检验代码,并已在github上开源,源代码地址为: https://github.com/Lizhuoling/Diebold-Mariano-test |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |