Skill Tracer
Skills › Marketing Skills › attribution › attribution-models.md

attribution-models.md

74 lines · skills/attribution/references/attribution-models.md at 88c79f6

Open on GitHub
1# Attribution Models — The Math, Worked
2
3Six rule-based credit rules on one journey, plus data-driven attribution explained without the black box. Use this when the user wants to understand *why* two models disagree, or needs to pick one defensibly.
4
5**Availability:** Google Ads and GA4 no longer offer first-click, linear, time-decay, or position-based as reporting models (retired 2023). Use this file for *concepts* and for scoring journeys on your own data (CRM, warehouse, first-party path). In Google UIs today: data-driven and last-click only.
6

Attribution Models — The Math, Worked

Six rule-based credit rules on one journey, plus data-driven attribution explained without the black box. Use this when the user wants to understand why two models disagree, or needs to pick one defensibly.

Availability: Google Ads and GA4 no longer offer first-click, linear, time-decay, or position-based as reporting models (retired 2023). Use this file for concepts and for scoring journeys on your own data (CRM, warehouse, first-party path). In Google UIs today: data-driven and last-click only.

Raw lines 1 to 6
7## The worked journey
8
9A single B2B buyer's path to a $12,000 annual deal, five touches over 38 days:
11| # | Day | Touch | Role in the story |
12|---|---|---|---|
13| T1 | 0 | LinkedIn ad (paid social) | First discovered you — created awareness |
14| T2 | 5 | Organic blog post (organic search) | Came back to learn — built interest |
15| T3 | 12 | Retargeting ad (paid social) | Nudged back mid-consideration |
16| T4 | 30 | Branded search (paid search, branded) | Ready to act — searched your name |
17| T5 | 38 | Direct → demo request (direct) | Converted |
19The whole point: **the touch that gets credit depends entirely on the model, and each model tells a different story about where your $12k came from.**

The worked journey

A single B2B buyer's path to a $12,000 annual deal, five touches over 38 days:

#DayTouchRole in the story
T10LinkedIn ad (paid social)First discovered you — created awareness
T25Organic blog post (organic search)Came back to learn — built interest
T312Retargeting ad (paid social)Nudged back mid-consideration
T430Branded search (paid search, branded)Ready to act — searched your name
T538Direct → demo request (direct)Converted

The whole point: the touch that gets credit depends entirely on the model, and each model tells a different story about where your $12k came from.

Raw lines 7 to 20
21## The six rule-based models, applied
23Credit for the $12,000 deal under each rule (last non-direct is a last-touch variant that skips Direct):
25| Touch | Channel | First-touch | Last-touch | Last non-direct | Linear | Time-decay | Position (U) |
26|---|---|---|---|---|---|---|---|
27| T1 | Paid social | **$12,000** | $0 | $0 | $2,400 | $175 | **$4,800** |
28| T2 | Organic | $0 | $0 | $0 | $2,400 | $290 | $800 |
29| T3 | Paid social | $0 | $0 | $0 | $2,400 | $575 | $800 |
30| T4 | Paid search (branded) | $0 | $0 | **$12,000** | $2,400 | $3,415 | $800 |
31| T5 | Direct | $0 | **$12,000** | $0 | $2,400 | **$7,545** | **$4,800** |
33*(Time-decay uses a 7-day half-life — weight = 0.5^(days-before-conversion / 7), normalized: shares of ~1.5% / 2.4% / 4.8% / 28.5% / 62.9% (dollars rounded to sum to $12,000). With a 38-day journey the credit concentrates hard on the last two touches — which is exactly why time-decay behaves almost like last-touch on long cycles. Position-based is 40/40/20, the 20% split evenly across T2–T4.)*
35**Read the disagreement:**
36- **First-touch** hands everything to the **LinkedIn ad** — great for arguing paid social's demand-gen value, blind to what closed it.
37- **Last-touch** hands everything to **Direct** — which is really "we don't know," the junk-drawer channel (see SKILL.md §6). This is how top-of-funnel gets defunded.
38- **Last non-direct** hands it to **branded search** — but branded search only happened *because* the LinkedIn ad and blog created the demand. Crediting the closing branded click is crediting your own brand for demand someone else's channel created.
39- **Linear** spreads it evenly — honest that all five mattered, useless for deciding what to cut (everything looks equally important).
40- **Time-decay** favors the recent — reasonable for short cycles, but here it under-credits the LinkedIn ad that started everything.
41- **Position-based** credits the **bookends** (discovered + closed) — usually the most defensible single model for B2B, because "what created this deal" and "what closed it" are the two decisions you actually make.
43**The takeaway to give the user:** report **first-touch and last-touch side by side**. The LinkedIn-vs-Direct gap *is* the insight — it tells you paid social creates demand that later shows up as direct/branded. No single number captures that; the spread does.

