如何用Python计算SMAPE

  • Post category:Python

首先,SMAPE(Symmetric Mean Absolute Percentage Error)是一种衡量预测模型误差的指标。它可以测量预测值误差的百分比,因此它非常适合于评估时间序列预测模型。下面是使用Python计算SMAPE的步骤:

步骤一:导入必要的库

在使用Python计算SMAPE之前,我们需要确保我们安装并导入了必要的库。其中,numpy库和pandas库是必须的。

import numpy as np
import pandas as pd

步骤二:定义函数

在Python中,定义一个函数来计算SMAPE非常容易。以下是计算SMAPE的函数:

def smape(actual, predicted):
    """
    计算SMAPE(Symmetric Mean Absolute Percentage Error)。
    参数:
        actual: 实际值
        predicted: 预测值
    返回:
        SMAPE值
    """
    dividend = np.abs(np.array(actual) - np.array(predicted))
    denominator = np.array(actual) + np.array(predicted)
    return 2 * np.mean(np.divide(dividend, denominator, out=np.zeros_like(dividend), where=denominator!=0))

这个函数接受两个参数,一个是实际值,另一个是预测值。它将首先计算真实值与预测值之间的差异,并将其除以真实值和预测值的总和。然后返回该值的平均值,乘以2。

步骤三:测试函数

为了测试我们的SMAPE函数,我们需要创建一些测试用例。以下是两个示例:

# 测试用例1
actual = [1, 2, 3, 4, 5]
predicted = [1, 2, 3, 4, 5]
print("SMAPE值:", smape(actual, predicted))

# 测试用例2
actual = [1, 2, 3, 4, 5]
predicted = [2, 3, 4, 5, 6]
print("SMAPE值:", smape(actual, predicted))

在测试用例1中,实际值和预测值完全相同。因此,预测误差为0,SMAPE值为0。在测试用例2中,我们添加了常数2到所有预测值中。因此,预测误差为20%,SMAPE值为20。

请注意,SMAPE值的范围是0到200,值越低表示模型预测效果越好。

这就是用Python计算SMAPE的完整攻略,其中包含了两个示例说明。