线性回归是一种强大的统计工具,用于对因变量和一个或多个自变量(特征)之间的关系进行建模。回归分析中一个重要且经常被遗忘的概念是交互作用项。简而言之,交互术语使您能够检查目标和自变量之间的关系是否会根据另一个自变量的值而变化。
交互术语是回归分析的一个关键组成部分,了解它们的工作原理可以帮助从业者更好地训练模型和解释数据。然而,尽管交互术语很重要,但它们可能很难理解。
这篇文章提供了线性回归背景下交互作用术语的直观解释。
回归模型中的交互项是什么?
首先,这是一个更简单的案例;也就是说,一个没有相互作用项的线性模型。这样的模型假设每个特征或预测器对因变量(目标)的影响独立于模型中的其他预测器。
以下等式描述了具有两个特征的此类模型规范:
为了使解释更容易理解,这里有一个例子。想象一下,你对房地产价格建模感兴趣 (y) 使用两个功能:它们的大小 (x1 个) 以及指示公寓是否位于市中心的布尔标志 (2 个) .是截距,和是线性模型的系数,以及是误差项(模型无法解释)。
在收集数据并估计线性回归模型后,可以获得以下系数:
知道估计的系数和2 个是一个布尔功能,您可以根据的值写出两种可能的情况2 个.
市中心
市中心外
如何解读这些?虽然这在房地产领域可能没有多大意义,但你可以说,市中心一套 0 平方米的公寓的价格是 310 (截距的价值)。每增加一平方米的空间,价格就会上涨 20 。在另一种情况下,唯一的区别是截距小于 10 个单位。图 1 显示了两条最佳拟合线。
图 1 。市中心和城外房产的回归线
正如你所看到的,这些线是平行的,它们有相同的斜率 — 系数由x1 个,这在两种情况下都是一样的。
交互作用术语表示联合效应
在这一点上,你可能会争辩说,在市中心的公寓里多住一平方米比在郊区的公寓里多花一平方米要贵。换句话说,这两个特征可能会对房地产价格产生共同影响。
所以,你认为不仅两种情况下的截距应该不同,而且直线的斜率也应该不同。如何做到这一点?这正是互动术语发挥作用的时候。它们使模型的规范更加灵活,并使您能够考虑到这些模式。
交互项实际上是你认为对目标有共同影响的两个特征的乘积。以下等式表示模型的新规范:
再次假设你已经估计了你的模型,并且你知道系数。为了简单起见,我保留了与前面示例中相同的值。请记住,在现实生活中,它们可能会有所不同。
市中心
市中心外
在你写出两个场景之后2 个(市中心或市中心外),您可以立即看到坡度(系数x1 个) 两条线中的一条不同。正如假设的那样,现在市中心增加一平方米的空间比郊区更贵。
用交互项解释系数
向模型中添加交互项会改变对所有系数的解释。如果没有交互项,则可以将系数解释为预测器对因变量的独特影响。
所以在这种情况下,你可以这么说是公寓大小对价格的独特影响。然而,对于交互项,公寓大小对不同值的影响是不同的2 个换句话说,公寓规模对价格的独特影响不再局限于.
为了更好地理解每个系数代表什么,这里再看一看具有交互项的线性模型的原始规范。作为提醒,2 个是一个布尔特征,指示特定公寓是否位于市中心。
现在,您可以通过以下方式解释每个系数:
: 拦截市中心以外的公寓(或布尔特征为零值的任何组2 个) .
: 市中心以外公寓的坡度(价格的影响)。
: 两组之间的截距差异。
: 市中心和城外公寓之间的坡度差异。
例如,假设你正在测试一个假设,即无论公寓是否在市中心,公寓的大小对价格的影响都是相等的。然后,您将使用交互项来估计线性回归,并检查与 0 显著不同。
关于交互术语的一些附加注释:
我提出了双向交互术语;然而,高阶相互作用(例如,三个特征的相互作用)也是可能的。
在这个例子中,我展示了一个数字特征(公寓的大小)与布尔特征(公寓在市中心吗?)的交互。但是,您也可以为两个数字特征创建交互项。例如,您可以创建一个公寓大小与房间数量的交互项。有关详细信息,请参阅相关资源部分。
这种情况下,相互作用项可能具有统计学意义,但主要影响并不显著。然后,你应该遵循分层原则,即如果你在模型中包括一个交互项,你也应该包括主要影响,即使它们的影响在统计上并不显著。
python 中的实际操作示例
在所有的理论介绍之后,下面是如何在 python 中为线性回归模型添加交互项。一如既往,首先导入所需的库。
import numpy as npimport pandas as pdimport statsmodels.api as smimport statsmodels.formula.api as smf# plottingimport seaborn as snsimport matplotlib.pyplot as plt# settingsplt.style.use(seaborn-v0_8)sns.set_palette(colorblind)plt.rcparams[figure.figsize] = (16, 8)%config inlinebackend.figure_format = 'retina'
在本例中,您使用statsmodels图书馆对于数据集,使用mtcars数据集。我敢肯定,如果你曾经使用过 r ,你就会对这个数据集很熟悉。
首先,加载数据集:
mtcars = sm.datasets.get_rdataset(mtcars, datasets, cache=true)print(mtcars.__doc__)
执行代码示例将打印数据集的全面描述。在这篇文章中,我只展示了相关部分 — 列的总体描述和定义:
====== =============== mtcars r documentation ====== ===============
数据摘自 1974 年的美国杂志motortrend,由 32 辆汽车( 1973-74 车型)的油耗和汽车设计和性能的 10 个方面组成。
这是一个 dataframe ,它对 11 个(数字)变量进行了 32 次观测:
===== ==== ======================================== [, 1] mpg miles/(us) gallon [, 2] cyl number of cylinders [, 3] disp displacement (cu.in.) [, 4] hp gross horsepower [, 5] drat rear axle ratio [, 6] wt weight (1000 lbs) [, 7] qsec 1/4 mile time [, 8] vs engine (0 = v-shaped, 1 = straight) [, 9] am transmission (0 = automatic, 1 = manual) [,10] gear number of forward gears [,11] carb number of carburetors ===== ==== ========================================
然后,从加载的对象中提取实际数据集:
df = mtcars.datadf.head()
英里/加仑 气缸 显示 马力 德拉特 重量 质量安全委员会 对 是 排挡 碳水化合物
马自达 rx4 21 6 160 110 3 . 90 2 . 620 16 . 46 0 1 4 4
马自达 rx4 wag 21 6 160 110 3 . 90 2 . 875 17 . 02 0 1 4 4
达特桑 710 22 . 8 4 108 93 3 . 85 2 . 320 18 . 61 1 1 4 1
大黄蜂 4 号驱动器 21 . 4 6 258 110 3 . 08 3 . 215 19 . 44 1 0 3 1
大黄蜂运动型 18 . 7 8 360 175 3 . 15 3 . 440 17 . 02 0 0 3 2
表 1 。的预览动车组数据集
对于这个例子,假设你想调查每加仑英里数之间的关系 (mpg) 和两个特征:重量 (wt,连续)和变速器类型 (am,布尔值)。
首先,绘制数据以获得一些初步见解:
sns.lmplot(x=wt, y=mpg, hue=am, data=df, fit_reg=false)plt.ylabel(miles per gallon)plt.xlabel(vehicle weight);
图 2 :每加仑英里数与车辆重量、每种变速器类型颜色的散点图
通过观察图 2 ,您可以看到 am 变量的两个类别的回归线将大不相同。为了进行比较,从一个没有交互项的模型开始。
model_1 = smf.ols(formula=mpg ~ wt + am, data=df).fit()model_1.summary()
下表显示了在没有交互项的情况下拟合线性回归的结果。
ols regression results ==============================================================================dep. variable: mpg r-squared: 0.753model: ols adj. r-squared: 0.736method: least squares f-statistic: 44.17date: sat, 22 apr 2023 prob (f-statistic): 1.58e-09time: 23:15:11 log-likelihood: -80.015no. observations: 32 aic: 166.0df residuals: 29 bic: 170.4df model: 2 covariance type: nonrobust ============================================================================== coef std err t p>|t| [0.025 0.975]------------------------------------------------------------------------------intercept 37.3216 3.055 12.218 0.000 31.074 43.569wt -5.3528 0.788 -6.791 0.000 -6.965 -3.741am -0.0236 1.546 -0.015 0.988 -3.185 3.138==============================================================================omnibus: 3.009 durbin-watson: 1.252prob(omnibus): 0.222 jarque-bera (jb): 2.413skew: 0.670 prob(jb): 0.299kurtosis: 2.881 cond. no. 21.7==============================================================================
从汇总表中可以看出, am 特征的系数在统计上并不显著。使用您已经学习的系数的解释,您可以为 am 特征的两类绘制最佳拟合线。
x = np.linspace(1, 6, num=20)sns.lmplot(x=wt, y=mpg, hue=am, data=df, fit_reg=false)plt.title(best fit lines for from the model without interactions)plt.ylabel(miles per gallon)plt.xlabel(vehicle weight)plt.plot(x, 37.3216 - 5.3528 * x, blue)plt.plot(x, (37.3216 - 0.0236) - 5.3528 * x, orange);
图 3 。两种变速器的最佳匹配线路
图 3 显示了线条几乎重叠,因为 am 特征的系数基本为零。
接下来是第二个模型,这一次是两个功能之间的交互项。以下是如何在statsmodels公式
model_2 = smf.ols(formula=mpg ~ wt + am + wt:am, data=df).fit()model_2.summary()
以下汇总表显示了用交互项拟合线性回归的结果。
ols regression results ==============================================================================dep. variable: mpg r-squared: 0.833model: ols adj. r-squared: 0.815method: least squares f-statistic: 46.57date: mon, 24 apr 2023 prob (f-statistic): 5.21e-11time: 21:45:40 log-likelihood: -73.738no. observations: 32 aic: 155.5df residuals: 28 bic: 161.3df model: 3 covariance type: nonrobust =============================================================================== coef std err t p>|t| [0.025 0.975]------------------------------------------------------------------------------intercept 31.4161 3.020 10.402 0.000 25.230 37.602wt -3.7859 0.786 -4.819 0.000 -5.395 -2.177am 14.8784 4.264 3.489 0.002 6.144 23.613wt:am -5.2984 1.445 -3.667 0.001 -8.258 -2.339==============================================================================omnibus: 3.839 durbin-watson: 1.793prob(omnibus): 0.147 jarque-bera (jb): 3.088skew: 0.761 prob(jb): 0.213kurtosis: 2.963 cond. no. 40.1==============================================================================
以下是您可以从具有交互项的汇总表中快速得出的两个结论:
所有的系数,包括相互作用项,都具有统计学意义。
通过检查 r2 (及其调整后的变体,因为模型中有不同数量的功能),您可以声明具有交互项的模型会产生更好的拟合。
与前面的情况类似,绘制最佳拟合线:
x = np.linspace(1, 6, num=20)sns.lmplot(x=wt, y=mpg, hue=am, data=df, fit_reg=false)plt.title(best fit lines for from the model with interactions)plt.ylabel(miles per gallon)plt.xlabel(vehicle weight)plt.plot(x, 31.4161 - 3.7859 * x, blue)plt.plot(x, (31.4161 + 14.8784) + (-3.7859 - 5.2984) * x, orange);
图 4 。两种类型变速器的最佳匹配线路,包括相互作用项
在图 4 中,您可以立即看到配备自动变速器和手动变速器的汽车在截距和坡度方面的拟合线差异。
这里有一个好处:您还可以使用添加交互术语scikit-learn的polynomialfeaturestransformer 不仅提供了添加任意阶的交互项的可能性,而且还创建了多项式特征(例如,可用特征的平方值)。有关详细信息,请参阅sklearn.preprocessing.polynomialfeatures.
结束语
在处理线性回归中的交互项时,需要记住以下几点:
交互术语使您能够检查目标和功能之间的关系是否会根据另一个功能的值而变化。
添加交互项作为原始特征的乘积。通过将这些新变量添加到回归模型中,可以测量它们与目标之间相互作用的效果。仔细解释相互作用项的系数对于理解关系的方向和强度至关重要。
通过使用交互项,可以使线性模型的规范更加灵活(不同线的斜率不同),从而更好地拟合数据并具有更好的预测性能。
华硕灵耀3 Deluxe怎么样?华硕灵耀3 Deluxe评测:机身设计花足了心思
存储芯片的降价潮即将过去 三星、SK海力士、美光股价集体上扬
USB端口找到新居,落户嵌入式系统
RFID | 新疆空管首个射频识别零备件全程可追溯系统启用
华为、阿里入局安防行业,新的市场蓝海缓缓浮现
线性回归背景下交互作用术语的直观解释
曙光龙芯刀片服务器演绎自主创新乐章
小米6最新消息:小米6第二次抢购时间将于5月5日,对此你准备好了?
截至2月底我国三大运营商的移动电话用户总数已达到了15.8亿户
台积电另一2nm晶圆厂建厂申请正在审核中,将于2024年投产
物联网高速发展形成的红利不容小觑,越来越多的行业巨头涉足
SSL安全证书的工作原理是怎样的
霍尼韦尔的ThermoRebellion将热成像技术与人工智能相结合
贞光科技带您梳理:全球汽车连接器行业一览
直流误差预算计算器简化了最佳电流检测放大器的选择
使用宏单元自动进行模拟/混合信号设计
React VR重新命名为React 360
供应/回收HP54615B数字存储示波器HP 54615B小
断路器的灭弧方法及断路器的灭弧原理
控制电光调制器的虹科任意波形发生器