☰
数学期望、方差、标准差、样本方差、协方差、相关系数:数据分析必懂统计概念
2026/10/14 11:02:54 网站建设 项目流程

做了几年数据分析之后回头看,才知道“数学期望、方差、标准差、样本方差、协方差、相关系数”这六个概念有多重要。做产品要看用户行为均值,搞金融要算收益波动,跑机器学习要理解特征分布,甚至连打游戏抽卡、奶茶店算客单价,背后都是同一套统计基础。但我也记得刚开始学的时候有多懵:公式背得下来,考试套得上,一碰真实数据就不知道选哪个、算出来又是什么意思。这篇文章就从零做一次概念扫盲,不堆推导,不绕术语,尽量用能上手的方式把这六个概念讲透,配着手算例子和代码示例,最后给你一份可以直接抄的避坑清单。不管你是学生、转行人,还是工作中要碰数据的朋友,这篇都应该能帮你把这些概念真正“落地”。

1. 数学期望:概率世界的“加权平均”

1.1 一个赌局游戏讲透期望的本质

假设有人跟你玩一个游戏:掷一枚公平的骰子,掷出几点就给你几块钱。玩之前你肯定想知道,平均每把能赢多少?

答案很简单:3.5 元。这个数字是这么来的——每个点数出现的概率都是六分之一,所以把点数和对应概率加权求和:

E(X) = 1×(1/6) + 2×(1/6) + 3×(1/6) + 4×(1/6) + 5×(1/6) + 6×(1/6) = 3.5

这里最值得强调的一点是:3.5 这个数字,骰子永远掷不出来。它不是对某一次结果的预测,而是在“重复很多很多次”的前提下,你平均每把能拿到的钱。这就是数学期望的本质:以概率为权重的加权平均。

现实里的应用到处都是。保险公司给你定车险保费,核心就是估算未来理赔金额的期望,再加上运营成本和利润。游戏公司设计抽卡概率,那个“综合概率”本质上也是一个期望值,只不过在宣传上做了包装。理解了期望,你就能看懂很多商业设计背后的算盘。

1.2 两条基本性质,后面全靠它

期望有两条非常实用的性质,后面算方差、协方差,甚至做线性回归都会反复用到。

第一条:E(aX + b) = aE(X) + b。意思是数据整体缩放和平移,期望也跟着缩放和平移。比如一个部门所有人的工资统一加 500 块,平均工资也加 500;统一打八折,平均工资也变成原来的 0.8 倍。这个性质让人安心,因为现实中的单位换算、基准调整都能直接作用在期望上,不用重新算一遍数据。

第二条:E(X + Y) = E(X) + E(Y)。两个变量之和的期望,等于各自期望之和。关键在于,这个性质不需要 X 和 Y 独立,任何情况下都成立。听着像废话,但它是很多复杂推导的起点。比如你早上需要坐两趟地铁,总通勤时间的期望,就是两段路程期望时间之和,不管两趟车晚没晚点、有没有关联。

1.3 连续型变量与一个常见误区

如果随机变量不是离散的点,而是连续的,期望的定义就从“求和”变成“积分”:E(X) = ∫ x·f(x) dx,其中 f(x) 是概率密度函数。本质上还是加权平均,只是把每个点的概率换成了概率密度。理解这一点就够用了,暂时不需要纠结积分的细节。

但有一个误区必须单独拎出来说:期望值常常不是“最可能出现的值”。我见过很多新人拿到用户消费数据,一看平均值就觉得这是“典型用户”的消费水平。如果数据分布严重右偏,比如大多数用户只花几十块,少数大客户花几万,平均值会被少数人拉得很高,这时候平均值根本代表不了“大多数”。期望是数学上的概念,日常决策里碰到偏态分布,更重要的是中位数。不是期望错了,而是用错了场景。

2. 方差:衡量数据“散开”的程度

2.1 平均工资一样,日子过得可能完全不同

两家公司都宣传员工平均月薪 8000 元,听起来差不多。但第一家员工收入在 7000 到 9000 之间浮动,第二家一半人拿 3000,一半人拿 13000。你会选哪家?绝大多数人会选第一家,因为“稳定”。

平均值只告诉我们数据中心在哪里,却完全没告诉我们数据有多分散。方差(Variance)就是专门描述分散程度的指标。它量化的是:每个数据点离平均值平均偏离了多远——只不过这个“多远”是用偏差的平方来算的。

