本文为销量预测第9篇:销量预测建模中常用的损失函数与模型评估指标
第1篇:PySpark与DataFrame简介
第2篇:PySpark时间序列数据统计描述,分布特性与内部特性
第3篇:缺失值填充与异常值处理
第4篇:时间序列特征工程
第5篇:特征选择
第6篇:简单预测模型
第7篇:线性回归与广义线性模型
第8篇:机器学习调参方法
本文详细的梳理了销量预测领域常见的损失函数和模型评估指标。
一.损失函数
机器学习任务依赖于对目标函数最大或最小化,把最小化的函数称为损失函数( Loss Function ),用于衡量机器学习模型的预测能力,使用基于梯度下降法等的优化手段求解最小化损失函数。
但同一种损失函数并非适用于所有的模型,即使针对同一个预测任务。损失函数的选取依赖于参数的数量、是否有异常值、机器学习算法、梯度下降的效率等方面。所以下面介绍在销量预测领域常用的损失函数。
(1) 均方误差(Mean Squared Error - MSE)
均方误差是回归任务中最常用的损失函数,也叫L2损失,它是预测值与目标值之间差值的平方和,其公式如下所示:
M S E = 1 N ⋅ ∑ i = 1 N ( y ^ i − y i ) 2 \mathrm{MSE}=\frac{1}{N} \cdot \sum_{i=1}^{N}\left(\hat{y}_{i}-y_{i}\right)^{2} MSE=N1⋅i=1∑N(y^i−yi)2
如果预测模型使用MSE作为损失函数,通过使其导数为零,最小化损失。
∂ M S E ∂ f = ∂ 1 n ∑ ( f i − y i ) 2 ∂ f 2 n ∑ ( f t − y i ) = 0 ∑ f t = ∑ y i \begin{array}{c} \frac{\partial M S E}{\partial f}=\frac{\partial \frac{1}{n} \sum\left(f_{i}-{y}_{i}\right)^{2}}{\partial f} \\ \frac{2}{n} \sum\left(f_{t}-{y}_{i}\right)=0 \\ \sum f_{t}=\sum {y}_{i} \end{array} ∂f∂MSE=∂f∂n1∑(fi−yi)2n2∑(ft−yi)=0∑ft=∑yi
模型会趋于让整体预测值与实际值相等,整体样本趋向于平均值。
(2) 平均绝对误差(Mean Absolute Error - MAE)
平均绝对误差也叫L1损失,是目标值与预测值之差绝对值的和,表示预测值的平均误差幅度,不考虑误差的方向。
M A E = 1 N ⋅ ∑ i = 1 N ∣ y ^ i − y i ∣ MAE=\frac{1}{N} \cdot \sum_{i=1}^{N}\left|\hat{y}_{i}-y_{i}\right| MAE=N1⋅i=1∑N∣y^i−yi∣
若模型使用MAE作为损失函数,通过令导数为零,使其最小化:
∂ M A E ∂ f = ∂ 1 n ∑ ∣ f t − y i ∣ ∂ f \frac{\partial M A E}{\partial f}=\frac{\partial \frac{1}{n} \sum\left|f_{t}-{y}_{i}\right|}{\partial f}\\ ∂f∂MAE=∂f∂n1∑∣ft−yi∣
∣
f
i
−
y
i
∣
=
{
f
i
−
y
i
y
i
<
f
i
indefinite
y
i
=
f
i
y
i
−
f
i
y
i
>
f
i
\left|f_{i}-{y}_{i}\right|=\left\{\begin{array}{ll} f_{i}-{y}_{i} & {y}_{i}<f_{i} \\ \text { indefinite } & {y}_{i}=f_{i} \\ {y}_{i}-f_{i} & {y}_{i}>f_{i} \end{array}\right. \\
∣fi−yi∣=⎩⎨⎧fi−yi indefinite yi−fiyi<fiyi=fiyi>fi
∂
∣
f
i
−
y
i
∣
∂
f
=
{
1
y
i
<
f
i
indefinite
y
i
=
f
i
−
1
y
i
>
f
i
∂
M
A
E
∂
f
=
1
n
∑
{
1
d
t
<
f
t
−
1
d
t
>
f
t
\frac{\partial\left|f_{i}-{y}_{i}\right|}{\partial f}=\left\{\begin{array}{ll} 1 & {y}_{i}<f_{i} \\ \text { indefinite } & {y}_{i}=f_{i} \\ -1 & {y}_{i}>f_{i} \end{array}\right.\\ \frac{\partial M A E}{\partial f}=\frac{1}{n} \sum\left\{\begin{array}{ll} 1 & d_{t}<f_{t} \\ -1 & d_{t}>f_{t} \end{array}\right.
∂f∂∣fi−yi∣=⎩⎨⎧1 indefinite −1yi<fiyi=fiyi>fi∂f∂MAE=n1∑{1−1dt<ftdt>ft
也就是,模型要让预测值高于实际值的次数等于预测值低于实际值的次数,这也正是中位数的定义。
以上是两种是最常见的回归模型损失函数,简单总结MAE与MSE二者的不同点:
-
MAE对离群点有更好的鲁棒性;MSE对离群点敏感,即使存在少数离群点,也会让指标变得很差;
-
MSE假设在模型输出与真实值的误差服从高斯分布,MAE假设模型预测与真实值之间的误差服从拉普拉斯分布(Laplace distribution);
-
使用MSE相当于对数据分布的均值进行拟合,它对大误差的样本有更大的惩罚;使用MAE作为损失函数相当于对数据分布的中位数进行拟合;
-
MSE在极值点有着良好的特性,它的梯度随着损失函数的减小而减小,但MAE的梯度在极值点处不可导,不利于模型参数的学习。
(3) Huber Loss
Huber Loss也是一种鲁棒的回归损失函数。
L δ ( y , f ( x ) ) = { 1 2 ( y − f ( x ) ) 2 , for ∣ y − f ( x ) ∣ ≤ δ δ ⋅ ( ∣ y − f ( x ) ∣ − 1 2 δ ) , otherwise. L_{\delta}(y, f(x))=\left\{\begin{array}{ll} \frac{1}{2}(y-f(x))^{2}, & \text { for }|y-f(x)| \leq \delta \\ \delta \cdot\left(|y-f(x)|-\frac{1}{2} \delta\right), & \text { otherwise. } \end{array}\right. Lδ(y,f(x))={21(y−f(x))2,δ⋅(∣y−f(x)∣−21δ), for ∣y−f(x)∣≤δ otherwise.
其中,y是真实值,f(x)是模型的预测值,δ 是Huber的一个超参数,当真实值和预测值的差值, ∣ y − f ( x ) ∣ ≤ δ ∣ y − f ( x ) ∣ ≤ δ \mid y- f(x) \mid \leq \delta∣y−f(x)∣≤δ ∣y−f(x)∣≤δ∣y−f(x)∣≤δ时,Huber就是MSE;当差值在 ( − ∞ , δ ) (-\infty,\delta ) (−∞,δ)或者 ( δ , + ∞ ) (\delta,+\infty) (δ,+∞)时,Huber就是MAE。当误差较大时,使用MAE对离群点不那么敏感;在误差较小时使用MSE,能够快速的收敛。
针对梯度下降中因为存在异常值,用MAE作为损失函数因其导数不连续,求解效率低,故使用Huber这种对异常值更加鲁棒且处处可导的损失作为替代非常有用,但是由于该函数存在一个额外的超参数,也因此影响了该损失函数的推广使用。
(4) 分位数损失 (Quantile Loss)
分位数损失是针对分位数回归的损失函数,分位数回归 (Quantile regression)是一类在实际应用中非常有用的回归算法,通常回归算法是拟合目标值的均值(期望),而分位数回归可以通过给定不同的分位点,拟合目标值的不同分位数。分位数损失函数也用于对不确定性感兴趣的任务中,如需要预测的是范围而非点估计的区间预测。
J
quant
=
1
N
∑
i
=
1
N
I
y
^
i
≥
y
i
(
1
−
r
)
∣
y
i
−
y
^
i
∣
+
I
y
^
i
<
y
i
r
∣
y
i
−
y
^
i
∣
J_{\text {quant }}=\frac{1}{N} \sum_{i=1}^{N} \mathbb{I}_{\hat{y}_{i} \geq y_{i}}(1-r)\left|y_{i}-\hat{y}_{i}\right|+\mathbb{I}_{\hat{y}_{i}<y_{i}} r\left|y_{i}-\hat{y}_{i}\right|
Jquant =N1i=1∑NIy^i≥yi(1−r)∣yi−y^i∣+Iy^i<yir∣yi−y^i∣
损失函数是一个分段的函数 ,将 y ^ i ≥ y i ( 高 估 ) \hat{y}_{i} \geq y_{i} (高估) y^i≥yi(高估) 和 y ^ i ≥ y i ( 低 估 ) 和\hat{y}_{i} \geq y_{i}(低估) 和y^i≥yi(低估) 两种情况分开,分别给予不同的系数。当 r > 0.5 r>0.5 r>0.5时,低估的损失要比高估的损失更大,反过来当 r < 0.5 r<0.5 r<0.5时,高估的损失比低估的损失大;用分位数系数控制高估和低估的损失,进而实现分位数回归。特别地,当 r = 0.5 r=0.5 r=0.5时,分位数损失退化为 MAE 损失。
当然,还有其他的损失函数,比如Log-Cosh Loss等,通过以上四种常用损失函数举例,只是说明,在机器学习建模过程中,遵守使用该模型所对应的假设前提,依据数据分布等探索尝试更合理的损失函数,比如针对分位数回归就不能使用MSE,在不少kaggle时间序列预测相关比赛中,已得到证明,尤其是2020年时序领域最为出名M-Competitions(M-5)多位优胜者使用的Tweedie损失函数执行树模型训练与预测。
二.评估指标
评估指标用于机器学习算法模型效果,在有些算法任务中损失函数可以直接作为评价指标,如在回归问题中,均方误差(MSE)既可以来作为损失函数训练模型,又可以在模型训练完成后对其效果进行评估。
所以损失函数和评估指标的区别就是:
1)损失函数用于模型构建中指导模型的训练,评估指标用于模型构建后,用于评价模型性能。
2)损失函数通常是针对单个训练样本而言,给定模型中一个样本输出 和一个真实 损失函数输出一个实值损失 ,评估指标主要指为了评估本次模型预测的效果,采用的全部或部分样本进行的整体度量。
3)一般来说,因为损失函数参与模型训练中的计算环节,考虑到计算性能和稳定性,损失函数会比评估指标在数学性质上要求更加严格,常见要求是可导。评估指标则没有此要求,甚至是灵活的自定义。
损失函数和评估指标也体现在xgboost等集成机器学习架构中objective与eval_metric参数的区别。
下面介绍其他常见评估指标。
(1)均方根误差(Root Mean Square Error-RMSE)
均方根误差是MSE的平方根,使得RMSE和预测值在同样的量级上,比MSE更直观。
R M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 R M S E=\sqrt{\frac{1}{n} \sum_{i=1}^{n}\left(\hat{y}_{i}-y_{i}\right)^{2}} RMSE=n1i=1∑n(y^i−yi)2
(2) 平均绝对百分比误差(Mean Absolute Percentage Error-MAPE)
M A P E = 100 % n ∑ i = 1 n ∣ y ^ i − y i y i ∣ M A P E=\frac{100 \%}{n} \sum_{i=1}^{n}\left|\frac{\hat{y}_{i}-y_{i}}{y_{i}}\right| MAPE=n100%i=1∑n∣∣∣∣yiy^i−yi∣∣∣∣
范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。从公式上看,MAPE与MAE相比,多了分母,相比MAE消除了不同标度的影响,可用于比较不同预测对象的预测准确性,比如,对于两种商品的销量,商品A的MAPE为0.018,商品B的MAPE为0.028,则能够说明商品A预测的更加准确。当分母为0时,MAPE为+∞,因此MAPE的缺点之一是不能用于评估真实值为0的预测。MAPE是评估预测的直观基础性指标,下面要介绍的几种皆为在其基础上加工或衍生的指标。
(3) 对称的MAPE (Symmetric Mean Absolute Percentage Error - SMAPE)
S
M
A
P
E
=
100
%
n
∑
i
=
1
n
∣
y
^
i
−
y
i
∣
(
∣
y
^
i
∣
+
∣
y
i
∣
)
/
2
S M A P E=\frac{100 \%}{n} \sum_{i=1}^{n} \frac{\left|\hat{y}_{i}-y_{i}\right|}{\left(\left|\hat{y}_{i}\right|+\left|y_{i}\right|\right) / 2}
SMAPE=n100%i=1∑n(∣y^i∣+∣yi∣)/2∣y^i−yi∣
SMAPE是针对MAPE的修正,如果真实值本身很小或者接近0值时,预测偏差一点,MAPE就会急剧膨胀,因此SMAPE专门为修正了MAPE因真实值小而计算结果太大导致的不对称问题;SMAPE具备确切的下限(0%)和上限(200%),真实值和预测值同时等于0时,依然存在分母除零的问题。此时可以过滤掉存在0的预测后继续使用MAPE,也可以选择使用RMSE等。
针对以上提到的存在分母0的情况,可以过滤掉存在0的预测后继续使用MAPE,也可以选择使用RMSE等。
(4) 预测精度FA (Forecast Accuracy)
作为对MAPE更加直观性的补充,又有预测精度这一指标如下:
F A = 100 % − M A P E FA = {100 \%} - MAPE FA=100%−MAPE
由于MAPE可能超过100,所以预测精度 FA可能结果为负,因此违背了预测精度用0-100来表达预测效果的直观理解。
(5) MAD/Mean
以上的MAPE和FA面临着实际值为0时候,分母除零的无意义风险,SMAPE面临着预测值和实际值同时为0的风险,虽然可以回到使用MAE的阶段,但是存在MAE无法对不同的序列预测进行比较的问题,此时针对实际值中存在大量0值的情况,就需要其他的评估指标,比如下面要介绍的,MAD/Mean,因为MAE在有的书籍中也被称之为MAD(Mean Absolute Difference),该指标不仅适用于不同的序列比较,还适用于真实值存在大量为0的销量预测中,常见为间断序列。
M
A
D
M
e
a
n
=
1
N
⋅
∑
i
=
1
N
∣
y
^
i
−
y
i
∣
1
N
⋅
∑
i
=
1
N
y
i
\frac{MAD}{Mean}=\frac{\frac{1}{N} \cdot \sum_{i=1}^{N}\left|\hat{y}_{i}-y_{i}\right|}{\frac{1}{N}\cdot \sum_{i=1}^{N}y_{i}}
MeanMAD=N1⋅∑i=1NyiN1⋅∑i=1N∣y^i−yi∣
(6) 相关系数
评估实际值和预测值的相关性强弱,其中X为实际值,Y为预测值。
ρ ( X , Y ) = ρ x y = Cov ( X , Y ) Var ( X ) Var ( Y ) = E [ ( X − μ x ) ( Y − μ y ) ] E ( X − μ x ) 2 E ( Y − μ y ) 2 \rho(X, Y)=\rho_{x y}=\frac{\operatorname{Cov}(X, Y)}{\sqrt{\operatorname{Var}(X) \operatorname{Var}(Y)}}=\frac{E\left[\left(X-\mu_{x}\right)\left(Y-\mu_{y}\right)\right]}{\sqrt{E\left(X-\mu_{x}\right)^{2} E\left(Y-\mu_{y}\right)^{2}}} ρ(X,Y)=ρxy=Var(X)Var(Y)Cov(X,Y)=E(X−μx)2E(Y−μy)2E[(X−μx)(Y−μy)]
使用相关系数评估不用担心分母是否存在0的问题,相关越大说明预测效果越好。但是计算相关系数,需要待评估的数据较多,如果实际值与预测值的数量非常少,此时计算的相关系数或许不符合统计中对样本量的要求,同时,相关系数只是辅助度量预测值和真实值关联性强弱,模型预测效果好,真实值与预测值相关度一般来说较高,但是二者相关度高并不能反过来说明预测效果好。
(7)误差-标准差(Error-Standard Deviation)
标准差是可以用来度量波动性大小的,公式如下:
S = ∑ i = 1 n ( x i − x ˉ ) 2 n − 1 S=\sqrt{\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2}}{n-1}} S=n−1∑i=1n(xi−xˉ)2
受上文对MAPE的各种修正或者加工的启发,个人认为同样可以基于误差再次计算标准差,以此来评估预测的稳定性,其公式改为:
S = ∑ i = 1 n ( e i − e ˉ ) 2 n − 1 其 中 , e = y − y ^ S=\sqrt{\frac{\sum_{i=1}^{n}\left(e_{i}-\bar{e}\right)^{2}}{n-1}}\\ 其中,e=y-\hat{y} S=n−1∑i=1n(ei−eˉ)2其中,e=y−y^
其中针对上线的预测任务保证 预测准确性是一方面,同时也要保证预测的稳定性,所以该指标可以帮助我们度量预测效果是否具有稳定性。
(8) 决定系数(Coefficient of determination -R Squared)
也叫拟合优度,衡量线性回归法的指标, 用于度量因变量的变异中可由自变量解释部分所占的比例,以此来判断模型的解释力。反映自变量对因变量变动的解释程度。其取值在0-1之间越接近于1,说明模型拟合得越好,如R2=0.7,则表明因变量Y的70%变化由自变量X来解释。
R 2 ( y , y ^ ) = 1 − ∑ i = 0 n ( y i − y ^ i ) 2 ∑ i = 0 n ( y i − y ˉ ) 2 = E S S T S S = 1 − R S S T S S R^{2}(y, \hat{y})=1-\frac{\sum_{i=0}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}}{\sum_{i=0}^{n}\left(y_{i}-\bar{y}\right)^{2}}=\frac{E S S}{T S S}=1-\frac{R S S}{T S S} R2(y,y^)=1−∑i=0n(yi−yˉ)2∑i=0n(yi−y^i)2=TSSESS=1−TSSRSS
决定系数一般用于线性回归模型中,针对树模型和神经网络拟合的非线性模型,无法用决定系数来评价。通常来说,增加一个特征值,R-Squared 可能变大也可能保持不变,因此在多元回归模型中,更应该使用校正决定系数(Adjusted R-Squared)引入样本数量和特征数量,对添加的非重要变量给予惩罚。
R 2 − adjusted = 1 − ( 1 − R 2 ) ( n − 1 ) n − p − 1 n : 样 本 数 量 p : 自 变 量 ( 特 征 ) 数 量 R^{2}-\text { adjusted }=1-\frac{\left(1-R^{2}\right)(n-1)}{n-p-1}\\ n:样本数量\\ p:自变量(特征)数量 R2− adjusted =1−n−p−1(1−R2)(n−1)n:样本数量p:自变量(特征)数量
(9) 信息准则
信息准则是统计,建模中常用的模型比较工具,依据信息准则选择的模型,能够考虑到参数数量和误差大小,同时平衡模型拟合优度与模型复杂度,加入惩罚项来避免过拟合问题,其中主要的信息准则有AIC和BIC等。 依据信息准则在多个嵌套模型上。
A
I
C
=
2
l
n
(
f
(
y
∣
θ
k
)
)
−
2
K
B
I
C
=
2
l
n
(
f
(
y
∣
θ
k
)
)
−
K
l
o
g
(
n
)
AIC=2ln(f(y|θk))−2K \\ BIC=2ln(f(y|θk))−Klog(n)\\
AIC=2ln(f(y∣θk))−2KBIC=2ln(f(y∣θk))−Klog(n)
对于短期时间序列,没有足够的观测数据在执行训练后仍保留部分观测值用于测试,也无法进行时间序列的交叉验证时。AIC就显得特别有用,它可以表示一步预测的样本外误差。
三.总结
通过对以上列举的不同评估指标的阐述可知,模型评估指标也不是一成不变的,而是基于数据,可解释性,和模型的不同的角度进行选择,当然,也可以使用多种评估方式在同一个预测对象上,对所使用的算法模型效果做到多维监控,达到全面了解预测效果的目的。