Marketing attribution

마케팅 어트리뷰션

Choose how to assign credit across the touchpoints before a purchase.

···
html
<div class="attrib"><div class="journey">SEARCH <span>→</span> EMAIL <span>→</span> DIRECT <span>→</span> BUY</div><div class="bars"><div><label>SEARCH</label><i id="search"></i><b id="search-n">0%</b></div><div><label>EMAIL</label><i id="email"></i><b id="email-n">0%</b></div><div><label>DIRECT</label><i id="direct"></i><b id="direct-n">100%</b></div></div><div class="modes"><button data-model="last" class="on">LAST CLICK</button><button data-model="linear">LINEAR</button></div></div>
css
.attrib{width:min(90%,610px);font:900 clamp(10px,max(1.6vmin,1vw),14px)/1.2 sans-serif}.journey{display:flex;justify-content:space-between;gap:3px;background:var(--fg);color:var(--bg);padding:clamp(8px,2vmin,18px);letter-spacing:.03em;white-space:nowrap}.journey span{color:var(--accent)}.bars{display:grid;gap:clamp(7px,2vmin,16px);margin:clamp(14px,3vmin,28px) 0}.bars>div{display:grid;grid-template-columns:clamp(42px,9vw,70px) 1fr clamp(28px,6vw,45px);align-items:center;gap:8px}.bars label{color:var(--muted)}.bars i{display:block;height:clamp(12px,3vmin,24px);width:0;background:var(--accent);transition:width .65s ease}.bars>div:nth-child(2) i{background:var(--accent-2)}.bars>div:nth-child(3) i{background:var(--accent-3)}.bars b{text-align:right}.modes{display:flex;gap:7px}.modes button{flex:1;border:1px solid var(--fg);background:var(--surface);color:var(--fg);font:900 clamp(10px,max(1.5vmin,1vw),12px)/1 sans-serif;padding:clamp(6px,1.5vmin,12px);cursor:pointer}.modes button.on{background:var(--fg);color:var(--bg)}
js
const models={last:[0,0,100],linear:[33,33,34]};const ids=['search','email','direct'];const buttons=[...document.querySelectorAll('[data-model]')];function set(model){buttons.forEach(b=>b.classList.toggle('on',b.dataset.model===model));models[model].forEach((v,i)=>{document.querySelector('#'+ids[i]).style.width=v+'%';document.querySelector('#'+ids[i]+'-n').textContent=v+'%'})}buttons.forEach(b=>b.addEventListener('click',()=>{clearInterval(timer);set(b.dataset.model)}));set('last');let model='last';const timer=setInterval(()=>{model=model==='last'?'linear':'last';set(model)},2300);

Attribution is a rule for assigning credit to touchpoints before a conversion. The same journey gives different channel numbers under last-click and equal-credit models.

Switch models in the demo to redistribute credit across search, email, and direct visits. Before comparing models, show which touchpoints can and cannot be observed.

Assigned credit is not proof of causation. To ask whether a purchase would have happened without an ad, use a separate incrementality method.

When to use

Use it when reading channel reports; check the model definition and add incrementality evidence for budget decisions.

Open as page ↗