Skip to main content
Terminus
Contents
Reading ItChapter 11 · ~12 min read

Attribution

A model decides who wins the credit for a sale; the taxonomy decides who is in the race. Five models on one $140 order, three taxonomy what-ifs, and what clicks can't see.

On this page
The chapter in 6 min, as a video.Next video: Chapter 12 · Where You Stand →

One order from Stride’s spring sale, and the four visits before it:

  1. First touch

    Week 1

    Facebook ad

    facebook / paid_social

  2. Week 2

    Newsletter

    newsletter / email

  3. Week 4

    Google search ad

    google / cpc

  4. Last touch

    Week 5

    Instagram retargeting ad

    instagram / paid_social

  5. Outcome

    Order: trail runners, $140

Alex's path through the six-week sale. The order came on the last visit.

Alex clicked a Facebook ad in the sale’s first week. The newsletter came a week later. Two weeks after that, Alex searched “stride running shoes” and clicked a Google ad. A week later an Instagram retargeting ad brought Alex back, and on that visit Alex ordered a pair of trail runners for $140.

Chapter 10 ended on a question. The data is clean and owned. Which campaign gets the credit for a sale?

Look at the four touches again. Every one of them carries spring_sale-runners-2025_03.

So the question as asked has one answer, and it was settled the day the links were made: the spring sale gets the $140.

The question teams fight over is the next one down. Which touch? Which source? Which channel?

That fight usually runs as an argument about models. Last click is unfair to Facebook. Data-driven is smarter. Pick the right model and the report says what worked; if a channel looks weak, try another model and watch it recover.

But every model splits the same recorded touches, grouped by the same values:

  • A paid ad shipped untagged reads as free under every model.
  • A campaign under two spellings splits its own credit under every model.
  • A dimension that never reached the link can’t be credited by any model.

So the argument moves budget on inputs no model can repair. Often it does so under a model nobody chose, because the report already in use reads one way by default.

A model decides who wins. The taxonomy decides who is in the race.

Five ways to split $140

Analytics ties a buyer’s visits together, with a cookie in one browser or a login, and lines up the visits before an order, each under the values it arrived with. That list is the path, and it’s all any model ever sees. A visit analytics couldn’t tie to Alex, one on another device, isn’t in it. Neither is a touch with no click at all.

An attribution model is a rule for splitting one order’s credit among the touches in its path. Before you read the splits, guess what the newsletter gets under each. Here are the five rule-based models, run on Alex’s $140:

ModelRuleWinner
Last clickall to the last touchInstagram, $140
First clickall to the first touchFacebook, $140
Linearequal sharesnone: $35 each
Position‑based40% to each end, 20% to the middleFacebook and Instagram, $56 each
Time decayhalves per half-life before the orderInstagram, $83
  1. First touch

    Week 1

    Facebook ad

    facebook / paid_social

    Last click
    $0
    First click
    $140
    Linear
    $35
    Position-based
    $56
    Time decay
    $5
  2. Week 2

    Newsletter

    newsletter / email

    Last click
    $0
    First click
    $0
    Linear
    $35
    Position-based
    $14
    Time decay
    $10
  3. Week 4

    Google search ad

    google / cpc

    Last click
    $0
    First click
    $0
    Linear
    $35
    Position-based
    $14
    Time decay
    $42
  4. Last touch

    Week 5

    Instagram retargeting ad

    instagram / paid_social

    Last click
    $140
    First click
    $0
    Linear
    $35
    Position-based
    $56
    Time decay
    $83
  5. Outcome

    Order: trail runners, $140

One order, five splits, every row summing to $140. Time decay uses a seven-day half-life, a setting, shown here in whole dollars.

The newsletter gets nothing, then nothing, then $35, $14 and $10. Five models, five splits, and only four answers to “who won”: Instagram twice, Facebook once, a tie, and under linear nobody.

Position-based. 40% of $140 is $56, once for the Facebook ad and once for the Instagram ad. That leaves 20%, or $28, for the two touches between them: $14 to the newsletter, $14 to the Google ad.

Time decay. A touch loses half its weight for every half-life it sits before the order. The half-life is a setting; here it’s seven days. Alex’s touches sit 28, 21, 7 and 0 days before the order: four half-lives, three, one and none. So their weights are 1/16, 1/8, 1/2 and 1, which in sixteenths is 1, 2, 8 and 16 parts of 27.

TouchDays outPartsExactShown
Facebook281$5.19$5
Newsletter212$10.37$10
Google78$41.48$42
Instagram016$82.96$83

The exact shares add to $140.00. Rounded one by one they’d add to $139, so the share that was rounded down by the most, the Google ad’s $41.48, goes up to $42, and the whole dollars sum to $140.

