为你的数据选择合适的分布:8个实用的概率分布应用场景和选择指南

news/2025/9/24 4:28:59/文章来源:https://www.cnblogs.com/dBjZoQ833/p/19108460

拿到数据想建模,但不知道用哪个分布?大部分教科书都在讲一堆你永远用不到的东西。实际工作中,你只需要掌握几个核心分布,然后知道什么时候该用哪个就够了。

这里是我在做分析、实验设计、风险建模时真正会用的8个分布。每个都会告诉你使用场景、快速拟合方法、需要避开的坑,以及现成的代码。

伯努利分布:最基础的二元事件

点击还是不点击,欺诈还是正常,用户流失还是留存。单次试验的成功失败问题,用伯努利分布就对了。

但是数据严重不平衡时别硬套伯努利,记得做校准处理。比如欺诈检测场景,正负样本比例差太多的话,直接用p估计会有偏。

import numpy as np
y = np.array([0,1,0,1,1,0,0,1])
p = y.mean() # MLE for Bernoulli
samples = np.random.binomial(1, p, size=10000)
二项分布:多次试验的累计结果
用户看了10次广告点了几次?50封邮件打开了多少?这种"N次机会中成功K次"的场景,二项分布最合适。

如果试验之间有关联(比如同一用户多次看广告),方差会比理论值大。这时候考虑用Beta-二项分布,能更好处理过度分散的情况。

from scipy.stats import binom
n, x = 50, 17
p_hat = x / n
ci = binom.interval(0.95, n, p_hat) # simple CI on counts
泊松分布:计数事件的标配
每分钟客服电话、每小时系统故障、每平方米缺陷数。这些稀有且相互独立的计数事件,泊松分布处理起来最直接。

方差远大于均值的话,说明数据过度分散了。这种情况泊松分布就不够用,得换负二项分布(实际上是泊松和伽马的混合)。

from scipy.stats import poisson
counts = [0,1,0,2,1,0,3,1]
lam = np.mean(counts)
pmf = poisson.pmf(np.arange(6), lam)
正态分布:数据分析的主力
KPI的平均值、传感器噪声、大样本的误差分析。正态分布虽然被用烂了,但在合适的场景下确实好用。

轻微偏斜或者有异常值的话,正态分布的估计就会偏。小样本或者明显厚尾的数据,直接上学生t分布更稳妥。

from scipy.stats import norm
mu, sigma = np.mean(counts), np.std(counts, ddof=1)
cdf90 = norm.cdf(90, mu, sigma)
学生t分布:处理小样本和异常值
数据有明显的厚尾特征,或者样本量不够大?正态分布容易被异常值带偏,这时候t分布更靠谱。测量数据偶尔出现的异常峰值、小样本的均值估计,都适合用它。

别把t分布当万能药。真的有严重异常值,还是得先清理数据或者做winsorizing处理,t分布只是比正态分布抗造一些。

from scipy.stats import t
nu = 5

probability a standardized value is within 2 std

prob = t.cdf(2, df=nu) - t.cdf(-2, df=nu)
指数分布:等待时间建模
用户点击通知后多久会打开APP?系统两次故障之间间隔多久?只要是"等待第一次事件发生"的时间建模,而且事件发生率恒定,指数分布就很合适。

率参数λ,均值是1/λ。

from scipy.stats import expon
lam = 0.2
samples = expon(scale=1/lam).rvs(10000) # mean ≈ 1/lam
对数正态分布:处理乘性过程
用户会话时长、单用户收入、文件大小这些数据往往是多个正数因子相乘的结果。如果把数据取对数后看起来接近正态分布,那对数正态分布就是你要的。

尾部数据会严重拖累均值,做报告或者假设检验时用中位数和几何均值更稳定。

from scipy.stats import lognorm
sigma, mu = 0.8, 1.2
rv = lognorm(s=sigma, scale=np.exp(mu))
q95 = rv.ppf(0.95)
Beta分布:概率的概率
要建模转化率、缺陷率、分类器召回率这些本身就是概率的量?Beta分布天生就是干这个的。配合二项数据做贝叶斯推断特别好用。

α和β太小的话分布会很尖锐。做先验设置时要合理,比如α=β=1是均匀分布,α=β=2是相对温和的先验。

from scipy.stats import beta
alpha0, beta0 = 2, 2
x, n = 17, 50
posterior = beta(alpha0 + x, beta0 + (n - x))
credible = posterior.interval(0.95) # 95% credible interval for p
快速选择合适的分布
遇到具体问题,按这个思路走基本不会有错:

二元结果直接伯努利。N次试验中成功K次用二项,不过如果方差明显大于理论值就换Beta-二项。计数类型的用泊松,过度分散就上负二项。

均值类的数据优先考虑正态,有厚尾或者样本小就用t分布。等待时间且发生率恒定选指数,发生率会变化就考虑韦伯分布。