为什么需要这个指标?因为现实中只看平均值会骗人。两个班级平均分一样,一个班成绩均衡,一个班两极分化,教学策略完全不同;两支股票平均收益率一样,一个波动平稳,一个大起大落,投资体验和风险完全不同。方差就是把“波动”变成数字的那个工具。

2.2 为什么一定用平方

假设一组成绩是 60、70、80、90、100,平均值是 80。每个数据点减平均值,得到一组偏差:-20、-10、0、10、20。如果直接把偏差加起来,结果是 0。

不是因为这组数据不分散,而是正负偏差互相抵消了。事实上任何一组数据,偏差之和永远等于 0。所以直接用偏差总和衡量离散度没有任何意义。

那怎么办?两种思路:取绝对值,或者取平方。取绝对值算出来叫平均绝对偏差,取平方算出来就是方差。

平方还有一个额外的好处:对偏离大的点惩罚更重。一个偏离 20 的点贡献 400,一个偏离 10 的点贡献 100,偏离越大的点对结果的拉动越猛。这和我们对“波动”的直觉是一致的——极端值确实意味着更大的不确定性和风险。

方差的定义式是 Var(X) = E[(X - E(X))²],也就是偏差平方的平均。还有一个等价形式:Var(X) = E(X²) - [E(X)]²,即“平方的均值减去均值的平方”。手工计算时用这个公式更省事,后面理解协方差也会有类似结构。

2.3 手算一个完整例子

还是那组成绩:60、70、80、90、100,平均分 80。

每个分数和平均分的偏差分别是 -20、-10、0、10、20;偏差平方分别是 400、100、0、100、400;加起来是 1000,除以 5,方差等于 200。

换一组数据:78、79、80、81、82,平均分同样是 80。偏差是 -2、-1、0、1、2,平方是 4、1、0、1、4,总和是 10,除以 5,方差等于 2。

两组成绩的平均表现一模一样,但方差从 200 变成了 2。如果这两组数据代表两个班级,你立刻能知道哪个班的成绩更均匀、教学效果更稳定。这就是方差的应用价值:它把“波动”变成了一个可比较、可排序的数字。

金融里讲收益波动,制造业里讲尺寸公差,运维里讲延迟抖动,本质上看的都是方差。方差越大,不确定性越大,风险越大。

3. 标准差:把单位拉回现实

3.1 开根号不只是一个数学动作

方差有个很尴尬的问题:单位被平方了。数据单位是“元”,方差单位就是“元的平方”;数据单位是“分”,方差单位就是“分的平方”。这种单位在现实里几乎没法解释——你告诉别人“这批零件尺寸的方差是 0.0001 毫米平方”,对方大概率一脸茫然。

标准差(Standard Deviation)就是对方差开根号,把单位拉回原数据的量纲。标准差 σ = √Var(X)。

还是那组成绩,方差 200,标准差就是 √200 ≈ 14.14 分。这句话翻译成大白话是:这些成绩偏离平均分大约 14 分左右。有了单位,就有了实际意义。

这就是为什么报告数据的时候,标准差比方差更常用。方差适合在数学推导和理论公式里使用,标准差适合在业务沟通和结果展示里使用。两者只是开根号的关系,但“14.14 分”和“200 分平方”给人的感觉完全不一样。

3.2 正态分布下的经验法则

如果数据近似服从正态分布,标准差会变成一把非常顺手的“尺子”,这就是著名的经验法则:

大约 68% 的数据落在平均值加减一个标准差的范围内;大约 95% 的数据落在平均值加减两个标准差的范围内;大约 99.7% 的数据落在平均值加减三个标准差的范围内。

这套法则在质量控制里用得极其普遍。比如一条生产线加工轴承,平均直径 50 毫米,标准差 0.01 毫米。某天突然出现一个 50.04 毫米的零件,距离均值超过 3 个标准差,按照 99.7% 的覆盖范围,这种极端值几乎不该出现,那设备大概率已经出问题了。这就是最朴素的异常检测思路。

我工作中做监控告警也经常用这个逻辑。指标突然冲出均值加减 3 个标准差的区间,系统自动报警,原理就是这么简单,但非常管用。

3.3 一个必须牢记的前提

经验法则只适用于正态分布或近似正态的数据。如果数据严重偏态,或者有双峰、多峰结构,套 68-95-99.7 会得出完全离谱的结论。

