-
Notifications
You must be signed in to change notification settings - Fork 245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Is it possible to run PAA (Protected Audience API) auction in parallel to Header Bidding and publisher’s adserver call? #851
Comments
I believe the parallelization could be achieved if the final ranking didn't have to occur inside the private auction. One thing we've talked about internally is having a final opaque function that could run in the browser, that takes opaque winner but also other winners, and then turn out the final winner. We could add additional opaque callbacks to minimize the bit leaks, so something like "onPrivateWin" that handles FF rendering, "onOtherWin", etc. |
Couldn't you actually just re-run the |
Chrome is working on improving IG retrieval latency, but that's not going to be a silver bullet. |
Hello @wojciech-bialy-wpm, We would not recommend the approach of randomly selecting between two different auctions. We designed the Protected Audience API so that information from multiple sources could flow into the PA auction and decision process. If the best ad is not one that comes from inside the PA auction, then the PA auction should return no ad at all, and the caller should instead render the best non-PA ad they know about. This logic is the job of the script in the seller's The bidding inside the PA auction generally depends on contextual signals that are returned by other servers (for both Header Bidding and GAM). That means it's impossible for the PA auction to finish before those signals are available. We have indeed built ways that the PA auction can be started in parallel, though: see Section 2.1.1 Providing Signals Asynchronously for details on this feature. Regarding latency, the seller who initiates the auction is again the party in control of what resources it is allowed to consume. Please look at the auction config options |
Hello @thegreatfatzby, Regarding final ranking / function, we thought about a structure like that. A service, that would take winning bids/ads from different channels (including the PAA), compare them and then send win/loss signal to buyers, and winning ad to the seller. There are ways to make it secure, such as running in safe environment (a browser worklet?), or allowing only limited amount of comparisons (to prevent information leakage via multiple win/loss tests). As for - re-running scoreAd, how would it be possible? Would it be a solution where PAA and non-PAA channels are running in parallel, PAA bids are generated and scored (based on ad metadata, trusted scoring signals etc.) and finally, the winning non-PAA ad value is used to re-score (apply floor price) the PAA auction result? |
Hello @michaelkleber, I wholeheartedly agree that the publisher should never have to select ads randomly.
If we'd run all the following in parallel, then we'd potentially end with two results that cannot be compared with each other. Regarding using promises in PAA auction config, do I understand correctly that we can:
I'll add it to the test, and we'll see how much of auction duration is taken by buyer / seller workflows. |
Hello @michaelkleber, We have ran tests, where PAA auction initiation and buy-side logic is executed in parallel with header bidding and adserver calls. PAA sell-side logic is blocked by sellerSignals promise, that is resolved when adslot is executed and winning bid / ad This setup can be described as follows: From what we've seen, the auction duration (a median of ~730ms) is split into:
Since in our setup header bidding timeout is 800ms, only sell side impacts ad rendering time - meaning However, this will only work as long as we can control when PAA auction starts (and start it concurrently with other demand channels). As seen in Privacy Sandbox Progress Report for Q3 (https://assets.publishing.service.gov.uk/media/653a491d80884d000df71b70/Google_s_Q3_2023_report_.pdf), This unfortunately means that such optimization is not achievable in any ad stack that includes the Google Ad Manager, and without it the publisher cannot monetize the demand that is unique to Google. |
Thank you for reporting back! It sounds like our past parallelization work is a great success when it gets used. I agree that the essential question now is how GAM can also start feeding into the parallelization mechanism as well. |
@michaelkleber @wojciech-bialy-wpm @rahulkooverjee-google we believe we've solved for this: prebid/Prebid.js#12205 |
Agreed! I haven't had an opportunity deploy test branch with parallel-paapi, but it does sound like it would:
In effect the initial PAAPI workload will start with prebid auction, component-level workloads will start during auction, leaving just top-level workload to run in sequence (after auction end). And (unlike my proposal) it does not require a separate logic to generate component level configs/signals, so that's definitely a plus. For practical applications, we still would need the Google Ad Manager to separate contextual/paapi calls, or to relinquish control over the top level auction - but that is an issue for another repository :) I think we can close this issue. |
We have tried to test an approach in which PAA auction is initiated by the publisher - using modified fledgeForGPT prebid module and componentAuctions received from RTB House bidder.
Our test setup - with standalone PAA auction - can be described as follows:
For more detailed information about our experiment, please see: https://github.com/grupawp/PAapi
Experiment conclusions:
Our experiment shows that this integration option may result in a significant revenue drop for the publisher.
The revenue drop reasons are:
PAA auction always extends the time needed to receive and render the ad. Our statistics show that:
median duration time of empty PAA auctions is 52ms (161ms for the 80th percentile)
median duration time of PAA auctions that return URN / fenced frame config is 733ms (1773ms for the 80th percentile)
Additional significant delay caused by a PAA auction (especially for non-zero results) decreases adslot viewability – reducing ad slot value and negatively impacting user experience – affecting user retention and overall business success. Please see: https://web.dev/fast-ads-matter/ for more information about the impact of ad latency on publisher’s revenue.
Solution:
Running PAA auction in parallel to Header Bidding and publisher’s adserver would be possible if PAA auction would return comparable ad value (with precision preserving k-anonymity). Parallel architecture would minimize PAA impact on ad latency and would not force the publisher to choose demand sources randomly.
The text was updated successfully, but these errors were encountered: