☰
【老计带你懂概率统计】04:随机变量与概率分布,把不确定性变成可计算的数
2026/10/24 5:35:38 网站建设 项目流程

【老计带你懂概率统计】04:随机变量与概率分布,把不确定性变成可计算的数

开头:从单个事件到会变化的量

前面两篇,我们讨论的大多是单个事件的概率,硬币正面、得病与否、阳性阴性。可现实里,我们更常面对的,是一个会随机取不同值的量。

明天的最高气温是多少度?这次促销能卖出多少件?一个用户在页面上会停留多少秒?一天会接到多少个报障电话?这些量的取值都是不确定的、随机的,但它们又不是完全没规律,某些值更常出现、某些值很罕见。怎么用数学来刻画这种"会随机取值、但有规律"的量?

这就要请出概率统计里两个核心的工具,随机变量和概率分布。它俩是把飘忽的不确定性,变成能计算、能分析的数学对象的关键一步。理解了它们,你才能在后面认识那些大名鼎鼎的具体分布(正态分布、二项分布等),也才能真正读懂数据背后的规律。

随机变量:给随机结果贴上数字标签

先说随机变量。名字有点唬人,其实特简单。

随机变量,就是把随机事件的结果,用一个数字表示出来的变量。它的取值随着随机结果的不同而变化,所以叫随机变量。

举几个例子:

  • 抛一枚硬币,规定正面记为1、反面记为0,这个"0或1"就是一个随机变量。
  • 掷一个骰子,点数1到6,这个点数就是随机变量。
  • 明天的气温、今天的销量、用户停留的秒数,都是随机变量。

说白了,随机变量就是给那些不确定的结果,贴上一个数字标签,好让我们能对它做数学处理(求平均、算波动、画分布)。有了这个数字化的桥梁,飘忽的随机现象就能被计算了。

为什么非要转成数字不可?因为只有变成了数字,我们才能对不确定性做运算和比较。你没法直接对"正面还是反面"求平均,但你可以对"1和0"求平均(得到0.5,正好是正面的比例);你没法比较"下雨"和"晴天"谁大,但把某种损失量化成数字后,就能算不同天气下的平均损失、据此做决策。这一步数字化,看似平平无奇,其实是概率统计能成为一门可计算的科学、能被搬进计算机让AI使用的根本前提。现实世界五花八门的不确定现象,一旦都被翻译成随机变量这种统一的数字语言,就都能用同一套数学工具来处理了,这正是它的威力所在。

随机变量分两大类,这个区分很重要:

  • 离散型随机变量:取值是一个个分开的、可数的值。比如骰子点数(只能是1到6这几个整数)、一天的报障电话数(0个、1个、2个……)。它的特点是取值"跳着来",中间没有连续的过渡。
  • 连续型随机变量:取值是某个范围内的任意实数,可以无限细分。比如气温(可以是25.3度、25.34度、25.347度……)、身高、时间。它的特点是取值"连成一片"。

离散和连续的区别,直接决定了怎么描述它们的概率,这是下面的重点。

概率分布:每个取值有多大可能

光有随机变量还不够,我们想知道它取每个值的可能性有多大,这就是概率分布要回答的。

概率分布,描述的就是一个随机变量取各个可能值的概率是怎么分配的。它就像一张地图,告诉你这个随机变量的概率都堆在哪儿、哪些值常见、哪些值罕见。

因为离散和连续的取值方式不同,描述它们分布的工具也不同,分别叫概率质量函数和概率密度函数。

离散的世界:概率质量函数

对离散型随机变量,我们可以直接说出它取每个具体值的概率。这个"每个值对应多大概率"的函数,叫概率质量函数。

比如一个公平骰子,概率质量函数就是:取1的概率1/6、取2的概率1/6……取6的概率1/6。清清楚楚,每个值一个概率,全部加起来等于1。

打个比方:离散分布像把一斤面粉,分成几小堆放在几个固定的点上,每堆多重(概率多大)一目了然。骰子就是把总概率1,平均分成6堆放在1到6上。

离散分布的特点是可以问"取某个具体值的概率是多少",这个问题有意义、有明确答案。

连续的世界:概率密度函数(一个反直觉的点)

对连续型随机变量,情况变得微妙又有趣。这里有个让新手困惑的点,我讲透。

问:气温正好是25.000000度(无限精确)的概率是多少?答案是0。因为连续变量可以取无限多个值(25.1、25.01、25.001……无穷无尽),任何一个精确的点,概率都是0。

那连续分布还怎么描述?答案是,我们不问取某个精确点的概率,而是问取某个区间的概率。比如"气温在25到26度之间"的概率,这才有意义。

描述连续分布用的是概率密度函数。注意,密度不等于概率本身,它描述的是概率在某个位置的"密集程度",某段区间的概率,等于密度函数在这段区间下方围成的面积。密度高的地方,取值更密集、更可能落在附近;密度低的地方,取值稀疏。

打个比方:连续分布像把一斤面粉,均匀又不均匀地撒在一条长桌上(有的地方厚、有的地方薄)。你问某一个数学点上有多少面粉,答案是0(点没有宽度);但你问某一段区间里有多少面粉(那段面粉的总量),就有意义了。密度函数描述的就是面粉在各处铺得多厚。

这个"连续变量单点概率为0、只能谈区间概率"的观念,是理解连续分布的关键,一开始反直觉,但想通面粉的比方就顺了。

累积分布函数:小于某个值的概率

还有一个通用又实用的工具,离散连续都适用,叫累积分布函数。

它回答的问题是:随机变量小于等于某个值的概率是多少。比如"气温不超过25度的概率"“销量在100件以下的概率”。

