MAPE怎么计算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MAPE怎么计算相关的知识,希望对你有一定的参考价值。
MAPE怎么计算
此处使用常均值折扣模型, 这种模型应用广泛而且简单,它体现了动态现行模型的许多基本概念和分析特性。
常均值折扣模型
对每一时刻t常均值折模型记为DLM1,1,V,δ,折扣因子δ,O<δ<l定义如下:
观测方程:μt = μt − 1 + ωt,ωt~N [O,Wt]
状态方程:yt = μt + vt,vt~N [0,V]
初始信息:~N [m0,C0]
其中μ是t时刻序列的水平,Vt是观测误差项或噪声项,ωt是状态误差项。
定理:对于每一时刻t,假设μt − 1的后验 分布()~N [mt − 1,Ct − 1],则μt的先验分布()~N [mt − 1,Rt],其中Rt = Ct − 1 + Wt。
推论1:()~N [ft,Qt],其中ft = mt − 1,Qt = Rt + V。
推论2:μt的后验分布()~N [mt,Ct],其中mt = mt − 1 + Atet,Ct = ATvt,At = Rt / Qt,et = yt − ft
由于Rt=Ct-1+Wt=Ct-1/δ,故有W − t = Ct − 1(δ − 1)
其计算步骤为:
(1)Rt = C − t / δ; (2)Qt = Rt + V;
(3)At = Rt / Qt; (4)ft − 1 = mt − 1;
(5)et − yt − ft − 1; (6)Ct = AtV;
(7)mt − mt − 1 + Atet
扩展资料
发展历史
贝叶斯统计的历史可以上溯到 16 世纪。1713 年,James Bernoulli 意识到在可用于机会游戏的演绎逻辑和每日生活中的归纳逻辑之间的区别,他提出一个著名的问题:前者的机理如何能帮助处理后面的推断。托马斯.贝叶斯(ThomasBayes, 1702-1761)是长老会的牧师。
他对这个问题产生浓厚的兴趣,并且对这个问题进行认真的研究,期间,他写了一篇文章来回答Bernoulli 的问题,提出了后来以他的名字命名的公式:贝叶斯公式。但是,直到贝叶斯死后才由他的朋友Richard Price 在 1763 年发表了这篇文章,对Bernoulli 的问题提供了回答。
这篇文章标志着贝叶斯统计的产生。但贝叶斯统计的思想在开始时并没有得到重视。后来,Laplace 本人重新发现了贝叶斯公式,而且阐述得比贝叶斯更为清晰。由于贝叶斯统计对于概率的观点过于主观,与当时的主流统计观点相左,此外也很难应用当时严谨的数学理论解释。
参考资料来源:百度百科-贝叶斯预测
参考技术A Mape 绝对误差值计算方法差异值=发货量减去备货量的绝对值差异率=差异值/备货量准确率=1-差异率
备货占比=单个品种备货量/总备货量
部门准确率=各品种备货占比*各品种备货准确率的总和 参考技术B 上面给出的公式是错误的!
((X-Y)/X)应该是绝对值形式,如下:|(X-Y)/X| 参考技术C MAPE=(∑((X-Y)/X)*100%)/N,X为实测值,Y为模拟值,N为样本总数 参考技术D MAPE=sum(|y*-y|*100 / y ) /n,
其中n是样本量,y是实际值,y*是预测值
如何在 Python 中优化 MAPE 代码?
【中文标题】如何在 Python 中优化 MAPE 代码?【英文标题】:How to optimize MAPE code in Python? 【发布时间】:2017-07-04 04:58:14 【问题描述】:我需要一个 MAPE 函数,但是我无法在标准包中找到它……下面是我对这个函数的实现。
def mape(actual, predict):
tmp, n = 0.0, 0
for i in range(0, len(actual)):
if actual[i] <> 0:
tmp += math.fabs(actual[i]-predict[i])/actual[i]
n += 1
return (tmp/n)
我不喜欢它,它在速度方面不是最佳的。如何将代码重写为更 Pythonic 的方式并提高速度?
【问题讨论】:
【参考方案1】:这是masking
的一种矢量化方法-
def mape_vectorized(a, b):
mask = a <> 0
return (np.fabs(a[mask] - b[mask])/a[mask]).mean()
在division
计算之后使用masking
可能会更快-
def mape_vectorized_v2(a, b):
mask = a <> 0
return (np.fabs(a - b)/a)[mask].mean()
运行时测试-
In [217]: a = np.random.randint(-10,10,(10000))
...: b = np.random.randint(-10,10,(10000))
...:
In [218]: %timeit mape(a,b)
100 loops, best of 3: 11.7 ms per loop
In [219]: %timeit mape_vectorized(a,b)
1000 loops, best of 3: 273 µs per loop
In [220]: %timeit mape_vectorized_v2(a,b)
1000 loops, best of 3: 220 µs per loop
【讨论】:
<>
操作是什么?
@panc 和!=
一样,不是真正的Pythonic所以你可以忘记它
@NathanFurnal 暗示它是有效的 python 但我什至无法让它工作(只是出于好奇)
@SARose 那是python 2!它在任何 python 3+ 代码中都无效【参考方案2】:
使用masked_Arrays
来屏蔽除以零的另一种类似方法是:
import numpy.ma as ma
masked_actual = ma.masked_array(actual, mask=actual==0)
MAPE = (np.fabs(masked_actual - predict)/masked_actual).mean()
【讨论】:
以上是关于MAPE怎么计算的主要内容,如果未能解决你的问题,请参考以下文章
python使用numpy包编写自定义函数计算MAPE(平均绝对百分比误差)指标mean absolute percentage error (MAPE)MAPE指标解读MAPE指标使用的注意事项
MinMax Scaling 后的随机森林回归 MAPE 除以零误差