如何正确的对一个回归模型进行评价

如果你和我一样,是个急性子的人,恰好你的手上也有一个需要利用回归模型进行预测与分析的任务。在你的模型建立好之后,你迫不及待的想要找几个评价指标来看看你的模型表现得怎么样。与此同时你没有统计学的基本知识,又没有科学上网的习惯,在某乎或者C* D* 上面看了几个乱七八糟的分析。那么恭喜你,你即将踏入和我一样的坑,在盲目追求R-Squared的路上扬尘千里。

小问号,你是否有很多朋友?怎样才能建立一个好的回归模型?什么样的模型才是一个好的模型?R-Squared可不可以用来作为回归模型优劣的评价指标?R-Squared高的模型就一定好吗?反之如果低就一定不好吗?下面让我这个半吊子对上述问题and more进行一些简单的回答。我也是初学者,说的东西肯定有不对和理解不到位的地方,诸君看了可以乐呵一下,如果可以与我交流讨论指点迷津更是感激不尽!

Linear or nonlinear? This is a question!

尽管我是一个搞机器学习的,出于私心肯定还是希望能用各种算法和神经网络就多用用,用多了发的文章也就多了。但实际上,老牌的统计学还是很经得住考验的。往往不是模型越复杂拟合效果越好,线性回归同样可以拟合出漂亮的曲线,并且能够达到较高的置信水平。经过了这么多年的发展,方法和评估都已经很完善成熟了,你到百度上都一搜一大堆。不管你同不同意这个观点,不管你最终确定要用什么模型,先用线性回归玩一下肯定不亏。一方面可以看一下预测效果好不好,有没有必要用非线性来玩,另一方面,你如果非要用非线性来证明我的模型可以吊打线性,也需要通过线性模型来作为基准来进行对比。线性模型简单实用,杀鸡焉用宰牛刀?至于怎么样进行模型的评估,我们在后面讲。

非线性相比线性拟合,存在着几个问题,这是在写文章或者做推导的时候需要注意的一些点:

1.每一项特征对回归结果的响应相比于线性模型来说更难理解。

这一点应该是比较好理解的。线性模型可以直截了当的看出各个特征与最终结果之间的相关关系,而非线性就相当难了。如果只是取个对数,取个平方,取个双曲正切,也勉强还可以接受,但如果你的模型相当复杂,有多个要素相叠加起来,亦或是你直接用NN来做,你甚至看不出他们的具体关系是什么。只是取个结果的话,在评估OK的前提下还是可以接受的。如果你要利用回归真的去研究一些定量的相关关系,我建议最好不要采用非线性的方法。毕竟你无法解释为什么要对x进行一系列的非线性运算最终获得了比较好的结果。当然,作为一些探索性研究或者为相关研究提供一些参考性意见还是值得肯定的。

2.特征的p-value无法计算。

首先我们来说明一下什么是p-value以及他是干啥的。

p-value可以称为假设几率,用在null hypothesis也就是零假设里,他是一种概率,在原假设为真的前提下出现观察样本以及更极端情况的概率。我们做出一对互斥的假设H0和H1。例如众所周知的抛硬币实验,我们可以做出两种假设:

H0:硬币两边一样重

H1:硬币两边不一样重

我们计算出H0为真的期望值(50%-50%),统计出实际的观测值(1-9, 2-8, 3-7, whatever),通过期望值和观测值求得chi-square(也就是高中数学里的卡方),查表得到p-value。根据p-value与α(即1 - 置信度)的比较,如果p-value < α, 则拒绝H0,也即推出H1成立;如果p-value > α,则接受H0,也即推出H1不成立。我们通常用p-value检验来推翻H0,也就是要验证H1的正确性,因此p-value越小证明置信度越高,我们往往想要p-value小一些。

但在应用中偶尔也会有要证明H0正确的情况出现,例如验证某组数据是否满足正态分布。显然这个时候做出的H0应当是“数据满足正态分布”,否则不满足这个期望就没法算了。这个时候我们就希望p-value是大于0.05的。

那么这个p-value和回归以及采取的特征有什么关系呢?为什么说非线性回归的特征不能算p-value呢?我们来看线性回归为什么要算p-value也就解决了这些问题。

线性回归的通用形式写成这样应该没人反对:

\(Y = b_0 + b_1x_1 + b_2x_2 + ...+ b_nx_n\)

这么朴实无华的形式让人一看到就想对他所有特征前的参数进行null hypothesis:

H0: \(b_i = 0\)

H1: \(b_i>0\) or \(b_i<0\) (这个地方不用!=是因为打在公式里实在太难看了)

