TwoProportionTestScenario
Statistics scenarios · Implementation: mlsysim/engine/scenario_definitions/statistics.py.
Construct this scenario with keyword inputs. The fields below show the types and defaults declared by this class.
A two-arm test sized to detect an absolute lift on a baseline_rate at the normal quantiles z_alpha and z_beta, on daily_requests split between arms.
family_size uncorrected tests at significance give the familywise error.
Notes
Equation: The normal planning approximation uses 2*p*(1-p)*(z_alpha+z_beta)**2/lift**2 per arm.
Assumptions: Independent Bernoulli samples, equal arms, a nonzero lift, and declared normal quantiles.
Excludes: Sequential peeking, correlated samples, and multiplicity correction; familywise_error assumes independent tests.
References
Derivation: Delegates sample planning to mlsysim.physics.statistics.calc_two_proportion_sample_size and detectable lift to calc_two_proportion_detectable_lift. Their equal-arm normal approximation combines two Bernoulli variances with significance/power quantiles. The familywise error uses the complement of all independent tests avoiding a false rejection.
Examples
>>> from mlsysim import Scenarios
>>> s = Scenarios.CtrLiftExperiment
>>> s.total == 2*s.per_variant
TrueAttributes
| Name | Description |
|---|---|
| available_per_variant | |
| baseline_rate | |
| collection_time | Hours to collect the combined sample target at the supplied daily request rate. |
| confidence | |
| daily_requests | |
| family_size | |
| familywise_error | Probability of at least one false rejection under independent tests with the supplied significance. |
| lift | |
| lift_squared | Squared absolute probability difference used for sample planning. |
| per_variant | Continuous sample count per arm from the two-proportion normal approximation. |
| power | |
| relative_lift | |
| significance | |
| target_rate | Alternative response probability formed by adding absolute lift to baseline. |
| total | Combined continuous sample count across the two equally sized arms. |
| two_variance | Sum of two Bernoulli variances at the common planning baseline. |
| z_alpha | |
| z_beta | |
| z_sum_squared | Squared sum of the supplied normal quantiles for significance and power. |
Methods
| Name | Description |
|---|---|
| detectable_lift | Smallest absolute lift n_per_variant users per arm can detect (default: |
detectable_lift
engine.scenario_types.TwoProportionTestScenario.detectable_lift(
n_per_variant=None,
)Smallest absolute lift n_per_variant users per arm can detect (default: available_per_variant). Added 2026-10-20.
Equation: n = available_per_variant if n_per_variant is None else n_per_variant; calc_two_proportion_detectable_lift(baseline_rate, n, z_alpha, z_beta).
baseline_rate
Type: float.
Declared default: required.
lift
Type: float.
Declared default: required.
z_alpha
Type: float.
Declared default: required.
z_beta
Type: float.
Declared default: required.
daily_requests
Type: Optional[Quantity].
Declared default: None.
significance
Type: float.
Declared default: 0.05.
family_size
Type: int.
Declared default: 20.
confidence
Type: Optional[float].
Declared default: None.
power
Type: Optional[float].
Declared default: None.
relative_lift
Type: Optional[float].
Declared default: None.
available_per_variant
Type: Optional[float].
Declared default: None.
z_sum_squared
engine.scenario_types.TwoProportionTestScenario.z_sum_squared
Squared sum of the supplied normal quantiles for significance and power.
Equation: (z_alpha + z_beta) ** 2.
two_variance
engine.scenario_types.TwoProportionTestScenario.two_variance
Sum of two Bernoulli variances at the common planning baseline.
Equation: 2 * baseline_rate * (1 - baseline_rate).
lift_squared
engine.scenario_types.TwoProportionTestScenario.lift_squared
Squared absolute probability difference used for sample planning.
Equation: lift ** 2.
per_variant
engine.scenario_types.TwoProportionTestScenario.per_variant
Continuous sample count per arm from the two-proportion normal approximation.
Equation: calc_two_proportion_sample_size(baseline_rate, lift, z_alpha, z_beta).
total
engine.scenario_types.TwoProportionTestScenario.total
Combined continuous sample count across the two equally sized arms.
Equation: 2 * per_variant.
target_rate
engine.scenario_types.TwoProportionTestScenario.target_rate
Alternative response probability formed by adding absolute lift to baseline.
Equation: baseline_rate + lift.
collection_time
engine.scenario_types.TwoProportionTestScenario.collection_time
Hours to collect the combined sample target at the supplied daily request rate.
Equation: (total / daily_requests).to('hour').
familywise_error
engine.scenario_types.TwoProportionTestScenario.familywise_error
Probability of at least one false rejection under independent tests with the supplied significance.
Equation: calc_independent_success(significance, family_size).