如何用Python计算SMAPE

  • Post category:Python

我可以为你介绍如何用 Python 计算 SMAPE。

首先,让我们明确一下什么是 SMAPE。SMAPE 是对称平均绝对百分比误差(Symmetric Mean Absolute Percentage Error)的缩写,它是一种用于衡量预测值和实际值之间误差程度的指标。SMAPE 的计算方法如下:

$SMAPE = \frac{100\%}{n} \sum_{t=1}^{n} \frac{|F_t – A_t|}{(|A_t| + |F_t|)/2}$

其中 $A_t$ 是实际值,$F_t$ 是预测值,$n$ 是时间序列的长度。

接下来我们来看如何用 Python 计算 SMAPE。

方法一

我们可以使用 numpy 库中的 mean() 函数和 abs() 函数来计算 SMAPE。首先,我们需要导入 numpy 库:

import numpy as np

然后,假设我们已经定义好了实际值列表 actual 和预测值列表 predicted,我们可以使用如下的代码来计算 SMAPE:

def smape(actual, predicted):
    """
    计算SMAPE
    """
    return 100 / len(actual) * np.sum(2 * np.abs(np.array(predicted) - np.array(actual)) / (np.abs(np.array(actual)) + np.abs(np.array(predicted))))

smape_value = smape(actual, predicted)
print(f"SMAPE 值为:{smape_value:.2f} %")

这里我们将计算过程封装到了一个名为 smape() 的函数中,使用时只需要传入实际值列表和预测值列表即可。

方法二

我们也可以使用 Pandas 库中的 DataFrame 来计算 SMAPE。同样地,我们需要导入 Pandas 库:

import pandas as pd

然后,假设我们已经定义好了实际值列表 actual 和预测值列表 predicted,我们可以通过转换为 DataFrame 对象,然后使用 Pandas 库中的 mean() 函数和 abs() 函数来计算 SMAPE:

df = pd.DataFrame({'actual':actual, 'predicted': predicted})

def smape(actual, predicted):
    """
    计算SMAPE
    """
    return 100 / len(actual) * np.sum(2 * np.abs(predicted - actual) / (np.abs(actual) + np.abs(predicted)))

smape_value = df.apply(lambda row: smape(row['actual'], row['predicted']), axis=1).mean()
print(f"SMAPE 值为:{smape_value:.2f} %")

以上就是两种计算 SMAPE 的方法。其中,方法一的主要优点是简单、易懂,计算速度很快;方法二的主要优点是代码更加简洁明了,可读性更好。根据具体情况来选择使用哪一种方法。