All guides
IntermediateSelf-pacedFree GuideSection 10/27

Attribution multi-touch

Explore AI for marketing and sales operations: CRM, prospect follow-up, workflows and measurement. Practise checks using educational examples.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

Section 14.3.3 : Attribution multi-touch

🎯 Objectif pédagogique

Comprendre et implémenter des modèles d'attribution multi-touch pour mesurer l'impact réel de chaque canal marketing sur les conversions et optimiser le budget.


Le problème de l'attribution

Un client interagit avec votre marque 10+ fois avant d'acheter. Quel touchpoint a "causé" la conversion ? L'attribution résout cette question critique pour l'allocation budgétaire.

Parcours type d un client B2B SaaS :
1. Google Search → article de blog (SEO)
2. Retargeting → ad LinkedIn
3. Email nurturing → ouvre 3 emails
4. Google Search → page produit (branded)
5. LinkedIn → post du CEO
6. Webinar → inscription + participation
7. Demo request → conversion !

Question : quel canal reçoit le crédit ?

Modèles d'attribution

Modèles d attribution

ModèleLogiqueAvantageInconvénient
First touch100% au premier contactSimpleIgnore le nurturing
Last touch100% au dernier contactSimpleIgnore la découverte
LinéairePoids égal à chaque touchÉquitablePas de différenciation
Time decayPlus de poids aux récentsRéalisteSous-estime discovery
Position-based40/20/40 premier/milieu/dernierÉquilibréArbitraire
Data-driven (ML)Poids calculé par algorithmeLe plus précisRequiert beaucoup de données

← Scroll horizontally →

Attribution data-driven (ML)

# Attribution avec Shapley values
# Concept : chaque canal reçoit sa contribution marginale

from itertools import combinations
import numpy as np

def shapley_attribution(channels, conversions_by_path):
    """
    Calcule la valeur Shapley de chaque canal.
    channels : liste des canaux
    conversions_by_path : dict {frozenset(canaux) -> taux_conversion}
    """
    n = len(channels)
    shapley_values = {c: 0 for c in channels}

    for channel in channels:
        for size in range(n):
            # Toutes les coalitions de taille 'size' sans 'channel'
            others = [c for c in channels if c != channel]
            for subset in combinations(others, size):
                subset_set = frozenset(subset)
                with_channel = frozenset(subset) | {channel}

                # Contribution marginale
                marginal = (conversions_by_path.get(with_channel, 0)
                          - conversions_by_path.get(subset_set, 0))

                # Poids Shapley
                weight = (np.math.factorial(size)
                        * np.math.factorial(n - size - 1)
                        / np.math.factorial(n))

                shapley_values[channel] += weight * marginal

    return shapley_values

Dashboard d'attribution

Quick Check

Pourquoi le modèle last-touch est-il problématique pour l'allocation budgétaire ?

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.