The six rule-based models, applied

Credit for the $12,000 deal under each rule (last non-direct is a last-touch variant that skips Direct):

TouchChannelFirst-touchLast-touchLast non-directLinearTime-decayPosition (U)
T1Paid social$12,000$0$0$2,400$175$4,800
T2Organic$0$0$0$2,400$290$800
T3Paid social$0$0$0$2,400$575$800
T4Paid search (branded)$0$0$12,000$2,400$3,415$800
T5Direct$0$12,000$0$2,400$7,545$4,800

(Time-decay uses a 7-day half-life — weight = 0.5^(days-before-conversion / 7), normalized: shares of ~1.5% / 2.4% / 4.8% / 28.5% / 62.9% (dollars rounded to sum to $12,000). With a 38-day journey the credit concentrates hard on the last two touches — which is exactly why time-decay behaves almost like last-touch on long cycles. Position-based is 40/40/20, the 20% split evenly across T2–T4.)

Read the disagreement:

  • First-touch hands everything to the LinkedIn ad — great for arguing paid social's demand-gen value, blind to what closed it.
  • Last-touch hands everything to Direct — which is really "we don't know," the junk-drawer channel (see SKILL.md §6). This is how top-of-funnel gets defunded.
  • Last non-direct hands it to branded search — but branded search only happened because the LinkedIn ad and blog created the demand. Crediting the closing branded click is crediting your own brand for demand someone else's channel created.
  • Linear spreads it evenly — honest that all five mattered, useless for deciding what to cut (everything looks equally important).
  • Time-decay favors the recent — reasonable for short cycles, but here it under-credits the LinkedIn ad that started everything.
  • Position-based credits the bookends (discovered + closed) — usually the most defensible single model for B2B, because "what created this deal" and "what closed it" are the two decisions you actually make.

The takeaway to give the user: report first-touch and last-touch side by side. The LinkedIn-vs-Direct gap is the insight — it tells you paid social creates demand that later shows up as direct/branded. No single number captures that; the spread does.

