回归与相关:数据故事的两条线
前阵子看一份消费数据,有人问:冰淇淋销量和空调销量相关系数0.89,是不是说明冰淇淋卖得好,空调就能多卖?这个问题恰好卡在相关与回归的分界线上。相关回答的是“两个变量是否同步变动”,回归回答的是“给定一个变量,另一个变量的条件均值是多少”。前者像看两个人是否总一起出现,后者像问其中一个人来了,另一个人大概几点到。
先看相关。常用的皮尔逊相关系数r,取值在-1到1之间。r=0.89意味着冰淇淋和空调销量呈较强的正向同步。但这个数字不包含方向,也不包含谁因谁果。更关键的是,它对非线性关系不敏感。比如施肥量和产量,在低施肥区间几乎线性上升,过了某个阈值反而下降,整体散点图呈倒U形,算出来的r可能只有0.3左右,但你不能说两者没关系。数据里这种“有关联但相关弱”的情形,比教科书例子多得多。
再来看回归。简单线性回归写出来是y=a+bx,b是斜率,表示x每增加一个单位,y平均变化多少。注意“平均”两个字。回归线穿过的是条件均值,不是每个点。拿冰淇淋和空调的数据跑一下,假设b=2.3,意思是冰淇淋销量每多1000支,空调销量平均多230台。但如果你真拿这个方程去预测某一天,误差可能很大。因为回归只用了x的信息,而空调销量还受气温、促销、安装排期影响。这些没进模型的变量,都会变成残差里的噪声。
一个常见的误用,是把高相关直接当成预测能力强。统计上有个说法叫“相关系数平方等于解释比例”。r=0.89,r²约0.79,说明x能解释y约79%的变异。剩下21%去哪了?被其他因素和随机波动吃掉了。如果这21%恰好包含一个强影响变量,那预测就会系统性偏。我见过一组门店数据,客流量和销售额的r高达0.92,但用客流预测销售额时,周末的预测值总是偏低。原因是周末客单价明显更高,这个变量没放进模型。相关没骗人,回归也没算错,只是观察的维度少了一层。
从预测的角度看,回归比相关多走了一步:它给出了一个可以计算的具体数值。但这也意味着它更容易被误用。常见的坑有三个。一是外推,用x=10的数据拟合的线去预测x=100,除非有明确机制支撑,否则斜率是否稳定存疑。二是忽略置信区间,b=2.3后面通常跟着标准误,可能意味着真实斜率在1.1到3.5之间,这个范围对应的业务含义差别很大。三是把回归当因果,看到b显著就认为x是y的原因。实际上,冰淇淋和空调可能同时被气温驱动,回归系数再大也改不了这个事实。
那实际分析中怎么配合使用?一个相对稳妥的流程是:先看散点图和相关矩阵,判断有没有非线性、离群点、分组结构;再决定是否做回归、要不要加交互项或分段。比如刚才的施肥量数据,如果直接线性回归,斜率可能不显著,但分段回归后,低施肥区间的斜率显著为正,高施肥区间显著为负,这就比一个笼统的r有用得多。走势图在这里的作用是提供时间维度的线索,比如两个变量在过去一年同步上升,但最近三个月开始背离,这种变化相关和回归都容易漏掉,需要肉眼观察。
回到开头的问题。冰淇淋和空调的r=0.89,只说明它们在这个数据集里同步变动。如果要做预测,还得看回归的残差分布、外部变量、时间稳定性。相关是发现线索的第一步,回归是把线索变成可计算关系的一步,而预测是第三步,需要不断用新数据检验误差。三步之间隔着模型假设和现实复杂性。把相关当回归用,或者把回归当因果用,都会让数据故事讲得太满。留一点余地,反而更接近真实。