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

Floors: support noFloorSignalBidders, null values, and bidder dimension #3406

Open
bretg opened this issue Jan 16, 2024 · 7 comments
Open

Floors: support noFloorSignalBidders, null values, and bidder dimension #3406

bretg opened this issue Jan 16, 2024 · 7 comments
Labels

Comments

@bretg
Copy link
Contributor

bretg commented Jan 16, 2024

Prebid.js 8.31 supports a new noFloorSignalBidders option. See prebid/Prebid.js#10410

This is the tracking issue to support the new Schema 2 fields defined in that issue:

  • enforcement.noFloorSignalBidders: ["bidderA", "bidderB", "bidderC"]
  • data.noFloorSignalBidders: ["bidderA", "bidderB"]
  • data.modelGroups[].noFloorSignalBidders: ["bidderA"]

Also, the rules committee has stated that it's acceptable for floors providers to define different floor values per bidder. PBS should support bidder as an additional floor schema. No alias behavior. i.e. if the floor file says "bidderA" gets floor X, then "bidderA_alias" does not match this rule. It is up to the floors provider to define all aliases in use into the floor rules. It is acceptable for a given floors value to be NULL, which means "do not pass a floor to bidder(s) in this scenario.

Note that adding bidder as a dimension means that the floors feature will need to check whether the bidder dimension is utilized. If so, it will need to get a different floor for each bidder.

Note: the value for noFloorSignalBidders should be able to include '*', which indicates all bidders.

@SyntaxNode
Copy link
Contributor

In the referenced Prebid.js thread, @bretg proposed an alternative solution to add a "bidder" field to the floor schema to give publishers more fine-tuned control over the floor passed to their bidders. That proposal was rejected, which is consistent with similar requests made to Prebid over the past several years.

However, there are use cases speculated in the thread which highlight that floors are complicated and necessitate the need for this noFloorSignalBidders feature:

What's become clear already is that different SSPs have different rules about what to do about multiple competing floors:

  • some prefer their internal floor
  • some will take the highest of available floors
  • it's likely that some may prefer the externally set floor

When using the noFloorSignalBidders feature, the floor may be different between bidders in the same auction - perhaps configured internally with the bidder or not honored at all.

Since this is a recurring ask from publishers, I'm curious for reasons and opinions for why to draw the line at per-bidder floors. There are many other ways publishers have using Prebid to control which bidders receive which signals. The Secondary Bidder proposal also introduces a way for publishers to favor some bidders over others. What about per-bidder floors is different?

@bretg
Copy link
Contributor Author

bretg commented Feb 9, 2024

What about per-bidder floors is different?

The issues I've heard discussed are ones of fairness across bidders. We don't want to encourage scenarios where publisher favors one bidder over another:

  • uses a bid from "first tier" bidders to floor bids from a "second tier" of bidders
  • holds the bar higher for bidderX than bidderY. "Come on bidderX, we know you can do better than that." Note that the bid adjustment feature already takes the major reason for this, discrepancies, into account. The example here is abuse of insider info about particular demand.
  • discourage a certain mediatype (e.g. video) from a certain bidder by inflating the mediatype floor for that bidder only

If PBS host companies and their clients want to do these things, fine, but Prebid is meant to be a level playing field for bidders of all sizes and capabilities.

That said, if there's a champion who wants to get this philosophy changed across all relevant committees, go for it.

@bretg
Copy link
Contributor Author

bretg commented Mar 14, 2024

This was discussed in the Rules Taskforce and it was determined that different floors per bidder is ok.

This may lower the priority of this feature and open a feature to add 'bidder' as a floors attribute. (that allows NULL values)

@bretg bretg changed the title Floors: support noFloorSignalBidders option Floors: support noFloorSignalBidders and bidder dimension May 3, 2024
@bretg bretg changed the title Floors: support noFloorSignalBidders and bidder dimension Floors: support noFloorSignalBidders, null values, and bidder dimension May 3, 2024
@gwhigs
Copy link

gwhigs commented May 29, 2024

Depending on how much it increases the complexity, having a way to remove floor signals for all bidders would be nice to have.

E.g.: something like enforcement.noFloorSignalBidders: ["*"] or just enforcement.noFloorSignal: true.

@justadreamer
Copy link
Contributor

justadreamer commented Jun 18, 2024

Maybe the individual floors per bidder behavior can be implemented as a module that would run at a Bidder Request stage - modifying individual bidder requests according to the provided settings (this is after all one of the things the Bidder Request extension point exists for). That way it does not have to be the server core code change - somewhat easier to implement, maintain and also can be optional for the vendors who want to include this behavior.

The input signals can be taken from the upstream (incoming) imp.ext.prebid.floors. The module itself should be agnostic to the way how that floors object is populated - it may well be added by another module running just before this one... All it has to do is to add the individual floor signals into the individual bidders requests.

Maybe it's just a familiarity bias on my side, given the exposure to the modular architecture, so tend to solve problems using that particular tool :) Thus critique to this approach is welcome.

@bretg
Copy link
Contributor Author

bretg commented Jun 18, 2024

@justadreamer - it would indeed be nice if we could do this with a module... but I don't think we can. The architecture is that the floors data needs to be able to come in from an external service, and that data is cached within the floors feature, not available to modules. Supporting only floors data on the incoming request would exclude a key scenario.

@bretg
Copy link
Contributor Author

bretg commented Sep 18, 2024

PBS-Java 3.4 released noFloorSignalBidders
PBS-Java 3.5 released support for bidders as a dimension and allows null floor values.

@bretg bretg added the PBS-Go label Sep 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: Ready for Dev
Development

No branches or pull requests

4 participants