Next →
Case study · 01

Allocation AI

Getting commercial leaders to move marketing money where a model, not instinct, said it should go. A Bayesian budget-allocation system Heineken publicly credits with a 36% ROI improvement.

Role
Founding product lead
Context
Heineken · 2021 – 2026
Domain
Marketing effectiveness
Approach
Bayesian ML · Azure
Annual plan · % change vs current

Where the model wants to move next year's budget

Colored by direction. Cells the model isn't sure about are flagged for a human call.
Channel
Nordlys
Verano
Kestrel
Aurora
Brand building
Paid social
+25%
+10%
+25%
+10%
Online video
+10%
+25%
+10%
−10%
TV
−25%
−10%
−25%
0%
Sponsorship
0%
+10%
−10%
+10%
Activation
Out-of-home
−10%
−25%
+10%
+25%
Trade / retail
+10%
+25%
+25%
+10%
Net move
+6%
+9%
+8%
+7%
cut grow low confidence · needs a human call
The model proposes the moves; it also flags where it isn't sure. On the low-confidence cells a person makes the call instead of trusting a number blindly. That legibility, not the accuracy, is what got commercial teams to actually reallocate.
Illustrative concept, not the actual product.Fictional brands and data.

Where the model wants to move next year's money, and, just as important, where it won't commit: the cells it's unsure about are flagged for a person to decide. I built it to propose and to admit doubt, because a system that silently reallocates millions gets ignored, while one that shows its confidence gets executed. Illustrative concept · fictional brands and data.

36%
ROI improvement across brands and touchpoints, publicly credited by Heineken.
Public · Heineken newsroom
Behaviour change
Intuition → model-driven
Annual planning shifted from "last year plus a bit" to a modelled, defensible split.
Adoption
Piloted → scaled
Commercial leaders reallocated budget on the model's guidance, in the planning cycle, at scale.
Scope
~€2.9B in play
The annual marketing spend this system was built to allocate across markets, brands and channels.
01 · Overview

What Allocation AI does

Every year Heineken's operating companies face the same question: where should the next marketing euro go? Five million on TV, or on trade promotions? More weight behind a global brand, or a local power brand? Historically these calls leaned on experience and last year's plan.

Allocation AI answers with evidence. It builds a Bayesian response model per operating company, brand and channel, learning how sales actually react to investment. The core output is a set of response curves (spend on one axis, expected volume or ROI on the other) that let teams test budget scenarios before committing a cent.

A constraint-aware optimizer then reads those curves and proposes the allocation that maximises return within real strategic limits: brand-role rules, long-term brand-building floors, and short-term caps.

Scenario · "Shift to digital, protect brand"

What this budget scenario delivers

Projected outcome vs last year, before the plan is committed.
Volume
3.8M
↑ 5.0%
LY 3.6M
Net revenue
€540M
↑ 9.0%
LY €495M
Gross profit
€270M
↑ 6.0%
LY €255M
ROI
3.1×
↑ 14%
LY 2.7×
Projected net revenue vs last year, by brand
Nordlys
100
118
+18%
Verano
90
104
+16%
Kestrel
120
131
+9%
Aurora
70
82
+17%
Last year Optimised plan
A planner spins up a scenario and sees its projected outcome before committing a euro. Every number is labeled as a projection, because it is. This is what moved annual planning from intuition to a model teams could interrogate, compare, and trust enough to act on.
Illustrative concept, not the actual product.Fictional brands and data.
What a plan delivers before a euro moves. Every figure is labelled a projection and broken out by brand, so a leader can interrogate the split rather than accept a headline. Numbers people can pull apart are the ones they'll put their name on.
02 · The problem

The model was never the hard part.

Heineken spends billions on marketing every year: roughly €2.9B, about 9.8% of net revenue. Historically that budget was split across markets, brands and channels by habit and last year's plan, not by predicted return. Data science could build response curves and calculate where the next euro pays back best. That was not the hard part.

The hard part was authority and trust. To act on the model, a commercial leader has to pull real money out of a channel they believe in, on the say-so of a system, and defend that to their market. A reallocation nobody executes is a slide, not a system. The blocker was never the optimizer: it was whether a person with budget authority would move the money.

03 · My role & ownership

Accountable for whether the money actually moved.

I was the founding product hire in the analytics group and the product owner for this system, from discovery to delivery: the problem framing, the scope, the roadmap, and the adoption path into the annual planning cycle.

I was accountable for whether operating companies actually reallocated budget, not just whether the model produced an answer. I was the standing bridge between the data scientists who built the models and the OpCo commercial leaders who had to change how they planned.

