Skip to content

A/B holdout

An A/B holdout shows you, with your own orders, how size-related returns compare with and without TryYourSize. A share of your visitors (the holdout) sees no TryYourSize element at all; everyone else (the treatment) sees it as usual.

In Studio → Results, start an experiment and choose the holdout share: 10–50 % of visitors. One experiment runs per store at a time. Stopping it shows TryYourSize to everyone again; the results stay.

Nothing changes in your code: TryYourSize.js reads the running experiment and applies it.

  • Assignment: a random anonymous visitor ID in your site’s own localStorage (tys_vid). It is first-party to your shop, not shared across shops, not a cookie on our domain, and never linked to a shopper account. The arm is a deterministic hash of the experiment’s salt and that ID, so a visitor stays in the same arm.
  • Holdout: nothing is rendered: no element, no status frame, no window. recommendation() and getRecommendation() answer unavailable with no size, and recommendationHandle() answers null, so your own preselection and your server do not leak TryYourSize into the holdout. ready never fires.
  • No experiment, or our API unreachable: everyone sees TryYourSize (such visitors are not counted in either arm).
  • Demo mode is never part of an experiment.

To attribute an order to its arm, save the visitor ID with the cart and send it with the order:

const assignment = await tys.experiment(); // { experimentId, arm, visitorId } | null
if (assignment) saveToCart("tys_vid", assignment.visitorId);

Then send it as visitor_id in POST /v1/orders. TryYourSize recomputes the arm from the ID; it stores only a hash of it. If you cannot send the ID, send experiment_arm (treatment or holdout). On Shopify, the theme block writes the ID as the hidden line property _tys_vid for you.

The holdout renders nothing, so it never creates a fit check, a try-on or a window session: holdout traffic is never metered.

Studio → Results shows the size-related return rate per arm with 95 % intervals, the difference and whether it is significant, the sample still needed when there is not enough data yet, and a warning when the observed split does not match the configured one. “Followed the recommendation vs not” is shown too, labelled as observational. The methods are written on the page and in the CSV export.

Was this page helpful?