Modelling the value of marketing communications
Every platform in your marketing stack reports the conversions it caused, and when you add them up they exceed the conversions you actually had. That is not a data quality problem, it is a definitional one: attributed value is a rule, incremental value is a measurement, and only the second one belongs in a budget decision. In this chapter I build the value of marketing communications model for Werkbank, a SaaS for craft businesses with 8,000 leads and three channels, and show what one more email, one more webinar invitation and one more retargeting impression are actually worth. You will see why the log of contacts is the right shape, how to turn a coefficient into a marginal value in euros, where the optimal contact frequency sits for each segment, why the full cost of an email includes the people it drives away, and how a randomised holdout group keeps the whole thing honest. The numbers are illustrative; the method is what I run for clients. This is part 15 of 21 of the Marketing Analytics series.
Three dashboards, three winners, one quarter
Picture the quarterly review at Werkbank, the Rails SaaS for craft businesses that keeps turning up in this series. Eight thousand leads sit in the CRM: joiners, electricians, plumbers and small workshop owners who downloaded a quoting template or sat through a demo. Over the quarter they received emails, webinar invitations and retargeting ads. Then three people present. The email tool reports 430 trials that started after a click on an email. The webinar platform reports 210 trials from registrants. The retargeting platform reports 540 conversions, most of them "view through", meaning the lead saw an ad and later started a trial without clicking. That adds up to 1,180 trials. The product database says 800 trials started in the quarter, a fair number of them from people who would have signed up anyway.
Everyone in that room is right according to their own screen and the total is still impossible. That is the problem this chapter solves. Not "which channel gets the credit", a political question, but "what is one more email, one more webinar invitation, one more retargeting impression actually worth, and when do I stop". Those are modelling questions with honest answers, and the answers usually move budget somewhere the platforms would rather you did not look.
Where this sits in the series
This is the fifteenth of 21 chapters and the first of Part four, which is about media and loyalty. It follows Tools of segmentation: k means, latent class analysis and going beyond RFM, and not by accident: the contact strategy at the end of this chapter is set per segment, so last chapter's segments are this chapter's table rows. The next chapter, Media mix modelling: adstock, saturation and where the next pound goes, lifts the same idea from the individual lead to the whole budget and adds memory and saturation over time.
Attributed value and incremental value are different things
Attributed value is what a platform assigns to itself using a rule. Last click is the most common: whichever touch came last before the conversion gets the whole trial. View through is more generous still: an ad merely rendered on a page the lead visited gets credit too. Rules are not measurements. They cannot tell you what would have happened without the touch, and that is the only definition of value that survives contact with a finance director.
Incremental value is the difference between what happened with the communication and what would have happened without it, times what a response is worth. That is a counterfactual, never observed for a single lead. You estimate it in two ways that should agree: a response model across all leads, which gives the shape of the relationship between contacts and response, and a holdout group, which gives a clean measurement of the level. I use both, and when they disagree I trust the holdout for the level and the model for the shape. The general logic of proving lift is in Five ways to prove a campaign actually worked; this chapter is the version with equations and a contact plan at the end.
The value of marcom model
The core model says that a lead's probability of responding in a period is a function of how many times each channel touched them, with diminishing returns per channel, plus interactions between channels, plus whatever we know about the lead. Written out for Werkbank's three channels:
Here is 1 if lead started a trial in the quarter and 0 if not. is the number of emails the lead received, the number of webinar invitations, the retargeting exposure in blocks of ten impressions, because single impressions are too fine a unit to mean anything. is the intercept, the response rate of a lead who received nothing. , and are the channel effects, the interaction between email and retargeting, a vector of lead characteristics such as segment and lead age with coefficients , and the error. Adding one inside the logarithm keeps leads with zero contacts in the data, since the logarithm of zero does not exist.
Why the logarithm? Because a first email to a lead who has heard nothing from you in months does far more than the twelfth. The log shape encodes exactly that: each additional contact adds less than the one before, never quite nothing, and never negative. That last property is a limitation, not a feature. Real people do get fed up, and we will handle fatigue on the cost side rather than bending the curve.
I have written this as a linear probability model, regressing a 0/1 outcome directly. Logistic regression is the more respectable choice and I fit both; the linear version keeps the marginal values below readable without a calculator, and for response rates between 2 and 20 percent the two agree closely enough that the contact plan does not change.
The number that matters for a decision is not any coefficient. It is the marginal value of one more contact: the derivative of expected response with respect to contacts, times what a response is worth:
is the money one more email is expected to bring in, is the value of a response, for Werkbank the expected gross margin of a trial, and the fraction is how much one more email raises the trial probability given emails and blocks of retargeting already received. At the whole coefficient applies, at only a tenth of it, and retargeting makes each email more effective, which is what the interaction term in the numerator is for.
Set marginal value equal to the cost of a contact and you get the optimal frequency:
is the number of emails per quarter at which the next one would cost more than it brings in, and is the full cost of one email to one lead, which I will define properly in a moment because it is where most frequency optimisers go wrong.
Werkbank's three channels, one curve each
I fitted the model on the 8,000 leads and one quarter of touches. The numbers are illustrative, but the shapes and the arguments are ones I see in real client data. The value of a trial, , is €300: about 22 percent of trials convert to a paid plan and a paid Werkbank customer is worth roughly €1,360 in gross margin over their expected life.
| Term | Coefficient | Std. error | What it says |
|---|---|---|---|
| Intercept | 0.020 | 0.004 | 2.0% of leads start a trial with no contact |
| ln(1 + emails) | 0.010 | 0.002 | First email adds 0.7 points, first ten add 2.4 |
| ln(1 + webinar invitations) | 0.030 | 0.006 | One invitation adds 2.1 points, the strongest lever |
| ln(1 + retargeting, per 10 impressions) | 0.008 | 0.003 | Ten impressions add 0.6 points |
| ln(1 + emails) x ln(1 + retargeting) | 0.002 | 0.001 | Together they beat the sum of their parts |
| Segment: growing workshop | 0.014 | 0.004 | 3 to 10 staff, 1.4 points above solo tradespeople |
| Segment: established firm | 0.006 | 0.005 | Not distinguishable from zero |
| ln(lead age in months) | minus 0.004 | 0.002 | Older leads respond a little less |
Read it line by line. The intercept is the baseline: 2 percent of leads would have started a trial this quarter if marketing had gone on holiday, which for 8,000 leads is 160 trials nobody should take credit for. The email coefficient looks tiny, and coefficients on log terms always do; going from zero to one email multiplies 0.010 by , so 0.7 percentage points, while zero to ten multiplies it by , so 2.4 points. The tenth email added roughly a tenth of what the first did. Webinar invitations are the strongest lever per contact, no surprise when the webinar shows scheduling software actually working. Retargeting alone is modest. The interaction is the interesting one: a lead who is also being retargeted responds more to each email. The segment terms come straight from the k means work of the previous chapter, and the lead age term says a lead from 2024 is not a lead from last month.
The R squared of a model like this is low, around 0.06, and that is fine. We are explaining a binary outcome with a handful of contact counts; the point is not to predict which individual will start a trial but how the rate moves when contacts move. What I do check is that the coefficients hold on a second quarter and that a decile chart of predicted against actual trial rates is monotone.
Diminishing returns per channel: webinar invitations (top), emails (middle) and retargeting in blocks of ten impressions (bottom). Every curve is steep at the start and flat by the end.
Reading the marginal value: when to stop sending
Now the money. With at €300 and at 0.010, the marginal value of one more email to a lead who is not being retargeted is , €3 divided by one plus the emails already sent. The first email is worth €3.00, the fourth €0.60, the tenth €0.27.
The cost side is where the naive version of this analysis falls apart. An email costs perhaps two cents to send, and if that were the whole cost the formula would say send 149 emails a quarter, which is a spam filter's definition of a contact strategy. The real cost of one more email includes the chance that the lead unsubscribes and the value lost when they do. For Werkbank's solo tradespeople the unsubscribe rate per email is about 0.5 percent and a live lead on the list is worth about €40 in expected future trials, so each email carries €0.20 of expected list damage on top of €0.02 to send it. Call it €0.22. That is , and it is what makes the optimum sane.
The falling curve is the marginal value of the next email; the flat line is its full cost including expected unsubscribe damage. Where they cross is the optimal frequency, here around 14 emails a quarter for the average lead.
The same arithmetic per segment is the contact strategy. Coefficient, unsubscribe rate and the value of a lead on the list all differ by segment, so the optimum does too:
| Segment | Email coefficient | Full cost per email | Optimal emails per quarter | Current | Decision |
|---|---|---|---|---|---|
| Solo tradespeople | 0.006 | €0.22 | 7 | 12 | Cut to fortnightly |
| Growing workshops | 0.012 | €0.18 | 19 | 12 | Raise to weekly plus one extra a month |
| Established firms | 0.009 | €0.30 | 8 | 12 | Cut to fortnightly |
For the solo segment: €300 times 0.006 divided by €0.22, minus one, is about 7. For growing workshops the coefficient is twice as large and the list damage smaller, so the optimum is 19. Established firms respond reasonably, but a lost lead there costs more because an established firm that converts buys more seats, so the cost per email is higher and the optimum drops back to 8. Werkbank had been sending everyone twelve emails a quarter. Two segments were over contacted, one was under contacted, and the total number of emails barely changes. What changes is who gets them.
One more thing the formula shows: for leads also in the retargeting pool at around 15 blocks of impressions, the effective email coefficient rises from 0.010 to about 0.0155 and the optimum moves from 14 to around 22. Channels have to be planned together; a frequency cap set in the email tool without looking at the ad platform is guessing. This is Marginal ROI versus average ROI applied one contact at a time.
Webinar invitations and retargeting go through the same optimiser. At about €2.50 per invitation including the webinar's production, the optimum is two to three a quarter; Werkbank had been running one. Retargeting at an effective €0.15 per ten impressions, fatigue included, comes out at around 15 blocks, 150 impressions per lead per quarter, a little under two a day, which is where the frequency cap should sit.
Incremental value versus what the platforms claimed
Here is the table that ended the argument in the quarterly review. Spend is the quarter's cost per channel including people's time. The claimed column is what each platform reported. The model column decomposes the 800 actual trials using the coefficients above at the contact levels the leads actually received. The holdout column is measured lift, described in the next section.
| Channel | Spend | Trials claimed by platform | Incremental trials, model | Incremental trials, holdout | Incremental value at €300 | Value per euro spent |
|---|---|---|---|---|---|---|
| €3,200 | 430 | 205 | 175 | €52,500 | 16.4 | |
| Webinars | €6,000 | 210 | 165 | 150 | €45,000 | 7.5 |
| Retargeting | €7,200 | 540 | 125 | 110 | €33,000 | 4.6 |
| Email x retargeting interaction | counted in both | not reported | 80 | not separable | €24,000 | shared |
| Baseline, no contact | €0 | 0 | 225 | €0 | ||
| Total | €16,400 | 1,180 | 800 |
The platforms claimed 1,180 trials for a quarter that produced 800, and nothing for the 225 leads who would have signed up regardless. Retargeting is the sharpest lesson: 540 claimed conversions, which at €300 each is €162,000 of value on €7,200 of spend, or 22.5 to one. The holdout says 110 incremental trials, €33,000, 4.6 to one. Still profitable, still worth running, but a fifth of the claim: view through attribution takes credit for showing an ad to people already on their way to the sign up page. Email is the mirror image, under credited by last click because emails warm people up who then convert through a search or a direct visit. The webinar numbers agree reasonably across all three columns, which happens when a channel demands a real action from the lead. Once you have this table, the budget question becomes the one I set out in Where should your next marketing pound go: to the channel whose next euro, not whose average euro, earns most.
The interaction row is the one people find odd. Eighty trials belong jointly to email and retargeting and cannot be split without a rule, and I refuse to invent one. I report it as shared value and decide at the level of the pair: cut both, keep both or shift budget between them. That question the model answers cleanly.
Holdout groups: the gold standard
A holdout group is a random subset of leads who do not receive the communication. Everything else about them is identical in expectation, so the difference in trial rate is the causal effect of the communication. The model cannot substitute for this, because it relies on touches being spread across leads in a way not driven by their likelihood to convert, and in real marketing operations that is always partly false: sales calls the hot leads, and the retargeting algorithm shows more ads to people who behave like buyers.
The holdout design for email at Werkbank. Randomise within segment so the two groups have the same mix of solo tradespeople, growing workshops and established firms.
The lift and its uncertainty:
is the estimated lift, and are the trial rates in the treated and holdout groups, and the same rates used for the variance, and and the group sizes. For Werkbank's email holdout: 10.2 percent against 7.8 percent, a lift of 2.4 points, times 7,200 treated leads is 173 incremental trials, rounded to 175 in the table. The standard error with 7,200 and 800 leads is about 1.0 points, so the 95 percent interval runs from roughly 0.4 to 4.4 points, or 30 to 320 trials. That is wide, and I say so in the memo. One quarter with a 10 percent holdout gives the direction and the rough size; two or three quarters, or a 20 percent holdout, narrow it to something you can plan with. The model's 205 sits inside the interval, which is the agreement I look for.
Each channel needs its own holdout logic. Email is easy: suppress the sends for a random group. Retargeting is harder because the platform decides who sees what; the clean options are a geographic holdout, where a few postcode areas get no retargeting, or a ghost ad design where the platform records who would have seen the ad and shows them something unrelated instead. Webinars are hardest, because attending is a choice and attendees would have converted at a higher rate anyway. The honest design is a ghost invitation: withhold the invitation from a random 10 percent and compare invited against not invited, never attended against not attended. That is the 150 in the table, lower than the platform's 210 for exactly this self selection reason.
Running it yourself
You need one table with a row per lead per quarter: contacts per channel, the outcome, and whatever you know about the lead. If your touches live in four tools, the first week is getting them into one place with one lead identifier, and that week is usually the project's whole risk.
with contacts as (
select lead_id,
count(*) filter (where channel = 'email') as emails,
count(*) filter (where channel = 'webinar') as webinar_invites,
coalesce(sum(impressions) filter (where channel = 'retargeting'), 0) / 10.0 as retargeting_10
from touches
where touched_at >= date '2026-04-01' and touched_at < date '2026-07-01'
group by lead_id
)
select l.lead_id, l.segment, l.holdout_email, l.created_at,
coalesce(c.emails, 0) as emails,
coalesce(c.webinar_invites, 0) as webinar_invites,
coalesce(c.retargeting_10, 0) as retargeting_10,
(t.lead_id is not null)::int as trial
from leads l
left join contacts c using (lead_id)
left join trials t on t.lead_id = l.lead_id
and t.started_at >= date '2026-04-01' and t.started_at < date '2026-07-01';
Then the model and the optimiser, short in Python:
import numpy as np
import statsmodels.formula.api as smf
df["lE"] = np.log1p(df["emails"])
df["lW"] = np.log1p(df["webinar_invites"])
df["lR"] = np.log1p(df["retargeting_10"])
m = smf.ols("trial ~ lE + lW + lR + lE:lR + C(segment)", data=df).fit(cov_type="HC1")
print(m.summary())
V, cost_email = 300.0, 0.20
b_e, b_er = m.params["lE"], m.params["lE:lR"]
optimal_emails = lambda lR: V * (b_e + b_er * lR) / cost_email - 1
print({r: round(optimal_emails(np.log1p(r))) for r in (0, 6, 15)})
Robust standard errors matter because the outcome is binary and the errors are not constant. Fit the logistic version alongside and compare the implied marginal effects at the mean; if they differ by more than a little, your response rates are outside the range where the linear model is safe.
With clean data, model, holdout read out and contact plan take about two weeks. Before trusting the result I check four things. The coefficients keep their sign and rough size on a second quarter. The holdout lift and the model's estimate for that channel overlap. The decile chart of predicted against actual is monotone. And the holdout really did receive nothing; I have seen an "unsubscribed" flag quietly used as the holdout, which is not a random group and turns the whole exercise into fiction.
Pitfalls
Treating contacts as if they were randomly assigned. They almost never are. Sales calls the hottest leads, the retargeting algorithm chases people who look like buyers, the webinar attracts the already curious, and the model credits the channel with the lead's existing intent. Controls in help, the holdout is the cure, and where you have neither, say so in the memo.
Cost defined as the send cost alone. The two cent email is the most expensive mistake in this chapter. Without unsubscribe damage in the cost, every frequency optimiser recommends carpet bombing. Measure the unsubscribe rate per email per segment and the value of a live lead, and the optimum drops to something a human recognises.
Reading the attribution report as a measurement. It is a rule. Last click under credits everything that warms people up and over credits whatever is nearest the finish line, usually brand search and retargeting. Never compare one channel's attributed number with another channel's incremental number; they are not on the same scale.
Holdouts that are too small or too short. A 5 percent holdout on 8,000 leads gives an interval so wide that any result is consistent with it. Size the holdout to the lift you need to detect, and accept that a frequency decision worth a few thousand euros a quarter deserves two quarters of evidence.
Letting the log curve promise that more is always a little better. The model never turns negative because we told it not to. Real audiences do, through unsubscribes, spam complaints and the slow erosion of attention. Put fatigue in the cost, watch complaint rates, and treat the optimum as a ceiling rather than a target.
How I do this for clients
The deliverable is a contact plan with a number and a risk attached to every line, not a model file. To build it I need, per lead, the touches by channel with timestamps, the outcome you care about, whether trial, order or booking, and whatever segment or firmographic data you hold. Exports from the email tool, the ad platforms and the CRM are enough; I join them.
The first month starts with the free workshop, where we agree what a response is worth in margin, which channels are in scope and which segments the plan will be set for. Then I spend two weeks of real work, on me, building the one table, fitting the model and designing the holdouts you can run next quarter. You get the response curves per channel, the incremental value table against what the platforms claimed, the optimal frequency per segment with the assumptions written next to it, and a one page decision memo that says what to change, what it is worth and how sure I am. If your stack cannot yet suppress a random holdout, I set that up too, because without it we are estimating rather than measuring.
Everything is built in your accounts and your warehouse and stays yours. Pricing is on the pricing page in plain terms, and for clients who want it I run the ongoing programme on commission tied to incremental value, not attributed value. The modelling sits under data science; the execution across email, webinars and paid channels under performance marketing. One accountable person for both means the model and the campaigns cannot blame each other.
Questions for your next quarterly review
- If we add up the trials each platform claims, is the total larger than the trials we actually had?
- For each channel, what is the marginal value of one more contact at the frequency we run now, not the channel's average value?
- What is the full cost of one more email, including expected unsubscribe damage, and who measured it?
- Which channels have a randomised holdout this quarter, how large is it, and what interval does it give us?
- How does the optimal frequency differ by segment, and are we sending everyone the same thing?
- Where are email and paid media planned together, and where in separate tools by separate people?
- What share of this quarter's conversions would have happened with no marketing at all, and who is taking credit for them?
This series is inspired by Mike Grigsby's Marketing Analytics (Kogan Page). The explanations, examples and numbers here are my own.