Declare experiments, metrics, and fact sources in YAML. Increment builds the queries and runs them on DuckDB, Snowflake, BigQuery, or Postgres via Ibis.
from increment import Analysis# con is an Ibis connection to your warehouseresults = Analysis.from_definitions( experiment_name="checkout_redesign", definitions_path="definitions/", con=con,).run()
03 / Segments
The average isn't the whole story.
Break results out by customer segment. Compare lifts and intervals to see where the treatment effect differs.
Illustrative values · 3 segments · 14-day daily trend to final read
Metric
Segment
Lift %
Lift
Daily lift
Revenue per User
New users
+1.0% [-2.1%, +4.1%]
Returning
+3.6% [+1.0%, +6.2%]
Enterprise
+5.8% [+2.6%, +9.0%]
Pricing Page v2 · by segment
Illustrative values · 3 segments · 14-day daily trend to final read
Metric
Segment
Lift %
Lift
Daily lift
Revenue per User
New users
+1.0% [-2.1%, +4.1%]
Returning
+3.6% [+1.0%, +6.2%]
Enterprise
+5.8% [+2.6%, +9.0%]
Illustrative output with synthetic values, not a real experiment.
04 / Personalization
Find who benefits most.
Go beyond average lift. Estimate how treatment effects vary with customer characteristics, score new customer profiles, and build targeting rules from experiment data.
Illustrative estimates and intervals, not experiment results. Engagement is measured before the experiment. Relative lift divides each profile's conversion change by its fixed 10% control conversion rate.
Conditional treatment effects
Relative lift in purchase conversion (%)
Profile
Relative lift
New customer
Low engagement
New customer
High engagement
Returning customer
Low engagement
Returning customer
High engagement
Conditional treatment effects
Relative lift in purchase conversion (%)
Profile
Relative lift
New customer
Low engagement
New customer
High engagement
Returning customer
Low engagement
Returning customer
High engagement
05 / Statistical methods
Methods with their assumptions stated.
CUPED variance reduction, sample-ratio-mismatch checks, multiple-comparison corrections, power planning, sequential monitoring under stated assumptions, and IPTW, DML, or AIPW for observational treatments. Not every method works with every metric or design, and unsupported combinations are refused rather than silently changed. See the compatibility guide and statistical limitations.
from increment import Analysis, Method, MetricSpecresults = Analysis.from_unit_summary( df, # one row per unit, with a pre-experiment revenue column unit="user_id", group="variant", control="control", metrics=[MetricSpec(name="revenue", type="mean", covariate="pre_revenue")],).run( decision_method=Method(name="unadjusted"), sensitivity_methods=(Method(name="cuped", variance_reduction="cuped"),),)