HarshikaReddyUppula/ab-test-lab

GitHub: HarshikaReddyUppula/ab-test-lab

一款用于设计、分析和隐私保护 A/B 测试的 Python 工具包,提供样本量计算、序贯检验和差分隐私聚合功能。

Stars: 0 | Forks: 0

# ab-test-lab 一个用于设计、运行和**隐私保护** A/B 测试分析的轻量级 Python 工具包——专为生产级实验平台真正需要的功能而构建:准确的样本量计算、可靠的置信区间、不会因为“偷看”数据而失效的序贯检验,以及在用户级数据无法离开数据仓库时使用的差分隐私聚合。 ![Python](https://img.shields.io/badge/Python-3.11-3776AB?logo=python&logoColor=white) ![SciPy](https://img.shields.io/badge/SciPy-1.13-8CAAE6?logo=scipy&logoColor=white) ![PySpark](https://img.shields.io/badge/PySpark-3.5-E25A1C?logo=apachespark&logoColor=white) ![BigQuery](https://img.shields.io/badge/BigQuery-4285F4?logo=googlecloud&logoColor=white) ![Differential%20Privacy](https://img.shields.io/badge/Differential%20Privacy-✓-4B0082) ![Tests](https://img.shields.io/badge/tests-pytest-0A9EDC?logo=pytest&logoColor=white) ## 为什么会有这个项目 GitHub 上的大多数 A/B 测试“教程”仅止步于 `scipy.stats.ttest_ind`。而真正的生产级实验平台必须回答更棘手的问题: - *要检测到 1% 的提升,我实际上需要多少用户?* → 基于功效的样本量设计 - *我们昨天偷看了仪表盘并得出了结论。我们确定吗?* → 具备适当 alpha 消耗的序贯检验 - *我们可以对欧盟用户进行实验而不暴露用户级数据吗?* → 对聚合数据采用差分隐私 本工具包为上述每一项提供了简洁且经过测试的实现,并通过 notebook 展示了在公开数据集上的真实世界用法。 ## 架构 ``` flowchart LR subgraph Design D1[Sample-size calculator] D2[Power simulator] end subgraph Analyze A1[Frequentist tests] A2[Bootstrap CIs] A3[Sequential tests] end subgraph Private P1[Laplace mechanism] P2[Gaussian mechanism] P3[Private proportion test] end subgraph Scale S1[PySpark aggregations] S2[BigQuery user-level → bucketed] end D1 --> A1 D2 --> A1 A1 -.privacy noise.-> P1 A1 -.privacy noise.-> P2 S1 --> A1 S2 --> A1 ``` ## 库中包含的内容 ``` from ab_test_lab import design, analyze, private, simulate # 1. Design — 我需要多少用户? n = design.required_sample_size_proportion( baseline_rate=0.10, mde=0.005, alpha=0.05, power=0.80 ) # 2. Analyze — 增长是多少,带有 95% 的 CI? result = analyze.proportion_test( control_conversions=520, control_n=10_000, treatment_conversions=565, treatment_n=10_000, ) # result.lift, result.ci_lower, result.ci_upper, result.p_value # 3. Private — 相同的测试,在聚合数据上添加 (epsilon=1.0)-DP 噪声 private_result = private.private_proportion_test( control_conversions=520, control_n=10_000, treatment_conversions=565, treatment_n=10_000, epsilon=1.0, ) # private_result.lift, private_result.ci_lower, ... # 4. Simulate — 给定我实际的用户量曲线,我的功效是多少? power = simulate.power_simulation( baseline_rate=0.10, true_lift=0.01, n_per_arm=10_000, n_sims=2_000 ) ``` ## Notebooks | # | Notebook | 展示内容 | |---|---|---| | 01 | `01_design_and_analyze.ipynb` | 端到端流程:设计实验、模拟用户、分析结果 | | 02 | `02_privacy_preserving.ipynb` | 相同的测试,但采用差分隐私。隐私/效用边界 | | 03 | `03_case_study_at_scale.ipynb` | 在 BigQuery + PySpark 中分桶处理 Criteo Uplift 数据集(约 1400 万行) | ## 技术栈 | 层级 | 工具 | | --- | --- | | 核心统计 | `scipy.stats`、`numpy`、`statsmodels` | | 差分隐私 | 自定义 Laplace/Gaussian 机制(并使用 `diffprivlib` 进行对比) | | 规模演示 | PySpark、BigQuery | | 测试 | `pytest` | | Notebooks | Jupyter、Matplotlib、Seaborn | | 打包 | `pyproject.toml`(可通过 `pip install -e .` 安装) | ## 仓库结构 ``` ab-test-lab/ ├── ab_test_lab/ # library code (importable as `ab_test_lab`) │ ├── design.py # sample size & power │ ├── analyze.py # frequentist tests & CIs │ ├── sequential.py # sequential / always-valid inference │ ├── private.py # differential privacy mechanisms │ └── simulate.py # Monte Carlo simulations ├── notebooks/ # end-to-end demonstrations ├── tests/ # pytest suite ├── pipelines/ # PySpark + BigQuery scale demos ├── docs/methodology.md # methodology deep-dive └── pyproject.toml ``` ## 快速开始 ``` git clone https://github.com/HarshikaReddyUppula/ab-test-lab.git cd ab-test-lab python -m venv .venv && source .venv/bin/activate pip install -e ".[dev]" # 运行测试 pytest # 打开 demo jupyter lab notebooks/01_design_and_analyze.ipynb ``` ## 方法论 完整说明:[docs/methodology.md](docs/methodology.md)。主题包括: - 为什么当转化率较低时,标准的双比例公式会将 *n* 低估约 10%。 - “偷看问题”以及 Pocock 与 O'Brien-Fleming 消耗函数。 - 隐私/效用权衡:ε 能带来什么,它在可检测效应方面又需要付出什么代价。 - 何时使用此方法对比 Bayesian 框架(以及何时*两者*结合使用)。 ## 路线图 - [ ] **design** — 比例 + 连续样本量,集群随机化调整 - [ ] **analyze** — Welch's t-test、双比例 z-test、bootstrap 置信区间、CUPED 方差缩减 - [ ] **sequential** — Pocock 和 O'Brien-Fleming alpha 消耗;mSPRT - [ ] **private** — Laplace + Gaussian 机制、组合计费、隐私比例测试 - [ ] **simulate** — 功效曲线、偷看数据下的假阳性率验证 - [ ] **notebooks** — 01 设计+分析、02 隐私、03 规模化(Criteo + PySpark + BigQuery) - [ ] **tests** — ≥80% 代码覆盖率;通过 `hypothesis` 对噪声机制进行基于属性的测试 - [ ] **CI** — GitHub Actions:在 PR 上运行 ruff + pytest ## License MIT — 随意使用,尽情 fork,放心发布。
标签:A/B测试, Python, 假设检验, 安全规则引擎, 差分隐私, 数据隐私, 无后门, 统计分析, 逆向工具