这样一来我们就可以清楚的看到$x_i$与$Y$之间是否有相关关系。非线性拟合可以提供各式各样应有尽有的丝滑曲线,这对于一些难以用线性拟合搞定的场合当然是再好不过,但非线性拟合的自由同样使得他没有一个确定的函数关系,这就导致如果你想要搞一个null hypothesis,就要提前规定好目标与特征之间存在着怎样的非线性关系。一般来说,如果你已经知道了具体的关系,这拟合也就没必要做了;如果你不知道到底有什么关系,如果你每天真的很闲的话用穷举法来看相关性也不是不可以,但我还是建议把时间花在更有用的地方上。当然,既然在拟合前做null hypothesis不可取,如果真的通过非线性拟合得出了优美的曲线和结论,我认为在事后根据你得到的关系再来一次锦上添花也未尝不可。

可能还存在着一些其他问题,限于本人水平有限必不可能全部cover到,欢迎各路神仙前来补充!

Who is R-Squared, and who are his relatives?

大家从一开始就看我不停的说R-Squared一定很好奇他到底是什么,或者有手快的已经查了一下。R-Squared如果你愿意的话可以称之为拟合度,或者英文名字叫goodness of fit (我原本很想吐槽chi-english没想到拟合度的英文真的是这个)。如果你再深入的搜一搜,大概就会得到类似于“R-Squared的范围在0~1之间,越靠近1说明拟合程度越好”这种结论。看到这里你就会特别开心,因为你找到了一个简单粗暴可以套用在模型上的指标。但你还是不太放心,于是你又查了查非线性回归的评价指标都有什么,然后你再一次在各种方差和误差中看到了R-Squared的身影。这个时候你确信了R-Squared就是那个踩着七彩祥云来救你的盖世英雄,相比于各种暧昧的告诉你误差谁大谁小的其他评价指标,果然是R-Squared更加直截了当。但你果然只是猜中了故事的开头,却没有猜中故事的结局,或者至少我是这样的。我已经搞好了全套之后才发现,我根本就不了解R-Squared。

我们来说说R-Squared家里的几口人。

户主R-Squared(\(R^2\))

R-Squared是数据与拟合回归线的接近程度的统计量度,也称为确定系数,或多元回归的多重确定系数。R-Squared的定义很简单:

R-Squared = 模型可解释的变差 / 总变差

R平方始终在0到100%之间:R-Squared为0%表示该模型无法解释响应数据均值附近的变化,为100%表示该模型解释了响应数据均值附近的所有可变性。我们确实可以看到这样的说法,即R平方越高,该模型对数据的拟合程度越好。但R-Squared高并不能表明模型对数据的拟合程度好,对线性模型是如此,对非线性模型更是如此。R-Squared的高低很大程度上并不真正取决于你的模型构建的是否恰当,而很大一部分取决于你要解决的问题是否是容易预测的?你放入了多少个特征进行预测?你的模型是否过拟合了?例如你在解决心理学问题时用到了回归进行预测,不见得R-Squared为50%的模型就拟合的不好,同样的你也不可能做出“我的R-Squared已经超过90%了,我的模型会读心”这种rz的论断。我认为R-Squared的一个最重要的用途是可以与过去类似的研究或问题相对比。在以往的研究中进行类似的分析或要解决类似的问题时,普遍得出的R-Squared大致是什么范围的?我的R-Squared是偏高了,偏低了,还是基本落在合理区间之内?如果对比得出的结论是不合理,是模型什么地方出现了问题,亦或是模型相比于前人有了一些提升和进步?我们不能拿着一个看似很高的R-Squared就奔走相告“噫!我中了!”R-Squared如果要用,也不可能单独的用,也要结合残差图和其他评价指标一起来用,或者是用家族里的其他几个兄弟姐妹来评估。单纯的R-Squared太单薄无力了。

干儿子相关系数(\(R\))

之所以提到相关系数并不是说这哥们也可以作为模型优劣的评价指标,而是我在踩了大坑的同时也踩到了这个小坑。看到$R$和$R2$这两个长得这么暧昧的符号你就不难想到他们俩之间是不是有着平方关系。答案是既是又不是,所以说$R$是$R2$的干儿子。只有在带截距项的最小二乘多元线性回归中,我们的户主才是相关系数的亲爹,其他时候都是领养的,他们两个之间毛关系都没有,顶多就是长得有点像具有一定的迷惑性。之所以说我踩了坑是因为我在计算本来就不应该作为评价指标的R-Squared的时候还是用了把R平方的方法算的,再加上我做的是非线性拟合,基本上可以说没有一条是符合亲爹要求的。最后取得的惨烈成果就是本以为能达到90%的模型重新计算之后降低到了70%...对相关系数有兴趣的自己去查一下吧,这里略过了。

