Lightweight toolkit for binary A/B experiment analysis using aggregate counts.
Reason this release was yanked:
Renamed to abtestwise to avoid conflict with an existing XPKit product.
Project description
xpkit
A lightweight Python toolkit for binary A/B experiment analysis using aggregate count data. Version 0.1 combines frequentist and Bayesian summaries for binary proportions.
Install
Install from PyPI:
pip install xpkit
Development install
To work on the package locally (with the test dependencies):
pip install -e ".[dev]"
Quickstart
from xpkit import BinaryABTest
test = BinaryABTest.from_counts(
control_successes=120,
control_total=1000,
treatment_successes=145,
treatment_total=1000,
prior_alpha=1,
prior_beta=1,
n_simulations=100_000,
credible_interval=0.95,
seed=42,
)
result = test.run()
print(result.summary())
print(result.prob_lift_above(0.01))
prob_lift_above(0.01) gives the posterior probability that Treatment B improves
the metric by more than 1 percentage point.
Do-no-harm checks
prob_no_harm(margin) gives the posterior probability that Treatment B is not
worse than Control A by more than margin (in raw decimal units, so 0.005 means
0.5 percentage points). prob_harm_above(margin) is its complement.
result.prob_no_harm(0.005) # P(lift >= -0.005): B is not worse by more than 0.5pp
result.prob_harm_above(0.005) # P(lift < -0.005): B is worse by more than 0.5pp
Raw result values are also available:
result.to_dict()
Plotting
import matplotlib.pyplot as plt
result.plot_lift_distribution()
result.plot_probability_bar()
plt.show()
The lift distribution plot shows posterior lift in percentage points.
The probability bar plot shows:
P(Treatment B > Control A)
P(Control A > Treatment B)
Groups and sign convention
In product A/B testing terms:
- Control (A) is the baseline group.
- Treatment (B) is the test group or variant B.
- Lift is always Treatment B - Control A.
- Positive lift means Treatment B is better than Control A.
- Negative lift means Control A is better than Treatment B.
Scope (v0.1)
- Binary proportions only.
- Aggregate counts only.
- Two groups only.
- Frequentist: two-sided pooled two-proportion z-test.
- Bayesian: beta-binomial posterior simulation with default prior
Beta(1, 1). - Equal-tailed credible interval.
- Expected loss.
- Practical lift thresholds.
- Simple plots.
Development
Run tests with:
python -m pytest -q
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xpkit-0.1.1.tar.gz.
File metadata
- Download URL: xpkit-0.1.1.tar.gz
- Upload date:
- Size: 36.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bc7d3ebd4230aef24ac05f788b0f719aa21e564681ed07b95800b175d168160
|
|
| MD5 |
4426062c80e765409d07dca0c072e52d
|
|
| BLAKE2b-256 |
6a377135749259900e1ef57a5a9408aeed8f07d32e20fc87083e62650f21a514
|
File details
Details for the file xpkit-0.1.1-py3-none-any.whl.
File metadata
- Download URL: xpkit-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e70791fd0a1a2c0a7875efe591b0a374c1dc788943b36f8449fc34746011197
|
|
| MD5 |
6e5e030bb1e4885e628d5c74d7ced843
|
|
| BLAKE2b-256 |
7131c47b7d7b0f28e11bd34498e7a9102c83edb483dec8e564716da1abc89fd0
|