On this page

The cumulative exposures graph: Divergent lines

This article compares divergent lines with similar slopes against divergent lines with varying slopes. Divergent lines start from a common point and spread apart over time.

Divergent lines with similar slopes

Sometimes your cumulative exposure graph shows divergent lines with similar slopes. This happens when your experiment starts before all variants are ready.

Variant A starts receiving traffic on February 23 and Variant B on February 28, so the two lines run in parallel but stay apart.
Cumulative exposure with staggered variant starts
DateVariant AVariant B
Feb 20, 202600
Feb 21, 202600
Feb 22, 202600
Feb 23, 2026900
Feb 24, 20262120
Feb 25, 20263180
Feb 26, 20263970
Feb 27, 20265120
Feb 28, 2026606108
Mar 1, 2026692197
Mar 2, 2026753280
Mar 3, 2026871402
Mar 4, 2026988519
Mar 5, 20261,085618
Mar 6, 20261,207744
Mar 7, 20261,306884
Mar 8, 20261,396963
Mar 9, 20261,4791,044
Mar 10, 20261,6091,173
Mar 11, 20261,7361,255
Mar 12, 20261,8211,367
Mar 13, 20261,9291,478
Mar 14, 20262,0421,586
Mar 15, 20262,1601,677
Mar 16, 20262,2431,778
Mar 17, 20262,3531,885
Mar 18, 20262,4792,007
Mar 19, 20262,5872,112
Mar 20, 20262,7052,228
Mar 21, 20262,8202,337

In this example, the two variants began receiving traffic on two separate days, February 23 and February 28, producing a pair of staggered lines on the graph.

Don't begin an experiment until all variants are ready to receive traffic. Adding a new variant after the experiment is underway presents a misleading picture of the results, because the variants weren't subject to the same conditions for the same length of time.

The novelty effect

Another potential issue is the novelty effect: the newness of a treatment can sway experiment results. In the example above, users exposed to Variant A had more time to adjust to the new experience. Users exposed to Variant A also had more opportunities to trigger the primary metric, especially if it's an unbounded time metric, making the comparison between variants unequal.

A central requirement of experimentation is to ensure the only difference between treatment and control is the feature you're testing. This way, you know any differences you find result from causation, not correlation.

Divergent lines with different slopes

Your cumulative exposures graph can show divergent lines with different slopes for several reasons. If you're using a custom exposure event, users can receive old, cached variants of your experiment when they keep triggering the exposure event without triggering the assignment event.

For example, Amplitude can assign a user to the control variant without triggering the exposure event. If you later set the traffic allocation for the control variant to 0%, that user can return and trigger the exposure event without triggering a new assignment event. Amplitude counts that user as a control exposure.

This reasoning also applies to experiments with sticky bucketing on.

Both variants track each other to about 9,000 users, then the March 15 traffic allocation change sends Control climbing while the "on" variant creeps up on sticky-bucketed users alone.
Cumulative exposure with divergent slopes after a traffic change
DateControlOn
Mar 10, 20264,1504,090
Mar 11, 20266,1766,240
Mar 12, 20267,4837,569
Mar 13, 20268,1438,275
Mar 14, 20268,5518,684
Mar 15, 20269,0009,158
Mar 16, 202611,17510,405
Mar 17, 202614,11611,396
Mar 18, 202616,98412,320
Mar 19, 202619,35512,879
Mar 20, 202621,45113,424
Mar 21, 202623,40113,764

In this example, on March 15, the user rolled out their experiment to 100% for the control variant. Because the experiment uses sticky bucketing, the graph still shows the number of "on" users increasing after the user set the traffic allocation to 0%. This happens because Amplitude allocates variants when the SDK or API requests them, so the variant can stick to the user even if the user never receives it.

Sticky bucketing and traffic allocation

When you select sticky bucketing and change the traffic allocation, you don't get the target traffic allocation. Instead, you get a weighted average between the two allocations, because users who already have buckets stay in their buckets. You have to wait to get close to the target traffic allocation.

If your experiment has sticky bucketing turned on and you plan to roll out a variant after it ends, delete the appropriate branch in the code and remove the feature flag. If you don't want to make a code deployment, you can also turn off sticky bucketing.

Was this helpful?