表弟Adjusted R-Squared和Predicted R-Squared

R-Squared除了上面介绍的固有缺点,还有两个比较严重的问题。

1.每当加入一个新的特征来对结果进行预测,R-Squared就会增加。因此,有的时候看起来模型预测的很好,只是因为他特征放的特别多。

2.当你的模型放入的特征特别多,或是非线性项次数很高时,我们不出意外的发现了臭名昭著的过拟合,他把数据里的异常点和噪声都拟合了进去,这就导致了R-Squared的虚高以及模型预测和泛化能力的下降。

因此为了解决这两个问题,R-Squared还有两个表弟,一个叫Adjusted R-Squared,一个叫Predicted R-Squared。我们一个一个来看:

首先是Adjusted R-Squared。如果你英语好或者查了字典不难发现,adjusted是调整过的意思。如果说R-Squared描述的是特征对于目标的解释能力,那么Adjusted R-Squared就把特征的个数加入了adjustment。相比于加入特征会不断增加的R-Squared,Adjusted R-Squared随着特征数目的增加会升高或是降低。经过这样调整后得到的Adjusted R-Squared在数值大小上必然会比R-Squared小一些,但其可靠性相比之前大大提升了。

其次是Predicted R-Squared。顾名思义这次应该和预测量有关。Predicted R-Squared描述了模型对于从未见过的数据的解释程度,也就和ML里通过validation loss来调节超参数差不多。这个指标是用来指示过拟合的,不一定最后要用Prediction R-Squared,但在调整模型的过程中,如果你发现你的Predicted R-Squared比R-Squared或Adjusted R-Squared小很多,说明你的模型过拟合了,特征放的太多了,该调整调整了。

God said, "Let there be residual!" and there was residual.

有人可能要问了,你上面说了这么多乱七八糟的,最后也没给出来什么指标可以用来评估一个回归模型到底好不好啊。实际上是有的,如同这一段的标题,没错就是残差。

残差是什么东西?残差是一个特别朴素的东西,就是你模型预测出来的值和真实值的差,也就是观测值和估计值的差,通过残差可以获取到有关于模型的许多有用的信息。最容易获取的就是残差的大小,如果残差大了我们有理由说模型还有提升的空间,残差小也可以一定程度上证明模型的有效性。但我们要从残差中获取更加有用的信息。

我们先从一个好的回归模型入手。一个好的回归模型,不是说他预测的有多么准确,而是是否能够满足下面这条式子:

Response = (Constant + Predictors) + Error

或者说:

Response = Deterministic + Stochastic

也即模型根据特征得到的目标或者响应,既包括了可解释的、确定性的量,又包括了随机的、不可预测的量。如果残差图画出来后,其中包含了可预测的部分,那么说明模型中包含了可以预测的信息,模型还可以进一步的加强和改进。在满足了随机性和不可预测性后,我们当然希望残差越小越好。

也因此我在查阅相关资料的时候就看到了类似的论断,“残差分布要满足正态分布,否则说明你的模型并不好”,对这一点我保留怀疑态度。要满足随机性和不可预测性,在数据量足够的前提下,正态分布不是必要条件。以本人自己拟合的预测日降水的模型为例,经过kstest检验,p-value < 0.05,拒绝了残差符合正态分布的假设。然而我们看残差的均值以及分布,可以发现,残差的均值尤其靠近0,绝大部分残差集中在0附近很小的区间内,有少部分残差比较大,但其均值也在0左右。考虑到降水本身就是一个随机性和突变性较大的事件,回归的难度本来就很大,在人工影响或汛期导致降水比较大的前提下,残差大也是可以接受的。在这种情况下,我们不能说因为残差不满足正态分布就说模型有问题。残差有没有体现出随机性?有。有没有体现出不可预测性?没有完全体现出来,还有一定的改进空间,但考虑到降水事件的特殊性,这是可以接受的。

综上,如果我们要对一个回归模型进行评价,就我目前所了解到的信息,最好的方法是以残差分布为主,结合R-Squared一家子(除去相关系数),在前人研究的基础上进行谨慎的分析和调整。似乎还有S值什么之类的其他评价指标,由于目前认知有限,还不能在这篇小东西里体现出来。大家感兴趣的可以自行搜索。希望有大佬看到这篇小东西之后能不吝把我文章中出现的错误和不足纠正出来,谢谢!


本文章使用limfx的vsocde插件快速发布