累积分布函数特别实用,因为现实中我们经常关心的就是这种"不超过多少""至少多少"的问题。它从0平滑(或跳跃)地增长到1,把一个值左边的所有概率都累加起来。知道了累积分布,你就能轻松算出任意区间的概率(用大的减小的),所以它是个万金油工具。

分布的形状:不只是集中在哪

认识了分布这个工具,再帮你建立一个看分布的眼光,一个分布长什么形状,藏着大量信息,远不止"平均值在哪"这么简单。

一个分布,你至少可以从这几个方面去看它的形状。一是集中在哪,概率的大头堆在哪个位置(这关系到后面要讲的期望、中位数)。二是分散程度,是紧紧挤成一团,还是散得很开(这关系到方差、标准差,是第07篇的主角)。三是对不对称,是像正态分布那样左右对称的钟形,还是歪向一边。比如收入分布就是典型的右偏,大多数人收入不高、挤在左边,少数高收入者拖出一条长长的右尾巴,这种歪斜叫偏度。四是尾巴粗不粗,也就是极端值出现的概率高不高。有的分布尾巴很薄,极端情况几乎不会发生;有的分布尾巴很厚(叫肥尾),极端事件比你以为的要常见得多。

这个"尾巴"的概念极其重要,尤其在金融和风控里。很多灾难性的事件(金融危机、系统雪崩),本质就是那些被低估了的肥尾事件。做SRE关心的长尾延迟,也是这个道理,平均响应时间很好看,但那条长尾里的慢请求,恰恰是伤害用户体验的元凶。所以看一个分布,别只盯着中间那个鼓包,更要留意它的尾巴,很多风险和机会都藏在尾巴里。学会看分布的完整形状,是从"看平均"进阶到"看全局"的关键一步。

我们用代码分别画出一个离散分布和一个连续分布,直观感受。输入:分布参数。输出:分布图形和概率。

# 依赖:pip install numpy scipy matplotlibimportnumpyasnpfromscipyimportstats# ===== 离散例子:掷骰子的概率质量函数 =====faces=[1,2,3,4,5,6]pmf=[1/6]*6print("骰子概率质量函数(每个点数的概率):")forf,pinzip(faces,pmf):print(f" 点数{f}:{p:.3f}")print("所有概率之和:",sum(pmf))# 等于1# ===== 连续例子:标准正态分布 =====dist=stats.norm(0,1)# 均值0,标准差1的正态分布# 单点"密度"(不是概率):print("\n正态分布在x=0处的密度值:",round(dist.pdf(0),3))# 区间概率(用累积分布函数相减):P(-1 < x < 1)p_interval=dist.cdf(1)-dist.cdf(-1)print("落在[-1,1]区间的概率:",round(p_interval,3))# 累积分布:小于等于0的概率(正态对称,应为0.5)print("小于等于0的概率(累积分布):",round(dist.cdf(0),3))# 如果装了matplotlib,可以画出密度曲线看看形状(此处省略绘图,逻辑如下)# xs = np.linspace(-4, 4, 200); ys = dist.pdf(xs); plt.plot(xs, ys)

运行输出(示例):

骰子概率质量函数(每个点数的概率): 点数1: 0.167 点数2: 0.167 点数3: 0.167 点数4: 0.167 点数5: 0.167 点数6: 0.167 所有概率之和: 0.9999999999999999 正态分布在x=0处的密度值: 0.399 落在[-1,1]区间的概率: 0.683 小于等于0的概率(累积分布): 0.5

运行你会看到:骰子每个点数概率都是0.167、加起来是1;正态分布在0处密度约0.399(这是密度不是概率),落在正负1之间的概率约0.68,小于等于0的概率是0.5。这段代码把离散的概率质量、连续的密度和区间概率、以及累积分布,都实际算了一遍,你能清楚看到离散用具体概率、连续用密度和区间的差别。

在AI和现实里怎么用

  • 在AI里:概率分布无处不在。模型的输出常常是一个概率分布(分类模型输出各类别的概率、大模型预测下一个词的概率分布);很多模型假设数据服从某种分布(比如假设误差服从正态分布),这个假设直接影响模型设计;生成模型(上个系列的GAN、扩散模型)本质就是在学习数据的概率分布,然后从中采样生成新样本。
  • 在现实里:理解分布,你看数据就不再只盯着一个平均值,而会关心它的整体分布形态,销量的分布是集中还是分散、收入的分布是不是被少数高值拉偏、响应时间的分布尾巴长不长(这直接关系到SRE关心的长尾延迟)。看分布,比看单个数字,信息量大得多。

小结与承上启下

  • 随机变量:给随机结果贴上数字标签,好让不确定性能被计算,分离散(取值可数、跳着来)和连续(取值连成一片)两类。
  • 概率分布:描述随机变量取各个值的概率如何分配,是一张概率地图。
  • 离散用概率质量函数(每个值一个明确概率),连续用概率密度函数(单点概率为0、只谈区间面积)。
  • 累积分布函数:小于等于某值的概率,离散连续通用,算区间概率的万金油。

这一篇我们建立了随机变量和分布的框架,但还比较抽象。接下来就该认识那些真正在现实和AI里反复出现的具体分布了。它们各有各的脾气、各自对应着一类现象。下一篇,我们一次性认识伯努利、二项、泊松、正态等几个必须掌握的分布,看看什么样的现象对应什么样的分布。

我们下一篇见。

延伸阅读

  • SciPy 官方文档:统计分布(scipy.stats,本篇代码用的库):https://docs.scipy.org/doc/scipy/reference/stats.html
  • NumPy 官方文档:随机采样:https://numpy.org/doc/stable/reference/random/index.html

(说明:以上为官方公开文档地址,可能随版本调整,如打不开可用标题搜索。)

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

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

立即咨询