milestone 4/4 Experiment conversion denominators
Choose the correct population for experiment conversion rates.
Social Product Analytics · Clean event retries, reconstruct ordered funnels, sessionize activity, and compare experiment conversions.
approach
Compare assigned members, including people who do nothing. A conversion is at least one purchase on or after assignment, through Jan 31. Counting purchases instead of members or using only active members biases the denominator. This query estimates rates, not statistical significance.
worked-example.sql
WITH results AS( SELECT a.member_id, a.variant, CASE WHEN EXISTS( SELECT 1 FROM social_events e WHERE e.member_id=a.member_id AND e.event_type='purchase' AND e.event_at>=a.assigned_at AND e.event_at<'2025-02-01' ) THEN 1 ELSE 0 END AS converted FROM experiment_assignments a ) SELECT variant, COUNT(*) AS assigned, SUM(converted) AS converted, ROUND(100.0*SUM(converted)/COUNT(*),2) AS conversion_pct FROM results GROUP BY variant;
data for this milestone
social_events6 columns · 22 rows
| idinteger · key | event_keytext | member_idinteger | event_typetext | event_attext | ingested_attext |
|---|---|---|---|---|---|
| 1 | a | 1 | view | 2025-01-01 10:00:00 | 2025-01-01 10:00:01 |
| 2 | b | 1 | signup | 2025-01-01 10:03:00 | 2025-01-01 10:03:01 |
| 3 | c | 1 | purchase | 2025-01-01 10:05:00 | 2025-01-01 10:05:01 |
| 4 | a | 1 | view | 2025-01-01 10:00:00 | 2025-01-01 10:10:00 |
| 5 | d | 2 | view | 2025-01-02 09:00:00 | 2025-01-02 09:00:01 |
showing 5 of 22 rows
experiment_assignments3 columns · 8 rows
| member_idinteger · key | varianttext | assigned_attext |
|---|---|---|
| 1 | control | 2025-01-01 09:00:00 |
| 2 | control | 2025-01-02 08:00:00 |
| 3 | treatment | 2025-01-03 08:30:00 |
| 4 | treatment | 2025-01-04 09:00:00 |
| 5 | control | 2025-01-05 10:00:00 |
showing 5 of 8 rows