Diebold-Mariano检验

该博客动机

    最近博主有一篇论文一审结果回来了,审稿人要求作者用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=aibi
    然后我们可以求得序列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=1Tdi
     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=T1i=1T(didmean)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

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值