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:

Ti=β0+βeln⁡(1+Ei)+βwln⁡(1+Wi)+βrln⁡(1+Ri)+βerln⁡(1+Ei)ln⁡(1+Ri)+γ⊤Xi+εiT_i = \beta_0 + \beta_e \ln(1+E_i) + \beta_w \ln(1+W_i) + \beta_r \ln(1+R_i) + \beta_{er} \ln(1+E_i)\ln(1+R_i) + \gamma^\top X_i + \varepsilon_i

Here TiT_i is 1 if lead ii started a trial in the quarter and 0 if not. EiE_i is the number of emails the lead received, WiW_i the number of webinar invitations, RiR_i the retargeting exposure in blocks of ten impressions, because single impressions are too fine a unit to mean anything. β0\beta_0 is the intercept, the response rate of a lead who received nothing. βe\beta_e, βw\beta_w and βr\beta_r are the channel effects, βer\beta_{er} the interaction between email and retargeting, XiX_i a vector of lead characteristics such as segment and lead age with coefficients γ\gamma, and εi\varepsilon_i 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:

MVE=V⋅∂E[T]∂E=V⋅βe+βerln⁡(1+R)1+EMV_E = V \cdot \frac{\partial \mathbb{E}[T]}{\partial E} = V \cdot \frac{\beta_e + \beta_{er}\ln(1+R)}{1+E}

MVEMV_E is the money one more email is expected to bring in, VV 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 EE emails and RR blocks of retargeting already received. At E=0E = 0 the whole coefficient applies, at E=9E = 9 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:

E∗=V(βe+βerln⁡(1+R))ce−1E^{*} = \frac{V \left(\beta_e + \beta_{er}\ln(1+R)\right)}{c_e} - 1

E∗E^{*} is the number of emails per quarter at which the next one would cost more than it brings in, and cec_e 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, VV, 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.

TermCoefficientStd. errorWhat it says
Intercept0.0200.0042.0% of leads start a trial with no contact
ln(1 + emails)0.0100.002First email adds 0.7 points, first ten add 2.4
ln(1 + webinar invitations)0.0300.006One invitation adds 2.1 points, the strongest lever
ln(1 + retargeting, per 10 impressions)0.0080.003Ten impressions add 0.6 points
ln(1 + emails) x ln(1 + retargeting)0.0020.001Together they beat the sum of their parts
Segment: growing workshop0.0140.0043 to 10 staff, 1.4 points above solo tradespeople
Segment: established firm0.0060.005Not distinguishable from zero
ln(lead age in months)minus 0.0040.002Older 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 ln⁡2=0.69\ln 2 = 0.69, so 0.7 percentage points, while zero to ten multiplies it by ln⁡11=2.40\ln 11 = 2.40, 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 VV at €300 and βe\beta_e at 0.010, the marginal value of one more email to a lead who is not being retargeted is 300×0.010/(1+E)300 \times 0.010 / (1+E), €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 cec_e, 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:

SegmentEmail coefficientFull cost per emailOptimal emails per quarterCurrentDecision
Solo tradespeople0.006€0.22712Cut to fortnightly
Growing workshops0.012€0.181912Raise to weekly plus one extra a month
Established firms0.009€0.30812Cut 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.

ChannelSpendTrials claimed by platformIncremental trials, modelIncremental trials, holdoutIncremental value at €300Value per euro spent
Email€3,200430205175€52,50016.4
Webinars€6,000210165150€45,0007.5
Retargeting€7,200540125110€33,0004.6
Email x retargeting interactioncounted in bothnot reported80not separable€24,000shared
Baseline, no contact€00225€0
Total€16,4001,180800

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:

L^=yˉT−yˉH,SE(L^)=pT(1−pT)nT+pH(1−pH)nH\widehat{L} = \bar{y}_T - \bar{y}_H, \qquad SE(\widehat{L}) = \sqrt{\frac{p_T(1-p_T)}{n_T} + \frac{p_H(1-p_H)}{n_H}}

L^\widehat{L} is the estimated lift, yˉT\bar{y}_T and yˉH\bar{y}_H are the trial rates in the treated and holdout groups, pTp_T and pHp_H the same rates used for the variance, and nTn_T and nHn_H 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 XiX_i 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.

If your platforms add up to more conversions than you had, send me the exports: touches per lead by channel, the outcome you care about and whatever segments you hold. I will fit the response curves, put a marginal value on one more contact per channel and tell you where the optimal frequency sits for each segment, with the uncertainty written next to it. We start with a free workshop to agree what a response is worth and which channels are in scope, then I do two weeks of real work before you commit to anything. You keep the model, the holdout design and the contact plan.

1%of every invoice goes to a UK charity you pick.

A donation, never sponsorship. You choose the cause at onboarding.

The story behind the pledge →

Stay ahead of your competition.

The latest innovative products and services, straight to your inbox before your competitors hear about them.

Get up to 5% off your first six months: 1% per topic you pick, the full 5% when you take everything. Limited offer · ends 31 December 2026.

New clients only. Terms apply.

* Up to 5% off your first six monthly invoices, new clients only. Full terms.

Questions about pricing, contracts or how we work together?

Read the FAQ