首先,SMAPE (Symmetric Mean Absolute Percentage Error) 是一个用来度量预测值和实际值之间差异的衡量指标,它具有对称性,可以避免向上和向下预测偏差的影响。下面我会从以下几个方面详细讲解如何用Python计算SMAPE:
- SMAPE 的公式
- Python的代码实现
1. SMAPE的公式
SMAPE指标计算公式如下:
$$SMAPE = \frac{100\%}{n}\sum_{t=1}^{n}\frac{\left|F_t-A_t\right|}{\left|F_t\right|+\left|A_t\right|}\times 2$$
其中,$F_t$ 为模型预测值,$A_t$ 为实际值,$n$ 为总样本数。
2. Python的代码实现
Python实现SMAPE指标的代码如下:
def smape(pred, actual):
"""
计算SMAPE指标
pred: 预测值,格式为List或者numpy数组
actual: 真实值,格式为List或者numpy数组
"""
pred, actual = np.array(pred), np.array(actual)
numerator = np.abs(pred-actual)
denominator = np.abs(pred)+np.abs(actual)
smape_val = 2*np.mean(np.divide(numerator, denominator, out=np.zeros_like(numerator), where=denominator!=0))
return smape_val*100
其中,需要用到numpy库中的数组操作,具体实现逻辑为先将输入的预测值和真实值转化为numpy数组格式,然后采用numpy中的数组操作求得分子和分母,最后根据SMAPE的计算公式求得SMAPE指标的值。
下面给出两个计算SMAPE的例子:
示例1
假设预测值为[2, 3, 4, 5, 6], 真实值为[1, 2, 3, 4, 5],输入以下代码:
pred = [2, 3, 4, 5, 6]
actual = [1, 2, 3, 4, 5]
smape_val = smape(pred, actual)
print("SMAPE值为: {:.2f}%".format(smape_val))
输出:
SMAPE值为: 22.38%
示例2
假设预测值为[10, 20, 30, 40, 50], 真实值为[5, 15, 25, 35, 45],输入以下代码:
pred = [10, 20, 30, 40, 50]
actual = [5, 15, 25, 35, 45]
smape_val = smape(pred, actual)
print("SMAPE值为: {:.2f}%".format(smape_val))
输出:
SMAPE值为: 27.14%
以上两个示例说明了计算SMAPE指标的过程,可以看出SMAPE的值与预测值和实际值之间的偏差大小有关,值越大说明两者之间的差异越大。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用Python计算SMAPE - Python技术站