Catalog PyPI
PACKAGE EXPLORERView in registry

ab-metric-eval

PyPI

Statistical analysis tools for A/B experiment metric evaluation

a/banalysiscausalcupedexperimenthypothesisinferencestatisticstesting
Versions collected1
Direct dependencies6From release 0.1.2
Last observed20 Oct, 17:30 UTC

README

Version 0.1.2 documentation

ab-metric-eval

Statistical analysis tools for A/B experiment metric evaluation.

ab-metric-eval provides two general-purpose functions for analysing experiment results from any pandas DataFrame — no Spark or platform-specific dependencies required.

Features

  • Experiment summaries — group-level enrollment counts, crossover and exclusion rates, and a daily enrollment timeline chart
  • Hypothesis testing — Welch's t-test (continuous) and proportions z-test (binary), with configurable significance level
  • CUPED variance reduction — optional pre-exposure covariate adjustment to increase statistical power
  • Winsorization — symmetric or asymmetric outlier clipping for continuous metrics
  • Pre-exposure bias testing — diagnostic check for randomisation imbalance before drawing conclusions
  • Flexible imputation — zero-fill or drop-missing strategies for pre/post pivoting

Installation

pip install ab-metric-eval

Quick start

import pandas as pd
from ab_metric_eval import generate_experiment_summary, analyze_experiment_metric

# df is a pandas DataFrame with one or two rows per unit
# (pre-exposure and post-exposure), containing at minimum:
#   experiment_group, analysis_unit_id, analysis_exclusion_flag,
#   crossover_flag, first_exposure_utc_date

# 1. Summarise enrollment and group balance
summary_df, enrollment_df, fig = generate_experiment_summary(df)

# 2. Run a hypothesis test on a continuous metric
summary, results, fig, winsor_summary = analyze_experiment_metric(
    df=df,
    metric_column="revenue",
    pre_exposure_eval_column="pre_revenue",   # optional, enables CUPED + bias test
    metric_type="continuous",
    winsorize_percentile=0.99,
    apply_cuped=True,
    alpha=0.05,
)

API reference

generate_experiment_summary(df)

Generates group-level summary statistics and a daily enrollment timeline.

Parameters

NameTypeDescription
dfpd.DataFramePer-unit experiment data. Required columns: experiment_group, name, analysis_unit_id, analysis_exclusion_flag, crossover_flag, first_exposure_utc_date. Optional: metric_time_window.

Returns (summary_df, enrollment_df, fig) — group summary, daily enrollment counts, matplotlib figure.


analyze_experiment_metric(df, metric_column, ...)

Runs a full statistical analysis on a single metric, including optional pre-exposure bias testing and CUPED adjustment.

Parameters

NameTypeDefaultDescription
dfpd.DataFrame—Per-unit data (pre- and/or post-exposure rows).
metric_columnstr—Post-exposure metric column to test.
pre_exposure_eval_columnstr | NoneNonePre-exposure metric column. Required for bias test and CUPED.
metric_typestr'continuous''continuous' or 'binary'.
winsorize_percentilefloat | tuple | NoneNoneWinsorization bounds. A single float (e.g. 0.99) clips symmetrically at the (1%, 99%) percentiles. A tuple (lower, upper) allows asymmetric clipping; use None for either end to skip that tail.
alphafloat0.05Significance level for the hypothesis test.
apply_cupedboolFalseApply CUPED adjustment (requires pre_exposure_eval_column; not supported for binary metrics).
imputation_strategystr'zero'How to handle units missing pre- or post-exposure rows after pivoting: 'zero' imputes with 0, 'drop' removes the unit.
include_exclusion_flagboolFalseIf False, units where analysis_exclusion_flag is True are removed.
include_crossover_flagboolFalseIf False, units where crossover_flag is True are removed.
bias_test_alphafloat | NoneNoneSignificance threshold for the pre-exposure balance diagnostic. When None, a graduated reporting scheme is used instead of a binary pass/fail.

Returns (summary_df, test_results_df, fig, winsorization_summary_df).


Data classes

ExperimentConfig and MetricDefinition are convenience dataclasses for grouping experiment parameters and metric definitions respectively.

from ab_metric_eval import ExperimentConfig, MetricDefinition

config = ExperimentConfig(
    expt_name="my-experiment",
    enrollment_date_start="2025-01-01",
    enrollment_date_end_incl="2025-01-31",
    analysis_date_start="2025-02-01",
    analysis_date_end_incl="2025-02-28",
    unit_type="userId",
)

metric = MetricDefinition(
    name="revenue",
    sql_expression="SUM(revenue)",
    description="Total revenue per user",
)

Source

github.com/five-blue-tiles/general-repo/tree/main/ab-metric-eval

Requirements

  • Python 3.8+
  • numpy >= 1.19
  • pandas >= 1.0
  • scipy >= 1.5
  • statsmodels >= 0.12
  • matplotlib >= 3.3
  • seaborn >= 0.11

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.27 Apr 20266

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
five-blue-tiles/general-repo

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:30 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:d7bc76c73289f8aeb017ba68b4b1d6b7cdd667a49d51b721ffcd448c3df05b93