Méthodologie des recommandations
DURUM.ai génère des recommandations (Insight DURUM) à partir de vos données de campagnes, de votre funnel, de vos ventes et, si vous les avez connectés, de vos appels enregistrés. Cette page décrit exactement comment le moteur décide, avec les seuils réels, et ce qu'il ne fait pas.
Sept principes
Chaque recommandation respecte ces règles. Si une règle ne peut pas être satisfaite, le moteur ne génère rien plutôt que de risquer de vous induire en erreur.
1. Fiabilité avant volume
Trois garde-fous s'appliquent avant toute recommandation :
- Aucune donnée, aucune recommandation. Si la période sélectionnée ne contient ni dépense publicitaire ni événement (lead, rendez-vous, vente), le moteur s'arrête.
- Indice de confiance des données. Le moteur calcule un
dataConfidenceentre 0 et 1 (formule plus bas). Sous0.3, aucune recommandation n'est générée. - Couverture d'attribution. La couverture est la part des ventes rattachées à une publicité. Les règles qui dépendent du revenu par campagne (par exemple
increase_budgetetchannel_role) exigent une couverture d'au moins 50 % (attributionFloor, valeur du profil par défaut). Entre 50 % et 70 %, la recommandation porte la mention « Attribution UTM partielle » ; sous 50 %, la mention « Attribution UTM faible, recommandation basée sur des données partielles ».
Enfin, toute recommandation dont la confiance est inférieure à 40 % est écartée avant l'affichage.
2. Jamais de promesse chiffrée
Toute estimation d'impact monétaire est une fourchette, jamais un chiffre unique. La fourchette est construite autour d'un point médian avec un écart de ± 40 % par défaut (rangeSpread, de 30 % à 60 % selon le profil business). Pour un point médian de 50 K$, vous verrez « 30 K$ à 70 K$ ».
Chaque impact est introduit par « Scénario illustratif » et accompagné de cet avertissement :
Estimation basée sur les données récentes. Dépend de l'exécution et des conditions de marché.
Ce n'est jamais un résultat garanti. C'est un ordre de grandeur pour prioriser.
3. Contexte complet ou rien (fatigue créative)
Le moteur ne conclut pas à une « fatigue créative » sur une simple baisse de CTR. Le diagnostic d'une publicité exige d'abord au moins 1 000 impressions et 50 $ de dépense (sinon le verdict est insufficient_data). Il croise ensuite :
- la tendance du CTR (7 derniers jours vs 7 jours précédents) ;
- la tendance du CVR (taux de conversion), quand les conversions par publicité sont disponibles ;
- la tendance du CPM ;
- la fréquence (impressions / portée) ;
- l'âge de la publicité (
days_active) ; - le calendrier saisonnier.
Les fenêtres saisonnières pendant lesquelles le moteur refuse de conclure à une fatigue : Black Friday et Cyber Monday (20 novembre au 3 décembre), Temps des Fêtes (15 décembre au 5 janvier), Boxing Day (26 au 31 décembre), Saint-Valentin (7 au 15 février), fins de trimestre (25 mars au 2 avril, 25 juin au 2 juillet, 25 septembre au 2 octobre, 20 au 31 décembre) et Rentrée (15 août au 5 septembre).
Le verdict retourné, dans l'ordre d'évaluation :
| Verdict | Condition | Lecture |
|---|---|---|
seasonal | Fenêtre saisonnière active | Métriques atypiques, on ne conclut pas |
budget_issue | CPM en hausse de 25 % ou plus, CTR et CVR stables (variation inférieure à 10 %) | Problème d'enchère ou de concurrence, pas de créative |
landing_issue | CVR en baisse de 25 % ou plus, CTR stable | Le problème est en aval du clic (page ou offre) |
saturation | Fréquence supérieure à 3 et CTR en baisse de 15 % ou plus | Changer d'audience avant de changer la créative |
fatigue | CTR en baisse de 20 % ou plus, fréquence inférieure ou égale à 3 | Le message ne résonne plus : nouvelles créatives |
healthy | Publicité active depuis plus de 21 jours sans dégradation, ou aucun signal clair | Rien à faire |
Ce diagnostic alimente la règle creative_concentration, déclenchée quand deux publicités concentrent plus de 70 % de la dépense.
4. Respect des humains (coaching des reps)
Le moteur juge des résultats, jamais la conformité à un style. La règle coach_rep ne s'active que si :
- au moins deux reps ont 15 présences (
meetingShows) ou plus sur la période ; - le rep concerné a un taux de closing sous la moyenne de l'équipe ;
- l'écart avec le meilleur rep dépasse 30 points.
Un rep qui ferme au-dessus de la moyenne n'est jamais signalé, quel que soit son style. La règle talk_ratio (part de parole supérieure à 55 % sur au moins 8 appels analysés) exige au minimum 15 enregistrements pour le compte, reste en priorité basse et est supprimée si coach_rep couvre déjà le même rep.
5. Flexibilité par profil business
Les seuils dépendent du type de business. Six profils existent dans le moteur :
| Profil | Exemple | Échantillons minimaux (leads / rendez-vous / présences / appels) | Couverture d'attribution minimale |
|---|---|---|---|
b2c_high_ticket (défaut) | Coaching, formation, services de 2 K$ à 10 K$ | 15 / 10 / 8 / 15 | 50 % |
b2c_ecom | Produits physiques de 50 $ à 500 $, volumes élevés | 50 / s.o. / s.o. / s.o. | 60 % |
b2b_midmarket | Ticket de 5 K$ à 50 K$, cycle de 30 à 90 jours | 10 / 5 / 5 / 10 | 40 % |
b2b_enterprise | Contrats de 50 K$ et plus, cycle de 6 mois et plus | 5 / 3 / 3 / 5 | 30 % |
saas_plg | Self-serve, 10 $ à 500 $ par mois | 30 / s.o. / s.o. / s.o. | 70 % |
services_pro | Avocat, comptable, consultant, faibles volumes | 5 / 3 / 2 / 5 | 40 % |
Le profil est stocké sur le compte client (business_profile). Aucune interface ne permet encore de le choisir : le widget Recommandations utilise le profil par défaut.
6. Priorité dynamique
Un ROAS négatif depuis 3 jours n'a pas l'urgence d'un ROAS négatif depuis 14 jours. Pour les règles concernées, modulatePriority additionne trois composantes :
| Composante | Points |
|---|---|
| Durée du problème | 14 jours et plus : 3, 7 à 13 jours : 2, 3 à 6 jours : 1 |
| Ampleur (part du budget touchée) | 30 % et plus : 3, 15 % à 29 % : 2, 5 % à 14 % : 1 |
| Tendance | S'aggrave : +1, s'améliore : -1 |
Score de 5 ou plus : priorité high. De 2 à 4 : medium. Sinon : low.
7. Attribution
DURUM.ai propose cinq modèles d'attribution. Le sélecteur se trouve au-dessus des tableaux de la Vue d'ensemble et de la page Publicités ; un modèle peut être épinglé comme défaut du compte (default_attribution_model).
| Modèle | Code | Description |
|---|---|---|
| Hybride Durum (défaut) | hybrid | Première pub si la vente survient en moins de 30 jours, dernière pub au-delà |
| Linéaire | linear | Crédit égal à chaque pub du parcours |
| First Touch | first_touch | Crédit à la première pub vue |
| Last Touch | last_touch | Crédit à la dernière pub vue |
| Position (40-20-40) | position | 40 % première, 40 % dernière, 20 % milieu (pondérations ajustables) |
Les KPI du funnel (leads, rendez-vous, ventes) sont neutres : ils ne changent pas selon le modèle. Dans le moteur de recommandations, le modèle position est approximé par 40 % first touch + 40 % last touch (pas de touche intermédiaire dans les données par publicité), et le widget Recommandations utilise le modèle hybrid. La page Réglages, Attribution (/settings/attribution) explique chaque modèle.
Seuils et formules
Indice de confiance des données
Avant toute recommandation, le moteur calcule :
dataConfidence = min(spend, events) x 0.7 + attribution x 0.3| Composante | Valeur |
|---|---|
spend (jours avec dépense) | 28 jours et plus : 1.0, 14 à 27 : 0.7, 7 à 13 : 0.4, sinon 0.2 |
events (leads + rendez-vous + ventes) | 30 et plus : 1.0, 10 à 29 : 0.6, sinon 0.2 |
attribution (part des ventes rattachées à une pub) | 70 % et plus : 1.0, 50 % à 69 % : 0.75, 30 % à 49 % : 0.5, sinon 0.3 (0.7 s'il n'y a aucune vente) |
Si dataConfidence < 0.3, aucune recommandation n'est générée.
Échantillons minimaux par règle
| Règle | Minimum requis |
|---|---|
Coaching des reps (coach_rep) | 15 présences par rep, au moins 2 reps |
Anomalie de dépense (spend_anomaly) | 16 jours d'historique ; z-score supérieur à 2.5 vs la moyenne mobile 14 jours ; le jour en cours est exclu |
| Fatigue créative | 1 000 impressions et 50 $ de dépense par publicité |
Maillon faible du funnel (chain_link), écart entre sources (source_variance) | 15 leads |
No-show par rep (rep_noshow) | 10 rendez-vous par rep |
Baisse du taux de closing (close_rate_drop) | 8 présences |
Part de parole (talk_ratio) | 15 enregistrements analysés, 8 appels pour le rep |
Ces minimums sont ceux du profil par défaut (voir le principe 5).
Cadre de mesure de l'impact
Quand une recommandation enregistrée passe au statut « implémentée », un instantané des KPI des 30 derniers jours est capturé (capture_reco_baseline). Un traitement quotidien (update_reco_baselines) remesure les mêmes KPI à T+7, T+30 et T+90 jours. La fonction get_reco_quality_by_rule calcule ensuite, par règle, la variation moyenne du ROAS et du taux de closing à T+30. C'est ce qui permet de juger si une règle produit un effet réel.
Ce que le moteur ne fait pas
- Pas de recommandation sans données. Période sans dépense ni événement, ou
dataConfidencesous 0.3 : rien n'est affiché. - Pas d'attribution hors ligne (appels entrants, visites en personne). Seuls les parcours numériques sont couverts.
- Pas d'affichage sous 40 % de confiance. Un signal trop faible est écarté plutôt qu'affiché avec un avertissement.
Cycle de vie d'une recommandation
Les recommandations du widget sont recalculées à chaque affichage à partir de la période et des filtres sélectionnés. Quand les conditions ne sont plus réunies (par exemple un ROAS revenu au-dessus de 1), la recommandation disparaît d'elle-même.
Pour les développeurs : une recommandation enregistrée (ai_recommendations) porte un statut parmi pending, acknowledged, in_progress, implemented, dismissed, auto_resolved et expired. Une recommandation pending expire automatiquement après 7 jours (traitement quotidien). Un refus est enregistré avec une raison (dismiss_reason) parmi pas_pertinent, deja_fait, trop_risque, budget_insuffisant et autre. Les recommandations marquées implémentées ou refusées ne réapparaissent pas dans le widget.
Questions fréquentes
Pourquoi une recommandation disparaît-elle ?
Parce qu'elle est recalculée à chaque affichage : si le constat n'est plus vrai sur la période sélectionnée, elle n'est plus générée. Les recommandations enregistrées expirent par ailleurs après 7 jours sans action.
Pourquoi les recommandations changent-elles quand je change la période ?
Parce que le moteur ne lit que la période et les filtres affichés. Une période plus courte contient moins de jours de dépense et moins d'événements, ce qui abaisse l'indice de confiance et peut faire taire certaines règles.
Pourquoi certains impacts sont-ils des fourchettes ?
Parce que l'avenir n'est pas une promesse. Une fourchette reflète l'incertitude réelle d'une projection basée sur l'historique récent.
Contact
Une question sur une recommandation précise ? Écrivez à info@durum.ai en citant le titre de la recommandation et la période affichée.