这一点我见过太多人忽略。很多可视化工具默认帮你画均值加减几倍标准差的区间,但你的数据如果不是正态分布,这个区间就没有意义。比如用户在线时长通常严重右偏,少数人挂机很久,大多数人几分钟就离开,直接套正态经验法则,画出来的区间毫无参考价值。用之前先看一眼分布形态,画个直方图或密度图,这是基本功。

4. 样本方差:那个让人困惑的 n-1

4.1 我们很少能拿到“总体”

前面讲的方差,严格来说叫总体方差——前提是你拥有全部数据。可真实世界里,几乎不可能拿到总体。

你想知道全市高中生的平均身高,不可能把每个学生拉来量一遍,只能抽样。想测一批灯泡的平均寿命,测完就烧坏了,更不可能全测。你手里永远只有一份样本,却想用它推断总体的性质。

这时候问题来了:直接用样本数据套总体方差公式,算出来的结果会系统性偏小。统计上称为“有偏估计”。为了让样本方差能更好地估计总体方差,统计学家把分母从 n 改成了 n-1:

样本方差 S² = 1/(n-1) × Σ(Xi - X̄)²

这就是传说中“样本方差除以 n-1”的来源。它不是一个随意的修正,背后是有数学证明的无偏估计。

4.2 两个直觉帮你不忘 n-1

第一个理解:样本均值是从样本数据里算出来的,它天然比总体均值更贴近这些样本点。用样本均值代替总体均值去计算偏差,偏差会比真实情况偏小,方差自然就被低估了。要让方差回到无偏的水平,就得除以一个更小的数。n-1 比 n 小,正好起到这种修正作用。

第二个理解:自由度。当你已经知道样本均值的时候,n 个样本点里只有 n-1 个是“自由”的。举个例子,三个数的均值是 10,前两个数你可以随便定,比如 8 和 12,第三个数就被均值锁死了,只能是 10。也就是说,真正提供独立信息的观测只有 n-1 个,自由度就是 n-1。

这两种理解都不是严谨证明,但能帮你建立不会错的直觉。等你真正需要较真的时候,再去看无偏性的严格推导也不迟。

4.3 工具里的分母坑

实际使用工具时,分母这个问题极容易踩坑。不同工具、不同函数的默认行为都不一致:

工具总体方差(除以 n)样本方差(除以 n-1)
ExcelVAR.PVAR.S
Python NumPynp.var(data),默认 ddof=0np.var(data, ddof=1)
pandasdf.var(ddof=0)df.var(),默认 ddof=1
Rvar() 默认就是样本方差var(),无需额外参数

我见过好几次团队对不上数据的场景:一个人用 Excel 的 VAR.S,另一个人用 Python 的 np.var() 默认参数,程序跑出来结果差一点,两拨人互相怀疑对方代码有问题,最后才发现是分母不一样。这种低级失误特别伤人。动手之前先确认工具默认行为,再统一口径,能省掉很多冤枉时间。

5. 协方差:两个变量的“同向程度”

5.1 从单变量走到双变量

前面几个概念都在描述单个变量:平均水平如何、波动多大。但现实里的问题几乎都是多变量的:广告投入和销售额是什么关系?温度和用电量是什么关系?身高和体重是什么关系?

协方差(Covariance)就是衡量两个变量“一起变化”程度的指标。它的定义式:

Cov(X, Y) = E[(X - E(X))(Y - E(Y))]

这个公式看着吓人,拆开看其实很直观。对每个数据点做两件事:看 X 比自己的平均值高还是低,看 Y 比自己的平均值高还是低,然后把两个偏差乘起来。

如果 X 偏高的时候 Y 也偏高,乘积为正;如果 X 偏低的时候 Y 也偏低,两个负数相乘,结果还是为正。当正的乘积占主导,协方差就是正的,说明两个变量同向变化。反过来,如果 X 偏高时 Y 反而偏低,乘积为负,协方差就是负的,说明两个变量反向变化。

理解了这个逻辑,你就明白协方差测量的不是“因果关系”,而是“运动方向的一致性”。

5.2 手算一次,彻底弄懂

假设统计了五个家庭的年收入 X(万元)和年储蓄 Y(万元):

X:10、20、30、40、50,平均值 30 Y:2、3、5、8、12,平均值 6

逐项计算 (X-30)(Y-6):

(10-30)×(2-6) = (-20)×(-4) = 80 (20-30)×(3-6) = (-10)×(-3) = 30 (30-30)×(5-6) = 0×(-1) = 0 (40-30)×(8-6) = 10×2 = 20 (50-30)×(12-6) = 20×6 = 120