正数且明显右偏的数据试试对数正态,或者你想直接控制均值和形状参数的话用伽马分布也行。要建模概率本身,Beta分布是唯一选择。

拟合验证的技巧
别急着套公式,先画图。直方图能立刻告诉你数据的偏斜程度和异常情况,对数直方图对于长尾数据特别有用。

参数估计用最大似然或者矩估计都行,但是一定要用残差图和QQ图验证拟合效果。信息准则AIC/BIC比较不同分布的优劣,或者简单点用留出集的对数似然。

最重要的是模拟验证。用拟合好的分布生成数据,看看均值、方差、分位数是不是和原始数据对得上。如果对不上,说明这个分布选错了,哪怕拟合图看起来很漂亮也没用。

下面是通用代码模板

import numpy as np
import pandas as pd
from scipy import stats
def fit_and_score(sample, candidate):
params = candidate.fit(sample) # generic MLE
ll = np.sum(candidate.logpdf(sample, params))
k = len(params)
aic = 2
k - 2*ll
return params, aic

data = np.array([...], dtype=float)
cands = [stats.norm, stats.t, stats.lognorm, stats.gamma]
scores = [(c.name, *fit_and_score(data, c)) for c in cands]
best = min(scores, key=lambda r: r[-1]) # lowest AIC
一个真实案例:客服票据建模
之前做过的一个客服系统的分析,每小时票据数平均是2.1张,但方差居然有5.7。按泊松分布的理论,方差应该等于均值才对,这明显过度分散了。

后来换成负二项分布重新建模,预测误差直接降了18%。更重要的是,人力排班计划变得稳定多了,不会再因为周末突然来一波高峰把大家搞得措手不及。

所以有时候选对分布真的能解决实际问题。

总结
分布选择其实就是在讲故事,讲数据是怎么产生的。从最简单合理的故事开始,老老实实验证效果,只有数据真的需要的时候才考虑更复杂的模型。

这样做对你自己好,对业务方也好。没人喜欢过度复杂的东西,除非它真的有用。
更多案例:
github.com/yjrtfn/cd/issues/285
github.com/yjrtfn/cd/issues/284
github.com/yjrtfn/cd/issues/283
github.com/yjrtfn/cd/issues/282
github.com/yjrtfn/cd/issues/281
github.com/yjrtfn/cd/issues/280
github.com/yjrtfn/cd/issues/279
github.com/yjrtfn/cd/issues/278
github.com/yjrtfn/cd/issues/277
github.com/yjrtfn/cd/issues/276
github.com/yjrtfn/cd/issues/275
github.com/yjrtfn/cd/issues/274
github.com/yjrtfn/cd/issues/273
github.com/yjrtfn/cd/issues/272
github.com/yjrtfn/cd/issues/271
github.com/yjrtfn/cd/issues/270
github.com/yjrtfn/cd/issues/269
github.com/yjrtfn/cd/issues/268
github.com/yjrtfn/cd/issues/267
github.com/yjrtfn/cd/issues/266
github.com/yjrtfn/cd/issues/265
github.com/yjrtfn/cd/issues/264
github.com/yjrtfn/cd/issues/263
github.com/yjrtfn/cd/issues/262
github.com/yjrtfn/cd/issues/261
github.com/yjrtfn/cd/issues/260
github.com/yjrtfn/cd/issues/259
github.com/yjrtfn/cd/issues/258
github.com/yjrtfn/cd/issues/257

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wordpress网站映射简历电子版模板免费下载

原标题:Linux Kernel 4.4.19 LTS长期支持版发布摘要:近日,内核开发者Greg Kroah-Hartman公布了长期支持的Linux 4.4 Kernel系列第19个维护版本的细节。Linux 4.4是目前最新的LTS内核分支,被Arch Linux, Solus和Ubuntu Linux等众多…

五百亿建站模板重庆建工集团股份有限公司官网

BigDeciaml1. BigDecimal1. BigDecimal 我们知道,关于金钱相关的计算,都用BigDeciaml数据类型, 来表示金额。所有关于金额的项目中不能缺少它的使用。 而我今天说说用这个类型,踩到的坑。 金额比较问题 带精度不适用equals比较。使用compar…

浙江网站建设推广公司哪家好百度服务电话

** Java学习 第三章 数组(三)排序算法 ** 主要内容:排序算法、排序算法横向比较、Arrays工具类的使用、数组常见异常 1.数组中涉及到的常见算法:排序算法 1.1 排序算法分类:内部排序和外部排序 1.2 十大内部排序算…

专业手机网站建设推荐长春几个火车站啊

科技巨头的AI之战持续上演,而财报季是一窥AI成色的重要窗口。 谷歌和微软这对在多个领域均正面对决的科技巨头,又在同一日发布了财报,而这次相比上季度,战局似乎迎来了反转。 上季度,谷歌不仅成功抵御了Bing联手ChatG…

龙岩做网站开发价格京津冀协同发展意义

