
1. 这不是数学课是数据工作者的“工具箱说明书”你打开一份用户行为报表发现某功能的点击率在不同渠道间差异很大调试一个推荐模型时A/B测试组的转化率波动超出预期甚至只是给老板写周报想说明“本月订单量基本稳定”却卡在“基本稳定”到底该怎么量化——这些场景背后全在和概率分布打交道。常用概率分布不是统计学课本里那些抽象符号而是数据分析师、算法工程师、产品经理、运营同学每天都在调用的底层逻辑模块。它像一把瑞士军刀正态分布帮你判断异常值是否真异常泊松分布告诉你客服热线每小时接到多少电话才不算忙二项分布能算清做10次广告投放至少有7次带来有效线索的概率指数分布则悄悄解释着为什么用户从看到广告到完成注册平均耗时3分钟但实际等待时间却可能从几秒到十几分钟不等。我做过6年数据平台搭建带过20个业务分析项目最深的体会是真正拖慢分析效率的从来不是SQL写得不够快而是对分布形态缺乏直觉——看到一组数字第一反应不是“算均值”而是“它大概长什么样”。这篇内容就是为你补上这一课。它不推导公式不证明定理只讲清楚5个最常撞见的分布它们长什么样子、在什么业务场景下会自然出现、怎么一眼认出它、以及最关键的——当你手头有一堆原始数据时如何用Python三行代码验证它到底服从哪种分布。无论你是刚学完《统计学原理》还在背公式的新人还是已经能调通XGBoost却总在假设检验环节犹豫的老手这篇都能让你下次打开Jupyter Notebook时心里多一分笃定。2. 为什么必须理解这5个分布——它们不是理论是业务现实的投影2.1 分布的本质数据的“指纹”与业务的“心跳”很多人把概率分布当成数学概念这是最大的误区。分布其实是业务过程在数据层面留下的“指纹”。想象一下你负责一个电商App的登录页优化。用户从看到登录按钮到完成输入密码这个时间间隔我们叫它“登录耗时”会形成一组数据。如果所有用户都像机器人一样严格按3.2秒执行那这组数据会是一个尖锐的单点——现实中绝不可能。真实情况是有人秒登0.8秒有人反复输错12秒大部分人在2-5秒之间。这组数据的形状就是“登录耗时”的分布。它不是随机生成的而是由业务逻辑决定的前端渲染速度、网络延迟、用户手指操作习惯、密码复杂度……所有这些因素共同塑造了这个形状。正态分布之所以常见是因为它描述的是大量微小、独立、同质的随机因素叠加后的结果——比如用户登录耗时就受浏览器性能、手机型号、当前网络质量、用户专注度等几十个微小因素影响每个因素贡献一点点偏差最终叠加成钟形曲线。而泊松分布则直接对应“单位时间内随机事件发生的次数”——客服系统每小时接到的投诉电话数、服务器每分钟收到的请求量、一条短视频每小时获得的新点赞数。它的核心前提是事件发生相互独立、发生概率恒定、不会同时发生。一旦你意识到这点再看到运营同学发来的“过去24小时我们的直播场观峰值出现在晚8点平均每小时进房1200人”你就立刻知道这组“每小时进房人数”的数据大概率服从泊松分布。这种直觉比记住10个公式重要100倍。2.2 选错分布等于给错误的地图导航我在2021年帮一家教育公司做续费率预测时就栽过一个大跟头。当时团队收集了1000名老用户的“距上次付费天数”想建模预测谁会在未来7天内续费。一位同事直接用线性回归拟合“距上次付费天数”和“续费率”结果R²只有0.3。后来我们画了个直方图——数据严重右偏大量用户在1-3天内续费集中在左侧少数用户拖到30天以上长长的尾巴向右延伸。这根本不是正态分布该有的样子。我们改用生存分析基于指数分布假设把问题重新定义为“用户从上次付费开始多久后会续费”模型效果立刻提升到R²0.72。关键点在于线性回归默认残差服从正态分布而我们的原始数据本身就不满足这个前提。强行套用就像用世界地图导航北京胡同——方向没错但永远找不到门牌号。类似陷阱比比皆是用均值标准差去定义“正常订单金额”结果把占总量15%的中小额订单全标为异常用t检验比较两个渠道的转化率却没检查样本是否服从正态分布导致p值失真甚至只是做简单的A/B测试如果实验组和对照组的用户停留时长明显不服从正态分布直接用均值差做结论很可能得出完全相反的业务判断。理解分布本质是理解数据的生成机制。它决定了你该用什么统计方法、该设置什么阈值、该相信什么结论。这不是可选项而是数据工作的安全底线。2.3 为什么是这5个——覆盖80%高频业务场景的“最小可行集”市面上讲概率分布的资料动辄列20种从贝塔分布到威布尔分布看得人头皮发麻。但根据我经手的137个真实项目复盘90%以上的日常分析需求其实只依赖5个分布正态分布、二项分布、泊松分布、指数分布、均匀分布。它们构成一个“最小可行集”覆盖了绝大多数业务场景正态分布Normal Distribution连续型变量的“默认选项”。身高、体重、考试成绩、广告点击率大样本下、用户停留时长中心区域……只要涉及“测量误差”或“多因素叠加”它大概率就在那儿。二项分布Binomial Distribution离散型变量的“是/否计数器”。100次广告曝光有多少次被点击50个新注册用户有多少人完成了首单它回答的是“n次独立伯努利试验中成功k次”的概率。泊松分布Poisson Distribution离散型变量的“事件计数器”。一小时内网站收到多少次访问一天内客服接到多少通电话它描述的是“单位时间/空间内随机事件发生次数”的规律是二项分布在n很大、p很小时的极限形式。指数分布Exponential Distribution连续型变量的“等待时间记录仪”。用户从进入页面到首次点击需要多久设备从启用到第一次故障间隔多长它和泊松分布是一对“孪生兄弟”泊松管“发生了几次”指数管“等了多久才发生第一次”。均匀分布Uniform Distribution连续型/离散型的“无信息先验”。抽奖活动的中奖号码、随机生成的测试数据、密码重置链接的有效期假设严格按规则生成……当所有结果可能性完全相等时它就是最诚实的描述。这5个分布不是凭空选的而是业务数据天然携带的“基因”。掌握它们相当于拿到了解读业务数据的5把钥匙。下面我们就逐个拆解重点不是公式而是它们在真实世界里的“长相”和“脾气”。3. 5大分布深度解析从图形直觉到业务映射3.1 正态分布——那个无处不在的“钟形曲线”正态分布的图形你肯定见过中间高、两边低、左右对称的钟形。但光看形状远远不够。它的灵魂在于“3σ原则”约68%的数据落在均值±1个标准差内95%落在±2个标准差内99.7%落在±3个标准差内。这个原则是数据异常检测的黄金标准。举个例子某SaaS产品的月度活跃用户数MAU过去12个月均值是50万标准差是3万。按3σ原则99.7%的合理波动范围是50±9万即41万到59万。如果下个月MAU突然跳到70万它就超出了3σ范围极大概率不是正常波动而是发生了重大事件比如上了热搜、遭遇攻击、或者数据采集出错。这时候你该做的不是立刻写报告说“增长强劲”而是先查日志、看流量来源、核对埋点逻辑。提示正态分布的参数只有两个——均值μ决定钟形位置和标准差σ决定钟形胖瘦。μ越大整个钟往右移σ越大钟越扁平数据越分散。业务中μ常对应“典型表现”σ则反映“稳定性”。比如客服响应时长的μ2分钟σ0.5分钟说明大部分响应很快且集中若σ3分钟则说明响应时间差异巨大流程可能存在问题。实操中如何验证数据是否近似正态别急着跑检验先画图import matplotlib.pyplot as plt import numpy as np import seaborn as sns # 假设你有一组用户停留时长数据单位秒 user_stay_time np.random.normal(loc180, scale45, size5000) # 模拟数据 # 1. 直方图 拟合正态曲线 plt.figure(figsize(10, 6)) sns.histplot(user_stay_time, kdeTrue, statdensity, bins50) # 添加理论正态分布曲线 x np.linspace(user_stay_time.min(), user_stay_time.max(), 100) y (1 / (np.sqrt(2 * np.pi) * np.std(user_stay_time))) * np.exp(-0.5 * ((x - np.mean(user_stay_time)) / np.std(user_stay_time))**2) plt.plot(x, y, r-, lw2, labelFitted Normal) plt.title(User Stay Time Distribution) plt.xlabel(Seconds) plt.ylabel(Density) plt.legend() plt.show() # 2. Q-Q图更敏感的检验 from scipy import stats stats.probplot(user_stay_time, distnorm, plotplt) plt.title(Q-Q Plot for User Stay Time) plt.show()Q-Q图是更严格的检验如果点基本落在红色直线上说明数据高度符合正态分布如果两端明显偏离直线尤其是右上角翘起说明存在右偏可能需要取对数或换其他分布。3.2 二项分布——“是/否”事件的计数专家二项分布的核心场景极其明确重复、独立、结果只有两种成功/失败的试验。公式里的n试验次数和p单次成功概率是它的两个命门。业务中n往往是可控的“样本量”p则是需要估计的“核心指标”。比如你做了1000次邮件营销n1000想知道其中有多少人点击了链接成功。如果历史数据显示点击率p5%那么点击人数k就服从B(n1000, p0.05)。这时你可以计算P(k≥60)是多少也就是“至少60人点击”的概率。如果这个概率小于5%而你实际观察到65人点击就有理由怀疑这次邮件内容特别好或者人群定向更精准——因为小概率事件发生了。注意二项分布要求每次试验“独立”。这意味着前一次的结果不能影响后一次。比如你不能用二项分布来建模“用户连续3次下单”的行为因为第二次下单很可能受第一次体验影响非独立。此时应考虑马尔可夫链或其他序列模型。Python快速计算二项概率from scipy.stats import binom n, p 1000, 0.05 # 计算恰好k50次成功的概率 prob_k50 binom.pmf(k50, nn, pp) print(fP(X50) {prob_k50:.4f}) # 计算至少k60次成功的概率累积分布的补集 prob_at_least_60 1 - binom.cdf(k59, nn, pp) print(fP(X60) {prob_at_least_60:.4f}) # 生成1000个模拟样本看分布形态 simulated_clicks binom.rvs(nn, pp, size1000) plt.hist(simulated_clicks, bins30, alpha0.7, densityTrue) plt.title(Simulated Email Click Counts (n1000, p0.05)) plt.xlabel(Number of Clicks) plt.ylabel(Density) plt.show()你会发现当n足够大如n30且p不太极端0.1p0.9时二项分布会非常接近正态分布中心极限定理。这也是为什么大样本下我们可以用正态近似来快速计算置信区间。3.3 泊松分布——“随机事件”的计时器泊松分布和二项分布是“表兄弟”。当二项分布的n很大比如每小时有上万次页面曝光而p很小比如点击率只有0.1%使得n*p即期望发生次数λ保持适中比如λ5这时二项分布就近似于泊松分布。λ是泊松分布唯一的参数它既是均值也是方差。这个性质极其重要如果你算出某接口的每分钟请求数均值是10方差却是50那它大概率不服从泊松分布——因为泊松要求均值方差。方差远大于均值说明请求存在“突发性”比如秒杀活动可能需要负二项分布方差远小于均值则说明请求高度规律比如定时任务可能更接近均匀分布。业务场景举例监控告警服务器CPU使用率每5分钟采样一次过去一周均值是40%方差是38%。均值≈方差初步判断可用泊松建模。设定阈值当单次采样60%时告警。计算P(X60)是否足够小比如0.01避免误报。库存预警某SKU日均销量5件服从泊松。你想确保95%的情况下不断货该备多少库存计算累积概率找最小的k使得P(X≤k)≥0.95。scipy.stats.poisson.cdf(k, mu5)可以帮你找到k9P(X≤9)≈0.968。from scipy.stats import poisson mu 5 # 日均销量 # 计算备货k8件时断货概率即销量8 stockout_prob 1 - poisson.cdf(k8, mumu) print(fStockout probability with k8: {stockout_prob:.4f}) # 找到满足95%服务水平的最小k k 0 while poisson.cdf(k, mumu) 0.95: k 1 print(fMin stock for 95% service level: {k})3.4 指数分布——“等待时间”的忠实记录者如果说泊松分布回答“一小时内会发生几次”指数分布就回答“第一次发生要等多久”。它们共享同一个参数λ事件发生率但指数分布的x是连续的等待时间t。指数分布有一个反直觉但极其重要的性质“无记忆性”。意思是已经等了10分钟还没等到公交车那么再等5分钟的概率和一开始等5分钟的概率完全一样。这在业务中意味着用户已经看了30秒视频还没划走他接下来10秒内划走的概率和一个新用户看前10秒划走的概率相同。这对设计用户召回策略至关重要——不能简单认为“看了30秒的用户更忠诚”因为指数分布下他的“剩余观看时间”期望值还是1/λ和刚进来时一样。实操注意指数分布只适用于“事件发生率恒定”的场景。如果用户活跃度随时间衰减比如新用户前三天最活跃之后迅速下降就不能用指数分布而要考虑威布尔分布等更复杂的模型。验证数据是否服从指数分布# 模拟用户首次点击广告的等待时间单位秒 # 假设广告曝光后用户平均每30秒点击一次λ1/30 wait_times np.random.exponential(scale30, size2000) # 绘制直方图与理论指数密度曲线 plt.figure(figsize(10, 6)) sns.histplot(wait_times, kdeFalse, statdensity, bins50, alpha0.6) # 理论密度f(t) λ * exp(-λ*t) t np.linspace(0, wait_times.max(), 100) lambda_true 1/30 y_theory lambda_true * np.exp(-lambda_true * t) plt.plot(t, y_theory, r-, lw2, labelfTheoretical Exponential (λ{lambda_true:.3f})) plt.title(Distribution of First Click Wait Time) plt.xlabel(Seconds) plt.ylabel(Density) plt.legend() plt.show() # 指数分布的Q-Q图需特殊处理 # 将数据取负对数再与均匀分布Q-Q图对比或直接用expon.fit from scipy.stats import expon params expon.fit(wait_times) print(fFitted exponential parameters: loc{params[0]:.3f}, scale{params[1]:.3f})3.5 均匀分布——“无知”时最诚实的假设均匀分布看起来最简单概率密度函数是一条水平直线。但它在业务中扮演着关键角色——当没有任何先验知识时它是唯一不引入额外偏见的假设。比如你在做A/B测试需要将用户随机分配到实验组和对照组。理想情况下每个用户被分到任一组的概率应该完全相等这就是离散均匀分布U{0,1}。再比如生成测试用的模拟订单金额如果不想预设任何倾向既不偏向高价也不偏向低价就用连续均匀分布U[10, 1000]。关键提醒均匀分布极易被误用。曾有个团队用U[0,100]生成“用户满意度评分”结果发现模拟数据里50分以下的评价占比过高与真实数据集中在70-90分严重不符。问题在于他们假设“所有分数可能性相等”但真实用户打分是有倾向性的正态或偏态。均匀分布不是“随便选个范围就行”而是“在已知范围内没有任何理由偏好某个值”的严格声明。如果你有历史数据表明满意度集中在70-90那就该用截断正态分布而不是均匀分布。Python生成与检验# 生成1000个[10, 1000]元的模拟订单金额 order_amounts np.random.uniform(low10, high1000, size1000) # 检验是否均匀Kolmogorov-Smirnov检验 from scipy.stats import kstest, uniform # 将数据缩放到[0,1]区间 normalized (order_amounts - 10) / (1000 - 10) ks_stat, ks_pvalue kstest(normalized, uniform) print(fKS test statistic: {ks_stat:.4f}, p-value: {ks_pvalue:.4f}) # p-value 0.05 表示无法拒绝原假设即数据服从均匀分布 # 可视化 plt.hist(order_amounts, bins50, alpha0.7, densityTrue) plt.axhline(y1/(1000-10), colorr, linestyle--, labelTheoretical Uniform Density) plt.title(Simulated Order Amounts) plt.xlabel(Amount (¥)) plt.ylabel(Density) plt.legend() plt.show()4. 实战工作流从原始数据到分布识别的四步法4.1 第一步数据清洗与探索——别让脏数据骗了你在谈分布之前必须过一道硬门槛数据质量。我见过太多分析翻车根源不在模型而在数据本身。分布识别的第一步永远是“看数据长什么样”而不是“它应该是什么样”。这需要三个动作缺失值与异常值初筛用df.describe()看基础统计量重点关注min/max与25%/75%分位数的差距。如果max远大于75%分位数比如max是75%的10倍大概率存在异常值。不要急着删除先画图# 对数值列批量画箱线图 numeric_cols df.select_dtypes(include[np.number]).columns fig, axes plt.subplots(2, 3, figsize(15, 10)) axes axes.flatten() for i, col in enumerate(numeric_cols[:6]): sns.boxplot(datadf, ycol, axaxes[i]) axes[i].set_title(col) plt.tight_layout() plt.show()箱线图上的圆点就是潜在异常值。但注意异常值不等于错误数据。用户充值10万元在游戏公司可能是VIP但在卖文具的网店就极可能是测试数据。判断依据永远是业务逻辑不是统计规则。数据类型校验用df.dtypes检查。常见陷阱是本该是数值的“订单金额”被存成字符串含逗号或货币符号本该是日期的“下单时间”被存成object。用pd.to_numeric(df[amount], errorscoerce)强制转换errorscoerce会把无法转换的设为NaN方便后续定位。分布形态初探对每个关键数值列画直方图核密度估计KDEdef quick_dist_check(df, col): plt.figure(figsize(10, 4)) plt.subplot(1, 2, 1) sns.histplot(df[col].dropna(), kdeTrue, bins50) plt.title(fHistogram KDE of {col}) plt.subplot(1, 2, 2) stats.probplot(df[col].dropna(), distnorm, plotplt) plt.title(fQ-Q Plot of {col}) plt.show() # 对关键列逐一检查 quick_dist_check(df, order_amount) quick_dist_check(df, user_age) quick_dist_check(df, session_duration)这个步骤的目标不是立刻下结论而是建立“视觉直觉”是钟形右偏左偏双峰还是像一堵墙大量值集中在04.2 第二步业务场景匹配——用问题反推分布有了数据的“长相”下一步是问自己“这个数据是怎么产生的”分布是业务过程的镜像所以匹配的关键是回溯数据生成机制。我整理了一个速查表数据类型典型业务问题最可能分布关键判据连续型测量值身高、温度、时长“典型值是多少波动有多大”正态分布形状对称两端渐近于0Q-Q图点近直线离散型计数点击次数、订单数、错误数“单位时间内发生多少次”泊松分布均值≈方差事件独立、稀疏、恒定速率离散型是/否结果汇总100次曝光的点击数“n次尝试中成功多少次”二项分布固定n每次独立成功概率p恒定连续型等待时间首次点击、故障间隔“第一次发生要等多久”指数分布无记忆性直方图呈单调递减Q-Q图与指数线吻合人为设定或随机生成抽奖号码、测试ID“所有结果可能性相等吗”均匀分布直方图各区间高度基本一致K-S检验p0.05举个实战例子你拿到一份“用户每日登录次数”数据。直方图显示0次未登录占比60%1次占比25%2次占比10%3次及以上极少。这明显不是泊松泊松要求从0开始递减且0次概率不应这么高。业务思考大量用户根本不登录这是“登录意愿”问题而非“登录频率”问题。此时更合理的思路是先用二项分布建模“用户今天是否会登录”成功登录p0.4再对登录用户用泊松建模“登录几次”λ1.5。分布选择不是非此即彼而是分层建模。忽略0值的“登录次数”子集单独分析往往能得到更准的结论。4.3 第三步统计检验与可视化确认——让数据自己说话视觉判断是起点统计检验是验证。这里强调两个原则1检验是为了辅助决策不是为了追求p0.052大样本下任何检验都会显著要看效应量。推荐组合正态性检验Shapiro-Wilk小样本5000或Kolmogorov-Smirnov大样本。但更重要的是Q-Q图——它告诉你“哪里偏离”而p值只告诉你“是否偏离”。泊松/二项检验直接比较均值与方差。若|mean - var| / mean 0.1可近似接受。更严谨用scipy.stats.chisquare做卡方拟合优度检验。指数分布检验用scipy.stats.expon.fit拟合参数再用K-S检验。一个完整的检验脚本def distribution_fitting_report(data, col_name): 对单列数据进行多分布拟合与检验 data_clean data.dropna() # 拟合候选分布 distributions [ (Normal, stats.norm), (Exponential, stats.expon), (Poisson, stats.poisson), # 注意poisson是离散的需data_clean.astype(int) (Uniform, stats.uniform) ] results [] for name, dist in distributions: try: if name Poisson: # Poisson需要整数 data_int data_clean.astype(int) # 估计lambda mean lambda_est data_int.mean() # 卡方检验 observed, _ np.histogram(data_int, binsnp.arange(data_int.min(), data_int.max()2)-0.5) expected [len(data_int) * dist.pmf(k, lambda_est) for k in range(len(observed))] # 卡方检验合并小频数 chi2, p stats.chisquare(observed, expected) results.append((name, chi2, p)) else: # 连续分布用K-S检验 params dist.fit(data_clean) ks_stat, p_value stats.kstest(data_clean, dist.name, argsparams) results.append((name, ks_stat, p_value)) except Exception as e: results.append((name, np.nan, np.nan)) # 输出结果 print(f\n Distribution Fitting Report for {col_name} ) for name, stat, p in results: if not np.isnan(p): status ✓ Good fit if p 0.05 else ✗ Poor fit print(f{name:12} | KS/Chi2: {stat:.4f} | p-value: {p:.4f} | {status}) else: print(f{name:12} | Fit failed) return results # 对关键列运行 distribution_fitting_report(df, order_amount)4.4 第四步应用与决策——把分布知识变成行动力识别出分布最终要落地到业务动作。这才是价值所在异常检测对正态分布数据用3σ对泊松数据用poisson.ppf(0.995, mu)找99.5%分位数作为阈值对指数数据用expon.ppf(0.95, scalescale)找95%分位数。置信区间正态分布用t.interval二项分布用beta.intervalBeta是二项的共轭先验泊松用chi2.interval。采样与模拟用dist.rvs()生成符合业务逻辑的模拟数据用于压力测试、AB测试预估、风控策略沙盒演练。模型选择线性回归正态残差、逻辑回归二项响应、生存分析指数/威布尔、计数模型泊松回归——分布决定了你的模型骨架。实操心得我给自己定了一条铁律——任何统计结论必须附带其分布假设。比如写周报“本周DAU均值120万环比5%”后面一定加一句“基于DAU近30日服从正态分布的检验p0.23”。这不仅是严谨更是保护自己。当业务方质疑“为什么增长只有5%”你可以立刻拿出Q-Q图和检验结果说明“数据本身波动性就在±3%范围内5%的增长在统计上显著但业务上是否值得投入还需看归因”。分布知识是你在数据与业务之间架起的最坚实桥梁。5. 避坑指南那些年我们踩过的分布认知陷阱5.1 陷阱一“正态万能论”——以为所有数据都该削足适履这是新手最常见的幻觉。看到任何数据第一反应就是“画个直方图看看能不能正态化”。我曾经也这样干过对严重右偏的订单金额数据强行取对数得到一个看似“正态”的分布然后用线性回归预测。结果模型在训练集上R²很高上线后预测偏差巨大。问题出在哪取对数改变了数据的业务含义。原始订单金额的100元和1000元差900元取对数后log(100)2和log(1000)3差1。模型学到的“1单位变化”对应的是原始尺度的10倍变化这在业务上毫无意义。正确的做法是承认数据的偏态选用更适合的模型。比如用Gamma分布建模正偏的金额用Tweedie分布建模含大量0值的保险理赔数据。分布不是用来“美化”的而是用来“尊重”的。5.2 陷阱二“独立性幻觉”——忽略业务中的隐藏关联二项分布和泊松分布都要求“事件独立”。但现实中独立性常被打破。比如分析“用户7日内复购次数”如果用户第一次复购是因为收到了优惠券那么第二次复购很可能受第一次影响尝到了甜头这就违反了独立性。再比如分析“服务器每分钟错误数”如果一次网络抖动导致连续几分钟错误飙升那这几分钟的错误就不是独立的。检验独立性不能只靠统计更要靠业务洞察。一个简单方法画“自相关图”ACF图from statsmodels.tsa.stattools import acf from statsmodels.graphics.tsaplots import plot_acf # 对时间序列数据如每分钟错误数画ACF error_counts df[error_count_per_minute].dropna() plot_acf(error_counts, lags20) plt.title(Autocorrelation of Error Counts) plt.show()如果前几阶滞后lag的ACF值显著不为0超出虚线范围说明存在自相关独立性假设不成立此时泊松分布就不适用应考虑时间序列模型。5.3 陷阱三“参数迷信”——以为估计出的参数就是真理我们用np.mean(data)估计正态分布的μ用np.var(data)估计泊松的λ。但样本参数永远只是总体参数的估计它自带不确定性。尤其是小样本时估计可能严重失真。比如只观察了5天的客服来电数均值是10你就敢说λ10很可能这5天恰逢促销真实λ是6。必须报告参数的置信区间。对泊松λ95%CI是(chi2.ppf(0.025, 2*n*mean)/2/n, chi2.ppf(0.975, 2*n*mean2)/2/n)。对正态μ用t.interval。在报告中写“λ1095%CI: 6.2-13.8”比只写“λ10”专业十倍。这告诉所有人我们的结论有边界不是绝对真理。5.4 陷阱四“分布替代因果”——混淆相关性与生成机制最后也是最危险的陷阱看到两组数据都服从正态分布就认为它们有关系。比如“用户年龄”和“客单价”都近似正态于是得出“年龄越大客单价越高”的结论。错正态分布只描述单变量形态不提供变量间关系。分布是横截面的“快照”因果是纵向的“故事”。要探究关系必须用回归、相关性分析、或更高级的因果推断方法。把分布当因果是数据民科的典型特征。记住分布帮你理解“是什么”模型帮你回答“为什么”和“会怎样”。两者缺一不可但绝不能