把五个乘积加起来:80 + 30 + 0 + 20 + 120 = 250,除以 5,协方差等于 50。

结果为正,说明收入越高储蓄越多,方向符合直觉。你可以看到,五个乘积基本都是正的,只有一个 0 和一个较小的 20,正方向的一致性很强。这就是协方差告诉你的信息。

5.3 协方差最大的毛病:量纲

协方差有一个致命问题:它的数值大小没有绝对意义。还是上面收入和储蓄的数据,如果收入不是用“万元”而是用“元”来计量,收入数列变成 100000、200000、300000、400000、500000,重新算一遍,协方差会变成原来的 10000 倍。数据关系一点没变,算出来的数字却天差地别。

这意味着什么?意味着我们不能拿两个不同量纲的数据集的协方差去比较大小。一个协方差是 50,另一个是 30,你能说前者关系更强吗?不能。因为两者的计量单位可能完全不同,没有可比的基础。

要让“关系强弱”变成可跨数据集比较的数值,就必须消除量纲的影响。这就引出了下一个概念:相关系数。

6. 相关系数:标准化之后的可比尺度

6.1 标准化之后,一切变得可比

皮尔逊相关系数的定义式:

r = Cov(X, Y) / (σX × σY)

也就是把协方差除以两个变量各自标准差的乘积。这个操作相当于对 X 和 Y 分别做标准化,把它们统一到同一个无量纲的尺度上。经过这一步,r 的取值范围被牢牢限制在 [-1, 1] 之间,并有了明确的解读规则:

相关系数含义
r 接近 1强正相关,X 增大时 Y 明显增大
r 接近 -1强负相关,X 增大时 Y 明显减小
r 接近 0没有明显的线性相关关系

用前面收入和储蓄的例子算一下:X 的方差是 200,标准差约 14.14;Y 的方差是 13.2,标准差约 3.63;协方差是 50。于是:

r = 50 / (14.14 × 3.63) ≈ 50 / 51.33 ≈ 0.97

0.97 说明收入和储蓄之间存在非常强的正相关。注意,这个数字和收入用“万元”还是“元”已经没关系了,因为分子分母里的量纲被约掉了。这就是相关系数最大的价值:有界、无量纲、可跨数据集比较。

6.2 相关绝不等于因果,这是一条红线

所有统计概念里,最容易被误解的就是这一条。两个变量高度相关,绝不代表一个变量导致另一个变量。

最经典的例子:冰淇淋销量和溺水人数高度正相关,但冰淇淋不会导致溺水,真正原因是夏天的气温同时影响了两者。再比如,某座城市的咖啡消费量和软件从业者数量高度相关,但这不是喝咖啡催生了软件行业,背后很可能是人口规模和产业结构这两个共同因素在同时起作用。

做业务分析时,如果仅凭相关系数就下因果结论,轻则分析报告被领导打回,重则基于错误归因做出错误决策。相关系数只能告诉你“它们有联动”,因果关系的确认需要更严谨的实验设计、因果推断方法,以及扎实的业务判断。

6.3 低相关不等于没关系

皮尔逊相关系数还有一个经常被忽略的边界:它只刻画线性相关的程度。如果两个变量之间存在完美的非线性关系,相关系数可能非常接近 0。

举个例子,X 取 -2、-1、0、1、2,Y 分别取 4、1、0、1、4。这组数据里 Y 和 X 的关系非常确定,就是 Y = X²,但算相关系数,会发现它几乎等于 0。因为随着 X 增大,Y 先下降后上升,线性趋势互相抵消了。

所以,看到 r 接近 0 时,正确的解读是“没有明显的线性关系”,而不是“两个变量没关系”。拿到数据先画散点图,这是最便宜的检查手段。散点图里能看出线性、曲线、异方差、离群点等大量信息,比单看一个相关系数可靠得多。

7. 综合案例:这些概念怎么一起用

7.1 选基金,期望和标准差一起看

假设你在两只基金之间做选择。过去 12 个月的月收益率:

基金 A:平均收益率 1.2%,标准差 0.5% 基金 B:平均收益率 1.2%,标准差 3%

只看平均收益,两只基金一模一样。结合标准差,基金 A 的收益波动远小于基金 B,确定性更高。大多数风险偏好保守的人会把 A 视为更稳妥的选择。