mvn archetype:create -DgroupIdcom.mycompany.app -DartifactIdmyWeb -DarchetypeArtifactIdmaven-archetype-webapp 转载于:https://www.cnblogs.com/alaricblog/p/3278239.html

网站特效 站长做属于公司的网站有什么好处

计算机网络21-40 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用21、HTTPS是如何保证数据传输的安全,整体的流程是什么?(SSL是怎么工作保证安全)对称加密非对称加密消息认证码 (MAC)数字证书 22、如何保证公钥不被…

网站的关键词可以取消吗济南百度提升优化

作为一个芯片公司打杂人口,往往需要一个皮实耐打上天入地的编辑器… 一、先附上github路径,方便取走 git clone gitgithub.com:qqqw4549/vim_config_c_verilog.git 二、效果展示 支持ctrl]函数/模块跳转,支持cscope字串全局代码搜索 依赖&am…

天津百度爱采购重庆整站优化的电话销售

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象, 从客户端取…

如何宣传商务网站网站怎样优化seo

目录 流程控制之条件判断 2.1.if语句语法 2.1.1单分支结构 2.1.2双分支结构 2.1.3多分支结构 2.2.案例 例一: 例2: 例3: 例4: 例5: 例6: 例7: 例8: 例9: 2.3.case多条件判断 2.3.1.格式 2.3.2.执行过程 例10: 流程控制之条件判断 2.1.if语句语法 2.1.1单分…

佛山市手机网站建设企业企业大黄页

/Bin存放系统命令 /etc存放系统命令及配置文件的数据库 /lib存放C语言的库函数、数据库 /mnt存放可拆装的软件 /Tmp存放临时文件 /user存放用户目录 转载于:https://www.cnblogs.com/Ewin/archive/2008/12/22/1360111.html

怎么查找网站是谁做的建站开发软件

每个开发都会涉及到一个工作,就是网站开发。开发过程势必会涉及到需要对网站加速的部分,很多开发同学对此都很是头疼。 想让网站跑起来飞快,必须用上个网站加速神器,很多人都会推荐CDN。CDN的原理就是把网站文件提前搬到全国各地…

网站建设维护课件ppt销售渠道策略

使用PostMan可以方便快速的进行跨域测试。 只需要在请求头中手动添加一个Origin的标头,声明需要跨域跨到的域(IP:端口)就行,其余参数PostMan会自动生成。添加此标头后,请求会被做为一条跨域的请求来进行处…

资中移动网站建设wordpress move导入数据

个人主页:insist--个人主页​​​​​​ 本文专栏:网络基础——带你走进网络世界 本专栏会持续更新网络基础知识,希望大家多多支持,让我们一起探索这个神奇而广阔的网络世界。 目录 一、网络设备的概述 二、常见的网络设备 1、…

中国建设银行网站对公业务大连市建设学校网站

华为PPPOE配置实验 网络拓扑图拓扑说明电信ISP设备配置用户拨号路由器配置查看是否拨上号是否看不懂? 看不懂就对了,只是记录一下命令。至于所有原理,等想写了再写 网络拓扑图 拓扑说明 用户路由器用于模拟家用拨号路由器,该设备…

网站设计及建设合同怎么做网站地图的样式

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文描述了如何使用…

西安网站建设哪家好一些移动免费网站建设

目录 1.Feign传文件报错,Feign不支持上传文件需要借助外面的依赖才可以实现上传 2.服务之间通过Feign相互调用传递DTO(实体对象)报错 1.Feign传文件报错,Feign不支持上传文件需要借助外面的依赖才可以实现上传 具体报错内容: FileUploadException: the request was reje…

河北高端网站设计公司集团公司网站推广方案怎么做

喜欢就关注我们吧!最新的 Windows Insiders Preview Build 为 WSL2 的命令行程序增加了新功能:wsl --mount,这个新参数支持在 WSL2 添加和挂载物理磁盘,用户通过它能访问 Windows 没有原生支持的 Linux 文件系统(例如 …

开设购物网站的方案wordpress微信营销

MySQL的表逻辑分区是一种数据库设计技术,它允许将一个表的数据分布在多个物理分区中,但在逻辑上仍然表现为一个单一的表。这种方式可以提高查询性能、简化数据管理,并有助于高效地进行大数据量的存储和访问。逻辑分区基于特定的规则&#xff…

建设官方网站查询企业网站建设xplogo

新学期开始了,这篇文章收到了很多人的评论有很多地方不懂,所以写下了以下的文章--续篇 首先使用RecyclerView也好还是使用ListView,更或是GridView你都要先构思需要什么 这些东西无一例外通常都是用在列表显示下,那么需要一些&a…

cn域名注册网站个人微信公众号

前言: 我们在开发web程序时呢,定义了一个控制器类Controller,请求会被部署在Tomcat中的Controller接收,然后Controller再给浏览器一个响应。 而在请求响应的过程中是遵循HTTP协议的。 但是,在Tomcat这类Web服务器中&a…