线性回归还是T检验。如何选择?
\ 我们常常陷入对花俏机器学习模型和深度学习突破的热议中,但让我们不要忽视简单的线性回归。
\ ==在一个充满LLM和尖端架构的世界里,线性回归默默地扮演着关键角色,现在是时候让我们关注它如何在今天仍然有益。==
\ 考虑这样一个场景:一家电子商务公司推出了新的横幅广告,我们的目标是评估它对平均会话时长的影响。为此,进行了一项实验,并收集了数据进行分析。让我们分析结果。
让我们使用一个熟悉的工具来完成这项任务:t检验。
结果相当令人鼓舞:
指标的提升只是对照组和处理组样本平均值之间的差异。在我们的案例中,估计的提升是0.56分钟,表明用户平均多花33秒使用我们的产品。
现在,让我们使用线性回归,将处理向量(是否显示新横幅广告)作为自变量,平均会话时长作为输出变量。
然后我们打印模型的摘要:
\
\ 值得注意的是,处理变量的系数与我们之前估计的0.56提升相符。值得注意的是R平方只有0.008,我们用这个模型没有解释太多的方差。
我们从t检验得到的提升和处理系数相同,这是巧合吗?让我们深入探讨其中的联系。
\ 让我们思考处理变量反映了什么。当它等于1时,它表示查看了横幅广告的用户的平均会话时长;当它等于0时,它表示没有看到横幅广告的用户的平均会话时长。这意味着处理变量(或线性回归术语中的斜率)表示对照组和处理组之间均值的变化。
线性回归中处理变量的零假设是什么?
当我们对实验应用T检验时,零假设是什么?完全相同。
因此,当计算相同假设的t统计量和p值时,我们的发现保持一致且相同。
然而,使用线性回归背后的原因是什么?我们不想只是让事情变得过于复杂。
\ 首先,让我们思考是否只有处理对我们主要指标的变化负责。
\ 实际上,由于存在选择偏差,这可能并不完全准确。
\ A/B测试中的选择偏差是一种错误类型,当被比较的组之间存在系统性差异而不是由于随机机会造成的,例如:
\
我们发现老用户比新客户更频繁地接触到新横幅广告。
\
我们在AB测试中使用的随机分配有助于我们减轻它,但很难完全消除。
\ 让我们制定如何估计真实效应。
ATE: 我们旨在估计的平均处理效应。
\ ATT: 被处理者的平均处理效应。我们也可以称之为ACE:平均因果效应。我们实际上可以计算它。它是对照组和处理组样本平均值之间的差异。
\ SB: 我们旨在最小化的选择偏差。
\ 我们如何最小化它?
\ 线性回归允许我们添加 协变量/混淆变量。让我们尝试一下,并将用户在 实验之前的平均会话时长作为混淆变量之一添加。
并打印模型的摘要:
我们的R平方飙升了!现在,我们解释了86%的方差。
\ 我们的处理效应现在是0.47。
所以,我们有两个处理效应:0.47和0.56;哪一个是正确的?
\ 在这种情况下,我们确切地知道真实效应,因为我模拟了数据和真实提升:0.5
import numpy as np import pandas as pd from scipy import stats import statsmodels.api as sm np.random.seed(45) n = 500 x = np.random.normal(loc = 10 ,scale = 3, size= 2 * n) y = x + np.random.normal(loc = 2 , scale = 1 ,size = len(x)) # For 50% of users we simulate treatment effect treat = 1 * (np.random.rand(2 * n) <= 0.5) experiment = pd.DataFrame(x, columns=["covariate"]) experiment['metric'] = y experiment['treatment'] = treat experiment['noise'] = np.random.normal(size = len(experiment)) # Add noise and uplift to 'metric' for rows where 'treat' is equal to 1 # The real uplift is 0.5 experiment['metric'] = experiment.apply(lambda row: row['metric'] + 0.5 * row['treatment'] + row['noise'] if row['treatment'] == 1 else row['metric'], axis=1)
这意味着0.47在绝对差异方面更好,更接近反映实际提升。
使用线性回归具有以下优势:
\ 我们可以将线性回归用于其他测试,如Welch t检验或卡方检验吗?
\ 简单的答案是可以。然而,我们必须做一些调整,我们将在下一篇文章中讨论!


