[{"data":1,"prerenderedAt":2341},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-identite-client-unique":13},{"i18nKey":4,"paths":5},"data-003-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fdata\u002Fidentity-resolution-hash-matching-probabilistic","\u002Fen\u002Fdata\u002Fidentity-resolution-unifying-customer-signals","\u002Fes\u002Fdata\u002Fresolucion-de-identidad","\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-identite-client-unique","\u002Fit\u002Fdata\u002Frisoluzione-identita-sei-segnali-unica-identita-cliente","\u002Fru\u002Fdata\u002Fidentity-resolution-odnoidentifikator","\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":2335,"_id":2336,"_source":2337,"_file":2338,"_stem":2339,"_extension":2340},"data",false,"","Résolution d'identité : De 6 signaux à une identité client unique","Hash matching, liaison probabiliste et identité foyer pour unifier les signaux clients fragmentés en une seule identité. Ingénierie BigQuery + CDP en pratique.","2026-06-16",[21,22,23,24,25],"resolution-identite","plateforme-donnees-client","hash-matching","liaison-probabiliste","donnees-first-party",8,"Roibase",{"type":29,"children":30,"toc":2325},"root",[31,39,46,76,536,580,585,592,597,603,615,738,750,1637,1649,1654,1660,1665,1675,1685,1971,1992,1997,2003,2015,2179,2184,2196,2202,2217,2222,2267,2272,2278,2283,2296,2310,2314,2319],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","La durée de vie des cookies est passée de 28 jours en moyenne à 7 jours. Un utilisateur démarre sur une application mobile, complète son achat sur le web desktop, revient depuis une campagne e-mail — chaque point de contact génère un identifiant différent. 40% des données marketing restent orphelines : pas d'identifiant utilisateur, pas d'ID session, pas d'attribution de conversion. La résolution d'identité est l'opération qui consolide ces fragments avec discipline d'ingénierie. Hash matching plutôt que supposition, graphe probabiliste plutôt que raisonnement, regroupement par foyer plutôt qu'hypothèse.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"matching-déterministe-unification-basée-sur-le-hash",[44],{"type":37,"value":45},"Matching déterministe : unification basée sur le hash",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,57,59,66,68,74],{"type":37,"value":50},"Le matching déterministe fonctionne quand tu ",{"type":32,"tag":52,"props":53,"children":54},"strong",{},[55],{"type":37,"value":56},"sais avec certitude",{"type":37,"value":58}," que deux points de données partagent le même identifiant. Hash SHA-256 d'e-mail, hash de numéro de téléphone, ID CRM. Si ta table d'événements BigQuery contient ",{"type":32,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":37,"value":65},"user_id",{"type":37,"value":67}," mais que Google Analytics contient ",{"type":32,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"ga_client_id",{"type":37,"value":75},", tu ne peux pas les joindre directement — tu dois d'abord trouver un événement où les deux sont écrits, puis construire une table de mapping.",{"type":32,"tag":77,"props":78,"children":82},"pre",{"className":79,"code":80,"language":81,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","-- Exemple de stitching d'identité déterministe\nCREATE OR REPLACE TABLE `project.dataset.identity_graph` AS\nWITH email_hashes AS (\n  SELECT DISTINCT\n    user_pseudo_id,\n    TO_HEX(SHA256(LOWER(TRIM(user_properties.email.value)))) AS email_hash\n  FROM `project.dataset.events_*`\n  WHERE user_properties.email.value IS NOT NULL\n),\ncrm_map AS (\n  SELECT\n    crm_id,\n    TO_HEX(SHA256(LOWER(TRIM(email)))) AS email_hash\n  FROM `project.crm.customers`\n)\nSELECT\n  e.user_pseudo_id,\n  c.crm_id,\n  e.email_hash\nFROM email_hashes e\nINNER JOIN crm_map c\n  ON e.email_hash = c.email_hash;\n","sql",[83],{"type":32,"tag":60,"props":84,"children":85},{"__ignoreMap":16},[86,98,134,159,168,177,244,258,292,301,318,327,336,369,382,391,400,423,445,462,476,490],{"type":32,"tag":87,"props":88,"children":91},"span",{"class":89,"line":90},"line",1,[92],{"type":32,"tag":87,"props":93,"children":95},{"style":94},"--shiki-default:#6A737D",[96],{"type":37,"value":97},"-- Exemple de stitching d'identité déterministe\n",{"type":32,"tag":87,"props":99,"children":101},{"class":89,"line":100},2,[102,108,113,118,123,129],{"type":32,"tag":87,"props":103,"children":105},{"style":104},"--shiki-default:#F97583",[106],{"type":37,"value":107},"CREATE",{"type":32,"tag":87,"props":109,"children":110},{"style":104},[111],{"type":37,"value":112}," OR",{"type":32,"tag":87,"props":114,"children":115},{"style":104},[116],{"type":37,"value":117}," REPLACE",{"type":32,"tag":87,"props":119,"children":120},{"style":104},[121],{"type":37,"value":122}," TABLE",{"type":32,"tag":87,"props":124,"children":126},{"style":125},"--shiki-default:#9ECBFF",[127],{"type":37,"value":128}," `project.dataset.identity_graph`",{"type":32,"tag":87,"props":130,"children":131},{"style":104},[132],{"type":37,"value":133}," AS\n",{"type":32,"tag":87,"props":135,"children":137},{"class":89,"line":136},3,[138,143,149,154],{"type":32,"tag":87,"props":139,"children":140},{"style":104},[141],{"type":37,"value":142},"WITH",{"type":32,"tag":87,"props":144,"children":146},{"style":145},"--shiki-default:#E1E4E8",[147],{"type":37,"value":148}," email_hashes ",{"type":32,"tag":87,"props":150,"children":151},{"style":104},[152],{"type":37,"value":153},"AS",{"type":32,"tag":87,"props":155,"children":156},{"style":145},[157],{"type":37,"value":158}," (\n",{"type":32,"tag":87,"props":160,"children":162},{"class":89,"line":161},4,[163],{"type":32,"tag":87,"props":164,"children":165},{"style":104},[166],{"type":37,"value":167},"  SELECT DISTINCT\n",{"type":32,"tag":87,"props":169,"children":171},{"class":89,"line":170},5,[172],{"type":32,"tag":87,"props":173,"children":174},{"style":145},[175],{"type":37,"value":176},"    user_pseudo_id,\n",{"type":32,"tag":87,"props":178,"children":180},{"class":89,"line":179},6,[181,186,192,197,202,206,211,216,221,225,230,235,239],{"type":32,"tag":87,"props":182,"children":183},{"style":145},[184],{"type":37,"value":185},"    TO_HEX(SHA256(",{"type":32,"tag":87,"props":187,"children":189},{"style":188},"--shiki-default:#79B8FF",[190],{"type":37,"value":191},"LOWER",{"type":32,"tag":87,"props":193,"children":194},{"style":145},[195],{"type":37,"value":196},"(",{"type":32,"tag":87,"props":198,"children":199},{"style":188},[200],{"type":37,"value":201},"TRIM",{"type":32,"tag":87,"props":203,"children":204},{"style":145},[205],{"type":37,"value":196},{"type":32,"tag":87,"props":207,"children":208},{"style":188},[209],{"type":37,"value":210},"user_properties",{"type":32,"tag":87,"props":212,"children":213},{"style":145},[214],{"type":37,"value":215},".",{"type":32,"tag":87,"props":217,"children":218},{"style":188},[219],{"type":37,"value":220},"email",{"type":32,"tag":87,"props":222,"children":223},{"style":145},[224],{"type":37,"value":215},{"type":32,"tag":87,"props":226,"children":227},{"style":104},[228],{"type":37,"value":229},"value",{"type":32,"tag":87,"props":231,"children":232},{"style":145},[233],{"type":37,"value":234},")))) ",{"type":32,"tag":87,"props":236,"children":237},{"style":104},[238],{"type":37,"value":153},{"type":32,"tag":87,"props":240,"children":241},{"style":145},[242],{"type":37,"value":243}," email_hash\n",{"type":32,"tag":87,"props":245,"children":247},{"class":89,"line":246},7,[248,253],{"type":32,"tag":87,"props":249,"children":250},{"style":104},[251],{"type":37,"value":252},"  FROM",{"type":32,"tag":87,"props":254,"children":255},{"style":125},[256],{"type":37,"value":257}," `project.dataset.events_*`\n",{"type":32,"tag":87,"props":259,"children":260},{"class":89,"line":26},[261,266,271,275,279,283,287],{"type":32,"tag":87,"props":262,"children":263},{"style":104},[264],{"type":37,"value":265},"  WHERE",{"type":32,"tag":87,"props":267,"children":268},{"style":188},[269],{"type":37,"value":270}," user_properties",{"type":32,"tag":87,"props":272,"children":273},{"style":145},[274],{"type":37,"value":215},{"type":32,"tag":87,"props":276,"children":277},{"style":188},[278],{"type":37,"value":220},{"type":32,"tag":87,"props":280,"children":281},{"style":145},[282],{"type":37,"value":215},{"type":32,"tag":87,"props":284,"children":285},{"style":104},[286],{"type":37,"value":229},{"type":32,"tag":87,"props":288,"children":289},{"style":104},[290],{"type":37,"value":291}," IS NOT NULL\n",{"type":32,"tag":87,"props":293,"children":295},{"class":89,"line":294},9,[296],{"type":32,"tag":87,"props":297,"children":298},{"style":145},[299],{"type":37,"value":300},"),\n",{"type":32,"tag":87,"props":302,"children":304},{"class":89,"line":303},10,[305,310,314],{"type":32,"tag":87,"props":306,"children":307},{"style":145},[308],{"type":37,"value":309},"crm_map ",{"type":32,"tag":87,"props":311,"children":312},{"style":104},[313],{"type":37,"value":153},{"type":32,"tag":87,"props":315,"children":316},{"style":145},[317],{"type":37,"value":158},{"type":32,"tag":87,"props":319,"children":321},{"class":89,"line":320},11,[322],{"type":32,"tag":87,"props":323,"children":324},{"style":104},[325],{"type":37,"value":326},"  SELECT\n",{"type":32,"tag":87,"props":328,"children":330},{"class":89,"line":329},12,[331],{"type":32,"tag":87,"props":332,"children":333},{"style":145},[334],{"type":37,"value":335},"    crm_id,\n",{"type":32,"tag":87,"props":337,"children":339},{"class":89,"line":338},13,[340,344,348,352,356,361,365],{"type":32,"tag":87,"props":341,"children":342},{"style":145},[343],{"type":37,"value":185},{"type":32,"tag":87,"props":345,"children":346},{"style":188},[347],{"type":37,"value":191},{"type":32,"tag":87,"props":349,"children":350},{"style":145},[351],{"type":37,"value":196},{"type":32,"tag":87,"props":353,"children":354},{"style":188},[355],{"type":37,"value":201},{"type":32,"tag":87,"props":357,"children":358},{"style":145},[359],{"type":37,"value":360},"(email)))) ",{"type":32,"tag":87,"props":362,"children":363},{"style":104},[364],{"type":37,"value":153},{"type":32,"tag":87,"props":366,"children":367},{"style":145},[368],{"type":37,"value":243},{"type":32,"tag":87,"props":370,"children":372},{"class":89,"line":371},14,[373,377],{"type":32,"tag":87,"props":374,"children":375},{"style":104},[376],{"type":37,"value":252},{"type":32,"tag":87,"props":378,"children":379},{"style":125},[380],{"type":37,"value":381}," `project.crm.customers`\n",{"type":32,"tag":87,"props":383,"children":385},{"class":89,"line":384},15,[386],{"type":32,"tag":87,"props":387,"children":388},{"style":145},[389],{"type":37,"value":390},")\n",{"type":32,"tag":87,"props":392,"children":394},{"class":89,"line":393},16,[395],{"type":32,"tag":87,"props":396,"children":397},{"style":104},[398],{"type":37,"value":399},"SELECT\n",{"type":32,"tag":87,"props":401,"children":403},{"class":89,"line":402},17,[404,409,413,418],{"type":32,"tag":87,"props":405,"children":406},{"style":188},[407],{"type":37,"value":408},"  e",{"type":32,"tag":87,"props":410,"children":411},{"style":145},[412],{"type":37,"value":215},{"type":32,"tag":87,"props":414,"children":415},{"style":188},[416],{"type":37,"value":417},"user_pseudo_id",{"type":32,"tag":87,"props":419,"children":420},{"style":145},[421],{"type":37,"value":422},",\n",{"type":32,"tag":87,"props":424,"children":426},{"class":89,"line":425},18,[427,432,436,441],{"type":32,"tag":87,"props":428,"children":429},{"style":188},[430],{"type":37,"value":431},"  c",{"type":32,"tag":87,"props":433,"children":434},{"style":145},[435],{"type":37,"value":215},{"type":32,"tag":87,"props":437,"children":438},{"style":188},[439],{"type":37,"value":440},"crm_id",{"type":32,"tag":87,"props":442,"children":443},{"style":145},[444],{"type":37,"value":422},{"type":32,"tag":87,"props":446,"children":448},{"class":89,"line":447},19,[449,453,457],{"type":32,"tag":87,"props":450,"children":451},{"style":188},[452],{"type":37,"value":408},{"type":32,"tag":87,"props":454,"children":455},{"style":145},[456],{"type":37,"value":215},{"type":32,"tag":87,"props":458,"children":459},{"style":188},[460],{"type":37,"value":461},"email_hash\n",{"type":32,"tag":87,"props":463,"children":465},{"class":89,"line":464},20,[466,471],{"type":32,"tag":87,"props":467,"children":468},{"style":104},[469],{"type":37,"value":470},"FROM",{"type":32,"tag":87,"props":472,"children":473},{"style":145},[474],{"type":37,"value":475}," email_hashes e\n",{"type":32,"tag":87,"props":477,"children":479},{"class":89,"line":478},21,[480,485],{"type":32,"tag":87,"props":481,"children":482},{"style":104},[483],{"type":37,"value":484},"INNER JOIN",{"type":32,"tag":87,"props":486,"children":487},{"style":145},[488],{"type":37,"value":489}," crm_map c\n",{"type":32,"tag":87,"props":491,"children":493},{"class":89,"line":492},22,[494,499,504,508,513,518,523,527,531],{"type":32,"tag":87,"props":495,"children":496},{"style":104},[497],{"type":37,"value":498},"  ON",{"type":32,"tag":87,"props":500,"children":501},{"style":188},[502],{"type":37,"value":503}," e",{"type":32,"tag":87,"props":505,"children":506},{"style":145},[507],{"type":37,"value":215},{"type":32,"tag":87,"props":509,"children":510},{"style":188},[511],{"type":37,"value":512},"email_hash",{"type":32,"tag":87,"props":514,"children":515},{"style":104},[516],{"type":37,"value":517}," =",{"type":32,"tag":87,"props":519,"children":520},{"style":188},[521],{"type":37,"value":522}," c",{"type":32,"tag":87,"props":524,"children":525},{"style":145},[526],{"type":37,"value":215},{"type":32,"tag":87,"props":528,"children":529},{"style":188},[530],{"type":37,"value":512},{"type":32,"tag":87,"props":532,"children":533},{"style":145},[534],{"type":37,"value":535},";\n",{"type":32,"tag":33,"props":537,"children":538},{},[539,541,546,548,553,555,561,563,570,572,578],{"type":37,"value":540},"Cette requête relie le ",{"type":32,"tag":60,"props":542,"children":544},{"className":543},[],[545],{"type":37,"value":417},{"type":37,"value":547}," de Firebase Analytics à l'ID CRM via un ",{"type":32,"tag":52,"props":549,"children":550},{},[551],{"type":37,"value":552},"matching exact",{"type":37,"value":554}," sur le hash d'e-mail. Le hash de l'e-mail sert d'identifiant d'ancrage. Point crucial : ",{"type":32,"tag":60,"props":556,"children":558},{"className":557},[],[559],{"type":37,"value":560},"LOWER(TRIM())",{"type":37,"value":562}," — si l'utilisateur saisit \"",{"type":32,"tag":564,"props":565,"children":567},"a",{"href":566},"mailto:Ali@X.com",[568],{"type":37,"value":569},"Ali@X.com",{"type":37,"value":571},"\" mais que le CRM le stocke sous \"",{"type":32,"tag":564,"props":573,"children":575},{"href":574},"mailto:ali@x.com",[576],{"type":37,"value":577},"ali@x.com",{"type":37,"value":579},"\", le matching par hash échoue. La normalisation est la première étape du pipeline.",{"type":32,"tag":33,"props":581,"children":582},{},[583],{"type":37,"value":584},"Le matching déterministe atteint une précision de 100% mais un recall faible — il ne trouve que les enregistrements qui existent dans les deux systèmes avec le même identifiant. Un utilisateur qui a quitté le web sans fournir d'e-mail n'apparaît pas dans ce graphe.",{"type":32,"tag":586,"props":587,"children":589},"h3",{"id":588},"collision-de-hash-et-confidentialité",[590],{"type":37,"value":591},"Collision de hash et confidentialité",{"type":32,"tag":33,"props":593,"children":594},{},[595],{"type":37,"value":596},"La probabilité de collision SHA-256 est théoriquement 2^-256 — zéro en pratique. Cependant, le RGPD Article 32 ne considère pas le hash comme une pseudonymisation en soi ; le hash seul n'est pas une anonymisation. Un hash d'e-mail + IP + timestamp peut permettre une ré-identification de l'utilisateur. C'est pourquoi les tables de hash doivent être protégées par le chiffrement au repos et le contrôle d'accès au niveau des colonnes.",{"type":32,"tag":40,"props":598,"children":600},{"id":599},"liaison-probabiliste-matching-par-graphe-basé-sur-la-similarité",[601],{"type":37,"value":602},"Liaison probabiliste : matching par graphe basé sur la similarité",{"type":32,"tag":33,"props":604,"children":605},{},[606,608,613],{"type":37,"value":607},"Quand le join déterministe échoue, la liaison probabiliste intervient. Tu fais correspondre deux enregistrements avec des identifiants différents en exploitant des ",{"type":32,"tag":52,"props":609,"children":610},{},[611],{"type":37,"value":612},"signaux faibles",{"type":37,"value":614}," : similarité comportementale, empreinte digitale de l'appareil, combinaison timezone + user-agent. Pas besoin d'un modèle d'apprentissage automatique — un système de scoring pondéré + seuil suffit.",{"type":32,"tag":616,"props":617,"children":618},"table",{},[619,643],{"type":32,"tag":620,"props":621,"children":622},"thead",{},[623],{"type":32,"tag":624,"props":625,"children":626},"tr",{},[627,633,638],{"type":32,"tag":628,"props":629,"children":630},"th",{},[631],{"type":37,"value":632},"Signal",{"type":32,"tag":628,"props":634,"children":635},{},[636],{"type":37,"value":637},"Poids",{"type":32,"tag":628,"props":639,"children":640},{},[641],{"type":37,"value":642},"Exemple",{"type":32,"tag":644,"props":645,"children":646},"tbody",{},[647,666,684,702,720],{"type":32,"tag":624,"props":648,"children":649},{},[650,656,661],{"type":32,"tag":651,"props":652,"children":653},"td",{},[654],{"type":37,"value":655},"Même IP (dans 24h)",{"type":32,"tag":651,"props":657,"children":658},{},[659],{"type":37,"value":660},"0,3",{"type":32,"tag":651,"props":662,"children":663},{},[664],{"type":37,"value":665},"192.168.1.10",{"type":32,"tag":624,"props":667,"children":668},{},[669,674,679],{"type":32,"tag":651,"props":670,"children":671},{},[672],{"type":37,"value":673},"Même User-Agent",{"type":32,"tag":651,"props":675,"children":676},{},[677],{"type":37,"value":678},"0,2",{"type":32,"tag":651,"props":680,"children":681},{},[682],{"type":37,"value":683},"Chrome 120 \u002F Mac",{"type":32,"tag":624,"props":685,"children":686},{},[687,692,697],{"type":32,"tag":651,"props":688,"children":689},{},[690],{"type":37,"value":691},"Même localisation géographique",{"type":32,"tag":651,"props":693,"children":694},{},[695],{"type":37,"value":696},"0,15",{"type":32,"tag":651,"props":698,"children":699},{},[700],{"type":37,"value":701},"Istanbul, Kadıköy",{"type":32,"tag":624,"props":703,"children":704},{},[705,710,715],{"type":32,"tag":651,"props":706,"children":707},{},[708],{"type":37,"value":709},"Même clic de campagne",{"type":32,"tag":651,"props":711,"children":712},{},[713],{"type":37,"value":714},"0,25",{"type":32,"tag":651,"props":716,"children":717},{},[718],{"type":37,"value":719},"utm_campaign=vente_printemps",{"type":32,"tag":624,"props":721,"children":722},{},[723,728,733],{"type":32,"tag":651,"props":724,"children":725},{},[726],{"type":37,"value":727},"Même séquence de visualisation produit",{"type":32,"tag":651,"props":729,"children":730},{},[731],{"type":37,"value":732},"0,1",{"type":32,"tag":651,"props":734,"children":735},{},[736],{"type":37,"value":737},"product_123 → product_456",{"type":32,"tag":33,"props":739,"children":740},{},[741,743,748],{"type":37,"value":742},"Si le score total ≥ 0,7, les deux sessions appartiennent ",{"type":32,"tag":52,"props":744,"children":745},{},[746],{"type":37,"value":747},"probablement",{"type":37,"value":749}," à la même personne. Ce seuil s'ajuste en fonction du dataset — 0,65 peut suffire pour une boutique en ligne, mais 0,85 est nécessaire en fintech.",{"type":32,"tag":77,"props":751,"children":753},{"className":79,"code":752,"language":81,"meta":16,"style":16},"-- Exemple de scoring probabiliste\nWITH sessions AS (\n  SELECT\n    session_id,\n    user_pseudo_id,\n    device.operating_system,\n    device.web_info.browser,\n    geo.city,\n    traffic_source.medium,\n    ARRAY_AGG(ecommerce.items.item_id ORDER BY event_timestamp) AS item_sequence\n  FROM `project.dataset.events_*`\n  WHERE event_name = 'page_view'\n  GROUP BY 1,2,3,4,5,6\n)\nSELECT\n  a.session_id AS session_a,\n  b.session_id AS session_b,\n  (CASE WHEN a.operating_system = b.operating_system THEN 0.2 ELSE 0 END +\n   CASE WHEN a.browser = b.browser THEN 0.2 ELSE 0 END +\n   CASE WHEN a.city = b.city THEN 0.15 ELSE 0 END +\n   CASE WHEN a.medium = b.medium THEN 0.25 ELSE 0 END +\n   CASE WHEN a.item_sequence = b.item_sequence THEN 0.2 ELSE 0 END\n  ) AS match_score\nFROM sessions a\nCROSS JOIN sessions b\nWHERE a.session_id \u003C b.session_id  -- optimisation de join croisé\n  AND a.user_pseudo_id != b.user_pseudo_id\nHAVING match_score >= 0.7;\n",[754],{"type":32,"tag":60,"props":755,"children":756},{"__ignoreMap":16},[757,765,786,793,801,808,829,850,871,892,938,949,971,1030,1037,1044,1070,1095,1180,1253,1325,1397,1466,1484,1501,1519,1562,1601],{"type":32,"tag":87,"props":758,"children":759},{"class":89,"line":90},[760],{"type":32,"tag":87,"props":761,"children":762},{"style":94},[763],{"type":37,"value":764},"-- Exemple de scoring probabiliste\n",{"type":32,"tag":87,"props":766,"children":767},{"class":89,"line":100},[768,772,777,782],{"type":32,"tag":87,"props":769,"children":770},{"style":104},[771],{"type":37,"value":142},{"type":32,"tag":87,"props":773,"children":774},{"style":104},[775],{"type":37,"value":776}," sessions",{"type":32,"tag":87,"props":778,"children":779},{"style":104},[780],{"type":37,"value":781}," AS",{"type":32,"tag":87,"props":783,"children":784},{"style":145},[785],{"type":37,"value":158},{"type":32,"tag":87,"props":787,"children":788},{"class":89,"line":136},[789],{"type":32,"tag":87,"props":790,"children":791},{"style":104},[792],{"type":37,"value":326},{"type":32,"tag":87,"props":794,"children":795},{"class":89,"line":161},[796],{"type":32,"tag":87,"props":797,"children":798},{"style":145},[799],{"type":37,"value":800},"    session_id,\n",{"type":32,"tag":87,"props":802,"children":803},{"class":89,"line":170},[804],{"type":32,"tag":87,"props":805,"children":806},{"style":145},[807],{"type":37,"value":176},{"type":32,"tag":87,"props":809,"children":810},{"class":89,"line":179},[811,816,820,825],{"type":32,"tag":87,"props":812,"children":813},{"style":188},[814],{"type":37,"value":815},"    device",{"type":32,"tag":87,"props":817,"children":818},{"style":145},[819],{"type":37,"value":215},{"type":32,"tag":87,"props":821,"children":822},{"style":188},[823],{"type":37,"value":824},"operating_system",{"type":32,"tag":87,"props":826,"children":827},{"style":145},[828],{"type":37,"value":422},{"type":32,"tag":87,"props":830,"children":831},{"class":89,"line":246},[832,836,840,845],{"type":32,"tag":87,"props":833,"children":834},{"style":188},[835],{"type":37,"value":815},{"type":32,"tag":87,"props":837,"children":838},{"style":145},[839],{"type":37,"value":215},{"type":32,"tag":87,"props":841,"children":842},{"style":188},[843],{"type":37,"value":844},"web_info",{"type":32,"tag":87,"props":846,"children":847},{"style":145},[848],{"type":37,"value":849},".browser,\n",{"type":32,"tag":87,"props":851,"children":852},{"class":89,"line":26},[853,858,862,867],{"type":32,"tag":87,"props":854,"children":855},{"style":188},[856],{"type":37,"value":857},"    geo",{"type":32,"tag":87,"props":859,"children":860},{"style":145},[861],{"type":37,"value":215},{"type":32,"tag":87,"props":863,"children":864},{"style":188},[865],{"type":37,"value":866},"city",{"type":32,"tag":87,"props":868,"children":869},{"style":145},[870],{"type":37,"value":422},{"type":32,"tag":87,"props":872,"children":873},{"class":89,"line":294},[874,879,883,888],{"type":32,"tag":87,"props":875,"children":876},{"style":188},[877],{"type":37,"value":878},"    traffic_source",{"type":32,"tag":87,"props":880,"children":881},{"style":145},[882],{"type":37,"value":215},{"type":32,"tag":87,"props":884,"children":885},{"style":188},[886],{"type":37,"value":887},"medium",{"type":32,"tag":87,"props":889,"children":890},{"style":145},[891],{"type":37,"value":422},{"type":32,"tag":87,"props":893,"children":894},{"class":89,"line":303},[895,900,905,909,914,919,924,929,933],{"type":32,"tag":87,"props":896,"children":897},{"style":145},[898],{"type":37,"value":899},"    ARRAY_AGG(",{"type":32,"tag":87,"props":901,"children":902},{"style":188},[903],{"type":37,"value":904},"ecommerce",{"type":32,"tag":87,"props":906,"children":907},{"style":145},[908],{"type":37,"value":215},{"type":32,"tag":87,"props":910,"children":911},{"style":188},[912],{"type":37,"value":913},"items",{"type":32,"tag":87,"props":915,"children":916},{"style":145},[917],{"type":37,"value":918},".item_id ",{"type":32,"tag":87,"props":920,"children":921},{"style":104},[922],{"type":37,"value":923},"ORDER BY",{"type":32,"tag":87,"props":925,"children":926},{"style":145},[927],{"type":37,"value":928}," event_timestamp) ",{"type":32,"tag":87,"props":930,"children":931},{"style":104},[932],{"type":37,"value":153},{"type":32,"tag":87,"props":934,"children":935},{"style":145},[936],{"type":37,"value":937}," item_sequence\n",{"type":32,"tag":87,"props":939,"children":940},{"class":89,"line":320},[941,945],{"type":32,"tag":87,"props":942,"children":943},{"style":104},[944],{"type":37,"value":252},{"type":32,"tag":87,"props":946,"children":947},{"style":125},[948],{"type":37,"value":257},{"type":32,"tag":87,"props":950,"children":951},{"class":89,"line":329},[952,956,961,966],{"type":32,"tag":87,"props":953,"children":954},{"style":104},[955],{"type":37,"value":265},{"type":32,"tag":87,"props":957,"children":958},{"style":145},[959],{"type":37,"value":960}," event_name ",{"type":32,"tag":87,"props":962,"children":963},{"style":104},[964],{"type":37,"value":965},"=",{"type":32,"tag":87,"props":967,"children":968},{"style":125},[969],{"type":37,"value":970}," 'page_view'\n",{"type":32,"tag":87,"props":972,"children":973},{"class":89,"line":338},[974,979,984,989,994,998,1003,1007,1012,1016,1021,1025],{"type":32,"tag":87,"props":975,"children":976},{"style":104},[977],{"type":37,"value":978},"  GROUP BY",{"type":32,"tag":87,"props":980,"children":981},{"style":188},[982],{"type":37,"value":983}," 1",{"type":32,"tag":87,"props":985,"children":986},{"style":145},[987],{"type":37,"value":988},",",{"type":32,"tag":87,"props":990,"children":991},{"style":188},[992],{"type":37,"value":993},"2",{"type":32,"tag":87,"props":995,"children":996},{"style":145},[997],{"type":37,"value":988},{"type":32,"tag":87,"props":999,"children":1000},{"style":188},[1001],{"type":37,"value":1002},"3",{"type":32,"tag":87,"props":1004,"children":1005},{"style":145},[1006],{"type":37,"value":988},{"type":32,"tag":87,"props":1008,"children":1009},{"style":188},[1010],{"type":37,"value":1011},"4",{"type":32,"tag":87,"props":1013,"children":1014},{"style":145},[1015],{"type":37,"value":988},{"type":32,"tag":87,"props":1017,"children":1018},{"style":188},[1019],{"type":37,"value":1020},"5",{"type":32,"tag":87,"props":1022,"children":1023},{"style":145},[1024],{"type":37,"value":988},{"type":32,"tag":87,"props":1026,"children":1027},{"style":188},[1028],{"type":37,"value":1029},"6\n",{"type":32,"tag":87,"props":1031,"children":1032},{"class":89,"line":371},[1033],{"type":32,"tag":87,"props":1034,"children":1035},{"style":145},[1036],{"type":37,"value":390},{"type":32,"tag":87,"props":1038,"children":1039},{"class":89,"line":384},[1040],{"type":32,"tag":87,"props":1041,"children":1042},{"style":104},[1043],{"type":37,"value":399},{"type":32,"tag":87,"props":1045,"children":1046},{"class":89,"line":393},[1047,1052,1056,1061,1065],{"type":32,"tag":87,"props":1048,"children":1049},{"style":188},[1050],{"type":37,"value":1051},"  a",{"type":32,"tag":87,"props":1053,"children":1054},{"style":145},[1055],{"type":37,"value":215},{"type":32,"tag":87,"props":1057,"children":1058},{"style":188},[1059],{"type":37,"value":1060},"session_id",{"type":32,"tag":87,"props":1062,"children":1063},{"style":104},[1064],{"type":37,"value":781},{"type":32,"tag":87,"props":1066,"children":1067},{"style":145},[1068],{"type":37,"value":1069}," session_a,\n",{"type":32,"tag":87,"props":1071,"children":1072},{"class":89,"line":402},[1073,1078,1082,1086,1090],{"type":32,"tag":87,"props":1074,"children":1075},{"style":188},[1076],{"type":37,"value":1077},"  b",{"type":32,"tag":87,"props":1079,"children":1080},{"style":145},[1081],{"type":37,"value":215},{"type":32,"tag":87,"props":1083,"children":1084},{"style":188},[1085],{"type":37,"value":1060},{"type":32,"tag":87,"props":1087,"children":1088},{"style":104},[1089],{"type":37,"value":781},{"type":32,"tag":87,"props":1091,"children":1092},{"style":145},[1093],{"type":37,"value":1094}," session_b,\n",{"type":32,"tag":87,"props":1096,"children":1097},{"class":89,"line":425},[1098,1103,1108,1113,1118,1122,1126,1130,1135,1139,1143,1148,1153,1157,1161,1166,1170,1175],{"type":32,"tag":87,"props":1099,"children":1100},{"style":145},[1101],{"type":37,"value":1102},"  (",{"type":32,"tag":87,"props":1104,"children":1105},{"style":104},[1106],{"type":37,"value":1107},"CASE",{"type":32,"tag":87,"props":1109,"children":1110},{"style":104},[1111],{"type":37,"value":1112}," WHEN",{"type":32,"tag":87,"props":1114,"children":1115},{"style":188},[1116],{"type":37,"value":1117}," a",{"type":32,"tag":87,"props":1119,"children":1120},{"style":145},[1121],{"type":37,"value":215},{"type":32,"tag":87,"props":1123,"children":1124},{"style":188},[1125],{"type":37,"value":824},{"type":32,"tag":87,"props":1127,"children":1128},{"style":104},[1129],{"type":37,"value":517},{"type":32,"tag":87,"props":1131,"children":1132},{"style":188},[1133],{"type":37,"value":1134}," b",{"type":32,"tag":87,"props":1136,"children":1137},{"style":145},[1138],{"type":37,"value":215},{"type":32,"tag":87,"props":1140,"children":1141},{"style":188},[1142],{"type":37,"value":824},{"type":32,"tag":87,"props":1144,"children":1145},{"style":104},[1146],{"type":37,"value":1147}," THEN",{"type":32,"tag":87,"props":1149,"children":1150},{"style":188},[1151],{"type":37,"value":1152}," 0",{"type":32,"tag":87,"props":1154,"children":1155},{"style":145},[1156],{"type":37,"value":215},{"type":32,"tag":87,"props":1158,"children":1159},{"style":188},[1160],{"type":37,"value":993},{"type":32,"tag":87,"props":1162,"children":1163},{"style":104},[1164],{"type":37,"value":1165}," ELSE",{"type":32,"tag":87,"props":1167,"children":1168},{"style":188},[1169],{"type":37,"value":1152},{"type":32,"tag":87,"props":1171,"children":1172},{"style":104},[1173],{"type":37,"value":1174}," END",{"type":32,"tag":87,"props":1176,"children":1177},{"style":104},[1178],{"type":37,"value":1179}," +\n",{"type":32,"tag":87,"props":1181,"children":1182},{"class":89,"line":447},[1183,1188,1192,1196,1200,1205,1209,1213,1217,1221,1225,1229,1233,1237,1241,1245,1249],{"type":32,"tag":87,"props":1184,"children":1185},{"style":104},[1186],{"type":37,"value":1187},"   CASE",{"type":32,"tag":87,"props":1189,"children":1190},{"style":104},[1191],{"type":37,"value":1112},{"type":32,"tag":87,"props":1193,"children":1194},{"style":188},[1195],{"type":37,"value":1117},{"type":32,"tag":87,"props":1197,"children":1198},{"style":145},[1199],{"type":37,"value":215},{"type":32,"tag":87,"props":1201,"children":1202},{"style":188},[1203],{"type":37,"value":1204},"browser",{"type":32,"tag":87,"props":1206,"children":1207},{"style":104},[1208],{"type":37,"value":517},{"type":32,"tag":87,"props":1210,"children":1211},{"style":188},[1212],{"type":37,"value":1134},{"type":32,"tag":87,"props":1214,"children":1215},{"style":145},[1216],{"type":37,"value":215},{"type":32,"tag":87,"props":1218,"children":1219},{"style":188},[1220],{"type":37,"value":1204},{"type":32,"tag":87,"props":1222,"children":1223},{"style":104},[1224],{"type":37,"value":1147},{"type":32,"tag":87,"props":1226,"children":1227},{"style":188},[1228],{"type":37,"value":1152},{"type":32,"tag":87,"props":1230,"children":1231},{"style":145},[1232],{"type":37,"value":215},{"type":32,"tag":87,"props":1234,"children":1235},{"style":188},[1236],{"type":37,"value":993},{"type":32,"tag":87,"props":1238,"children":1239},{"style":104},[1240],{"type":37,"value":1165},{"type":32,"tag":87,"props":1242,"children":1243},{"style":188},[1244],{"type":37,"value":1152},{"type":32,"tag":87,"props":1246,"children":1247},{"style":104},[1248],{"type":37,"value":1174},{"type":32,"tag":87,"props":1250,"children":1251},{"style":104},[1252],{"type":37,"value":1179},{"type":32,"tag":87,"props":1254,"children":1255},{"class":89,"line":464},[1256,1260,1264,1268,1272,1276,1280,1284,1288,1292,1296,1300,1304,1309,1313,1317,1321],{"type":32,"tag":87,"props":1257,"children":1258},{"style":104},[1259],{"type":37,"value":1187},{"type":32,"tag":87,"props":1261,"children":1262},{"style":104},[1263],{"type":37,"value":1112},{"type":32,"tag":87,"props":1265,"children":1266},{"style":188},[1267],{"type":37,"value":1117},{"type":32,"tag":87,"props":1269,"children":1270},{"style":145},[1271],{"type":37,"value":215},{"type":32,"tag":87,"props":1273,"children":1274},{"style":188},[1275],{"type":37,"value":866},{"type":32,"tag":87,"props":1277,"children":1278},{"style":104},[1279],{"type":37,"value":517},{"type":32,"tag":87,"props":1281,"children":1282},{"style":188},[1283],{"type":37,"value":1134},{"type":32,"tag":87,"props":1285,"children":1286},{"style":145},[1287],{"type":37,"value":215},{"type":32,"tag":87,"props":1289,"children":1290},{"style":188},[1291],{"type":37,"value":866},{"type":32,"tag":87,"props":1293,"children":1294},{"style":104},[1295],{"type":37,"value":1147},{"type":32,"tag":87,"props":1297,"children":1298},{"style":188},[1299],{"type":37,"value":1152},{"type":32,"tag":87,"props":1301,"children":1302},{"style":145},[1303],{"type":37,"value":215},{"type":32,"tag":87,"props":1305,"children":1306},{"style":188},[1307],{"type":37,"value":1308},"15",{"type":32,"tag":87,"props":1310,"children":1311},{"style":104},[1312],{"type":37,"value":1165},{"type":32,"tag":87,"props":1314,"children":1315},{"style":188},[1316],{"type":37,"value":1152},{"type":32,"tag":87,"props":1318,"children":1319},{"style":104},[1320],{"type":37,"value":1174},{"type":32,"tag":87,"props":1322,"children":1323},{"style":104},[1324],{"type":37,"value":1179},{"type":32,"tag":87,"props":1326,"children":1327},{"class":89,"line":478},[1328,1332,1336,1340,1344,1348,1352,1356,1360,1364,1368,1372,1376,1381,1385,1389,1393],{"type":32,"tag":87,"props":1329,"children":1330},{"style":104},[1331],{"type":37,"value":1187},{"type":32,"tag":87,"props":1333,"children":1334},{"style":104},[1335],{"type":37,"value":1112},{"type":32,"tag":87,"props":1337,"children":1338},{"style":188},[1339],{"type":37,"value":1117},{"type":32,"tag":87,"props":1341,"children":1342},{"style":145},[1343],{"type":37,"value":215},{"type":32,"tag":87,"props":1345,"children":1346},{"style":188},[1347],{"type":37,"value":887},{"type":32,"tag":87,"props":1349,"children":1350},{"style":104},[1351],{"type":37,"value":517},{"type":32,"tag":87,"props":1353,"children":1354},{"style":188},[1355],{"type":37,"value":1134},{"type":32,"tag":87,"props":1357,"children":1358},{"style":145},[1359],{"type":37,"value":215},{"type":32,"tag":87,"props":1361,"children":1362},{"style":188},[1363],{"type":37,"value":887},{"type":32,"tag":87,"props":1365,"children":1366},{"style":104},[1367],{"type":37,"value":1147},{"type":32,"tag":87,"props":1369,"children":1370},{"style":188},[1371],{"type":37,"value":1152},{"type":32,"tag":87,"props":1373,"children":1374},{"style":145},[1375],{"type":37,"value":215},{"type":32,"tag":87,"props":1377,"children":1378},{"style":188},[1379],{"type":37,"value":1380},"25",{"type":32,"tag":87,"props":1382,"children":1383},{"style":104},[1384],{"type":37,"value":1165},{"type":32,"tag":87,"props":1386,"children":1387},{"style":188},[1388],{"type":37,"value":1152},{"type":32,"tag":87,"props":1390,"children":1391},{"style":104},[1392],{"type":37,"value":1174},{"type":32,"tag":87,"props":1394,"children":1395},{"style":104},[1396],{"type":37,"value":1179},{"type":32,"tag":87,"props":1398,"children":1399},{"class":89,"line":492},[1400,1404,1408,1412,1416,1421,1425,1429,1433,1437,1441,1445,1449,1453,1457,1461],{"type":32,"tag":87,"props":1401,"children":1402},{"style":104},[1403],{"type":37,"value":1187},{"type":32,"tag":87,"props":1405,"children":1406},{"style":104},[1407],{"type":37,"value":1112},{"type":32,"tag":87,"props":1409,"children":1410},{"style":188},[1411],{"type":37,"value":1117},{"type":32,"tag":87,"props":1413,"children":1414},{"style":145},[1415],{"type":37,"value":215},{"type":32,"tag":87,"props":1417,"children":1418},{"style":188},[1419],{"type":37,"value":1420},"item_sequence",{"type":32,"tag":87,"props":1422,"children":1423},{"style":104},[1424],{"type":37,"value":517},{"type":32,"tag":87,"props":1426,"children":1427},{"style":188},[1428],{"type":37,"value":1134},{"type":32,"tag":87,"props":1430,"children":1431},{"style":145},[1432],{"type":37,"value":215},{"type":32,"tag":87,"props":1434,"children":1435},{"style":188},[1436],{"type":37,"value":1420},{"type":32,"tag":87,"props":1438,"children":1439},{"style":104},[1440],{"type":37,"value":1147},{"type":32,"tag":87,"props":1442,"children":1443},{"style":188},[1444],{"type":37,"value":1152},{"type":32,"tag":87,"props":1446,"children":1447},{"style":145},[1448],{"type":37,"value":215},{"type":32,"tag":87,"props":1450,"children":1451},{"style":188},[1452],{"type":37,"value":993},{"type":32,"tag":87,"props":1454,"children":1455},{"style":104},[1456],{"type":37,"value":1165},{"type":32,"tag":87,"props":1458,"children":1459},{"style":188},[1460],{"type":37,"value":1152},{"type":32,"tag":87,"props":1462,"children":1463},{"style":104},[1464],{"type":37,"value":1465}," END\n",{"type":32,"tag":87,"props":1467,"children":1469},{"class":89,"line":1468},23,[1470,1475,1479],{"type":32,"tag":87,"props":1471,"children":1472},{"style":145},[1473],{"type":37,"value":1474},"  ) ",{"type":32,"tag":87,"props":1476,"children":1477},{"style":104},[1478],{"type":37,"value":153},{"type":32,"tag":87,"props":1480,"children":1481},{"style":145},[1482],{"type":37,"value":1483}," match_score\n",{"type":32,"tag":87,"props":1485,"children":1487},{"class":89,"line":1486},24,[1488,1492,1496],{"type":32,"tag":87,"props":1489,"children":1490},{"style":104},[1491],{"type":37,"value":470},{"type":32,"tag":87,"props":1493,"children":1494},{"style":104},[1495],{"type":37,"value":776},{"type":32,"tag":87,"props":1497,"children":1498},{"style":145},[1499],{"type":37,"value":1500}," a\n",{"type":32,"tag":87,"props":1502,"children":1504},{"class":89,"line":1503},25,[1505,1510,1514],{"type":32,"tag":87,"props":1506,"children":1507},{"style":104},[1508],{"type":37,"value":1509},"CROSS JOIN",{"type":32,"tag":87,"props":1511,"children":1512},{"style":104},[1513],{"type":37,"value":776},{"type":32,"tag":87,"props":1515,"children":1516},{"style":145},[1517],{"type":37,"value":1518}," b\n",{"type":32,"tag":87,"props":1520,"children":1522},{"class":89,"line":1521},26,[1523,1528,1532,1536,1540,1545,1549,1553,1557],{"type":32,"tag":87,"props":1524,"children":1525},{"style":104},[1526],{"type":37,"value":1527},"WHERE",{"type":32,"tag":87,"props":1529,"children":1530},{"style":188},[1531],{"type":37,"value":1117},{"type":32,"tag":87,"props":1533,"children":1534},{"style":145},[1535],{"type":37,"value":215},{"type":32,"tag":87,"props":1537,"children":1538},{"style":188},[1539],{"type":37,"value":1060},{"type":32,"tag":87,"props":1541,"children":1542},{"style":104},[1543],{"type":37,"value":1544}," \u003C",{"type":32,"tag":87,"props":1546,"children":1547},{"style":188},[1548],{"type":37,"value":1134},{"type":32,"tag":87,"props":1550,"children":1551},{"style":145},[1552],{"type":37,"value":215},{"type":32,"tag":87,"props":1554,"children":1555},{"style":188},[1556],{"type":37,"value":1060},{"type":32,"tag":87,"props":1558,"children":1559},{"style":94},[1560],{"type":37,"value":1561},"  -- optimisation de join croisé\n",{"type":32,"tag":87,"props":1563,"children":1565},{"class":89,"line":1564},27,[1566,1571,1575,1579,1583,1588,1592,1596],{"type":32,"tag":87,"props":1567,"children":1568},{"style":104},[1569],{"type":37,"value":1570},"  AND",{"type":32,"tag":87,"props":1572,"children":1573},{"style":188},[1574],{"type":37,"value":1117},{"type":32,"tag":87,"props":1576,"children":1577},{"style":145},[1578],{"type":37,"value":215},{"type":32,"tag":87,"props":1580,"children":1581},{"style":188},[1582],{"type":37,"value":417},{"type":32,"tag":87,"props":1584,"children":1585},{"style":104},[1586],{"type":37,"value":1587}," !=",{"type":32,"tag":87,"props":1589,"children":1590},{"style":188},[1591],{"type":37,"value":1134},{"type":32,"tag":87,"props":1593,"children":1594},{"style":145},[1595],{"type":37,"value":215},{"type":32,"tag":87,"props":1597,"children":1598},{"style":188},[1599],{"type":37,"value":1600},"user_pseudo_id\n",{"type":32,"tag":87,"props":1602,"children":1604},{"class":89,"line":1603},28,[1605,1610,1615,1620,1624,1628,1633],{"type":32,"tag":87,"props":1606,"children":1607},{"style":104},[1608],{"type":37,"value":1609},"HAVING",{"type":32,"tag":87,"props":1611,"children":1612},{"style":145},[1613],{"type":37,"value":1614}," match_score ",{"type":32,"tag":87,"props":1616,"children":1617},{"style":104},[1618],{"type":37,"value":1619},">=",{"type":32,"tag":87,"props":1621,"children":1622},{"style":188},[1623],{"type":37,"value":1152},{"type":32,"tag":87,"props":1625,"children":1626},{"style":145},[1627],{"type":37,"value":215},{"type":32,"tag":87,"props":1629,"children":1630},{"style":188},[1631],{"type":37,"value":1632},"7",{"type":32,"tag":87,"props":1634,"children":1635},{"style":145},[1636],{"type":37,"value":535},{"type":32,"tag":33,"props":1638,"children":1639},{},[1640,1642,1647],{"type":37,"value":1641},"Cette requête compare ",{"type":32,"tag":52,"props":1643,"children":1644},{},[1645],{"type":37,"value":1646},"toutes les paires de sessions",{"type":37,"value":1648}," — complexité N². Avec 1M de sessions, c'est 500 milliards de comparaisons. En production, le partitionnement est nécessaire : fenêtre temporelle (7 jours), filtre géographique (même ville), type d'appareil (mobile-mobile).",{"type":32,"tag":33,"props":1650,"children":1651},{},[1652],{"type":37,"value":1653},"La liaison probabiliste entraîne un taux de faux positifs de 5-15%. C'est pourquoi les ID dérivés de ce matching doivent être marqués avec un flag \"duplicate potentiel\" dans l'activation en aval (CDP segment push, campagne e-mail).",{"type":32,"tag":40,"props":1655,"children":1657},{"id":1656},"identité-foyer-même-appareil-utilisateurs-différents",[1658],{"type":37,"value":1659},"Identité foyer : même appareil, utilisateurs différents",{"type":32,"tag":33,"props":1661,"children":1662},{},[1663],{"type":37,"value":1664},"Une tablette ou un téléviseur intelligent est utilisé par plusieurs personnes. Le matching déterministe ou probabiliste fusionnerait les profils différents au sein d'une famille sous un seul ID — entraînant une personnalisation incorrecte. La résolution d'identité foyer tente de distinguer ces scénarios.",{"type":32,"tag":33,"props":1666,"children":1667},{},[1668,1673],{"type":32,"tag":52,"props":1669,"children":1670},{},[1671],{"type":37,"value":1672},"Empreinte au niveau session :",{"type":37,"value":1674}," Des utilisateurs qui se connectent à différentes heures sur le même appareil affichent des patterns de navigation différents. Un utilisateur cherchant des vêtements pour enfants à 08:00 du matin et un autre cherchant de l'électronique à 23:00 le soir peuvent être distingués.",{"type":32,"tag":33,"props":1676,"children":1677},{},[1678,1683],{"type":32,"tag":52,"props":1679,"children":1680},{},[1681],{"type":37,"value":1682},"Regroupement comportemental :",{"type":37,"value":1684}," Utilise K-means ou clustering hiérarchique pour grouper les sessions. Si les centroïdes des clusters diffèrent, tu crées deux \"utilisateurs virtuels\" distincts sous le même device_id.",{"type":32,"tag":77,"props":1686,"children":1688},{"className":79,"code":1687,"language":81,"meta":16,"style":16},"-- Extraction de features pour clustering par foyer\nCREATE OR REPLACE TABLE `project.dataset.household_features` AS\nSELECT\n  device_id,\n  EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour_of_day,\n  COUNT(DISTINCT CASE WHEN event_name = 'purchase' THEN ecommerce.transaction_id END) AS purchase_count,\n  APPROX_TOP_COUNT(ecommerce.items.item_category, 3) AS top_categories,\n  AVG(ecommerce.purchase_revenue_in_usd) AS avg_basket_value\nFROM `project.dataset.events_*`\nWHERE device_id IS NOT NULL\nGROUP BY device_id, hour_of_day;\n",[1689],{"type":32,"tag":60,"props":1690,"children":1691},{"__ignoreMap":16},[1692,1700,1728,1735,1743,1775,1850,1892,1930,1941,1958],{"type":32,"tag":87,"props":1693,"children":1694},{"class":89,"line":90},[1695],{"type":32,"tag":87,"props":1696,"children":1697},{"style":94},[1698],{"type":37,"value":1699},"-- Extraction de features pour clustering par foyer\n",{"type":32,"tag":87,"props":1701,"children":1702},{"class":89,"line":100},[1703,1707,1711,1715,1719,1724],{"type":32,"tag":87,"props":1704,"children":1705},{"style":104},[1706],{"type":37,"value":107},{"type":32,"tag":87,"props":1708,"children":1709},{"style":104},[1710],{"type":37,"value":112},{"type":32,"tag":87,"props":1712,"children":1713},{"style":104},[1714],{"type":37,"value":117},{"type":32,"tag":87,"props":1716,"children":1717},{"style":104},[1718],{"type":37,"value":122},{"type":32,"tag":87,"props":1720,"children":1721},{"style":125},[1722],{"type":37,"value":1723}," `project.dataset.household_features`",{"type":32,"tag":87,"props":1725,"children":1726},{"style":104},[1727],{"type":37,"value":133},{"type":32,"tag":87,"props":1729,"children":1730},{"class":89,"line":136},[1731],{"type":32,"tag":87,"props":1732,"children":1733},{"style":104},[1734],{"type":37,"value":399},{"type":32,"tag":87,"props":1736,"children":1737},{"class":89,"line":161},[1738],{"type":32,"tag":87,"props":1739,"children":1740},{"style":145},[1741],{"type":37,"value":1742},"  device_id,\n",{"type":32,"tag":87,"props":1744,"children":1745},{"class":89,"line":170},[1746,1751,1756,1761,1766,1770],{"type":32,"tag":87,"props":1747,"children":1748},{"style":145},[1749],{"type":37,"value":1750},"  EXTRACT(",{"type":32,"tag":87,"props":1752,"children":1753},{"style":104},[1754],{"type":37,"value":1755},"HOUR",{"type":32,"tag":87,"props":1757,"children":1758},{"style":104},[1759],{"type":37,"value":1760}," FROM",{"type":32,"tag":87,"props":1762,"children":1763},{"style":145},[1764],{"type":37,"value":1765}," TIMESTAMP_MICROS(event_timestamp)) ",{"type":32,"tag":87,"props":1767,"children":1768},{"style":104},[1769],{"type":37,"value":153},{"type":32,"tag":87,"props":1771,"children":1772},{"style":145},[1773],{"type":37,"value":1774}," hour_of_day,\n",{"type":32,"tag":87,"props":1776,"children":1777},{"class":89,"line":179},[1778,1783,1787,1792,1797,1801,1805,1809,1814,1818,1823,1827,1832,1836,1841,1845],{"type":32,"tag":87,"props":1779,"children":1780},{"style":188},[1781],{"type":37,"value":1782},"  COUNT",{"type":32,"tag":87,"props":1784,"children":1785},{"style":145},[1786],{"type":37,"value":196},{"type":32,"tag":87,"props":1788,"children":1789},{"style":104},[1790],{"type":37,"value":1791},"DISTINCT",{"type":32,"tag":87,"props":1793,"children":1794},{"style":104},[1795],{"type":37,"value":1796}," CASE",{"type":32,"tag":87,"props":1798,"children":1799},{"style":104},[1800],{"type":37,"value":1112},{"type":32,"tag":87,"props":1802,"children":1803},{"style":145},[1804],{"type":37,"value":960},{"type":32,"tag":87,"props":1806,"children":1807},{"style":104},[1808],{"type":37,"value":965},{"type":32,"tag":87,"props":1810,"children":1811},{"style":125},[1812],{"type":37,"value":1813}," 'purchase'",{"type":32,"tag":87,"props":1815,"children":1816},{"style":104},[1817],{"type":37,"value":1147},{"type":32,"tag":87,"props":1819,"children":1820},{"style":188},[1821],{"type":37,"value":1822}," ecommerce",{"type":32,"tag":87,"props":1824,"children":1825},{"style":145},[1826],{"type":37,"value":215},{"type":32,"tag":87,"props":1828,"children":1829},{"style":188},[1830],{"type":37,"value":1831},"transaction_id",{"type":32,"tag":87,"props":1833,"children":1834},{"style":104},[1835],{"type":37,"value":1174},{"type":32,"tag":87,"props":1837,"children":1838},{"style":145},[1839],{"type":37,"value":1840},") ",{"type":32,"tag":87,"props":1842,"children":1843},{"style":104},[1844],{"type":37,"value":153},{"type":32,"tag":87,"props":1846,"children":1847},{"style":145},[1848],{"type":37,"value":1849}," purchase_count,\n",{"type":32,"tag":87,"props":1851,"children":1852},{"class":89,"line":246},[1853,1858,1862,1866,1870,1875,1879,1883,1887],{"type":32,"tag":87,"props":1854,"children":1855},{"style":145},[1856],{"type":37,"value":1857},"  APPROX_TOP_COUNT(",{"type":32,"tag":87,"props":1859,"children":1860},{"style":188},[1861],{"type":37,"value":904},{"type":32,"tag":87,"props":1863,"children":1864},{"style":145},[1865],{"type":37,"value":215},{"type":32,"tag":87,"props":1867,"children":1868},{"style":188},[1869],{"type":37,"value":913},{"type":32,"tag":87,"props":1871,"children":1872},{"style":145},[1873],{"type":37,"value":1874},".item_category, ",{"type":32,"tag":87,"props":1876,"children":1877},{"style":188},[1878],{"type":37,"value":1002},{"type":32,"tag":87,"props":1880,"children":1881},{"style":145},[1882],{"type":37,"value":1840},{"type":32,"tag":87,"props":1884,"children":1885},{"style":104},[1886],{"type":37,"value":153},{"type":32,"tag":87,"props":1888,"children":1889},{"style":145},[1890],{"type":37,"value":1891}," top_categories,\n",{"type":32,"tag":87,"props":1893,"children":1894},{"class":89,"line":26},[1895,1900,1904,1908,1912,1917,1921,1925],{"type":32,"tag":87,"props":1896,"children":1897},{"style":188},[1898],{"type":37,"value":1899},"  AVG",{"type":32,"tag":87,"props":1901,"children":1902},{"style":145},[1903],{"type":37,"value":196},{"type":32,"tag":87,"props":1905,"children":1906},{"style":188},[1907],{"type":37,"value":904},{"type":32,"tag":87,"props":1909,"children":1910},{"style":145},[1911],{"type":37,"value":215},{"type":32,"tag":87,"props":1913,"children":1914},{"style":188},[1915],{"type":37,"value":1916},"purchase_revenue_in_usd",{"type":32,"tag":87,"props":1918,"children":1919},{"style":145},[1920],{"type":37,"value":1840},{"type":32,"tag":87,"props":1922,"children":1923},{"style":104},[1924],{"type":37,"value":153},{"type":32,"tag":87,"props":1926,"children":1927},{"style":145},[1928],{"type":37,"value":1929}," avg_basket_value\n",{"type":32,"tag":87,"props":1931,"children":1932},{"class":89,"line":294},[1933,1937],{"type":32,"tag":87,"props":1934,"children":1935},{"style":104},[1936],{"type":37,"value":470},{"type":32,"tag":87,"props":1938,"children":1939},{"style":125},[1940],{"type":37,"value":257},{"type":32,"tag":87,"props":1942,"children":1943},{"class":89,"line":303},[1944,1948,1953],{"type":32,"tag":87,"props":1945,"children":1946},{"style":104},[1947],{"type":37,"value":1527},{"type":32,"tag":87,"props":1949,"children":1950},{"style":145},[1951],{"type":37,"value":1952}," device_id ",{"type":32,"tag":87,"props":1954,"children":1955},{"style":104},[1956],{"type":37,"value":1957},"IS NOT NULL\n",{"type":32,"tag":87,"props":1959,"children":1960},{"class":89,"line":320},[1961,1966],{"type":32,"tag":87,"props":1962,"children":1963},{"style":104},[1964],{"type":37,"value":1965},"GROUP BY",{"type":32,"tag":87,"props":1967,"children":1968},{"style":145},[1969],{"type":37,"value":1970}," device_id, hour_of_day;\n",{"type":32,"tag":33,"props":1972,"children":1973},{},[1974,1976,1982,1984,1990],{"type":37,"value":1975},"Après le clustering, chaque device_id génère des ID virtuels comme ",{"type":32,"tag":60,"props":1977,"children":1979},{"className":1978},[],[1980],{"type":37,"value":1981},"household_user_1",{"type":37,"value":1983},", ",{"type":32,"tag":60,"props":1985,"children":1987},{"className":1986},[],[1988],{"type":37,"value":1989},"household_user_2",{"type":37,"value":1991},". Ces ID ne sont jamais synced vers le CRM — ils restent confinés à la couche analytics et de personnalisation.",{"type":32,"tag":33,"props":1993,"children":1994},{},[1995],{"type":37,"value":1996},"La résolution d'identité foyer a une précision faible — une marge d'erreur de 30% est normale. Elle n'est donc pas utilisée en dehors de l'e-commerce (particulièrement pas en SaaS ou fintech).",{"type":32,"tag":40,"props":1998,"children":2000},{"id":1999},"structure-du-graphe-didentité-et-maintenance",[2001],{"type":37,"value":2002},"Structure du graphe d'identité et maintenance",{"type":32,"tag":33,"props":2004,"children":2005},{},[2006,2008,2013],{"type":37,"value":2007},"Tous les résultats de matching convergent dans une seule table d'",{"type":32,"tag":52,"props":2009,"children":2010},{},[2011],{"type":37,"value":2012},"identité graphe",{"type":37,"value":2014},". Cette table maintient pour chaque user_id tous les alias connus : hash d'e-mail, ID CRM, ga_client_id, ID Firebase, ID publicitaire.",{"type":32,"tag":616,"props":2016,"children":2017},{},[2018,2054],{"type":32,"tag":620,"props":2019,"children":2020},{},[2021],{"type":32,"tag":624,"props":2022,"children":2023},{},[2024,2029,2034,2039,2044,2049],{"type":32,"tag":628,"props":2025,"children":2026},{},[2027],{"type":37,"value":2028},"canonical_id",{"type":32,"tag":628,"props":2030,"children":2031},{},[2032],{"type":37,"value":2033},"identifier_type",{"type":32,"tag":628,"props":2035,"children":2036},{},[2037],{"type":37,"value":2038},"identifier_value",{"type":32,"tag":628,"props":2040,"children":2041},{},[2042],{"type":37,"value":2043},"match_method",{"type":32,"tag":628,"props":2045,"children":2046},{},[2047],{"type":37,"value":2048},"confidence",{"type":32,"tag":628,"props":2050,"children":2051},{},[2052],{"type":37,"value":2053},"updated_at",{"type":32,"tag":644,"props":2055,"children":2056},{},[2057,2089,2118,2149],{"type":32,"tag":624,"props":2058,"children":2059},{},[2060,2065,2069,2074,2079,2084],{"type":32,"tag":651,"props":2061,"children":2062},{},[2063],{"type":37,"value":2064},"user_0001",{"type":32,"tag":651,"props":2066,"children":2067},{},[2068],{"type":37,"value":512},{"type":32,"tag":651,"props":2070,"children":2071},{},[2072],{"type":37,"value":2073},"a1b2c3...",{"type":32,"tag":651,"props":2075,"children":2076},{},[2077],{"type":37,"value":2078},"deterministic",{"type":32,"tag":651,"props":2080,"children":2081},{},[2082],{"type":37,"value":2083},"1.0",{"type":32,"tag":651,"props":2085,"children":2086},{},[2087],{"type":37,"value":2088},"2026-06-15",{"type":32,"tag":624,"props":2090,"children":2091},{},[2092,2096,2100,2105,2109,2113],{"type":32,"tag":651,"props":2093,"children":2094},{},[2095],{"type":37,"value":2064},{"type":32,"tag":651,"props":2097,"children":2098},{},[2099],{"type":37,"value":73},{"type":32,"tag":651,"props":2101,"children":2102},{},[2103],{"type":37,"value":2104},"GA1.2.123",{"type":32,"tag":651,"props":2106,"children":2107},{},[2108],{"type":37,"value":2078},{"type":32,"tag":651,"props":2110,"children":2111},{},[2112],{"type":37,"value":2083},{"type":32,"tag":651,"props":2114,"children":2115},{},[2116],{"type":37,"value":2117},"2026-06-14",{"type":32,"tag":624,"props":2119,"children":2120},{},[2121,2125,2130,2135,2140,2145],{"type":32,"tag":651,"props":2122,"children":2123},{},[2124],{"type":37,"value":2064},{"type":32,"tag":651,"props":2126,"children":2127},{},[2128],{"type":37,"value":2129},"firebase_id",{"type":32,"tag":651,"props":2131,"children":2132},{},[2133],{"type":37,"value":2134},"xyz789",{"type":32,"tag":651,"props":2136,"children":2137},{},[2138],{"type":37,"value":2139},"probabilistic",{"type":32,"tag":651,"props":2141,"children":2142},{},[2143],{"type":37,"value":2144},"0.75",{"type":32,"tag":651,"props":2146,"children":2147},{},[2148],{"type":37,"value":19},{"type":32,"tag":624,"props":2150,"children":2151},{},[2152,2157,2161,2166,2170,2174],{"type":32,"tag":651,"props":2153,"children":2154},{},[2155],{"type":37,"value":2156},"user_0002",{"type":32,"tag":651,"props":2158,"children":2159},{},[2160],{"type":37,"value":440},{"type":32,"tag":651,"props":2162,"children":2163},{},[2164],{"type":37,"value":2165},"CRM-456",{"type":32,"tag":651,"props":2167,"children":2168},{},[2169],{"type":37,"value":2078},{"type":32,"tag":651,"props":2171,"children":2172},{},[2173],{"type":37,"value":2083},{"type":32,"tag":651,"props":2175,"children":2176},{},[2177],{"type":37,"value":2178},"2026-06-10",{"type":32,"tag":33,"props":2180,"children":2181},{},[2182],{"type":37,"value":2183},"Le graphe est mis à jour de façon incrémentale — chaque jour les nouveaux événements sont traités, les nouveaux matchs sont ajoutés. Les anciens liens s'affaiblissent par décroissance de confiance : un lien probabiliste datant de 90 jours voit sa confiance passer de 0,75 à 0,50.",{"type":32,"tag":33,"props":2185,"children":2186},{},[2187,2189,2194],{"type":37,"value":2188},"Si tu modélises le graphe comme un ",{"type":32,"tag":52,"props":2190,"children":2191},{},[2192],{"type":37,"value":2193},"graphe acyclique orienté (DAG)",{"type":37,"value":2195},", tu peux détecter les boucles. Une boucle Utilisateur A → Utilisateur B → Utilisateur C → Utilisateur A signale une erreur — révision manuelle requise.",{"type":32,"tag":40,"props":2197,"children":2199},{"id":2198},"intégration-cdp-et-pipeline-dactivation",[2200],{"type":37,"value":2201},"Intégration CDP et pipeline d'activation",{"type":32,"tag":33,"props":2203,"children":2204},{},[2205,2207,2215],{"type":37,"value":2206},"Le graphe d'identité ne s'utilise jamais isolé — il alimente la CDP. L'architecture de ",{"type":32,"tag":564,"props":2208,"children":2212},{"href":2209,"rel":2210},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Fretention-engineering-cdp",[2211],"nofollow",[2213],{"type":37,"value":2214},"CDP & Retention Engineering",{"type":37,"value":2216}," extrait le canonical_id du graphe, consolide tous les points de contact sous cet ID, l'envoie au moteur de segmentation.",{"type":32,"tag":33,"props":2218,"children":2219},{},[2220],{"type":37,"value":2221},"Le processus d'activation fonctionne ainsi :",{"type":32,"tag":2223,"props":2224,"children":2225},"ol",{},[2226,2237,2247,2257],{"type":32,"tag":2227,"props":2228,"children":2229},"li",{},[2230,2235],{"type":32,"tag":52,"props":2231,"children":2232},{},[2233],{"type":37,"value":2234},"Définition de segment :",{"type":37,"value":2236}," \"3+ sessions dans les 30 derniers jours, article ajouté au panier mais pas de conversion\" → défini comme une vue BigQuery.",{"type":32,"tag":2227,"props":2238,"children":2239},{},[2240,2245],{"type":32,"tag":52,"props":2241,"children":2242},{},[2243],{"type":37,"value":2244},"Résolution d'identité :",{"type":37,"value":2246}," La vue fait une recherche canonical_id pour chaque user_pseudo_id.",{"type":32,"tag":2227,"props":2248,"children":2249},{},[2250,2255],{"type":32,"tag":52,"props":2251,"children":2252},{},[2253],{"type":37,"value":2254},"Sync de canal :",{"type":37,"value":2256}," Tous les hash d'e-mail sous canonical_id sont poussés vers Meta CAPI, les hash de téléphone vers Google Customer Match.",{"type":32,"tag":2227,"props":2258,"children":2259},{},[2260,2265],{"type":32,"tag":52,"props":2261,"children":2262},{},[2263],{"type":37,"value":2264},"Attribution :",{"type":37,"value":2266}," Quand un événement de conversion arrive, canonical_id trace tous les points de contact via le graphe.",{"type":32,"tag":33,"props":2268,"children":2269},{},[2270],{"type":37,"value":2271},"Sans CDP, la résolution d'identité reste incomplète — le graphe ne fait que maintenir \"qui correspond à qui\", il ne prend pas la décision \"quelle action dois-je prendre avec cet utilisateur\".",{"type":32,"tag":40,"props":2273,"children":2275},{"id":2274},"conformité-à-la-vie-privée-et-propagation-du-consentement",[2276],{"type":37,"value":2277},"Conformité à la vie privée et propagation du consentement",{"type":32,"tag":33,"props":2279,"children":2280},{},[2281],{"type":37,"value":2282},"La résolution d'identité se justifie par l'article 6(1)(f) du RGPD, \"intérêt légitime\" — mais si l'utilisateur n'a pas donné son consentement explicite, tu ne peux pas utiliser les ID dérivés de ce graphe pour le remarketing. L'intégration avec une plateforme de gestion du consentement (CMP) est obligatoire.",{"type":32,"tag":33,"props":2284,"children":2285},{},[2286,2288,2294],{"type":37,"value":2287},"Pour chaque canonical_id, l'état du consentement est maintenu : ",{"type":32,"tag":60,"props":2289,"children":2291},{"className":2290},[],[2292],{"type":37,"value":2293},"{ analytics: true, marketing: false, personalization: true }",{"type":37,"value":2295},". Les identifiants dérivés du graphe héritent de ce flag — si User A dispose de marketing=false, le ga_client_id de l'utilisateur B qui a été lié à User A par correspondance probabiliste n'entre pas dans les segments marketing.",{"type":32,"tag":33,"props":2297,"children":2298},{},[2299,2301,2308],{"type":37,"value":2300},"Sous TCF 2.2, la propagation du consentement par vendor devient plus complexe : si l'utilisateur a consenti pour Meta mais pas pour Google, le graphe exécute un sync sélectif. Cette architecture fait partie du processus de ",{"type":32,"tag":564,"props":2302,"children":2305},{"href":2303,"rel":2304},"https:\u002F\u002Fwww.roibase.com.tr\u002Ffr\u002Ffirstparty",[2211],[2306],{"type":37,"value":2307},"Données First-Party & Architecture de Mesure",{"type":37,"value":2309}," — les signaux de consentement sont injectés au début du pipeline d'événements, les jobs de mise à jour du graphe les lisent.",{"type":32,"tag":2311,"props":2312,"children":2313},"hr",{},[],{"type":32,"tag":33,"props":2315,"children":2316},{},[2317],{"type":37,"value":2318},"La résolution d'identité n'est pas qu'une opération JOIN technique — c'est la couche critique qui branche les données marketing à un mécanisme de décision. Utiliser le hash matching pour des correspondances exactes, le scoring probabiliste pour les signaux faibles, le regroupement par foyer pour le partage d'appareil exige un détail d'ingénierie. Maintenir le graphe à jour, l'aligner avec la propagation du consentement, l'alimenter dans le pipeline d'activation CDP — c'est la discipline de production. À l'ère post-cookie, l'identité client n'est pas devinée — elle est construite à partir de six identifiants distincts fusionnés.",{"type":32,"tag":2320,"props":2321,"children":2322},"style",{},[2323],{"type":37,"value":2324},"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":136,"depth":136,"links":2326},[2327,2330,2331,2332,2333,2334],{"id":42,"depth":100,"text":45,"children":2328},[2329],{"id":588,"depth":136,"text":591},{"id":599,"depth":100,"text":602},{"id":1656,"depth":100,"text":1659},{"id":1999,"depth":100,"text":2002},{"id":2198,"depth":100,"text":2201},{"id":2274,"depth":100,"text":2277},"markdown","content:fr:data:resolution-identite-6-signaux-identite-client-unique.md","content","fr\u002Fdata\u002Fresolution-identite-6-signaux-identite-client-unique.md","fr\u002Fdata\u002Fresolution-identite-6-signaux-identite-client-unique","md",1782079493620]