Each rule flatters something, and you can read what from the rule itself:

  • Last click flatters whatever closes. Retargeting reaches people who’ve already visited, so it can only come after another touch, and whenever it comes last it takes everything.
  • First click flatters whatever opens. The Facebook ad takes all $140 for a click four weeks before the order.
  • Linear flatters the middle. The newsletter gets $35, as much as the ad that started the path.
  • Position-based flatters the two ends. The middle shares 20%, however many touches it holds.
  • Time decay flatters whatever sits near the order. The Google ad, a week out, gets $42; the Facebook ad, four weeks out, gets $5.

There’s a sixth kind. Data-driven attribution learns how much each kind of touch adds by comparing the paths that converted with the paths that didn’t, and it assigns credit more precisely the more conversions it has to learn from. GA4’s menu and the volume Google recommends for data-driven are in GA4 Field Notes; Adobe’s menu is in The Tool Landscape.

Your reports already use a model

Before arguing for any model, find the one already in use.

A report that groups each conversion by the source of the visit it happened in credits that visit, and only that visit. It’s a last-touch reading, whether or not anyone chose a model.

In that report, Alex’s order is one row: instagram / paid_social, $140. The Facebook ad, the newsletter and the Google ad aren’t scored low there.

They’re absent.

A team that reads that report as “what worked” is arguing from last click without ever having picked it.

Hold the model still, change the taxonomy

Keep the model fixed and change only what the links recorded.

Start with what the credit lands on. A model splits by touch; the report then adds the touches up by whatever value it groups by. Group Alex’s order by source and you get the five splits above. Group it by channel and the Facebook ad and the Instagram ad add up as Paid Social, which comes out ahead under all five models: $140, $140, $70, $112 and $88, in the table’s order.

Group it by campaign and there’s nothing to split. All four touches carry spring_sale-runners-2025_03, so every model gives the spring sale all $140.

The model matters only between touches whose values differ.

And the values are the taxonomy’s. It sets three things a model can’t touch: which touches exist, how they add up, and what you can credit by. Here’s one what-if for each, on Alex’s order, every model held still. None of them happened; Stride’s links were made right.

Which touches exist

What-if: the Facebook ad ships untagged.

The click still enters the path, under someone else’s name. It arrives as m.facebook.com / referral, and analytics files it as Organic Social, the same as a friend’s post (Chapter 2). The paid ad’s share now reads as free:

ModelOrganic SocialPaid Social
Last click$0$140
First click$140$0
Linear$35$35
Position‑based$56$56
Time decay$5$83

The Facebook ad gets $0 under every model.

Look at the last-click row. Paid Social keeps all $140, because Instagram came last.

A last-touch reading can’t see the hole.

Nor can the hole be patched later. A remap reads one recorded value as another, and it works only when the value meant one thing. m.facebook.com / referral also arrives from every friend who shares the sale on Facebook, so no rule in the report can sort the paid clicks from the free ones.

The opposite mistake adds a touch that never happened. Copy the newsletter’s link onto a banner on Stride’s own site, the internal link from Chapter 8, and in a tool that records the click as a touch, a shopper who clicks it mid-visit gets a newsletter touch in the path. The newsletter then takes a share of a sale it didn’t bring.

How touches add up

What-if: the newsletter’s link goes out as Spring_Sale-runners-2025_03.

A report groups by the exact string, so the campaign is now two rows. Every model still splits the same $140, and every model now splits the spring sale’s own credit between its two spellings:

ModelThe campaignThe stray
Last click$140$0
First click$140$0
Linear$105$35
Position‑based$126$14
Time decay$130$10

Under first and last click the stray takes nothing, so it hides. It shows up the day someone reads a model that pays the middle.

This one can be remapped for the history. Spring_Sale-runners-2025_03 meant one thing, so a report can read it as spring_sale-runners-2025_03 (Chapter 1). The remap repairs the report. The fix that stops the next stray is where links get made.

What you can credit by

What-if, the last one: the board asks for credit by product.

runners gets $140 under every model. The campaign value carries runners as its middle segment, and a report can parse it out (Chapter 4).

Last spring’s campaigns, cleaned up, read spring_sale (Chapter 1). Ask them the same question under any model and there’s no product row to put credit on.

A model can credit only a value that was recorded, and nothing can be added to clicks already made.

Now take the model choice away. Fix any one of the five, and all three changes still move the credit.

Then do the reverse. Change the model and leave the taxonomy alone, and the credit never reaches a touch that wasn’t recorded as itself, never merges two spellings, never invents a product.

The race was settled before the model ran.

Pick the reading by the decision

So which model? The five rules don’t rank. Each answers a different question, and the decision in front of you picks the question:

  • What opens journeys? First click reads that.
  • What closes them? Last click.
  • How does credit spread along the whole path? Linear, position-based and time decay, each with its own weighting.
  • Did anything cause the sale at all? No model answers that. They all split credit among touches that happened, and none of them knows whether the sale would have happened without one.

Then read a second model beside the first. Where the two agree, the decision doesn’t hang on the model. Where the credit moves, as the Facebook ad’s does from $140 under first click to $0 under last, the decision is sensitive to the model, and you want to know that before the budget moves.

