如何用Python计算SMAPE

  • Post category:Python

SMAPE是对称平均绝对误差百分比(Symmetric Mean Absolute Percentage Error)的缩写,它是衡量实际数据和预测数据差异性的指标。下面是如何用Python计算SMAPE的完整攻略:

1. 确定计算的实际数据和预测数据

在计算SMAPE之前,需要先确定需要计算的实际数据和预测数据。这两个数据可以是两个列表、两个数组、两个数据框等,其中实际数据和预测数据的长度必须一致。

假设我们有如下两个数据:

actual = [10, 20, 30, 40, 50]
pred = [12, 19, 28, 41, 53]

2. 计算SMAPE

计算SMAPE需要先计算每个数据点的绝对误差百分比。绝对误差百分比的公式如下:

APEi = abs(actual_i - pred_i) / ((actual_i + pred_i) / 2)

其中,i为第i个数据点。然后,将所有数据点的绝对误差百分比累加,除以数据点个数,即可得到SMAPE:

SMAPE = (100 / n) * sum(APE)

其中,n为数据点个数,APE为每个数据点的绝对误差百分比。

下面是使用Python代码实现SMAPE的过程,通过上述数据点进行例子演示:

def smape(actual, pred):
    """
    计算SMAPE
    """
    n = len(actual)
    APE = []
    for i in range(n):
        APE.append(abs(actual[i] - pred[i]) / ((actual[i] + pred[i]) / 2))
    smape = (100 / n) * sum(APE)
    return smape

actual = [10, 20, 30, 40, 50]
pred = [12, 19, 28, 41, 53]
print(smape(actual, pred)) # 输出结果为:6.4995

这个例子中,我们按照上述公式计算每个数据点的绝对误差百分比,然后将所有数据点的绝对误差百分比累加求和,最终得到SMAPE值为6.4995。

3. 更多SMAPE计算的例子

除了上面的例子,我们还可以通过更多的示例来加深对SMAPE的理解。

示例1:

actual = [20, 30, 25, 40]
pred = [15, 35, 20, 45]

按照上述公式计算,可以得到SMAPE为18.44。这个值越大,表示实际数据和预测数据的差异越大,模型效果越差。

示例2:

actual = [5, 10, 15, 20]
pred = [7, 12, 17, 22]

按照上述公式计算,可以得到SMAPE为1.24。这个值越小,表示实际数据和预测数据的差异越小,模型效果越好。

通过以上两个例子,我们可以进一步了解SMAPE值的意义,以及如何通过SMAPE来判断模型的预测准确性。