来聊聊统计学吧 - 软件质量的统计入门(No.13 相关与因果:散点图与相关系数的陷阱)

日本語|English|中国语
| 6 min read
Author: shuichi-takatsu shuichi-takatsuの画像
Information

为了覆盖更广泛的受众,这篇文章已从日语翻译而来。
您可以在这里找到原始版本。

引言

#

到目前为止的系列文章中,我们通过平均值比例等代表值,讲解了“推断总体趋势”的方法。
具体来说,针对通过样本均值估计总体均值,或比较比例差异等场景,我们介绍了如何使用统计推断假设检验的方法。

然而在实际工作中,经常会出现“某个因素是否对另一个结果产生影响?”这样更为动态的关联关系值得关注的情况。
例如——

  • “审查工时增加时,缺陷数量会减少吗?”
  • “代码复杂度越高,缺陷会更多吗?”

对于这些问题,探究“是否存在关联”的方法称为相关分析
但是,仅仅存在相关并不意味着一定存在“因果关系”。
其中还需要注意混杂因素伪相关等问题。

此外,要了解不仅“是否具有统计学意义”,还要知道该关联在实际工作中是否具有意义上的大小,离不开**效应量(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 的计算公式:

d=M1M2spd = \frac{M_1 - M_2}{s_p}

其中,sps_p(合并标准差)定义为:

sp=s12+s222=2.02+2.1222.05s_p = \sqrt{\frac{s_1^2 + s_2^2}{2}} = \sqrt{\frac{2.0^2 + 2.1^2}{2}} \approx 2.05

因此,Cohen's d 可计算为:

d=8.46.82.050.78d = \frac{8.4 - 6.8}{2.05} \approx 0.78

该结果为 Cohen's d = 0.78,根据一般标准,相当于“中等到强效应”。
将此效应量与 P 值一起呈现,能够强化不仅“统计上显著”,而且“在实际工作中也具有意义的改进”。

Information

·以下为 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 是否是在偶然获得的样本中观察到的,或者在总体中也具有显著相关”这个问题。

在此检验中,建立如下假设:

  • 原假设(H0H_0):总体相关系数 ρ=0\rho = 0(即不存在相关)
  • 备择假设(H1H_1):ρ0\rho \ne 0(存在相关)

如果 P 值小于显著性水平(例如:5%),则判定为“存在相关”。

● 实际工作中的相关分析示例(软件质量)

#

例如,在回答以下问题时,相关分析非常有效:

  • “开发周期与缺陷件数之间是否存在统计学上有意义的关系?”
  • “评审工时与缺陷密度的关系不是偶然,而是具有一致性吗?”
  • “测试覆盖率与质量指标的相关是否具有可重复性?”

但是,进行相关分析的前提要求“数据为连续变量,并且接近正态分布”。
若不满足,需要考虑使用斯皮尔曼等级相关等非参数方法。


什么是“偏相关”

#

偏相关(Partial Correlation) 是指在有三个或更多变量的情况下,评估排除其他变量影响后,两个变量之间的相关关系的指标。

例如——

  • X:开发工时
  • Y:缺陷件数
  • Z:模块规模(行数)

此时,即便观察 X 与 Y 的相关,也可能是由 Z(模块规模)引起的伪相关。
因此,当想要“排除 Z 的影响后,X 与 Y 是否仍存在相关?”时,就使用偏相关。

● 与普通相关的区别

#
类型 说明
相关系数 查看 X 与 Y 的简单相关
偏相关系数 在排除 Z 影响后查看 X 与 Y 的相关

● 在软件质量语境中的应用示例

#

例如——

  • 即便“评审工时”与“缺陷件数”看似存在相关,也可能是“模块规模”的影响。
  • 使用偏相关可以检验“在排除模块规模影响后,评审工时是否仍对缺陷有影响?”。

由此可见,偏相关是避免被“伪相关”迷惑的有效手段
(关于使用工具进行偏相关说明,请参考这篇文章。)


“相关”与“因果”不同!

#

存在相关仅仅表明“两个变量有一起变化的倾向”,并不一定意味着一方引起另一方(即存在因果关系)

例如——

  • 假设评审指摘数与缺陷件数存在相关
    但仅此不能断定“评审越多,缺陷越少(或越多)”。
  • 可能存在第三因素(混杂因素)
    例如,如果“需求复杂度”同时影响评审和缺陷,那么这可能只是由复杂度这一其他因素导致的表面相关

● 混淆相关与因果可能带来的风险

#
  • 如果将相关误解为因果并制定改进措施,可能无法触及本质问题
  • 增加评审就能减少 Bug”的策略,实际上可能只是“在复杂需求下,评审和 Bug 都会增加”而已。

● 对策:如何判别因果关系的可能性?

#
  • 使用偏相关排除第三变量的影响
  • 通过时间序列数据考察“哪一方先发生变化”
  • 通过实验或干预设计(如 A/B 测试)来确认因果

总结: 相关是有用的信息,但在判断“是否为因果”时需要注意。
在基于数据的决策中,要有意识地确认是否存在表明因果的证据

Information

冰淇淋销量与溺水人数的关系? 〜相关与因果的误解〜

有一个著名的例子,如下所示。

“冰淇淋销量增加时,溺水人数也会增加”

该数据确实存在相关关系,但这并不意味着“吃冰淇淋会导致溺水”,对吧?

在这种情况下,存在第三因素(混杂因素)
此处是**“炎热天气”**。

  • 炎热天气时冰淇淋销量高
  • 同样,炎热天气时人们更多进行海滩等水边活动,溺水事故更容易发生

也就是说,“炎热天气”这一因素同时影响两个变量
因此:

  • 仅因相关存在
  • 并不等于一方引起另一方(即因果关系)

在数据分析中必须时刻牢记这一点。

相关 ≠ 因果 —— “一起变化”与“因果关系”是两回事。


实务中的注意点

#
  • 如果将相关误解为因果并据此制定对策,可能导致偏离目标且错误的措施
    例如,仅因为评审数量与缺陷数量存在负相关,就机械地增加评审数量,可能无法触及根本原因。

  • 仅有“存在相关”无法判断何者为因何者为果
    而且,如果涉及混杂因素(第三因素),仅凭表面相关做决策,可能误判本质。

  • 因此,首先应确认“是否存在观察到的相关”,接着进行通过实验或设计来验证因果关系的步骤至关重要。

Information

相关仅是提示。实务中应当不是“因为存在相关就采取对策”,而是“基于相关提出假设并验证因果”,这才是健康的统计素养。


总结

#
  • 相关表示“共同变化的倾向”,与因果关系不同。
  • 相关系数(Pearson r)是以数值表示两个变量线性关系强度的指标。
  • 即便相关强,也不一定“是 A 导致 B”,也可能与混杂因素有关。
  • 在实际工作中发现相关后,重要的是不要立即断定因果,而应通过实验或设计进行验证
  • 通过结合效应量(例如:Cohen's d)和散点图等,可更深入理解对实际工作有意义的差异和关联。

下次预告

#

下次将为您带来 “预测:通过回归分析解读质量”
这是在相关分析基础上更进一步,将“预测”和“影响程度”进行建模的方法。

此分析方法在实际工作中也有广泛应用,敬请期待。

此处汇总了统计相关信息。
希望能对您的数据分析有所帮助。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。