
1. 从一个反直觉的赌局说起为什么平均值经常骗人先抛一个我亲身经历过的场景。几年前帮一个做小生意的朋友看账他每个月流水波动特别大好的时候能到八万差的时候只有一万出头。他自己算了个平均月流水大概四万五然后拿这个数去规划开支结果连续三个月现金流紧张。问题出在哪他算的平均没错但他忽略了一个关键信息——这个平均值到底稳不稳。四万五这个数字可能是每个月都稳定在四万五也可能是像他这样在八万和一万之间来回跳。这两种情况平均值一模一样但风险天差地别。这就是单变量统计量里最核心的一对概念期望和方差。期望告诉你中心在哪方差告诉你离中心有多远、有多散。只盯着期望做决策就像只看一个人的平均身高去判断他能不能打篮球——信息量远远不够。这篇内容我想把这两个统计量彻底讲透。不是教科书式的定义罗列而是从为什么需要它们它们各自在算什么怎么手算、怎么用代码算什么情况下会踩坑这几个角度把期望和方差这两个单变量统计量拆开揉碎。适合刚学概率统计的学生、需要做数据分析的从业者以及任何想搞明白平均值到底靠不靠谱的人。读完你应该能做到拿到一组数据不仅算出它的期望和方差还能说清楚这两个数字背后的含义和局限。2. 期望不只是平均数而是长期反复试验的稳定值2.1 期望的两种面孔离散型与连续型很多人第一次接触期望老师会说期望就是加权平均。这话对但不够。期望的本质是如果你把同一个随机试验重复无数次所有结果的平均值会趋近于一个固定值这个值就是期望。注意这里的关键词是重复无数次和趋近。期望不是某一次试验的结果而是一个理论上的长期稳定值。对于离散型随机变量期望的计算公式是每个可能取值乘以它对应的概率然后全部加起来$$E(X) \sum_{i} x_i \cdot P(X x_i)$$举个具体的例子。掷一个均匀的六面骰子每个面出现的概率都是 1/6那么期望是$$E(X) 1 \times \frac{1}{6} 2 \times \frac{1}{6} 3 \times \frac{1}{6} 4 \times \frac{1}{6} 5 \times \frac{1}{6} 6 \times \frac{1}{6} 3.5$$注意3.5 这个数永远不会出现在骰子上但它是长期掷骰子的平均结果。这就是期望反直觉的地方——它可以是实际不可能取到的值。对于连续型随机变量求和变成积分概率变成概率密度函数$$E(X) \int_{-\infty}^{\infty} x \cdot f(x) , dx$$这里 f(x) 是概率密度函数。连续型的期望理解起来更抽象但核心思想一样把取值按密度加权后积分。2.2 期望的线性性质一个极其好用的工具期望有一个性质用起来非常爽叫做线性性质$$E(aX bY c) aE(X) bE(Y) c$$其中 a、b、c 是常数X、Y 是随机变量。这个性质最厉害的地方在于它不要求 X 和 Y 相互独立。不管 X 和 Y 是什么关系这个等式都成立。为什么这个性质重要因为它让你可以把复杂的问题拆成简单的部分。比如你要算掷两个骰子点数之和的期望不用去列 36 种情况的概率分布直接算 E(XY) E(X) E(Y) 3.5 3.5 7。一步到位。我在实际做数据分析时经常用这个性质。比如一个电商平台要估算用户下单总金额的期望可以拆成下单件数的期望乘以单件价格的期望如果两者独立的话或者更复杂地拆成多个部分分别估算再相加。这种拆解思路能大幅简化计算。2.3 期望的陷阱它可能根本不存在这是很多人不知道的一个坑不是所有随机变量都有期望。最经典的例子是柯西分布它的概率密度函数是$$f(x) \frac{1}{\pi(1x^2)}$$这个分布看起来关于 0 对称直觉上期望应该是 0。但如果你真的去算积分$$\int_{-\infty}^{\infty} \frac{x}{\pi(1x^2)} , dx$$你会发现这个积分不收敛——正无穷和负无穷两边的拉扯永远达不到一个平衡值。所以柯西分布的期望不存在。这个例子告诉我们期望的存在性不是理所当然的需要满足一定的数学条件比如绝对可积。在实际数据中如果数据里有极端离群值样本均值也会被严重拉偏这时候用中位数可能比用均值更靠谱。这也是为什么收入数据通常报中位数收入而不是平均收入——少数极高收入者会把平均值拉得虚高。3. 方差衡量散不散的标尺以及它为什么用平方3.1 方差的定义与计算逻辑知道了期望我们知道了数据的中心。但光有中心不够还得知道数据围绕中心散得有多开。方差就是干这个的$$Var(X) E\left[(X - E(X))^2\right]$$翻译成人话先算出每个值和期望的差叫离差把离差平方然后求这个平方值的期望。方差越大说明数据越分散方差越小说明数据越集中。为什么用平方而不是直接取绝对值这是个好问题。用绝对值当然也能衡量离散程度那个叫平均绝对偏差但平方有几个数学上的好处平方函数处处可导方便做优化和推导平方后得到的方差有很好的代数性质比如 Var(XY) Var(X) Var(Y) 2Cov(X,Y)平方放大了大离差的影响使得方差对极端值更敏感但平方也有代价方差的单位是原始单位的平方。比如你测的是米方差单位就是平方米这在实际解释时不太直观。所以通常还会开个根号得到标准差$$\sigma \sqrt{Var(X)}$$标准差和原始数据同单位解释起来更自然。3.2 一个简化公式让手算快十倍方差有个等价的计算公式实际算的时候比定义式好用得多$$Var(X) E(X^2) - [E(X)]^2$$平方的期望减去期望的平方。这个公式为什么好用因为定义式需要你先算期望再算每个离差再平方再求期望步骤多。而这个公式只需要算两个期望E(X²) 和 E(X)然后一减就完事。用骰子验证一下。E(X) 3.5。E(X²) (149162536)/6 91/6 ≈ 15.167。所以 Var(X) 15.167 - 12.25 2.917。标准差约等于 1.708。注意这个简化公式虽然好用但在数值计算时有个坑。当 E(X²) 和 [E(X)]² 都很大且很接近时直接相减会导致灾难性抵消精度损失严重。实际编程时如果数据量级很大建议用定义式或者先做中心化处理。3.3 方差的性质哪些操作会改变它方差有几个常用性质理解了能帮你快速判断问题操作对期望的影响对方差的影响所有数据加常数 c期望加 c方差不变所有数据乘常数 a期望乘 a方差乘 a²两个独立变量相加期望相加方差相加两个变量相减期望相减方差相加不是相减最后一条特别容易搞错。X - Y 的方差是 Var(X) Var(Y)不是 Var(X) - Var(Y)。因为减法引入的负号在平方之后消失了。这个性质在做误差分析时非常重要——两个独立测量值相减误差不是变小而是变大了。4. 手算一遍从原始数据到期望和方差光看公式容易飘咱们拿一组具体数据从头走一遍。假设你记录了某台设备连续 10 天的日产量单位件[12, 15, 11, 14, 13, 12, 16, 11, 13, 13]第一步算期望样本均值把所有数加起来12151114131216111313 130。除以 10得到均值 13。第二步算每个值与均值的离差12 - 13 -1 15 - 13 2 11 - 13 -2 14 - 13 1 13 - 13 0 12 - 13 -1 16 - 13 3 11 - 13 -2 13 - 13 0 13 - 13 0第三步离差平方1, 4, 4, 1, 0, 1, 9, 4, 0, 0第四步求平方的平均总和 1441019400 24。这里有个关键选择除以 n 还是 n-1如果这 10 天就是全部数据总体除以 n10方差 2.4如果这 10 天是从更大范围里抽的样本除以 n-19方差 ≈ 2.667这个 n-1 叫贝塞尔校正。为什么样本方差要除以 n-1直观理解是样本均值本身是用这组数据算出来的它已经消耗了一个自由度导致离差平方和系统性地偏小。除以 n-1 能纠正这个偏差让样本方差成为总体方差的无偏估计。实际做数据分析时绝大多数情况我们处理的是样本所以默认用 n-1。第五步开根号得标准差总体标准差 √2.4 ≈ 1.549样本标准差 √2.667 ≈ 1.633。这组数据的期望是 13标准差约 1.6说明日产量大多在 13 上下 1.6 件的范围内波动。这个信息比单看平均 13 件有用得多——如果标准差是 5那说明生产极不稳定需要排查原因。5. 用代码算Python 和 Excel 的实操对比手算适合理解原理实际工作中当然用工具。我把常用的几种方式列出来顺便说说各自的坑。5.1 Pythonnumpy 和 statistics 的选择import numpy as np import statistics data [12, 15, 11, 14, 13, 12, 16, 11, 13, 13] # numpy 方式 mean_np np.mean(data) # 13.0 var_np np.var(data) # 2.4默认除以 n总体方差 var_np_sample np.var(data, ddof1) # 2.667除以 n-1样本方差 std_np_sample np.std(data, ddof1) # 1.633 # statistics 方式 mean_st statistics.mean(data) # 13.0 var_st statistics.variance(data) # 2.667默认除以 n-1 std_st statistics.stdev(data) # 1.633这里有个极易踩的坑np.var()默认ddof0算的是总体方差除以 n而statistics.variance()默认算的是样本方差除以 n-1。两个库的默认行为不一致如果你混用结果会对不上。我的习惯是只要不是明确处理完整总体一律显式写ddof1避免歧义。5.2 ExcelVAR.P 和 VAR.S 的区别Excel 里有两组函数VAR.P/STDEV.P除以 n用于总体VAR.S/STDEV.S除以 n-1用于样本老版本的VAR和STDEV函数等同于VAR.S和STDEV.S。我见过不少人用VAR.P去算样本方差结果偏小还找不到原因。记住一个简单规则除非你手里就是全部数据否则用带 .S 的版本。5.3 大数据量下的数值稳定性当数据量很大或者数值量级很高时直接套公式可能出问题。比如计算 10 亿个数的方差如果先算 E(X²) 再减 [E(X)]²两个大数相减可能损失大量有效数字。更稳的做法是Welford 在线算法它一边遍历数据一边更新均值和方差不需要存储全部数据数值稳定性也好def welford(data): n 0 mean 0.0 M2 0.0 for x in data: n 1 delta x - mean mean delta / n delta2 x - mean M2 delta * delta2 if n 2: return float(nan) return M2 / (n - 1) # 样本方差 print(welford([12, 15, 11, 14, 13, 12, 16, 11, 13, 13])) # 2.667这个算法在流式数据处理、实时监控场景里特别有用。我之前做一个传感器数据监控的项目数据是源源不断来的不可能全存下来再算就是用类似 Welford 的思路做在线统计。6. 期望和方差的实战应用三个真实场景6.1 场景一A/B 测试里判断哪个方案更好假设你做了一个网页改版想比较新旧两个版本的转化率。旧版 1000 次访问转化了 50 次新版 1000 次访问转化了 65 次。新版转化率 6.5% 高于旧版 5%但这是真实提升还是随机波动这时候就要用到期望和方差。把每次访问看作一次伯努利试验转化1未转化0转化率的期望是 p方差是 p(1-p)/n。旧版转化率的标准差约 √(0.05×0.95/1000) ≈ 0.0069新版约 √(0.065×0.935/1000) ≈ 0.0078。两个转化率之差 1.5%相对于各自的标准差来说不算小但要做严格判断还需要做假设检验。核心思路是光看期望转化率的差异不够还要看方差波动范围有多大。如果方差很大那点差异可能只是噪声。6.2 场景二投资组合的风险评估金融里期望和方差是基石概念。一支基金的预期收益率就是收益的期望风险通常用收益率的标准差来衡量。两支基金预期收益都是 8%但一支标准差 5%另一支标准差 15%显然第一支更稳。更进一步如果要把两支基金按比例组合组合的期望收益是加权平均但组合的方差不是简单加权——还要考虑两支基金的相关性。这就是马科维茨投资组合理论的核心通过分散化降低整体方差。这个例子完美说明了为什么不能只看期望方差以及协方差才是决定风险的关键。6.3 场景三生产质量控制工厂生产零件规格要求直径 10mm。抽检一批零件均值 10.02mm标准差 0.03mm。均值虽然偏离了 0.02mm但标准差很小说明生产很稳定稍微调整一下设备参数就能达标。如果均值 10.00mm 但标准差 0.15mm那问题就大了——虽然平均下来是准的但单个零件可能从 9.7 到 10.3 都有大量产品会超出公差范围。这个场景里方差直接对应不良率。假设直径服从正态分布公差是 ±0.1mm标准差 0.03mm 时超出公差的比例极小约 0.1%标准差 0.15mm 时超出公差的比例就相当可观了。这就是为什么制造业如此重视过程能力指数Cp、Cpk它们本质上都是在比较公差范围和标准差。7. 那些教科书不常讲但实际会遇到的坑7.1 方差的量纲问题与变异系数前面提过方差的单位是原始单位的平方解释起来别扭。比如你说这组数据方差是 2.4 件²没人能直观理解。所以实际汇报时通常用标准差。但还有一种情况比较两组量纲不同的数据谁更离散。比如一组是身高厘米一组是体重公斤直接比标准差没意义。这时候用变异系数CV$$CV \frac{\sigma}{\mu}$$标准差除以均值消掉了量纲变成一个相对指标。CV 越大说明相对波动越大。这个指标在比较不同量级的数据时特别有用。不过要注意当均值接近 0 时 CV 会爆炸这时候不能用。7.2 期望和方差对离群值的敏感度期望均值对离群值非常敏感。一组数据[1, 2, 3, 4, 100]均值是 22但中位数只有 3。一个极端值就能把均值拉飞。方差更敏感因为离差被平方了那个 100 贡献了巨大的方差。实际处理数据时如果发现均值和方差异常大第一件事应该是画个图看看有没有离群值。稳健的替代方案是用中位数代替均值用四分位距IQR代替标准差。IQR 是第 75 百分位减第 25 百分位不受极端值影响。7.3 独立性与方差可加性的前提前面说 Var(XY) Var(X) Var(Y)但这个等式只在 X 和 Y 不相关时成立。一般情况下$$Var(XY) Var(X) Var(Y) 2Cov(X, Y)$$如果 X 和 Y 正相关方差会比简单相加更大负相关则更小。很多人做误差传播分析时忘了协方差项导致结果偏差。判断能否忽略协方差项关键看两个变量是否独立或至少不相关。独立一定不相关但不相关不一定独立——这是概率论里一个经典的反直觉点。7.4 样本量对方差估计的影响样本量小的时候样本方差本身波动很大。用 5 个样本估出来的方差可能和真实方差差好几倍。所以做小样本分析时对方差相关的结论要格外谨慎。一般经验是样本量少于 30 时方差的估计就相当不稳定了这时候用 t 分布而不是正态分布来做区间估计会更准确。8. 从期望和方差延伸出去下一步该学什么期望和方差是单变量统计量的地基但只是开始。如果你已经掌握了这两个概念接下来几个方向值得深入协方差和相关系数从单变量扩展到双变量衡量两个变量之间的线性关系。这是理解回归分析的前提。高阶矩期望是一阶矩方差是二阶中心矩。三阶矩对应偏度衡量分布对称性四阶矩对应峰度衡量分布尖峭程度。这四个矩基本能刻画一个分布的大致形状。大数定律和中心极限定理前者说样本均值会趋近期望后者说大量独立同分布变量的和近似服从正态分布。这两个定理是统计推断的理论基石理解了它们才能明白为什么正态分布无处不在。条件期望和全期望公式E(X) E[E(X|Y)]这个公式在贝叶斯统计和机器学习里到处出现。它把复杂的期望计算拆解成先按条件算再对条件求期望两步。我自己学这部分的时候最大的体会是公式要背但更重要的是理解每个统计量在回答什么问题。期望回答中心在哪方差回答有多散协方差回答怎么一起变。把这些问题和对应的统计量对应起来遇到新场景时就知道该用哪个工具。最后分享一个我常用的检验方法每学完一个统计量就拿一组自己熟悉的数据比如每月开销、每天通勤时间手算一遍再用代码验证。手算的过程会逼你面对每一个细节而代码验证能帮你发现理解偏差。这个习惯让我在后来做数据分析时对每个数字背后的含义都心里有数而不是盲目相信工具输出。