Ad Selection

Problem Statement

Select which ads should be run on your website to maximize revenue, taking into account the associated cost and user experience.

Full example scenario

A backend engineer is tasked with optimizing the placement and selection of advertisements on a popular web platform. The goal is to maximize the click-through rate (CTR) and revenue generated from ads while ensuring a good user experience — not overwhelming visitors with too many ads, and keeping the ads shown relevant to them. Which ads should be shown on which pages, in order to maximize revenue?

  • The average CTR across all ads shown must remain above 2.5%.

  • No more than 3 ads may be shown on any single page.

  • At least 70% of the ads shown must match user interests.

  • The total cost of ads displayed must not exceed $500 per day.

  • The ad-page performance data can be found in ad_selection.csv, with the columns Page ID,Ad ID,CTR (%),Revenue per click ($),User Interest Match (Yes/No),Cost per ad ($).

What an optimal solution looks like

Color = ad id

Ad 1 Ad 2 Ad 3 Ad 4 Ad 5 Ad 6 Ad 7 Ad 8 Ad 9 Ad 10

Shape = page · dashed border = selected

Page 1 Page 2 Page 3 Page 4
0.40 0.45 0.50 0.55 0.60 0.65 0.70 2% 3% CTR (%) Revenue per click ($) Higher revenue (CTR × $/click) → 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 Page 1, Ad 1 CTR 2.5% · $0.50/click avg cost $20.5 · Not selected relevant Page 1, Ad 2 CTR 3.3% · $0.55/click avg cost $17.0 · Selected not relevant Page 1, Ad 3 CTR 1.7% · $0.60/click avg cost $23.2 · Not selected relevant Page 1, Ad 4 CTR 2.0% · $0.48/click avg cost $22.5 · Not selected not relevant Page 1, Ad 5 CTR 3.4% · $0.62/click avg cost $23.0 · Selected relevant Page 1, Ad 6 CTR 2.3% · $0.42/click avg cost $15.0 · Not selected relevant Page 1, Ad 7 CTR 2.1% · $0.54/click avg cost $22.8 · Not selected not relevant Page 1, Ad 8 CTR 2.7% · $0.65/click avg cost $22.0 · Selected relevant Page 1, Ad 9 CTR 3.1% · $0.53/click avg cost $26.2 · Not selected not relevant Page 1, Ad 10 CTR 1.8% · $0.57/click avg cost $22.2 · Not selected relevant Page 2, Ad 1 CTR 2.2% · $0.45/click avg cost $20.5 · Not selected relevant Page 2, Ad 2 CTR 2.9% · $0.50/click avg cost $17.0 · Not selected not relevant Page 2, Ad 3 CTR 3.2% · $0.55/click avg cost $23.2 · Selected relevant Page 2, Ad 4 CTR 2.6% · $0.65/click avg cost $22.5 · Not selected relevant Page 2, Ad 5 CTR 3.0% · $0.53/click avg cost $23.0 · Not selected not relevant Page 2, Ad 6 CTR 1.6% · $0.50/click avg cost $15.0 · Not selected relevant Page 2, Ad 7 CTR 3.5% · $0.60/click avg cost $22.8 · Selected relevant Page 2, Ad 8 CTR 2.4% · $0.47/click avg cost $22.0 · Not selected not relevant Page 2, Ad 9 CTR 2.8% · $0.68/click avg cost $26.2 · Selected relevant Page 2, Ad 10 CTR 1.9% · $0.40/click avg cost $22.2 · Not selected not relevant Page 3, Ad 1 CTR 3.3% · $0.52/click avg cost $20.5 · Not selected not relevant Page 3, Ad 2 CTR 1.9% · $0.57/click avg cost $17.0 · Not selected relevant Page 3, Ad 3 CTR 3.1% · $0.50/click avg cost $23.2 · Selected relevant Page 3, Ad 4 CTR 2.8% · $0.68/click avg cost $22.5 · Selected not relevant Page 3, Ad 5 CTR 2.9% · $0.38/click avg cost $23.0 · Not selected relevant Page 3, Ad 6 CTR 3.0% · $0.51/click avg cost $15.0 · Not selected not relevant Page 3, Ad 7 CTR 1.8% · $0.62/click avg cost $22.8 · Not selected relevant Page 3, Ad 8 CTR 2.0% · $0.55/click avg cost $22.0 · Not selected not relevant Page 3, Ad 9 CTR 2.7% · $0.63/click avg cost $26.2 · Selected relevant Page 3, Ad 10 CTR 2.3% · $0.63/click avg cost $22.2 · Not selected not relevant Page 4, Ad 1 CTR 3.2% · $0.40/click avg cost $20.5 · Not selected relevant Page 4, Ad 2 CTR 2.4% · $0.55/click avg cost $17.0 · Not selected not relevant Page 4, Ad 3 CTR 2.6% · $0.60/click avg cost $23.2 · Selected relevant Page 4, Ad 4 CTR 3.4% · $0.51/click avg cost $22.5 · Selected relevant Page 4, Ad 5 CTR 1.6% · $0.70/click avg cost $23.0 · Not selected not relevant Page 4, Ad 6 CTR 2.5% · $0.45/click avg cost $15.0 · Not selected relevant Page 4, Ad 7 CTR 3.0% · $0.52/click avg cost $22.8 · Selected not relevant Page 4, Ad 8 CTR 1.9% · $0.61/click avg cost $22.0 · Not selected relevant Page 4, Ad 9 CTR 2.8% · $0.50/click avg cost $26.2 · Not selected not relevant Page 4, Ad 10 CTR 2.3% · $0.56/click avg cost $22.2 · Not selected relevant

