来聊聊统计学吧 - 软件质量的统计入门(No.13 相关与因果:散点图与相关系数的陷阱)
Back to Top
为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。
引言
#到目前为止的系列文章中,我们通过平均值和比例等代表值,讲解了“推断总体趋势”的方法。
具体来说,针对通过样本均值估计总体均值,或比较比例差异等场景,我们介绍了如何使用统计推断和假设检验的方法。
然而在实际工作中,经常会出现“某个因素是否对另一个结果产生影响?”这样更为动态的关联关系值得关注的情况。
例如——
- “审查工时增加时,缺陷数量会减少吗?”
- “代码复杂度越高,缺陷会更多吗?”
对于这些问题,探究“是否存在关联”的方法称为相关分析。
但是,仅仅存在相关并不意味着一定存在“因果关系”。
其中还需要注意混杂因素和伪相关等问题。
此外,要了解不仅“是否具有统计学意义”,还要知道该关联在实际工作中是否具有意义上的大小,离不开**效应量(Effect Size)**这一视角。
通过在 P 值之外评估效应量,可以更清晰地把握数字背后“对实际工作的影响”。
在“来聊聊统计学吧”系列的第13期中,我们将聚焦以下主题:
- 相关与因果的区别
- 相关系数的含义与解读
- 效应量(Effect Size)的实际意义
- 通过散点图可视化关联及注意事项
- 偏相关与混杂因素的处理
以软件质量数据为例,通过“虽然存在关联,但它是否真正有意义?”这一视角,旨在帮助大家做出更具实践性和高可信度的判断。
什么是相关?
#相关是指两个变量之间存在“一起变化的倾向”的状态。
例如,如果存在“开发规模越大,缺陷数越多”的关系,就可以说“开发规模”和“缺陷数”之间存在相关。
● 相关的基本特征
#- 相关不意味着因果关系(后文详述)。
- 正相关:一方增加时,另一方也有增加的倾向(例如:开发规模与工时)。
- 负相关:一方增加时,另一方则有减少的倾向(例如:评审时间与缺陷引入率)。
- 可以通过散点图直观地确认相关性,而数值化则使用相关系数(皮尔逊 r)。
● 相关系数的参考值
#相关系数 r 的取值范围为 -1 到 +1,通常可以这样解读:
相关系数 r | 解读示例 |
---|---|
±0.9以上 | 非常强的相关 |
±0.7~0.9 | 强相关 |
±0.4~0.7 | 中等相关 |
±0.2~0.4 | 弱相关 |
±0~0.2 | 几乎无相关 |
此参考值仅供参考,在实际工作中需根据上下文和数据特性进行解读。
● 软件质量的相关示例
#-
缺陷检测数与开发周期的相关
如果随着开发周期变长,缺陷数量有增加的倾向,则可认为存在正相关。 -
代码圈复杂度与缺陷密度的相关
如果圈复杂度高的模块缺陷密度更高,则可能显示出强正相关。 -
评审时间与漏修数的相关
如果评审时间越长,漏修数量越少,则可能显示负相关(负 r 值)。
相关系数是表示“趋势强度”的指标,在实际工作中与 P 值配合使用,即可同时确认“统计学显著性”和“实际效应量”。
(使用工具对相关系数进行说明的内容,请参考这篇文章。)
效应量(Effect Size)
#效应量是用于量化表示“观测到的差异大小”或“相关强度”的指标。
与 P 值用于表示“是否为偶然”不同,效应量用于评估“差异或关联有多大”。
● 为什么效应量很重要?
#- 即便 P 值显著,但如果效应量很小,在实际工作中可能是可以忽略的差异。
- 效应量不依赖于样本量,因此对于判断“是否具有实际意义的差异”非常有效。
● 主要的效应量示例
#效应量指标 | 用途与含义 |
---|---|
Cohen's d | 平均差大小(用于 t 检验) |
Pearson's r | 变量间相关强度(用于相关分析) |
η²(Eta²) | 组间差异的解释力(用于方差分析) |
比值比(OR) | 类别间关联强度(如用于逻辑回归) |
● 在软件质量中的效应量应用示例
#例如,假设有报告称“引入新工具后,缺陷数在统计学上显著减少”。
乍一看似乎是好结果,但如果该差异微乎其微且效应量非常小,在实际开发现场可能是用户感受不到的差异。
由此可见,即便 P 值显著,作为“实际改进”是否具有意义又是另一回事。
另一方面,即便 P 值不显著,但如果效应量具有中到大的程度,有可能仅仅是样本量不足导致,实际上存在重要差异。
如此,效应量作为与“统计学显著性(P 值)”独立的另一个判断轴发挥作用。
在实际工作中同时展示 P 值与效应量,是增强判断说服力的关键。
● t 检验的效应量(Cohen's d)具体示例
#例如,在某项目中进行了如下调查。
- A 团队(使用旧工具):缺陷报告数平均 = 8.4,标准差 = 2.0,n = 30
- B 团队(使用新工具):缺陷报告数平均 = 6.8,标准差 = 2.1,n = 30
在这种情况下,Cohen's d 的计算如下。
·Cohen's d 的计算公式:
其中,(合并标准差)定义为:
因此,Cohen's d 可计算为:
该结果为 Cohen's d = 0.78,根据一般标准,相当于“中等到强效应”。
将此效应量与 P 值一起呈现,能够强化不仅“统计上显著”,而且“在实际工作中也具有意义的改进”。
·以下为 Cohen's d 效应量的解读(参考):
Cohen's d 值 | 效应量大小的解读 |
---|---|
0.0 ~ 0.2 | 极小效应(几乎无差异) |
0.2 ~ 0.5 | 小效应(稍有差异) |
0.5 ~ 0.8 | 中等效应(实际有意义的差异) |
0.8 以上 | 大效应(明显且显著的差异) |
散点图的应用
#散点图是用于直观把握两个变量关系的基本而强大的工具。
“用眼睛观察”数值难以看清的特征,可以直观理解相关性、趋势以及异常值的存在与否。
- 通过点的分布情况,可以把握变量间关系的强度和方向(正相关/负相关/无相关)。
- 不仅限于线性关系,还可以直观看到曲线型非线性趋势和各群体分布的偏差。
- 异常值的存在一目了然,有助于察觉可能影响相关系数可靠性的因素。
● 在软件质量中的示例
#例如,将模块大小(代码行数)与缺陷数之间的关系通过散点图进行可视化。
即使看起来存在一定关联,如果少数极端庞大的模块产生了强烈影响,
查看散点图就能立即注意到“异常值”的存在。
此外,即使看似不存在线性相关,通过散点图也能发现“仅在某一范围相关较强”或“呈 U 字型关系”等,
这些是仅凭数值指标容易忽视的特征。
将数字(相关系数)与“图(散点图)”结合起来查看,可以做出更为多角度和合理的判断。
相关分析的基础
#散点图和相关系数是为了证实“好像存在关联”这一感觉而提供的视觉和定量手段,但当需要更进一步判断“是否存在统计学显著的相关?”时,就要使用相关分析。
● 皮尔逊积矩相关系数与检验
#相关系数(皮尔逊 r)是表示“两个变量线性关系强度”的指标,取值范围为 -1 到 +1。
而相关系数显著性检验则是检验“该 r 是否是在偶然获得的样本中观察到的,或者在总体中也具有显著相关”这个问题。
在此检验中,建立如下假设:
- 原假设():总体相关系数 (即不存在相关)
- 备择假设():(存在相关)
如果 P 值小于显著性水平(例如:5%),则判定为“存在相关”。
● 实际工作中的相关分析示例(软件质量)
#例如,在回答以下问题时,相关分析非常有效:
- “开发周期与缺陷件数之间是否存在统计学上有意义的关系?”
- “评审工时与缺陷密度的关系不是偶然,而是具有一致性吗?”
- “测试覆盖率与质量指标的相关是否具有可重复性?”
但是,进行相关分析的前提要求“数据为连续变量,并且接近正态分布”。
若不满足,需要考虑使用斯皮尔曼等级相关等非参数方法。
什么是“偏相关”
#偏相关(Partial Correlation) 是指在有三个或更多变量的情况下,评估排除其他变量影响后,两个变量之间的相关关系的指标。
例如——
- X:开发工时
- Y:缺陷件数
- Z:模块规模(行数)
此时,即便观察 X 与 Y 的相关,也可能是由 Z(模块规模)引起的伪相关。
因此,当想要“排除 Z 的影响后,X 与 Y 是否仍存在相关?”时,就使用偏相关。
● 与普通相关的区别
#类型 | 说明 |
---|---|
相关系数 | 查看 X 与 Y 的简单相关 |
偏相关系数 | 在排除 Z 影响后查看 X 与 Y 的相关 |
● 在软件质量语境中的应用示例
#例如——
- 即便“评审工时”与“缺陷件数”看似存在相关,也可能是“模块规模”的影响。
- 使用偏相关可以检验“在排除模块规模影响后,评审工时是否仍对缺陷有影响?”。
由此可见,偏相关是避免被“伪相关”迷惑的有效手段。
(关于使用工具进行偏相关说明,请参考这篇文章。)
“相关”与“因果”不同!
#存在相关仅仅表明“两个变量有一起变化的倾向”,并不一定意味着一方引起另一方(即存在因果关系)。
例如——
- 假设评审指摘数与缺陷件数存在相关。
但仅此不能断定“评审越多,缺陷越少(或越多)”。 - 可能存在第三因素(混杂因素)。
例如,如果“需求复杂度”同时影响评审和缺陷,那么这可能只是由复杂度这一其他因素导致的表面相关。
● 混淆相关与因果可能带来的风险
#- 如果将相关误解为因果并制定改进措施,可能无法触及本质问题。
- “增加评审就能减少 Bug”的策略,实际上可能只是“在复杂需求下,评审和 Bug 都会增加”而已。
● 对策:如何判别因果关系的可能性?
#- 使用偏相关排除第三变量的影响
- 通过时间序列数据考察“哪一方先发生变化”
- 通过实验或干预设计(如 A/B 测试)来确认因果
总结: 相关是有用的信息,但在判断“是否为因果”时需要注意。
在基于数据的决策中,要有意识地确认是否存在表明因果的证据。
冰淇淋销量与溺水人数的关系? 〜相关与因果的误解〜
有一个著名的例子,如下所示。
“冰淇淋销量增加时,溺水人数也会增加”
该数据确实存在相关关系,但这并不意味着“吃冰淇淋会导致溺水”,对吧?
在这种情况下,存在第三因素(混杂因素)。
此处是**“炎热天气”**。
- 炎热天气时冰淇淋销量高
- 同样,炎热天气时人们更多进行海滩等水边活动,溺水事故更容易发生
也就是说,“炎热天气”这一因素同时影响两个变量。
因此:
- 仅因相关存在
- 并不等于一方引起另一方(即因果关系)
在数据分析中必须时刻牢记这一点。
相关 ≠ 因果 —— “一起变化”与“因果关系”是两回事。
实务中的注意点
#-
如果将相关误解为因果并据此制定对策,可能导致偏离目标且错误的措施。
例如,仅因为评审数量与缺陷数量存在负相关,就机械地增加评审数量,可能无法触及根本原因。 -
仅有“存在相关”无法判断何者为因何者为果。
而且,如果涉及混杂因素(第三因素),仅凭表面相关做决策,可能误判本质。 -
因此,首先应确认“是否存在观察到的相关”,接着进行通过实验或设计来验证因果关系的步骤至关重要。
相关仅是提示。实务中应当不是“因为存在相关就采取对策”,而是“基于相关提出假设并验证因果”,这才是健康的统计素养。
总结
#- 相关表示“共同变化的倾向”,与因果关系不同。
- 相关系数(Pearson r)是以数值表示两个变量线性关系强度的指标。
- 即便相关强,也不一定“是 A 导致 B”,也可能与混杂因素有关。
- 在实际工作中发现相关后,重要的是不要立即断定因果,而应通过实验或设计进行验证。
- 通过结合效应量(例如:Cohen's d)和散点图等,可更深入理解对实际工作有意义的差异和关联。
下次预告
#下次将为您带来 “预测:通过回归分析解读质量”。
这是在相关分析基础上更进一步,将“预测”和“影响程度”进行建模的方法。
此分析方法在实际工作中也有广泛应用,敬请期待。
此处汇总了统计相关信息。
希望能对您的数据分析有所帮助。