04 · Key decisions

Three product bets that earned adoption

Each one traded theoretical elegance for something a commercial leader would actually execute.

01
A decision tool, not a reporting dashboard.
The cheaper path was a BI dashboard showing historical ROI by channel. I argued against it: teams didn't need more charts, they needed a defensible answer to "where should the next euro go" that they could take into a planning meeting.
The tradeoffFar more product surface, and far more trust to earn, than a dashboard would have needed.
Answer over charts
02
Exposed the curve and its uncertainty, not a single "optimal" number.
The tempting move was a one-click "here is your optimal budget" black box. I rejected it. A black box that silently reallocates millions gets ignored; showing the diminishing-returns curve, the marginal ROI, and the confidence band lets a leader see why the model wants to move money, and where it is unsure.
The tradeoffMore for a leader to read, in exchange for a recommendation someone will actually execute.
Curve over number
03
Made the optimizer respect strategy, not just maximise ROI.
I built in guardrails (brand role, long-term brand building) so the model couldn't starve a strategic brand to chase short-term return. Pure ROI-maximisation would have produced a higher number on paper and lost the room in one meeting. The human sets the objective and the constraints; the system searches within them.
The tradeoffA lower theoretical optimum, for a recommendation that fits how the business actually decides.
Strategy over optimum
Decision 02, made visible

Show the whole curve, not just a number.

Heat-map → Nordlys · TV

Is this spend still paying back?

Revenue keeps rising, but ROI peaks and falls. The model shows where you are on both.
Revenue ROI Spend → peak ROI current
Revenue ROI Current spend Peak ROI
Current spend sits past the point of peak ROI. Each extra euro still adds a little revenue but returns less, so the model recommends easing back toward the peak (the ~25% cut the heat-map flagged for this cell). It shows the whole curve, not just a number, so the team sees the tradeoff and makes the call.
Illustrative concept, not the actual product.Fictional brands and data.

What the model sees that instinct doesn't. Revenue keeps climbing with every extra euro, but ROI peaks and then falls, and this channel is already spending past the peak. I chose to show the whole curve, not a single "optimal" number, so a leader could see the tradeoff and make the cut themselves.

Illustrative concept · fictional brands and data
05 · What shipped

A production system in the planning cycle.

Bayesian response-curve models built per operating company, brand and channel; a scenario simulator for testing budget splits; and a constraint-aware optimizer that weighs hundreds of ROI projections against strategic limits, all on Heineken's Azure platform. Piloted in a first set of markets, then scaled into the annual planning cycle.

Bayesian response curves · Scenario simulator · Constraint-aware optimizer · Azure
Manage scenarios

Every plan, organised and comparable

Scenarios grouped in folders, versioned, and owned.
Folders
2026 Annual Plan12
Meridia West5
Nordvik4
Experiments8
Archive21
ScenarioTypeUpdatedOwnerROI
Shift to digital, protect brand
Move spend to social, hold TV for hero brands
Optimisation 2 days ago ARA. Rivas 3.1×
Baseline 2026
Last year's split, carried forward
Optimisation 5 days ago MFM. Feld 2.9×
Aggressive trade push
What if we over-index on activation?
Simulation 1 week ago TNT. Novak 3.0×
Protect Kestrel margin
Cap discounting, defend the premium tier
Simulation 1 week ago ARA. Rivas 2.8×
Cut OOH, test social
Reallocate out-of-home into paid social
Optimisation 2 weeks ago LHL. Haas 3.0×
Q3 reforecast
Mid-year update after the price change
Simulation 3 weeks ago MFM. Feld 2.7×
Illustrative concept, not the actual product.Fictional folders, scenarios, and names.
Used, not piloted. Dozens of plans (versioned, owned and comparable) built by real teams inside the annual cycle. Being able to spin up a scenario and defend it in a planning meeting is what actually moved budget, not the optimizer alone.
Illustrative concepts, not the actual product. Fictional brands, scenarios and data.
06 · The lesson

The value of an optimizer isn't the optimum. It's whether a human with authority will execute it, so legibility and real-world constraints beat a higher theoretical number no one acts on.

07 · In context

The macro engine of a three-part system

Allocation AI sets the sandbox (where each channel and brand gets budget) that Promo Advisor and Smart Flighting then execute against.

Keep exploring

The rest of the system is live.

Promo Advisor executes the offer; Smart Flighting schedules the impact, or head back to all work.

Tomasz Czarnecki © 2026 · czarnecki.ai · Product visuals are illustrative concepts