prebid / prebid-server

Open-source solution for running real-time advertising auctions in the cloud.
https://prebid.org/product-suite/prebid-server/
Apache License 2.0
423 stars 720 forks source link

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

Open bretg opened 8 months ago

bretg commented 8 months ago

Prebid.js 8.31 supports a new noFloorSignalBidders option. See https://github.com/prebid/Prebid.js/issues/10410

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

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 commented 7 months ago

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 commented 7 months ago

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:

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 commented 6 months ago

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)

gwhigs commented 3 months ago

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 commented 3 months ago

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 commented 3 months ago

@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 commented 4 days ago

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