Description
We expect most users of FLEDGE will be interested in improving their systems safely, effectively, and efficiently. Today, buyers and sellers run live traffic experiments where a fraction of the traffic is diverted to an experimental version of the system. Comparing the performance of the experimental version with the current (control) version provides data to support informed decisions on whether to deploy the experimental system, or whether it needs additional improvements before deployment.
Implementing an experimentation framework for FLEDGE on top of the general purpose FLEDGE API, however, is difficult because preventing cross-site tracking requires carefully limiting the flow of information between parties.
One way to provide this would be an extension to FLEDGE to support coordinated experiment diversion. Specifically, we propose that the browser generate a per-page nonce, make it available to JavaScript (including in worklets), and include it on calls to the trusted server.
Consider a buyer or seller who wants to run an experiment that includes a combination of contextual, Trusted Server, and bidding/auction JS components simultaneously. For example, a bidding model might be delivered split across the contextual and the Trusted Server responses, and trying out a new model would require changing both together. FLEDGE does not support this well today: there's nothing common to both calls that the servers can consider. The best you can do is have responses contain both the old and new versions, and combine on the client. While this is practical, if inefficient, for a single experiment, including all experimental versions of all components on all responses is not practical for multiple simultaneous experiments, and would heavily limit experimentation.
We propose that for every page view, the browser generate a nonce, or page-view id (pvid). These pvids don’t need to be unique, although for two page views chosen at random the likelihood of having the same pvid would need to be low.
Once chosen, pvid is made available to JavaScript, where it can be included on the contextual call. The same pvid is sent to the Trusted Servers as part of the Trusted Server calls. Pvid is then added to browserSignals and passed to generateBid(), scoreAd(), reportResult(), and reportWin() together with the rest of browserSignals.
This experimentation workflow can then proceed as follows:
- Browser visits a publisher page.
- Ad tag JS requests pvid, which the Browser generates and returns.
- Ad tag JS includes pvid as a part of the contextual call.
- Ad tag JS invokes runAdAuction.
- Browser includes pvid as a part of the Trusted Server calls.
- Servers divert experiments by considering pvid, and prepare appropriate responses.
- Browser runs the auction via generateBid() and scoreAd(). Since pvid is passed to these functions they are able to make experiment-specific decisions
- pvid is passed to reportResult() and reportWin() to support experiment-specific logic in reporting functions.
In adding a new piece of information passing to FLEDGE, it needs to not enable cross-site tracking. While pvid allows matching contextual and Trusted Server requests for the same page view, since it is generated anew for each pageview, it does not enable cross-site tracking.
Matching contextual requests and Trusted Server requests is already possible probabilistically by comparing request timestamps, and FLEDGE must already trust the server not to abuse this.
If we are right in that pvid does not pose a privacy risk (since it is not stable in-between page views), we think that pvid supporting rich multi-layer diversions, such as 32-bit pvid could be included in FLEDGE.