但这里也要说清楚:标准差小只说明历史波动小,不代表未来一定安全。有些投资者恰恰愿意承担更大波动,去博取潜在的超额收益。关键是理解期望和标准差的配合关系——期望回答“平均在哪里”,标准差回答“有多不确定”。只看其中任何一个,对数据的认识都是残缺的。

7.2 资产组合里的相关系数应用

接着上面的例子,如果你同时持有基金 A 和基金 B,并且算出它们过去一年的相关系数是 0.85,这意味着两只基金的涨跌方向高度同步。表面上看你买了两只不同的基金,但在风险面前它们几乎是一体的:市场下跌时,它们大概率一起跌,分散配置的意义被大幅削弱。

反过来,如果两只基金的相关系数接近 0 甚至为负,组合风险就能真正被分散。一个下跌时另一个可能还在上涨,整体资金的波动会小于单只基金的波动。这就是现代投资组合理论里最基本的思想:不只看单个资产的期望和方差,还要关注资产之间的协方差和相关系数。

这个逻辑在金融之外同样适用。比如供应链管理里评估多个供应商的交货风险,如果两个供应商都依赖同一家上游原料商,它们的风险相关性就很高,一个出问题另一个大概率也出问题。看相关系数,本质上是在评估不确定性会不会叠加。

8. 常见误区与代码速查

8.1 六个坑,每个都有人踩过

把前面提到的坑集中整理一遍,都是实际工作中真实遇到过的。

第一,把期望当作预测值。期望是长期平均,不保证单次结果。掷骰子的期望是 3.5,但你每一把只能掷出 1 到 6 里的一个整数。

第二,混淆方差和标准差的单位。方差是平方单位,很难直接解释;标准差和原始数据同单位,适合做描述和汇报。告诉别人“方差是 200 分平方”基本没意义,说“标准差是 14.14 分”对方立刻能理解。

第三,样本方差分母选错。分析抽样数据时用 n-1;只有拿到完整总体才用 n。工具默认值五花八门,计算前务必确认。

第四,跨量纲比较协方差。协方差数值受量纲影响,不能拿两个不同数据集的结果直接比大小。要比关系强弱,去看相关系数。

第五,相关系数低就认为没关系。低相关只说明线性关系弱,可能存在明显的非线性关系。先画散点图,再下结论。

第六,把相关当因果。这是最贵的一个错误,尤其在做业务决策时。永远记住:相关关系不等于因果关系,中间可能隔着一个你还没发现的共同原因。

8.2 Python 实操速查表

最后给一份可以直接上手的代码:

import numpy as np import pandas as pd data = np.array([60, 70, 80, 90, 100]) # 期望/均值 mean = np.mean(data) # 总体方差和标准差(分母 n) var_pop = np.var(data) # ddof=0,NumPy 默认 std_pop = np.std(data) # ddof=0 # 样本方差和标准差(分母 n-1) var_sample = np.var(data, ddof=1) std_sample = np.std(data, ddof=1) # 协方差矩阵和相关系数矩阵 x = np.array([10, 20, 30, 40, 50]) y = np.array([2, 3, 5, 8, 12]) # np.cov 默认 ddof=1,返回的是样本协方差矩阵 cov_mat_sample = np.cov(x, y) # 要算总体协方差矩阵,手动指定 ddof=0 cov_mat_pop = np.cov(x, y, ddof=0) # np.corrcoef 返回相关系数矩阵,对角线为 1 corr_mat = np.corrcoef(x, y)

特别提醒:np.cov 默认按样本协方差(ddof=1)计算,而 np.var 默认按总体方差(ddof=0)计算。两个函数的默认行为不一致,混用之前一定要看文档、做验证。

Excel 这边的对应函数也列一下:

统计量Excel 函数
均值(期望的样本版)AVERAGE
总体方差VAR.P
样本方差VAR.S
总体标准差STDEV.P
样本标准差STDEV.S
总体协方差COVARIANCE.P
样本协方差COVARIANCE.S
相关系数CORREL

我自己这些年用下来的体会是,这六个概念不用死记公式,真正值钱的是建立直觉:期望就是加权平均,方差衡量散开程度,标准差把单位拉回现实,样本方差的 n-1 是对估计偏差的修正,协方差看两个变量运动方向是否一致,相关系数是在统一尺子上衡量这种一致性有多强。把这层关系想通了,再去看机器学习里的特征选择、金融里的风险评估、产品里的指标分析,会发现很多“高级”的东西都是这些基础概念的组合。统计这东西,一旦在脑子里有了画面感,真的不用再背公式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询