Raw lines 21 to 44
45## Data-driven / algorithmic attribution (Shapley), plainly
47Data-driven attribution (Google's DDA, most MTA tools) doesn't use a fixed rule. It asks a counterfactual: **how much does each touch actually change the probability of conversion?** The formal engine is the **Shapley value** from cooperative game theory.
49The plain-English version:
51- Treat each touch as a "player" on a team that produced the conversion.
52- Look across *all* your journeys — converting and non-converting.
53- For a given touch, compare conversion rates of journeys that had it vs. otherwise-similar journeys that didn't, across every possible combination of the other touches.
54- A touch's credit = its **average marginal lift** to conversion probability across all those combinations.
56So if journeys with a retargeting touch convert meaningfully more often than identical journeys without it, retargeting earns real credit. If adding a channel changes nothing, it earns ~zero — even if it appears on every path.
58**When it's worth it:**
59- You have **volume** — the counterfactuals need enough conversions to be stable. Google Ads historically gated DDA behind ~3,000 ad interactions and ~300 conversions in 30 days; hard gates are gone and DDA is the default, but Google still recommends ~**200 conversions and ~2,000 ad interactions** in 30 days for quality. Below that, DDA often looks a lot like last-click. On Google/GA4 when thin: use last-click (or accept noisy DDA). On your own data: prefer position-based or first+last side by side.
60- Your journeys are **mostly digital and tracked** — Shapley can only weigh touches it was fed. Offline events, dark social, and cookie-lost touches are invisible to it, so a high-word-of-mouth B2B motion will get a confidently-wrong DDA. Pair it with self-reported (SKILL.md §4).
62**Its honest limitations:**
63- **Black box** — you can't easily explain to a CFO why LinkedIn got 23%. "The model says so" is a weak budget argument on its own.
64- **Correlation, not causation** — it models what *co-occurs* with conversion, not what *causes* it. That's why incrementality testing (see `measurement-paradigms.md`) exists: to validate what DDA claims.
65- **Garbage in** — inherits every blind spot in your tracking. If half your journeys are "direct," DDA is confidently splitting credit on half-blind data.

Data-driven / algorithmic attribution (Shapley), plainly

Data-driven attribution (Google's DDA, most MTA tools) doesn't use a fixed rule. It asks a counterfactual: how much does each touch actually change the probability of conversion? The formal engine is the Shapley value from cooperative game theory.

The plain-English version:

  • Treat each touch as a "player" on a team that produced the conversion.
  • Look across all your journeys — converting and non-converting.
  • For a given touch, compare conversion rates of journeys that had it vs. otherwise-similar journeys that didn't, across every possible combination of the other touches.
  • A touch's credit = its average marginal lift to conversion probability across all those combinations.

So if journeys with a retargeting touch convert meaningfully more often than identical journeys without it, retargeting earns real credit. If adding a channel changes nothing, it earns ~zero — even if it appears on every path.

When it's worth it:

  • You have volume — the counterfactuals need enough conversions to be stable. Google Ads historically gated DDA behind ~3,000 ad interactions and ~300 conversions in 30 days; hard gates are gone and DDA is the default, but Google still recommends ~200 conversions and ~2,000 ad interactions in 30 days for quality. Below that, DDA often looks a lot like last-click. On Google/GA4 when thin: use last-click (or accept noisy DDA). On your own data: prefer position-based or first+last side by side.
  • Your journeys are mostly digital and tracked — Shapley can only weigh touches it was fed. Offline events, dark social, and cookie-lost touches are invisible to it, so a high-word-of-mouth B2B motion will get a confidently-wrong DDA. Pair it with self-reported (SKILL.md §4).

Its honest limitations:

  • Black box — you can't easily explain to a CFO why LinkedIn got 23%. "The model says so" is a weak budget argument on its own.
  • Correlation, not causation — it models what co-occurs with conversion, not what causes it. That's why incrementality testing (see measurement-paradigms.md) exists: to validate what DDA claims.
  • Garbage in — inherits every blind spot in your tracking. If half your journeys are "direct," DDA is confidently splitting credit on half-blind data.
Raw lines 45 to 66
67## Choosing — a short decision guide
69- **Short cycle, few touches, small volume** → last non-direct, plus a self-reported survey. Don't over-model.
70- **Long B2B cycle, clear created/closed moments** → position-based as the primary *on your own path data*, first-touch + last-touch shown alongside. (Not a Google Ads model picker option.)
71- **High volume, mostly-digital, need day-to-day allocation** → data-driven, validated periodically by incrementality.
72- **Offline + brand-heavy, real budget** → don't rely on any user-level model; go MMM + incrementality (see `measurement-paradigms.md`).
74In every case: **pick one model, stay consistent, and pair it with an out-of-model check.** Model-switching to make a channel look good is the fastest way to lose trust in the whole attribution program.

Choosing — a short decision guide

  • Short cycle, few touches, small volume → last non-direct, plus a self-reported survey. Don't over-model.
  • Long B2B cycle, clear created/closed moments → position-based as the primary on your own path data, first-touch + last-touch shown alongside. (Not a Google Ads model picker option.)
  • High volume, mostly-digital, need day-to-day allocation → data-driven, validated periodically by incrementality.
  • Offline + brand-heavy, real budget → don't rely on any user-level model; go MMM + incrementality (see measurement-paradigms.md).

In every case: pick one model, stay consistent, and pair it with an out-of-model check. Model-switching to make a channel look good is the fastest way to lose trust in the whole attribution program.

Raw lines 67 to 74