我可以为你介绍如何用 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 的方法。其中,方法一的主要优点是简单、易懂,计算速度很快;方法二的主要优点是代码更加简洁明了,可读性更好。根据具体情况来选择使用哪一种方法。