Hover or focus a point for its exact CTR, revenue, cost and relevance. The number on each point is its ad id.

Selected ads per page (cap: 3 per page).

Page 1

Ad 2 · CTR 3.3% · $0.55/click · $15 · not relevant
Ad 5 · CTR 3.4% · $0.62/click · $26 · relevant
Ad 8 · CTR 2.7% · $0.65/click · $28 · relevant

Page 2

Ad 3 · CTR 3.2% · $0.55/click · $22 · relevant
Ad 7 · CTR 3.5% · $0.60/click · $30 · relevant
Ad 9 · CTR 2.8% · $0.68/click · $32 · relevant

Page 3

Ad 3 · CTR 3.1% · $0.50/click · $16 · relevant
Ad 4 · CTR 2.8% · $0.68/click · $30 · not relevant
Ad 9 · CTR 2.7% · $0.63/click · $27 · relevant

Page 4

Ad 3 · CTR 2.6% · $0.60/click · $30 · relevant
Ad 4 · CTR 3.4% · $0.51/click · $14 · relevant
Ad 7 · CTR 3.0% · $0.52/click · $16 · not relevant

Built with Modeler

The problem above is stated as a single shot: you hand over the whole problem and get a model back. Modeler takes the other route — you start with the business question you actually have, and it works with you until the problem is pinned down, the data is in, the code runs, and the answer holds up when the problem changes.

The tabs below walk the same ad selection problem through that route, one Modeler capability at a time.

Instead of writing the whole prompt up front, you start with the business question you actually have. Modeler searches the knowledge base, asks one clarifying question at a time — always the most important one first — and tells you which parts of the model are still missing. The options it offers come from examples in the knowledge base and from how similar problems are usually modeled in your industry, so you can answer with a number instead of prose.

We show ads on our website and want to decide which ads to display on each page. We want to maximize revenue, but we also need to keep the site usable for visitors and keep ad spend under control. Can you help me build a model for this?

This is an ad placement / selection optimization problem. Revenue mechanics vary a lot between ad businesses — per click, per impression, per conversion — and that choice drives the whole objective function, so it is the first thing to pin down before anything else.

Great topic! This is a well-known problem in the advertising and marketing industry, and Gurobi is well-suited for it. Let me ask a few focused questions to build a precise specification.

Question 1: How is revenue generated in your setup? Which of the following best describes your model?

  1. Per click — revenue is earned each time a visitor clicks an ad (typically based on a click-through rate and a revenue-per-click value)

  2. Per impression — revenue is earned each time an ad is displayed, regardless of clicks

  3. Per conversion — revenue is earned when a visitor completes a specific action after clicking

  4. Combination — a mix of the above

Learn More:
• Backend Engineer ★★☆
• Optimization for the Advertising and Marketing Industry ★☆☆

1. Revenue is per click - each ad has a click-through rate (CTR) and a revenue-per-click value, and revenue is CTR times revenue-per-click for each ad shown.

Some more constraints: we want the average CTR across everything we show to stay above 2.5%, we don’t want to show more than 3 ads on any single page, and total ad cost across the whole site should not exceed $500 per day.

Oh, and one more thing - at least 70% of the ads we actually show need to match the visitor’s stated interests. We don’t want to bombard people with irrelevant ads too often.

That is option 1, plus three numeric constraints and a fourth, volunteered one on relevance. Recording the objective and all four constraints. What is still open is the shape of the decision itself — whether an ad is placed at most once per page, shown some number of times, or assigned to a named slot — since that determines what the decision variable actually represents.

Good, that is saved. Now let me clarify a key structural aspect of the model:

Question 2: What is the nature of the decision you are making for each ad-page combination? Which best describes your setup?

  1. Binary assignment — for each (ad, page) pair, you decide simply: show this ad on this page, yes or no

  2. Frequency-based — you decide how many times to show the ad on that page per day

  3. Selection with slots — each page has named slots (top banner, sidebar, footer), and you assign one ad per slot

Modeler updates the specification after every answer, even while it is still incomplete — so you can always see what it has understood and what it is still waiting on.