模拟“假设”场景的 5 个 Scipy.stats 技巧

在本文中,我们将深入了解 scipy.stats,探索仅使用 NumPy 和 SciPy 设计高性能、严格模拟的五个基本技巧。

来源:KDnuggets

简介

Data is rarely static. Decisions are rarely risk-free.作为一名数据科学家,您经常被要求对业务假设进行压力测试、探索分布不确定性或模拟替代现实。

  • “如果我们的每日活跃用户获取成本翻倍怎么办?”
  • “如果我们的服务器流量在促销活动期间激增 300% 怎么办?”
  • “本季度我们的运营损失超过 50,000 美元的概率有多大?”
  • 回答这些假设问题需要从简单的点估计(如简单平均值)转向稳健的概率思维。虽然许多从业者可能会立即转向重型模拟引擎,但标准 Python 科学堆栈已经包含了用于此类建模的未充分利用的主力:scipy.stats。除了执行简单假设检验或计算 p 值的普遍声誉之外,scipy.stats 还提供了一个统一的编程接口,用于跨数十个连续和离散概率分布进行参数化、采样和计算风险指标。

    在本文中,我们将深入了解 scipy.stats,探索仅使用 NumPy 和 SciPy 设计高性能、严格模拟的五个基本技巧。

    1. 冻结分布以参数化场景

    在对场景进行建模时,您通常希望表示世界的不同状态:保守的基线、乐观的最佳情况和悲观的最坏情况。在标准程序代码中,您可以通过携带参数字典(例如位置 loc 和比例尺)来表示这些参数,并在每次需要评估概率或抽取样本时将它们解包到函数中。

    一种高级的面向对象模式是冻结分布。在 scipy.stats 中,调用分布类(例如 stats.norm、stats.lognorm 或 stats.gamma)并将参数直接传递给构造函数会返回一个“冻结”随机变量(rv_frozen 的实例)。

    输出:

    点估计预期收入:150,000.00 美元