Alex’s time decay came out exact to the cent, and it still couldn’t see a missing tag.

Attribution modeling is the part of marketing analytics where the math outpaces the usefulness. Don’t let a model tell you something your judgment already knows.

Clicks can’t see what nobody clicked

Every model works on clicks. A podcast mention, a display ad seen and not clicked, a friend’s recommendation: none of them makes a click, so none of them is in any path, and no model can credit it. When a listener hears an ad and searches for the brand a week later, the credit lands on the search.

Clicks, beside the three methods that look past them. Each sees something different, at its own cost:

MethodPrecisionCoverage
Clickseach touch, split by a ruletagged clicks only
Surveyswhat the buyer saysany touch the buyer names
Incrementality testcause, against a control groupwhat was tested, while it ran
Mix modelingan estimate, from totalsevery channel, with about two years of weekly data

A survey asks the buyer (“How did you hear about us?” on the order or sign-up form) and catches whatever the buyer remembers and names, the podcast included.

An incrementality test compares a group that sees the ads with a control group that doesn’t. The difference between the two is the lift the ads caused: cause, the one thing no model measures, but only for what was tested, while the test ran. A team reaches for one when the question is whether a channel makes sales happen, and the ads can be held back from part of the audience.

Marketing mix modeling estimates each channel’s contribution from aggregated spend and sales over time, with no user-level data, so it sees channels nobody clicks and activities that aren’t marketing. What it gives is an estimate, and it needs about two years of weekly history to give a robust one. A team reaches for one when much of its spend buys no clicks and it has the history to model.

Stride is about to need an incrementality test.

Your situation

Five things decide how attribution reads for you:

  • The decision in front of you. It picks the reading; if it’s whether a channel causes sales, a test might answer where no model can.
  • How long the path is. If people buy on their first visit, first and last touch are the same touch and every model agrees. The more touches between first and last, the further the models drift apart, as Alex’s four touches show.
  • How many conversions you have. Data-driven has more to learn from with more of them. A rule-based split can be checked by hand, the way this chapter checked Alex’s.
  • Which model your reports already use. Grouped by each visit’s source, it’s last touch.
  • How much you spend where nobody clicks. If it’s little, the path covers most of your marketing. If it’s a lot, the path can’t see it, and the methods in the table can, each at its cost.

What changes

DecisionBeforeAfter
Which modelargue for the right one; switch when a channel looks weakpick by the decision; read a second beside it
The channel reportread as what workedfirst find its model: grouped by visit source, it’s last touch
A channel’s low creditrescue it with another modelcheck its touches: tagged, one spelling, carrying the dimension
Credit by a new dimensiondecide when the board asksput it on the link before the first click
Channels with no clicksask the attribution reporta survey, a test or a mix model, knowing each one’s cost

Where the rule lives

A model runs in the report, weeks after the clicks, and it can only split what the links recorded. So who is in the race is settled earlier, where links get made. A touch tagged from the list, under one spelling, carrying every dimension you’ll credit by, is the rule inside the path. A fix in the report is a rule beside it: a remap, or a model switched to rescue a channel. The untagged Facebook ad shows its limit. Nothing in the report can tell that click from a friend’s post.

Check yourself

A $90 order has three touches: a Facebook ad, then the newsletter, then a Google search ad. Who gets what under last click, linear and position-based, and who wins each?

Show answer

Last click: the Google ad gets $90 and wins. Linear: $30 each, no winner. Position-based: 40% of $90 is $36 for each end, and the middle’s 20%, $18, all goes to the newsletter, so Facebook $36, newsletter $18, Google $36, and Facebook and Google tie. Three rules, three different answers, every split summing to $90.

Email looks weak under last click. Half the newsletter's links last quarter went out as Spring_Sale-runners-2025_03, and a partner's mailing went out untagged. A colleague proposes switching to data-driven to give email its due. What does the switch change, and what doesn't it?

Show answer

It moves credit among the touches already recorded. The stray spelling still splits the campaign’s credit into two rows, under any model; remap it for the history, since it meant one thing. The untagged mailing’s clicks aren’t email in any path, and can’t be remapped. The fix for both is where the links are made.

You sponsor a podcast. Under every model it shows almost no credit, while searches for your brand rose the month the ads started. Why, and what could measure it?

Show answer

Listeners don’t click the ad; they search later, so the credit lands on the search touch and the podcast is in no path. A survey question catches some of them. An incrementality test, if the podcast can be held back from a control group, or a mix model over long enough history, estimates the rest, each at its cost.

In one line

A model decides who wins; your taxonomy decides who is in the race. Know which model your reports use, read a second beside it, and make every touch tagged, spelled one way and carrying the dimensions you'll credit by.

Before the next chapter

Find out which model your main channel report uses, or whether it groups by each visit's source. Then check last quarter's top campaign for a second spelling or an untagged channel.

Next · Chapter 12 · Where You StandBack to where the book began: so, facebook or fb?