Skip to content
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

Record the default core bid ranking #4150

Open
bretg opened this issue Jan 14, 2025 · 1 comment
Open

Record the default core bid ranking #4150

bretg opened this issue Jan 14, 2025 · 1 comment

Comments

@bretg
Copy link
Contributor

bretg commented Jan 14, 2025

As described in the response to the Audio/CTV committee requests, there's a proposal to define seatbid.bid.ext.prebid.rank as a way to flag the highest priority bids. A rank of "1" would mean highest priority. Note that highest priority doesn't always mean "highest price". Sometimes deals are prioritized over open market.

The 'response' document imagines a "bid ranking module" which would assign these ranks based on account configuration to cover advanced scenarios like "open market bids more than $5 above the deal price can beat out the deal, except for deal 123"

But at this point, neither Audio nor CTV needs support for that type of advanced scenario.

Since PBS-core is already sorting bids to apply ad server targeting, I'd like to explore adding the default seatbid.bid.ext.prebid.rank to every bid. Then someday, a more sophisticated bid ranking module could be built to override this default value.

The algorithm would be very basic:

  • If ext.prebid.targeting.preferdeals is true, then sort by isDeal (true first) and then bid.price (highest first), else just bid.price (highest first).
  • If bid.price is tied the sort order can be indeterminate
  • loop through sorted bids
    • assign the current index to seatbid.bid.ext.prebid.rank. i.e. first bid gets 1, second 2, etc.
@bretg bretg moved this from Triage to Community Review in Prebid Server Prioritization Jan 15, 2025
@bretg bretg changed the title Default core bid ranking algorithm Default core bid ranking attribute Jan 15, 2025
@bretg bretg changed the title Default core bid ranking attribute Record the default core bid ranking Jan 15, 2025
@bretg
Copy link
Contributor Author

bretg commented Jan 28, 2025

This was discussed in committee, and then more in a slack thread. Here's a summary of where we stand:

  1. The Prebid proposal is that PBS should not be in the business of picking 'winners'. It currently has a primitive algorithm for doing this, but we are emphatically not an ad server, and do not provide enough enough controls around this choice to consider ourselves authoritative.
  2. There's a community requirement that some host companies don't want to cache bids that don't "win".

So the proposed vision for the future is:

  1. Caching behavior could have a flag that can disabled so PBS-core doesn't cache and a module can handle caching and updating the ORTB with the cache IDs.
  2. PBS-core will supply a default "response ranking algorithm" and write the values into seatbid.bid.ext.prebid.rank
  3. If turned off, PBS-core will not cache bids to PBC.
  4. A 'processed auction response' module can refine the ranking however it wants.
  5. A separate 'processed auction response' module can call PBC for whatever bids it care to call winners and add whatever ORTB it wants to the results. Specifically, this module would need to:
    1. add the ext.prebid.cache object where relevant
    2. update seatbid.bid.ext.prebid.targeting to add hb_uuid, hb_cache_id, hb_uuid_BIDDER, and/or hb_cache_id_BIDDER where relevant. (unless we already have a targeting module that can do this)

It's understood that there's some legacy cruft in core. At some point in a major release, we should pull the "winning bid" logic and the "targeting" out and make them modules. PBJS doesn't use our targeting anyhow. AMP and App do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Community Review
Development

No branches or pull requests

1 participant