[{"data":1,"prerenderedAt":1592},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-un-client":13},{"i18nKey":4,"paths":5},"data-003-2026-07",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fidentity-resolution-6-signale-zu-einer-kundenidentitaet","\u002Fen\u002Fdata\u002Fidentity-resolution-unifying-6-signals-into-single-customer-identity","\u002Fes\u002Fdata\u002Fresolucion-de-identidad","\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-un-client","\u002Fit\u002Fdata\u002Frisoluzione-identit","\u002Fru\u002Fdata\u002Fidentity-resolution-6-signalov-k-ednoj-identichnosti-klienta","\u002Ftr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine",{"_path":9,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":1586,"_id":1587,"_source":1588,"_file":1589,"_stem":1590,"_extension":1591},"data",false,"","Resolution d'identité : De 6 signaux à une identité client unique","Hash matching, probabilistic linking et household clustering : comment unifier les touchpoints dispersés en une identité client unique ? Subtilités de l'architecture identity graph en production.","2026-07-03",[21,22,23,24,25],"resolution-identite","data-engineering","cdp","first-party-data","customer-identity",9,"Roibase",{"type":29,"children":30,"toc":1577},"root",[31,39,46,51,56,61,67,72,88,419,432,443,449,454,459,464,1204,1209,1219,1225,1230,1235,1280,1285,1387,1406,1415,1421,1426,1458,1468,1487,1500,1510,1520,1525,1531,1536,1541,1551,1557,1571],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Les cookies ont disparu, les taux de connexion stagnent à 8 %, chaque appareil génère un ID différent, chaque canal un signal différent. Un client e-commerce moyen laisse 6 touchpoints distincts dans son parcours d'achat, mais les plateformes les enregistrent comme 6 personnes différentes. Le plus grand problème des données marketing : l'identité numérique fragmentée d'une même personne en 6 morceaux. La résolution d'identité, c'est l'ingénierie de réunification de ces fragments — via hash matching, probabilistic linking et household clustering. Construire un identity graph opérationnel en production, ce n'est pas seulement technique : c'est maintenir l'équilibre entre confidentialité, performance et précision.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"quest-ce-que-la-résolution-didentité-et-pourquoi-cest-critique-maintenant",[44],{"type":37,"value":45},"Qu'est-ce que la résolution d'identité et pourquoi c'est critique maintenant",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"La résolution d'identité unifie des fragments de signaux provenant de sources différentes (email hashé, device ID, browser fingerprint, IP, session cookie) sous un seul profil client. En 2026, l'abandon définitif des cookies tiers par Google Chrome, la réduction par Safari ITP 2.3 du stockage à 7 jours, et le taux opt-in IDFA post-iOS 14.5 plafonnant à 15 % rendent impossible toute solution de cross-device tracking dépendante de technologies propriétaires.",{"type":32,"tag":33,"props":52,"children":53},{},[54],{"type":37,"value":55},"L'analyse Roibase Q4 2025 sur ses clients Shopify Plus a montré qu'un même utilisateur génère en moyenne 3,2 ID anonymes différents sur le triangle mobile web, desktop, application. Ce client arrive à la caisse, saisit son email, et ce n'est qu'à ce moment que s'opère la fusion. Mais si vous ne réconciliez pas les 4-5 touchpoints antérieurs au checkout, votre modèle d'attribution s'effondre — le dernier clic remporte tout, le véritable parcours disparaît. La résolution d'identité est donc la couche infrastructure du marketing measurement moderne. En combinant des approches déterministes (hash matching : email, téléphone) et probabilistes (IP + user-agent + timezone), on vise 85 %+ de précision.",{"type":32,"tag":33,"props":57,"children":58},{},[59],{"type":37,"value":60},"Transposer cette discipline en production nécessite une architecture 3 couches : collecte de signaux (raw event stream), identity stitching (graph engine), unification de profils (CDP layer). À chaque couche, on équilibre la conformité privacy (TCF 2.2, RGPD consentement) et la performance (real-time vs batch resolution).",{"type":32,"tag":40,"props":62,"children":64},{"id":63},"hash-matching-le-cœur-de-lidentité-déterministe",[65],{"type":37,"value":66},"Hash Matching : le cœur de l'identité déterministe",{"type":32,"tag":33,"props":68,"children":69},{},[70],{"type":37,"value":71},"Le hash matching est la méthode de résolution d'identité la plus fiable : vous hashéz l'email ou le numéro de téléphone de l'utilisateur en SHA256 et le confrontez aux hashs d'autres systèmes. La précision approche 100 % : risque de collision négligeable, même hash = même email. Mais 3 conditions critiques : (1) vous devez avoir collecté la PII de l'utilisateur (remplissage de formulaire, connexion), (2) obtenir le consentement (RGPD 6(1)(a) ou intérêt légitime), (3) standardiser le hash cross-systèmes (lowercase + trim + UTF-8 encoding).",{"type":32,"tag":33,"props":73,"children":74},{},[75,77,86],{"type":37,"value":76},"Dans les projets ",{"type":32,"tag":78,"props":79,"children":83},"a",{"href":80,"rel":81},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fretention-engineering-cdp",[82],"nofollow",[84],{"type":37,"value":85},"CDP & retention engineering",{"type":37,"value":87},", Roibase utilise ce pipeline :",{"type":32,"tag":89,"props":90,"children":94},"pre",{"className":91,"code":92,"language":93,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","-- Standardisation du hash email sur BigQuery\nCREATE OR REPLACE FUNCTION `project.dataset.hash_email`(email STRING)\nRETURNS STRING AS (\n  TO_HEX(SHA256(LOWER(TRIM(email))))\n);\n\n-- Enrichissement du hash email dans la table d'événements\nSELECT\n  event_timestamp,\n  user_pseudo_id,\n  `project.dataset.hash_email`(user_properties.email) AS email_hash,\n  device.category,\n  traffic_source.medium\nFROM `analytics_123456789.events_*`\nWHERE _TABLE_SUFFIX BETWEEN '20260601' AND '20260630'\n  AND user_properties.email IS NOT NULL;\n","sql",[95],{"type":32,"tag":96,"props":97,"children":98},"code",{"__ignoreMap":16},[99,111,148,172,202,211,221,230,239,247,256,298,321,339,353,387],{"type":32,"tag":100,"props":101,"children":104},"span",{"class":102,"line":103},"line",1,[105],{"type":32,"tag":100,"props":106,"children":108},{"style":107},"--shiki-default:#6A737D",[109],{"type":37,"value":110},"-- Standardisation du hash email sur BigQuery\n",{"type":32,"tag":100,"props":112,"children":114},{"class":102,"line":113},2,[115,121,126,131,136,142],{"type":32,"tag":100,"props":116,"children":118},{"style":117},"--shiki-default:#F97583",[119],{"type":37,"value":120},"CREATE",{"type":32,"tag":100,"props":122,"children":123},{"style":117},[124],{"type":37,"value":125}," OR",{"type":32,"tag":100,"props":127,"children":128},{"style":117},[129],{"type":37,"value":130}," REPLACE",{"type":32,"tag":100,"props":132,"children":133},{"style":117},[134],{"type":37,"value":135}," FUNCTION",{"type":32,"tag":100,"props":137,"children":139},{"style":138},"--shiki-default:#9ECBFF",[140],{"type":37,"value":141}," `project.dataset.hash_email`",{"type":32,"tag":100,"props":143,"children":145},{"style":144},"--shiki-default:#E1E4E8",[146],{"type":37,"value":147},"(email STRING)\n",{"type":32,"tag":100,"props":149,"children":151},{"class":102,"line":150},3,[152,157,162,167],{"type":32,"tag":100,"props":153,"children":154},{"style":117},[155],{"type":37,"value":156},"RETURNS",{"type":32,"tag":100,"props":158,"children":159},{"style":144},[160],{"type":37,"value":161}," STRING ",{"type":32,"tag":100,"props":163,"children":164},{"style":117},[165],{"type":37,"value":166},"AS",{"type":32,"tag":100,"props":168,"children":169},{"style":144},[170],{"type":37,"value":171}," (\n",{"type":32,"tag":100,"props":173,"children":175},{"class":102,"line":174},4,[176,181,187,192,197],{"type":32,"tag":100,"props":177,"children":178},{"style":144},[179],{"type":37,"value":180},"  TO_HEX(SHA256(",{"type":32,"tag":100,"props":182,"children":184},{"style":183},"--shiki-default:#79B8FF",[185],{"type":37,"value":186},"LOWER",{"type":32,"tag":100,"props":188,"children":189},{"style":144},[190],{"type":37,"value":191},"(",{"type":32,"tag":100,"props":193,"children":194},{"style":183},[195],{"type":37,"value":196},"TRIM",{"type":32,"tag":100,"props":198,"children":199},{"style":144},[200],{"type":37,"value":201},"(email))))\n",{"type":32,"tag":100,"props":203,"children":205},{"class":102,"line":204},5,[206],{"type":32,"tag":100,"props":207,"children":208},{"style":144},[209],{"type":37,"value":210},");\n",{"type":32,"tag":100,"props":212,"children":214},{"class":102,"line":213},6,[215],{"type":32,"tag":100,"props":216,"children":218},{"emptyLinePlaceholder":217},true,[219],{"type":37,"value":220},"\n",{"type":32,"tag":100,"props":222,"children":224},{"class":102,"line":223},7,[225],{"type":32,"tag":100,"props":226,"children":227},{"style":107},[228],{"type":37,"value":229},"-- Enrichissement du hash email dans la table d'événements\n",{"type":32,"tag":100,"props":231,"children":233},{"class":102,"line":232},8,[234],{"type":32,"tag":100,"props":235,"children":236},{"style":117},[237],{"type":37,"value":238},"SELECT\n",{"type":32,"tag":100,"props":240,"children":241},{"class":102,"line":26},[242],{"type":32,"tag":100,"props":243,"children":244},{"style":144},[245],{"type":37,"value":246},"  event_timestamp,\n",{"type":32,"tag":100,"props":248,"children":250},{"class":102,"line":249},10,[251],{"type":32,"tag":100,"props":252,"children":253},{"style":144},[254],{"type":37,"value":255},"  user_pseudo_id,\n",{"type":32,"tag":100,"props":257,"children":259},{"class":102,"line":258},11,[260,265,269,274,279,284,289,293],{"type":32,"tag":100,"props":261,"children":262},{"style":138},[263],{"type":37,"value":264},"  `project.dataset.hash_email`",{"type":32,"tag":100,"props":266,"children":267},{"style":144},[268],{"type":37,"value":191},{"type":32,"tag":100,"props":270,"children":271},{"style":183},[272],{"type":37,"value":273},"user_properties",{"type":32,"tag":100,"props":275,"children":276},{"style":144},[277],{"type":37,"value":278},".",{"type":32,"tag":100,"props":280,"children":281},{"style":183},[282],{"type":37,"value":283},"email",{"type":32,"tag":100,"props":285,"children":286},{"style":144},[287],{"type":37,"value":288},") ",{"type":32,"tag":100,"props":290,"children":291},{"style":117},[292],{"type":37,"value":166},{"type":32,"tag":100,"props":294,"children":295},{"style":144},[296],{"type":37,"value":297}," email_hash,\n",{"type":32,"tag":100,"props":299,"children":301},{"class":102,"line":300},12,[302,307,311,316],{"type":32,"tag":100,"props":303,"children":304},{"style":183},[305],{"type":37,"value":306},"  device",{"type":32,"tag":100,"props":308,"children":309},{"style":144},[310],{"type":37,"value":278},{"type":32,"tag":100,"props":312,"children":313},{"style":183},[314],{"type":37,"value":315},"category",{"type":32,"tag":100,"props":317,"children":318},{"style":144},[319],{"type":37,"value":320},",\n",{"type":32,"tag":100,"props":322,"children":324},{"class":102,"line":323},13,[325,330,334],{"type":32,"tag":100,"props":326,"children":327},{"style":183},[328],{"type":37,"value":329},"  traffic_source",{"type":32,"tag":100,"props":331,"children":332},{"style":144},[333],{"type":37,"value":278},{"type":32,"tag":100,"props":335,"children":336},{"style":183},[337],{"type":37,"value":338},"medium\n",{"type":32,"tag":100,"props":340,"children":342},{"class":102,"line":341},14,[343,348],{"type":32,"tag":100,"props":344,"children":345},{"style":117},[346],{"type":37,"value":347},"FROM",{"type":32,"tag":100,"props":349,"children":350},{"style":138},[351],{"type":37,"value":352}," `analytics_123456789.events_*`\n",{"type":32,"tag":100,"props":354,"children":356},{"class":102,"line":355},15,[357,362,367,372,377,382],{"type":32,"tag":100,"props":358,"children":359},{"style":117},[360],{"type":37,"value":361},"WHERE",{"type":32,"tag":100,"props":363,"children":364},{"style":144},[365],{"type":37,"value":366}," _TABLE_SUFFIX ",{"type":32,"tag":100,"props":368,"children":369},{"style":117},[370],{"type":37,"value":371},"BETWEEN",{"type":32,"tag":100,"props":373,"children":374},{"style":138},[375],{"type":37,"value":376}," '20260601'",{"type":32,"tag":100,"props":378,"children":379},{"style":117},[380],{"type":37,"value":381}," AND",{"type":32,"tag":100,"props":383,"children":384},{"style":138},[385],{"type":37,"value":386}," '20260630'\n",{"type":32,"tag":100,"props":388,"children":390},{"class":102,"line":389},16,[391,396,401,405,409,414],{"type":32,"tag":100,"props":392,"children":393},{"style":117},[394],{"type":37,"value":395},"  AND",{"type":32,"tag":100,"props":397,"children":398},{"style":183},[399],{"type":37,"value":400}," user_properties",{"type":32,"tag":100,"props":402,"children":403},{"style":144},[404],{"type":37,"value":278},{"type":32,"tag":100,"props":406,"children":407},{"style":183},[408],{"type":37,"value":283},{"type":32,"tag":100,"props":410,"children":411},{"style":117},[412],{"type":37,"value":413}," IS NOT NULL",{"type":32,"tag":100,"props":415,"children":416},{"style":144},[417],{"type":37,"value":418},";\n",{"type":32,"tag":33,"props":420,"children":421},{},[422,424,430],{"type":37,"value":423},"Vous écrivez ce hash dans une CDP comme Segment ou mParticle : elle fusionne les événements issus de différents appareils sous le même ",{"type":32,"tag":96,"props":425,"children":427},{"className":426},[],[428],{"type":37,"value":429},"email_hash",{"type":37,"value":431},". Scénario exemple : un utilisateur s'abonne à la newsletter lundi sur desktop (vous capturez l'email), mercredi il navigue anonyme sur mobile, jeudi il se connecte et achète sur desktop. Sans hash email, vous voyez 3 user_id différents ; avec hash matching, 1 profil, 3 sessions, parcours net.",{"type":32,"tag":33,"props":433,"children":434},{},[435,441],{"type":32,"tag":436,"props":437,"children":438},"strong",{},[439],{"type":37,"value":440},"Tradeoff :",{"type":37,"value":442}," Le hash matching ne fonctionne que sur utilisateurs authentifiés. En e-commerce, les taux de connexion oscillent 8-12 %, donc 88-92 % du trafic reste anonyme. C'est ici qu'intervient le probabilistic linking.",{"type":32,"tag":40,"props":444,"children":446},{"id":445},"probabilistic-linking-réconcilier-statistiquement-les-signaux",[447],{"type":37,"value":448},"Probabilistic Linking : réconcilier statistiquement les signaux",{"type":32,"tag":33,"props":450,"children":451},{},[452],{"type":37,"value":453},"La résolution d'identité probabiliste combine des signaux hétérogènes pour calculer un score de probabilité : « probablement la même personne ». Vous fusionnez IP + user-agent + timezone + pattern comportemental et acceptez la fusion à seuil de confiance >80 %. La précision n'atteint pas celle du déterministe (taux faux positif 5-10 %), mais elle couvre aussi le trafic anonyme.",{"type":32,"tag":33,"props":455,"children":456},{},[457],{"type":37,"value":458},"La logique algorithmique : chaque signal porte un « weight ». Une IP stable sur un réseau maison\u002Fbureau = +0.3, combinaison user-agent + timezone rare = +0.25, pattern comportemental de session (séquence de pages, scroll depth, timing) chevauchant 90 % une session antérieure = +0.4. Score total >0.8 = fusion des deux sessions sous le même nœud identité. Cette opération ne s'exécute pas real-time — un job batch recalcule le graph 1-2 fois par jour.",{"type":32,"tag":33,"props":460,"children":461},{},[462],{"type":37,"value":463},"Voici le pipeline probabiliste utilisé par Roibase dans le vertical gaming :",{"type":32,"tag":89,"props":465,"children":467},{"className":91,"code":466,"language":93,"meta":16,"style":16},"-- Créer les fingerprints (simplifié)\nWITH fingerprints AS (\n  SELECT\n    user_pseudo_id,\n    event_date,\n    NET.IP_TO_STRING(NET.SAFE_IP_FROM_STRING(user_first_touch_timestamp)) AS ip_prefix,\n    device.operating_system,\n    device.browser,\n    geo.country,\n    ARRAY_AGG(page_location ORDER BY event_timestamp LIMIT 5) AS page_sequence\n  FROM `analytics_123456789.events_*`\n  WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE())\n  GROUP BY 1,2,3,4,5,6\n)\nSELECT\n  a.user_pseudo_id AS user_a,\n  b.user_pseudo_id AS user_b,\n  -- Jaccard similarity sur la séquence de pages\n  (SELECT COUNT(*) FROM UNNEST(a.page_sequence) AS p WHERE p IN UNNEST(b.page_sequence)) \n    \u002F (ARRAY_LENGTH(a.page_sequence) + ARRAY_LENGTH(b.page_sequence)) AS similarity_score\nFROM fingerprints a\nJOIN fingerprints b\n  ON a.ip_prefix = b.ip_prefix\n  AND a.operating_system = b.operating_system\n  AND a.user_pseudo_id != b.user_pseudo_id\nWHERE similarity_score > 0.75;\n",[468],{"type":32,"tag":96,"props":469,"children":470},{"__ignoreMap":16},[471,479,500,508,516,524,573,594,614,635,676,688,720,779,787,794,821,847,856,958,1024,1037,1051,1093,1130,1168],{"type":32,"tag":100,"props":472,"children":473},{"class":102,"line":103},[474],{"type":32,"tag":100,"props":475,"children":476},{"style":107},[477],{"type":37,"value":478},"-- Créer les fingerprints (simplifié)\n",{"type":32,"tag":100,"props":480,"children":481},{"class":102,"line":113},[482,487,492,496],{"type":32,"tag":100,"props":483,"children":484},{"style":117},[485],{"type":37,"value":486},"WITH",{"type":32,"tag":100,"props":488,"children":489},{"style":144},[490],{"type":37,"value":491}," fingerprints ",{"type":32,"tag":100,"props":493,"children":494},{"style":117},[495],{"type":37,"value":166},{"type":32,"tag":100,"props":497,"children":498},{"style":144},[499],{"type":37,"value":171},{"type":32,"tag":100,"props":501,"children":502},{"class":102,"line":150},[503],{"type":32,"tag":100,"props":504,"children":505},{"style":117},[506],{"type":37,"value":507},"  SELECT\n",{"type":32,"tag":100,"props":509,"children":510},{"class":102,"line":174},[511],{"type":32,"tag":100,"props":512,"children":513},{"style":144},[514],{"type":37,"value":515},"    user_pseudo_id,\n",{"type":32,"tag":100,"props":517,"children":518},{"class":102,"line":204},[519],{"type":32,"tag":100,"props":520,"children":521},{"style":144},[522],{"type":37,"value":523},"    event_date,\n",{"type":32,"tag":100,"props":525,"children":526},{"class":102,"line":213},[527,532,536,541,545,550,554,559,564,568],{"type":32,"tag":100,"props":528,"children":529},{"style":183},[530],{"type":37,"value":531},"    NET",{"type":32,"tag":100,"props":533,"children":534},{"style":144},[535],{"type":37,"value":278},{"type":32,"tag":100,"props":537,"children":538},{"style":183},[539],{"type":37,"value":540},"IP_TO_STRING",{"type":32,"tag":100,"props":542,"children":543},{"style":144},[544],{"type":37,"value":191},{"type":32,"tag":100,"props":546,"children":547},{"style":183},[548],{"type":37,"value":549},"NET",{"type":32,"tag":100,"props":551,"children":552},{"style":144},[553],{"type":37,"value":278},{"type":32,"tag":100,"props":555,"children":556},{"style":183},[557],{"type":37,"value":558},"SAFE_IP_FROM_STRING",{"type":32,"tag":100,"props":560,"children":561},{"style":144},[562],{"type":37,"value":563},"(user_first_touch_timestamp)) ",{"type":32,"tag":100,"props":565,"children":566},{"style":117},[567],{"type":37,"value":166},{"type":32,"tag":100,"props":569,"children":570},{"style":144},[571],{"type":37,"value":572}," ip_prefix,\n",{"type":32,"tag":100,"props":574,"children":575},{"class":102,"line":223},[576,581,585,590],{"type":32,"tag":100,"props":577,"children":578},{"style":183},[579],{"type":37,"value":580},"    device",{"type":32,"tag":100,"props":582,"children":583},{"style":144},[584],{"type":37,"value":278},{"type":32,"tag":100,"props":586,"children":587},{"style":183},[588],{"type":37,"value":589},"operating_system",{"type":32,"tag":100,"props":591,"children":592},{"style":144},[593],{"type":37,"value":320},{"type":32,"tag":100,"props":595,"children":596},{"class":102,"line":232},[597,601,605,610],{"type":32,"tag":100,"props":598,"children":599},{"style":183},[600],{"type":37,"value":580},{"type":32,"tag":100,"props":602,"children":603},{"style":144},[604],{"type":37,"value":278},{"type":32,"tag":100,"props":606,"children":607},{"style":183},[608],{"type":37,"value":609},"browser",{"type":32,"tag":100,"props":611,"children":612},{"style":144},[613],{"type":37,"value":320},{"type":32,"tag":100,"props":615,"children":616},{"class":102,"line":26},[617,622,626,631],{"type":32,"tag":100,"props":618,"children":619},{"style":183},[620],{"type":37,"value":621},"    geo",{"type":32,"tag":100,"props":623,"children":624},{"style":144},[625],{"type":37,"value":278},{"type":32,"tag":100,"props":627,"children":628},{"style":183},[629],{"type":37,"value":630},"country",{"type":32,"tag":100,"props":632,"children":633},{"style":144},[634],{"type":37,"value":320},{"type":32,"tag":100,"props":636,"children":637},{"class":102,"line":249},[638,643,648,653,658,663,667,671],{"type":32,"tag":100,"props":639,"children":640},{"style":144},[641],{"type":37,"value":642},"    ARRAY_AGG(page_location ",{"type":32,"tag":100,"props":644,"children":645},{"style":117},[646],{"type":37,"value":647},"ORDER BY",{"type":32,"tag":100,"props":649,"children":650},{"style":144},[651],{"type":37,"value":652}," event_timestamp ",{"type":32,"tag":100,"props":654,"children":655},{"style":117},[656],{"type":37,"value":657},"LIMIT",{"type":32,"tag":100,"props":659,"children":660},{"style":183},[661],{"type":37,"value":662}," 5",{"type":32,"tag":100,"props":664,"children":665},{"style":144},[666],{"type":37,"value":288},{"type":32,"tag":100,"props":668,"children":669},{"style":117},[670],{"type":37,"value":166},{"type":32,"tag":100,"props":672,"children":673},{"style":144},[674],{"type":37,"value":675}," page_sequence\n",{"type":32,"tag":100,"props":677,"children":678},{"class":102,"line":258},[679,684],{"type":32,"tag":100,"props":680,"children":681},{"style":117},[682],{"type":37,"value":683},"  FROM",{"type":32,"tag":100,"props":685,"children":686},{"style":138},[687],{"type":37,"value":352},{"type":32,"tag":100,"props":689,"children":690},{"class":102,"line":300},[691,696,700,705,710,715],{"type":32,"tag":100,"props":692,"children":693},{"style":117},[694],{"type":37,"value":695},"  WHERE",{"type":32,"tag":100,"props":697,"children":698},{"style":144},[699],{"type":37,"value":366},{"type":32,"tag":100,"props":701,"children":702},{"style":117},[703],{"type":37,"value":704},"=",{"type":32,"tag":100,"props":706,"children":707},{"style":144},[708],{"type":37,"value":709}," FORMAT_DATE(",{"type":32,"tag":100,"props":711,"children":712},{"style":138},[713],{"type":37,"value":714},"'%Y%m%d'",{"type":32,"tag":100,"props":716,"children":717},{"style":144},[718],{"type":37,"value":719},", CURRENT_DATE())\n",{"type":32,"tag":100,"props":721,"children":722},{"class":102,"line":323},[723,728,733,738,743,747,752,756,761,765,770,774],{"type":32,"tag":100,"props":724,"children":725},{"style":117},[726],{"type":37,"value":727},"  GROUP BY",{"type":32,"tag":100,"props":729,"children":730},{"style":183},[731],{"type":37,"value":732}," 1",{"type":32,"tag":100,"props":734,"children":735},{"style":144},[736],{"type":37,"value":737},",",{"type":32,"tag":100,"props":739,"children":740},{"style":183},[741],{"type":37,"value":742},"2",{"type":32,"tag":100,"props":744,"children":745},{"style":144},[746],{"type":37,"value":737},{"type":32,"tag":100,"props":748,"children":749},{"style":183},[750],{"type":37,"value":751},"3",{"type":32,"tag":100,"props":753,"children":754},{"style":144},[755],{"type":37,"value":737},{"type":32,"tag":100,"props":757,"children":758},{"style":183},[759],{"type":37,"value":760},"4",{"type":32,"tag":100,"props":762,"children":763},{"style":144},[764],{"type":37,"value":737},{"type":32,"tag":100,"props":766,"children":767},{"style":183},[768],{"type":37,"value":769},"5",{"type":32,"tag":100,"props":771,"children":772},{"style":144},[773],{"type":37,"value":737},{"type":32,"tag":100,"props":775,"children":776},{"style":183},[777],{"type":37,"value":778},"6\n",{"type":32,"tag":100,"props":780,"children":781},{"class":102,"line":341},[782],{"type":32,"tag":100,"props":783,"children":784},{"style":144},[785],{"type":37,"value":786},")\n",{"type":32,"tag":100,"props":788,"children":789},{"class":102,"line":355},[790],{"type":32,"tag":100,"props":791,"children":792},{"style":117},[793],{"type":37,"value":238},{"type":32,"tag":100,"props":795,"children":796},{"class":102,"line":389},[797,802,806,811,816],{"type":32,"tag":100,"props":798,"children":799},{"style":183},[800],{"type":37,"value":801},"  a",{"type":32,"tag":100,"props":803,"children":804},{"style":144},[805],{"type":37,"value":278},{"type":32,"tag":100,"props":807,"children":808},{"style":183},[809],{"type":37,"value":810},"user_pseudo_id",{"type":32,"tag":100,"props":812,"children":813},{"style":117},[814],{"type":37,"value":815}," AS",{"type":32,"tag":100,"props":817,"children":818},{"style":144},[819],{"type":37,"value":820}," user_a,\n",{"type":32,"tag":100,"props":822,"children":824},{"class":102,"line":823},17,[825,830,834,838,842],{"type":32,"tag":100,"props":826,"children":827},{"style":183},[828],{"type":37,"value":829},"  b",{"type":32,"tag":100,"props":831,"children":832},{"style":144},[833],{"type":37,"value":278},{"type":32,"tag":100,"props":835,"children":836},{"style":183},[837],{"type":37,"value":810},{"type":32,"tag":100,"props":839,"children":840},{"style":117},[841],{"type":37,"value":815},{"type":32,"tag":100,"props":843,"children":844},{"style":144},[845],{"type":37,"value":846}," user_b,\n",{"type":32,"tag":100,"props":848,"children":850},{"class":102,"line":849},18,[851],{"type":32,"tag":100,"props":852,"children":853},{"style":107},[854],{"type":37,"value":855},"  -- Jaccard similarity sur la séquence de pages\n",{"type":32,"tag":100,"props":857,"children":859},{"class":102,"line":858},19,[860,865,870,875,879,884,888,892,897,901,905,910,914,918,923,927,931,936,940,945,949,953],{"type":32,"tag":100,"props":861,"children":862},{"style":144},[863],{"type":37,"value":864},"  (",{"type":32,"tag":100,"props":866,"children":867},{"style":117},[868],{"type":37,"value":869},"SELECT",{"type":32,"tag":100,"props":871,"children":872},{"style":183},[873],{"type":37,"value":874}," COUNT",{"type":32,"tag":100,"props":876,"children":877},{"style":144},[878],{"type":37,"value":191},{"type":32,"tag":100,"props":880,"children":881},{"style":117},[882],{"type":37,"value":883},"*",{"type":32,"tag":100,"props":885,"children":886},{"style":144},[887],{"type":37,"value":288},{"type":32,"tag":100,"props":889,"children":890},{"style":117},[891],{"type":37,"value":347},{"type":32,"tag":100,"props":893,"children":894},{"style":144},[895],{"type":37,"value":896}," UNNEST(",{"type":32,"tag":100,"props":898,"children":899},{"style":183},[900],{"type":37,"value":78},{"type":32,"tag":100,"props":902,"children":903},{"style":144},[904],{"type":37,"value":278},{"type":32,"tag":100,"props":906,"children":907},{"style":183},[908],{"type":37,"value":909},"page_sequence",{"type":32,"tag":100,"props":911,"children":912},{"style":144},[913],{"type":37,"value":288},{"type":32,"tag":100,"props":915,"children":916},{"style":117},[917],{"type":37,"value":166},{"type":32,"tag":100,"props":919,"children":920},{"style":144},[921],{"type":37,"value":922}," p ",{"type":32,"tag":100,"props":924,"children":925},{"style":117},[926],{"type":37,"value":361},{"type":32,"tag":100,"props":928,"children":929},{"style":144},[930],{"type":37,"value":922},{"type":32,"tag":100,"props":932,"children":933},{"style":117},[934],{"type":37,"value":935},"IN",{"type":32,"tag":100,"props":937,"children":938},{"style":144},[939],{"type":37,"value":896},{"type":32,"tag":100,"props":941,"children":942},{"style":183},[943],{"type":37,"value":944},"b",{"type":32,"tag":100,"props":946,"children":947},{"style":144},[948],{"type":37,"value":278},{"type":32,"tag":100,"props":950,"children":951},{"style":183},[952],{"type":37,"value":909},{"type":32,"tag":100,"props":954,"children":955},{"style":144},[956],{"type":37,"value":957},")) \n",{"type":32,"tag":100,"props":959,"children":961},{"class":102,"line":960},20,[962,967,972,976,980,984,988,993,998,1002,1006,1010,1015,1019],{"type":32,"tag":100,"props":963,"children":964},{"style":117},[965],{"type":37,"value":966},"    \u002F",{"type":32,"tag":100,"props":968,"children":969},{"style":144},[970],{"type":37,"value":971}," (ARRAY_LENGTH(",{"type":32,"tag":100,"props":973,"children":974},{"style":183},[975],{"type":37,"value":78},{"type":32,"tag":100,"props":977,"children":978},{"style":144},[979],{"type":37,"value":278},{"type":32,"tag":100,"props":981,"children":982},{"style":183},[983],{"type":37,"value":909},{"type":32,"tag":100,"props":985,"children":986},{"style":144},[987],{"type":37,"value":288},{"type":32,"tag":100,"props":989,"children":990},{"style":117},[991],{"type":37,"value":992},"+",{"type":32,"tag":100,"props":994,"children":995},{"style":144},[996],{"type":37,"value":997}," ARRAY_LENGTH(",{"type":32,"tag":100,"props":999,"children":1000},{"style":183},[1001],{"type":37,"value":944},{"type":32,"tag":100,"props":1003,"children":1004},{"style":144},[1005],{"type":37,"value":278},{"type":32,"tag":100,"props":1007,"children":1008},{"style":183},[1009],{"type":37,"value":909},{"type":32,"tag":100,"props":1011,"children":1012},{"style":144},[1013],{"type":37,"value":1014},")) ",{"type":32,"tag":100,"props":1016,"children":1017},{"style":117},[1018],{"type":37,"value":166},{"type":32,"tag":100,"props":1020,"children":1021},{"style":144},[1022],{"type":37,"value":1023}," similarity_score\n",{"type":32,"tag":100,"props":1025,"children":1027},{"class":102,"line":1026},21,[1028,1032],{"type":32,"tag":100,"props":1029,"children":1030},{"style":117},[1031],{"type":37,"value":347},{"type":32,"tag":100,"props":1033,"children":1034},{"style":144},[1035],{"type":37,"value":1036}," fingerprints a\n",{"type":32,"tag":100,"props":1038,"children":1040},{"class":102,"line":1039},22,[1041,1046],{"type":32,"tag":100,"props":1042,"children":1043},{"style":117},[1044],{"type":37,"value":1045},"JOIN",{"type":32,"tag":100,"props":1047,"children":1048},{"style":144},[1049],{"type":37,"value":1050}," fingerprints b\n",{"type":32,"tag":100,"props":1052,"children":1054},{"class":102,"line":1053},23,[1055,1060,1065,1069,1074,1079,1084,1088],{"type":32,"tag":100,"props":1056,"children":1057},{"style":117},[1058],{"type":37,"value":1059},"  ON",{"type":32,"tag":100,"props":1061,"children":1062},{"style":183},[1063],{"type":37,"value":1064}," a",{"type":32,"tag":100,"props":1066,"children":1067},{"style":144},[1068],{"type":37,"value":278},{"type":32,"tag":100,"props":1070,"children":1071},{"style":183},[1072],{"type":37,"value":1073},"ip_prefix",{"type":32,"tag":100,"props":1075,"children":1076},{"style":117},[1077],{"type":37,"value":1078}," =",{"type":32,"tag":100,"props":1080,"children":1081},{"style":183},[1082],{"type":37,"value":1083}," b",{"type":32,"tag":100,"props":1085,"children":1086},{"style":144},[1087],{"type":37,"value":278},{"type":32,"tag":100,"props":1089,"children":1090},{"style":183},[1091],{"type":37,"value":1092},"ip_prefix\n",{"type":32,"tag":100,"props":1094,"children":1096},{"class":102,"line":1095},24,[1097,1101,1105,1109,1113,1117,1121,1125],{"type":32,"tag":100,"props":1098,"children":1099},{"style":117},[1100],{"type":37,"value":395},{"type":32,"tag":100,"props":1102,"children":1103},{"style":183},[1104],{"type":37,"value":1064},{"type":32,"tag":100,"props":1106,"children":1107},{"style":144},[1108],{"type":37,"value":278},{"type":32,"tag":100,"props":1110,"children":1111},{"style":183},[1112],{"type":37,"value":589},{"type":32,"tag":100,"props":1114,"children":1115},{"style":117},[1116],{"type":37,"value":1078},{"type":32,"tag":100,"props":1118,"children":1119},{"style":183},[1120],{"type":37,"value":1083},{"type":32,"tag":100,"props":1122,"children":1123},{"style":144},[1124],{"type":37,"value":278},{"type":32,"tag":100,"props":1126,"children":1127},{"style":183},[1128],{"type":37,"value":1129},"operating_system\n",{"type":32,"tag":100,"props":1131,"children":1133},{"class":102,"line":1132},25,[1134,1138,1142,1146,1150,1155,1159,1163],{"type":32,"tag":100,"props":1135,"children":1136},{"style":117},[1137],{"type":37,"value":395},{"type":32,"tag":100,"props":1139,"children":1140},{"style":183},[1141],{"type":37,"value":1064},{"type":32,"tag":100,"props":1143,"children":1144},{"style":144},[1145],{"type":37,"value":278},{"type":32,"tag":100,"props":1147,"children":1148},{"style":183},[1149],{"type":37,"value":810},{"type":32,"tag":100,"props":1151,"children":1152},{"style":117},[1153],{"type":37,"value":1154}," !=",{"type":32,"tag":100,"props":1156,"children":1157},{"style":183},[1158],{"type":37,"value":1083},{"type":32,"tag":100,"props":1160,"children":1161},{"style":144},[1162],{"type":37,"value":278},{"type":32,"tag":100,"props":1164,"children":1165},{"style":183},[1166],{"type":37,"value":1167},"user_pseudo_id\n",{"type":32,"tag":100,"props":1169,"children":1171},{"class":102,"line":1170},26,[1172,1176,1181,1186,1191,1195,1200],{"type":32,"tag":100,"props":1173,"children":1174},{"style":117},[1175],{"type":37,"value":361},{"type":32,"tag":100,"props":1177,"children":1178},{"style":144},[1179],{"type":37,"value":1180}," similarity_score ",{"type":32,"tag":100,"props":1182,"children":1183},{"style":117},[1184],{"type":37,"value":1185},">",{"type":32,"tag":100,"props":1187,"children":1188},{"style":183},[1189],{"type":37,"value":1190}," 0",{"type":32,"tag":100,"props":1192,"children":1193},{"style":144},[1194],{"type":37,"value":278},{"type":32,"tag":100,"props":1196,"children":1197},{"style":183},[1198],{"type":37,"value":1199},"75",{"type":32,"tag":100,"props":1201,"children":1202},{"style":144},[1203],{"type":37,"value":418},{"type":32,"tag":33,"props":1205,"children":1206},{},[1207],{"type":37,"value":1208},"Cette requête réconcilie les utilisateurs partageant IP + OS, avec similarité de séquence de pages >75 %. En production, vous écrivez ce score dans une base de données graph (Neo4j ou BigQuery graph table) comme edge weight.",{"type":32,"tag":33,"props":1210,"children":1211},{},[1212,1217],{"type":32,"tag":436,"props":1213,"children":1214},{},[1215],{"type":37,"value":1216},"Risque :",{"type":37,"value":1218}," Les IPs partagées (café, bureau) ou les user-agents génériques (iPhone 15 + Safari) génèrent des faux positifs élevés. Raison pour laquelle la résolution au niveau household est traitée dans une couche distincte.",{"type":32,"tag":40,"props":1220,"children":1222},{"id":1221},"household-identity-différencier-les-personnes-sur-le-même-réseau",[1223],{"type":37,"value":1224},"Household Identity : différencier les personnes sur le même réseau",{"type":32,"tag":33,"props":1226,"children":1227},{},[1228],{"type":37,"value":1229},"Le household clustering résout ce problème : comment distinguer différents individus qui partagent la même IP\u002Fréseau d'appareils. À domicile, mère, père, enfant utilisent le même Wi-Fi ; le matching probabiliste risque de les fusionner. Pour l'éviter, on inspecte des signaux de divergence comportementale : préférence catégorie produit, timing des sessions (10 h matin vs 23 h soir), vitesse de scroll, pattern de frappe clavier (biométrique, mais RGPD-sensible).",{"type":32,"tag":33,"props":1231,"children":1232},{},[1233],{"type":37,"value":1234},"Roibase a développé ce modèle pour le secteur télécom :",{"type":32,"tag":1236,"props":1237,"children":1238},"ol",{},[1239,1250,1260,1270],{"type":32,"tag":1240,"props":1241,"children":1242},"li",{},[1243,1248],{"type":32,"tag":436,"props":1244,"children":1245},{},[1246],{"type":37,"value":1247},"IP-level clustering :",{"type":37,"value":1249}," regrouper toutes les sessions d'une même IP sous un nœud « household ».",{"type":32,"tag":1240,"props":1251,"children":1252},{},[1253,1258],{"type":32,"tag":436,"props":1254,"children":1255},{},[1256],{"type":37,"value":1257},"Behavioral segmentation :",{"type":37,"value":1259}," transformer chaque session en feature vector (product_category, avg_session_duration, bounce_rate, hour_of_day).",{"type":32,"tag":1240,"props":1261,"children":1262},{},[1263,1268],{"type":32,"tag":436,"props":1264,"children":1265},{},[1266],{"type":37,"value":1267},"K-means clustering :",{"type":37,"value":1269}," créer 2-3 clusters au sein du household — chaque cluster = une « sub-identity ».",{"type":32,"tag":1240,"props":1271,"children":1272},{},[1273,1278],{"type":32,"tag":436,"props":1274,"children":1275},{},[1276],{"type":37,"value":1277},"Validation :",{"type":37,"value":1279}," quand arrive un hash email, confirmer la sub-identity ou la redistribuer.",{"type":32,"tag":33,"props":1281,"children":1282},{},[1283],{"type":37,"value":1284},"Exemple de structure de table :",{"type":32,"tag":1286,"props":1287,"children":1288},"table",{},[1289,1322],{"type":32,"tag":1290,"props":1291,"children":1292},"thead",{},[1293],{"type":32,"tag":1294,"props":1295,"children":1296},"tr",{},[1297,1303,1308,1313,1318],{"type":32,"tag":1298,"props":1299,"children":1300},"th",{},[1301],{"type":37,"value":1302},"household_id",{"type":32,"tag":1298,"props":1304,"children":1305},{},[1306],{"type":37,"value":1307},"sub_identity",{"type":32,"tag":1298,"props":1309,"children":1310},{},[1311],{"type":37,"value":1312},"feature_vector",{"type":32,"tag":1298,"props":1314,"children":1315},{},[1316],{"type":37,"value":1317},"last_seen",{"type":32,"tag":1298,"props":1319,"children":1320},{},[1321],{"type":37,"value":429},{"type":32,"tag":1323,"props":1324,"children":1325},"tbody",{},[1326,1358],{"type":32,"tag":1294,"props":1327,"children":1328},{},[1329,1335,1340,1348,1353],{"type":32,"tag":1330,"props":1331,"children":1332},"td",{},[1333],{"type":37,"value":1334},"hh_abc123",{"type":32,"tag":1330,"props":1336,"children":1337},{},[1338],{"type":37,"value":1339},"sub_1",{"type":32,"tag":1330,"props":1341,"children":1342},{},[1343],{"type":32,"tag":100,"props":1344,"children":1345},{},[1346],{"type":37,"value":1347},"fashion, 18min, 0900-1200",{"type":32,"tag":1330,"props":1349,"children":1350},{},[1351],{"type":37,"value":1352},"2026-07-02",{"type":32,"tag":1330,"props":1354,"children":1355},{},[1356],{"type":37,"value":1357},"hash_x",{"type":32,"tag":1294,"props":1359,"children":1360},{},[1361,1365,1370,1378,1382],{"type":32,"tag":1330,"props":1362,"children":1363},{},[1364],{"type":37,"value":1334},{"type":32,"tag":1330,"props":1366,"children":1367},{},[1368],{"type":37,"value":1369},"sub_2",{"type":32,"tag":1330,"props":1371,"children":1372},{},[1373],{"type":32,"tag":100,"props":1374,"children":1375},{},[1376],{"type":37,"value":1377},"gaming, 45min, 2100-2400",{"type":32,"tag":1330,"props":1379,"children":1380},{},[1381],{"type":37,"value":1352},{"type":32,"tag":1330,"props":1383,"children":1384},{},[1385],{"type":37,"value":1386},"NULL",{"type":32,"tag":33,"props":1388,"children":1389},{},[1390,1392,1397,1399,1404],{"type":37,"value":1391},"Ainsi, vous maintenez 2 profils pour le même foyer. Quand arrive un hash email (ex. l'enfant se connecte), ",{"type":32,"tag":96,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":37,"value":1369},{"type":37,"value":1398}," se confirme, mais ",{"type":32,"tag":96,"props":1400,"children":1402},{"className":1401},[],[1403],{"type":37,"value":1339},{"type":37,"value":1405}," reste probabiliste.",{"type":32,"tag":33,"props":1407,"children":1408},{},[1409,1413],{"type":32,"tag":436,"props":1410,"children":1411},{},[1412],{"type":37,"value":440},{"type":37,"value":1414}," Le calcul du clustering est coûteux — retraiter tous les household quotidiennement réclame des ressources. Le job batch tourne en 4-6 heures — pas du real-time, les profils se mettent à jour à T+1.",{"type":32,"tag":40,"props":1416,"children":1418},{"id":1417},"architecture-identity-graph-en-production",[1419],{"type":37,"value":1420},"Architecture identity graph en production",{"type":32,"tag":33,"props":1422,"children":1423},{},[1424],{"type":37,"value":1425},"L'intégration de ces 3 méthodes produit une architecture production multi-couches :",{"type":32,"tag":33,"props":1427,"children":1428},{},[1429,1434,1436,1441,1443,1449,1450,1456],{"type":32,"tag":436,"props":1430,"children":1431},{},[1432],{"type":37,"value":1433},"1. Event ingestion layer (sGTM) :",{"type":37,"value":1435}," Collecte raw event stream via Google Tag Manager côté serveur — GA4, Segment, Klaviyo, Conversion API côté serveur. Chaque événement porte ",{"type":32,"tag":96,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":37,"value":810},{"type":37,"value":1442}," + ",{"type":32,"tag":96,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":37,"value":1448},"session_id",{"type":37,"value":1442},{"type":32,"tag":96,"props":1451,"children":1453},{"className":1452},[],[1454],{"type":37,"value":1455},"client_id",{"type":37,"value":1457},". Email\u002Ftéléphone présent ? Ajouter le hash.",{"type":32,"tag":33,"props":1459,"children":1460},{},[1461,1466],{"type":32,"tag":436,"props":1462,"children":1463},{},[1464],{"type":37,"value":1465},"2. Identity stitching engine (BigQuery + dbt) :",{"type":37,"value":1467}," Job batch quotidien :",{"type":32,"tag":1469,"props":1470,"children":1471},"ul",{},[1472,1477,1482],{"type":32,"tag":1240,"props":1473,"children":1474},{},[1475],{"type":37,"value":1476},"Matching déterministe (réconciliation email_hash)",{"type":32,"tag":1240,"props":1478,"children":1479},{},[1480],{"type":37,"value":1481},"Scoring probabiliste (similarité IP + UA + behavior)",{"type":32,"tag":1240,"props":1483,"children":1484},{},[1485],{"type":37,"value":1486},"Clustering household (K-means ou DBSCAN)",{"type":32,"tag":33,"props":1488,"children":1489},{},[1490,1492,1498],{"type":37,"value":1491},"Output : table ",{"type":32,"tag":96,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":37,"value":1497},"identity_graph",{"type":37,"value":1499}," (nœud = unique identity, edge = confidence score).",{"type":32,"tag":33,"props":1501,"children":1502},{},[1503,1508],{"type":32,"tag":436,"props":1504,"children":1505},{},[1506],{"type":37,"value":1507},"3. Profile unification (CDP) :",{"type":37,"value":1509}," Pour chaque nœud du graph, construire un profil unifié — tous touchpoints, attributs, segments fusionnés. Ce profil se synchronise vers Klaviyo\u002FBraze ou canaux d'activation.",{"type":32,"tag":33,"props":1511,"children":1512},{},[1513,1518],{"type":32,"tag":436,"props":1514,"children":1515},{},[1516],{"type":37,"value":1517},"4. Real-time lookup :",{"type":37,"value":1519}," À l'arrivée d'un nouvel événement, requête le graph — si matching existe, ajouter à profil existant, sinon ouvrir nœud (sera fusionné au job batch suivant).",{"type":32,"tag":33,"props":1521,"children":1522},{},[1523],{"type":37,"value":1524},"Pour stack Shopify Plus, le coût GCP mensuel de cette architecture avoisine 800 USD (BigQuery + Cloud Functions + sGTM container). Pour 50M événements\u002Fmois, runtime batch : 4-5 heures. ROI : +18 % précision attribution, CAC 22 % plus stable (vous distinguez 3 sessions du même utilisateur).",{"type":32,"tag":40,"props":1526,"children":1528},{"id":1527},"privacy-consentement-et-conformité-rgpd",[1529],{"type":37,"value":1530},"Privacy, consentement et conformité RGPD",{"type":32,"tag":33,"props":1532,"children":1533},{},[1534],{"type":37,"value":1535},"La résolution d'identité s'ancre légalement sur RGPD 6(1)(f) « intérêt légitime » ou 6(1)(a) « consentement explicite ». Le RGPD impose consentement explicite : vous devez obtenir de l'utilisateur l'accord « Nous allons réconcilier vos comportements sur différents appareils ». Cela s'administre via Consent Management Platform (CMP) : norme TCF 2.2, purposes 2 (device identification) et 7 (cross-device linking).",{"type":32,"tag":33,"props":1537,"children":1538},{},[1539],{"type":37,"value":1540},"Le hashage relève de la « pseudonymisation » RGPD, non anonimisation complète — RGPD 4(5) classe toujours les hash comme données personnelles. Donc les tables hashées demandent encryption at rest + access control. Roibase chiffre les datasets BigQuery avec CMEK (Customer-Managed Encryption Key), accès restreint par IAM policy + VPC Service Controls.",{"type":32,"tag":33,"props":1542,"children":1543},{},[1544,1549],{"type":32,"tag":436,"props":1545,"children":1546},{},[1547],{"type":37,"value":1548},"Retention policy :",{"type":37,"value":1550}," Vous devez supprimer l'identity graph RGPD 7 : dès l'arrêt du traitement. E-commerce typique = 2 ans — 24 mois post-dernier achat, profil devient inactif, puis suppression (droit à l'oubli) si utilisateur ne revient pas 30 jours.",{"type":32,"tag":40,"props":1552,"children":1554},{"id":1553},"ce-quil-faut-faire-maintenant",[1555],{"type":37,"value":1556},"Ce qu'il faut faire maintenant",{"type":32,"tag":33,"props":1558,"children":1559},{},[1560,1562,1569],{"type":37,"value":1561},"Construire une résolution d'identité from scratch prend 8-12 semaines d'ingénierie data. Pas encore de CDP ? Commencez par la ",{"type":32,"tag":78,"props":1563,"children":1566},{"href":1564,"rel":1565},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Ffirstparty",[82],[1567],{"type":37,"value":1568},"l'architecture first-party",{"type":37,"value":1570}," — collecte serveur-side, BigQuery warehouse, pipeline dbt. Sur cette fondation, ajouter le moteur identity stitching. CDP existante ? Pilotez le probabilistic matching 1-2 segments (ex. high-value customers), mesurez accuracy et faux positifs, calibrez le threshold de confiance. Avant déploiement production, validez flow de consentement et policy de rétention avec l'équipe juridique. Identity resolution fonde tous les autres étages du marketing data — attribution, segmentation, LTV modeling — : si ce socle fléchit, tout l'édifice s'écroule.",{"type":32,"tag":1572,"props":1573,"children":1574},"style",{},[1575],{"type":37,"value":1576},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":16,"searchDepth":150,"depth":150,"links":1578},[1579,1580,1581,1582,1583,1584,1585],{"id":42,"depth":113,"text":45},{"id":63,"depth":113,"text":66},{"id":445,"depth":113,"text":448},{"id":1221,"depth":113,"text":1224},{"id":1417,"depth":113,"text":1420},{"id":1527,"depth":113,"text":1530},{"id":1553,"depth":113,"text":1556},"markdown","content:fr:data:resolution-identite-6-signaux-un-client.md","content","fr\u002Fdata\u002Fresolution-identite-6-signaux-un-client.md","fr\u002Fdata\u002Fresolution-identite-6-signaux-un-client","md",1783289083021]