Let’s Solve a Problem

“Opportunity cost” is one of those terms you may have heard dropped by a fancy suit with an expensive haircut divulging the seven steps to become the CEO of your own herbal supplements company from home in a ninety second clip that you just couldn’t seem to summon the will to scroll past because you sorta daydreamed through the first twenty-eight seconds and then felt too invested to do anything else but see it through to the end. And while it can be tricky to grasp as a business concept (especially if expressed exclusively in terms of pricing essential oil cartons), sometimes a problem presents itself in a way that it is only solvable by grappling with this intangible topic.

In the realm of digital advertisement delivery, such a problem exists in shrinking the gap between the price actually paid to publishers and the price that would have been paid for a cheaper impression that became available later; here at GumGum one of the ways we address this is through a limit on the price we are willing to pay to serve an ad throughout the day.

Each line is an ad, one of a sample of 25 per ad type

Narrowing our scope

Our existing approach in picking this first value is to use just half the expected revenue (also measured per mille). Clearly this has the benefit of cautiousness, that is, it protects a minimum amount of revenue should the max CPM of an ad begin climbing unexpectedly in the automated process, but this method is not really taking into account the price of the inventory we expect ads to serve on. In fact, it follows that the best place to begin a cost limit exploration that is intrinsically tied to how well an ad meets its impression goal is at the lowest, most impression dense price within the ad’s available inventory.

  • The impression “density” of that inventory
  • How much those impressions cost to be able to compare them

Sub-problems, Sub-problems Everywhere

How many impressions do we expect from domains that an ad is eligible to serve on? This is really just a rephrasing of “What is an ad’s available inventory?” but changes the perspective to better match with the actual process at play. This takes the form of the many filters ads go through in our servers when being considered for an impression, and it’s these filters that exclude inventory, effectively creating the pool of available inventory by elimination. Trying to optimize along each of the dozens of filters quite frankly sounds like the quickest way to demystify another elusive business concept, diminishing returns, and so we will stay on target and only select what we expect to be the filter most influential to our current campaign. This is most definitely the ad unit type filter.

Individual publishers and domains are represented by distinct colors within their respective squares

You Get a Box Plot…

and you get a box plot…
and you get a box plot…
There does not appear to be a substantial amount of inventory utilizing a fixed CPM
Though not the majority, it seems a plurality incorporates a floor CPM
The majority run with a revenue sharing pricing structure, so this should be our focus moving forward
Each bin along the x axis is a unit type, some have very strong concentrations along a specific price but others are more diffuse


Wrapping it all up, we started with a fairly broad question to answer: can we find a way to increase our margin on ads by reevaluating our max CPM algorithm? From there we followed the abstractions (e.g. ‘average cost’, ‘revenue share’) to their real implementations and gained insights from exploring them graphically. With a dash of domain expertise, we were able to reduce our problem space by ruling out the impact of the other pricing models. Lastly, we produced a concise but information dense representation of our results as heat maps which enable us to easily communicate our findings to decision makers on the business side of things. Hope this little thought exercise gave some new perspectives on how to explore a problem: breaking it down into sub-problems and visualizing the data in different ways while considering what might break your assumptions along the way. Until next time…