[{"data":1,"prerenderedAt":1408},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fru\u002Fdata\u002Fidentity-resolution-6-signalov-k-edinomu-identifikacionnomu-kodu-polzovatelya":13},{"i18nKey":4,"paths":5},"data-003-2026-05",{"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-six-signals-to-unified-customer-identity","\u002Fes\u002Fdata\u002Fresolucion-de-identidad-de-6-senales-a-perfil-unico","\u002Ffr\u002Fdata\u002Fresolution-identite-6-signaux-vers-une-identite-client-unifiee","\u002Fit\u002Fdata\u002Fidentity-resolution-sei-segnali-a-unica-identita-cliente","\u002Fru\u002Fdata\u002Fidentity-resolution-6-signalov-k-edinomu-identifikacionnomu-kodu-polzovatelya","\u002Ftr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine",{"_path":11,"_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":1402,"_id":1403,"_source":1404,"_file":1405,"_stem":1406,"_extension":1407},"data",false,"","Разрешение идентичности: от 6 сигналов к единому коду пользователя","Архитектура современного разрешения идентичности: хеширование, вероятностная связь и идентификация домохозяйства для преобразования разрозненных сигналов в единый профиль клиента.","2026-05-12",[21,22,23,24,25],"identity-resolution","hash-matching","probabilistic-linking","cdp","first-party-data",9,"Roibase",{"type":29,"children":30,"toc":1394},"root",[31,39,46,69,74,95,101,106,119,124,582,587,593,598,603,608,913,928,934,939,960,1278,1299,1305,1326,1346,1351,1357,1362,1375,1388],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Средний пользователь электронной коммерции просматривает ваш сайт с 6 разных устройств через 11 точек контакта, прежде чем принять решение о покупке. GA4 записывает их как 4 разных пользователя, CRM видит 2 лида, платформа email — 1 подписчика. В мире без cookies объединение этих фрагментов — не просто удобство, а необходимость. Без этого атрибуция невозможна, сегментация бессмысленна, расчет пожизненной ценности клиента становится неточным. Identity resolution — это дисциплина data engineering, которая соединяет эти фрагменты в единую идентичность. Для этого требуется трёхслойная архитектура: от детерминированного хеш-сопоставления до вероятностной связи.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"хеш-сопоставление-детерминированный-остов-идентичности",[44],{"type":37,"value":45},"Хеш-сопоставление: детерминированный остов идентичности",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,67],{"type":37,"value":50},"Детерминированное совпадение работает через хеш SHA-256. Адрес электронной почты \"",{"type":32,"tag":52,"props":53,"children":55},"a",{"href":54},"mailto:user@example.com",[56],{"type":37,"value":57},"user@example.com",{"type":37,"value":59},"\" преобразуется в хеш \"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8\" — если один и тот же хеш появляется в каждой системе, это один и тот же человек. Когда пользователь входит в систему, Вы добавляете параметр ",{"type":32,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":37,"value":66},"user_data.email_sha256",{"type":37,"value":68}," в payload события GTM на сервере, и в BigQuery этот хеш объединяет веб-сессию, лид в CRM и подписчика Klaviyo в одну строку.",{"type":32,"tag":33,"props":70,"children":71},{},[72],{"type":37,"value":73},"Два критических момента: стратегия соли для хеша и риск коллизии. Если взять хеш без соли, возникает риск атаки радужной таблицы, но в маркетинговом pipeline данных соль должна быть согласованной во всех системах — иначе один и тот же адрес электронной почты будет производить разные хеши. Риск коллизии в SHA-256 теоретический — на практике столкновений в пространстве 2^256 не бывает, но с низкоэнтропийными полями, такими как номер телефона, детерминизм ослабляется. По этой причине комбинация email + телефон создаёт более надёжный остов.",{"type":32,"tag":33,"props":75,"children":76},{},[77,79,85,87,93],{"type":37,"value":78},"Когда вы извлекаете данные из Klaviyo в BigQuery, добавляйте столбец ",{"type":32,"tag":61,"props":80,"children":82},{"className":81},[],[83],{"type":37,"value":84},"user_properties.email_sha256",{"type":37,"value":86}," и используйте ",{"type":32,"tag":61,"props":88,"children":90},{"className":89},[],[91],{"type":37,"value":92},"LEFT JOIN web_events USING (email_sha256)",{"type":37,"value":94}," в dbt-модели. Таким образом анонимная веб-сессия связывается с профилем подписчика в одной строке. Стратегия таблицы снимков критична — сопоставления хешей должны сохраняться в ежедневных снимках, чтобы при изменении пользователем адреса электронной почты исторические сопоставления не были утеряны.",{"type":32,"tag":40,"props":96,"children":98},{"id":97},"вероятностная-связь-объединение-сигналов-с-помощью-нечёткой-логики",[99],{"type":37,"value":100},"Вероятностная связь: объединение сигналов с помощью нечёткой логики",{"type":32,"tag":33,"props":102,"children":103},{},[104],{"type":37,"value":105},"Детерминированное сопоставление недостаточно для мобильного веба без cookies. Пользователь закрывает браузер, не войдя в систему и не оставляя адреса электронной почты, но комбинация IP + user agent + timezone + язык с вероятностью 87% указывает на одного и того же человека. Здесь в дело вступает вероятностный граф идентичности — Вы взвешиваете сигналы с использованием байесовской вероятности.",{"type":32,"tag":33,"props":107,"children":108},{},[109,111,117],{"type":37,"value":110},"Существует шесть основных слоёв сигналов: отпечаток устройства (canvas hash, WebGL renderer), сетевой уровень (IP-подсеть, ASN), поведенческой паттерн (длительность сессии, последовательность путей), геолокация (кластеризация GPS lat\u002Flong), временной сигнал (паттерн активных часов) и контекстные метаданные (домен источника, согласованность UTM). Каждому сигналу присваивается оценка достоверности от 0 до 100, и если взвешенная сумма превышает 70, назначается временный ",{"type":32,"tag":61,"props":112,"children":114},{"className":113},[],[115],{"type":37,"value":116},"probabilistic_id",{"type":37,"value":118},".",{"type":32,"tag":33,"props":120,"children":121},{},[122],{"type":37,"value":123},"В BigQuery вы моделируете это следующим образом:",{"type":32,"tag":125,"props":126,"children":130},"pre",{"className":127,"code":128,"language":129,"meta":16,"style":16},"language-sql shiki shiki-themes github-dark","WITH signal_scores AS (\n  SELECT\n    session_id,\n    device_fingerprint,\n    ip_subnet,\n    SUM(\n      CASE WHEN device_fingerprint_match THEN 40 ELSE 0 END +\n      CASE WHEN ip_subnet_match AND hour_diff \u003C 4 THEN 25 ELSE 0 END +\n      CASE WHEN behavior_vector_similarity > 0.8 THEN 20 ELSE 0 END\n    ) AS total_confidence\n  FROM event_stream\n  WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)\n)\nSELECT session_id, device_fingerprint, total_confidence,\n  CASE WHEN total_confidence >= 70 \n    THEN GENERATE_UUID() \n    ELSE NULL \n  END AS probabilistic_id\nFROM signal_scores\n","sql",[131],{"type":32,"tag":61,"props":132,"children":133},{"__ignoreMap":16},[134,162,171,180,189,198,213,262,325,381,399,413,462,470,484,517,531,549,568],{"type":32,"tag":135,"props":136,"children":139},"span",{"class":137,"line":138},"line",1,[140,146,152,157],{"type":32,"tag":135,"props":141,"children":143},{"style":142},"--shiki-default:#F97583",[144],{"type":37,"value":145},"WITH",{"type":32,"tag":135,"props":147,"children":149},{"style":148},"--shiki-default:#E1E4E8",[150],{"type":37,"value":151}," signal_scores ",{"type":32,"tag":135,"props":153,"children":154},{"style":142},[155],{"type":37,"value":156},"AS",{"type":32,"tag":135,"props":158,"children":159},{"style":148},[160],{"type":37,"value":161}," (\n",{"type":32,"tag":135,"props":163,"children":165},{"class":137,"line":164},2,[166],{"type":32,"tag":135,"props":167,"children":168},{"style":142},[169],{"type":37,"value":170},"  SELECT\n",{"type":32,"tag":135,"props":172,"children":174},{"class":137,"line":173},3,[175],{"type":32,"tag":135,"props":176,"children":177},{"style":148},[178],{"type":37,"value":179},"    session_id,\n",{"type":32,"tag":135,"props":181,"children":183},{"class":137,"line":182},4,[184],{"type":32,"tag":135,"props":185,"children":186},{"style":148},[187],{"type":37,"value":188},"    device_fingerprint,\n",{"type":32,"tag":135,"props":190,"children":192},{"class":137,"line":191},5,[193],{"type":32,"tag":135,"props":194,"children":195},{"style":148},[196],{"type":37,"value":197},"    ip_subnet,\n",{"type":32,"tag":135,"props":199,"children":201},{"class":137,"line":200},6,[202,208],{"type":32,"tag":135,"props":203,"children":205},{"style":204},"--shiki-default:#79B8FF",[206],{"type":37,"value":207},"    SUM",{"type":32,"tag":135,"props":209,"children":210},{"style":148},[211],{"type":37,"value":212},"(\n",{"type":32,"tag":135,"props":214,"children":216},{"class":137,"line":215},7,[217,222,227,232,237,242,247,252,257],{"type":32,"tag":135,"props":218,"children":219},{"style":142},[220],{"type":37,"value":221},"      CASE",{"type":32,"tag":135,"props":223,"children":224},{"style":142},[225],{"type":37,"value":226}," WHEN",{"type":32,"tag":135,"props":228,"children":229},{"style":148},[230],{"type":37,"value":231}," device_fingerprint_match ",{"type":32,"tag":135,"props":233,"children":234},{"style":142},[235],{"type":37,"value":236},"THEN",{"type":32,"tag":135,"props":238,"children":239},{"style":204},[240],{"type":37,"value":241}," 40",{"type":32,"tag":135,"props":243,"children":244},{"style":142},[245],{"type":37,"value":246}," ELSE",{"type":32,"tag":135,"props":248,"children":249},{"style":204},[250],{"type":37,"value":251}," 0",{"type":32,"tag":135,"props":253,"children":254},{"style":142},[255],{"type":37,"value":256}," END",{"type":32,"tag":135,"props":258,"children":259},{"style":142},[260],{"type":37,"value":261}," +\n",{"type":32,"tag":135,"props":263,"children":265},{"class":137,"line":264},8,[266,270,274,279,284,289,294,299,304,309,313,317,321],{"type":32,"tag":135,"props":267,"children":268},{"style":142},[269],{"type":37,"value":221},{"type":32,"tag":135,"props":271,"children":272},{"style":142},[273],{"type":37,"value":226},{"type":32,"tag":135,"props":275,"children":276},{"style":148},[277],{"type":37,"value":278}," ip_subnet_match ",{"type":32,"tag":135,"props":280,"children":281},{"style":142},[282],{"type":37,"value":283},"AND",{"type":32,"tag":135,"props":285,"children":286},{"style":148},[287],{"type":37,"value":288}," hour_diff ",{"type":32,"tag":135,"props":290,"children":291},{"style":142},[292],{"type":37,"value":293},"\u003C",{"type":32,"tag":135,"props":295,"children":296},{"style":204},[297],{"type":37,"value":298}," 4",{"type":32,"tag":135,"props":300,"children":301},{"style":142},[302],{"type":37,"value":303}," THEN",{"type":32,"tag":135,"props":305,"children":306},{"style":204},[307],{"type":37,"value":308}," 25",{"type":32,"tag":135,"props":310,"children":311},{"style":142},[312],{"type":37,"value":246},{"type":32,"tag":135,"props":314,"children":315},{"style":204},[316],{"type":37,"value":251},{"type":32,"tag":135,"props":318,"children":319},{"style":142},[320],{"type":37,"value":256},{"type":32,"tag":135,"props":322,"children":323},{"style":142},[324],{"type":37,"value":261},{"type":32,"tag":135,"props":326,"children":327},{"class":137,"line":26},[328,332,336,341,346,350,354,359,363,368,372,376],{"type":32,"tag":135,"props":329,"children":330},{"style":142},[331],{"type":37,"value":221},{"type":32,"tag":135,"props":333,"children":334},{"style":142},[335],{"type":37,"value":226},{"type":32,"tag":135,"props":337,"children":338},{"style":148},[339],{"type":37,"value":340}," behavior_vector_similarity ",{"type":32,"tag":135,"props":342,"children":343},{"style":142},[344],{"type":37,"value":345},">",{"type":32,"tag":135,"props":347,"children":348},{"style":204},[349],{"type":37,"value":251},{"type":32,"tag":135,"props":351,"children":352},{"style":148},[353],{"type":37,"value":118},{"type":32,"tag":135,"props":355,"children":356},{"style":204},[357],{"type":37,"value":358},"8",{"type":32,"tag":135,"props":360,"children":361},{"style":142},[362],{"type":37,"value":303},{"type":32,"tag":135,"props":364,"children":365},{"style":204},[366],{"type":37,"value":367}," 20",{"type":32,"tag":135,"props":369,"children":370},{"style":142},[371],{"type":37,"value":246},{"type":32,"tag":135,"props":373,"children":374},{"style":204},[375],{"type":37,"value":251},{"type":32,"tag":135,"props":377,"children":378},{"style":142},[379],{"type":37,"value":380}," END\n",{"type":32,"tag":135,"props":382,"children":384},{"class":137,"line":383},10,[385,390,394],{"type":32,"tag":135,"props":386,"children":387},{"style":148},[388],{"type":37,"value":389},"    ) ",{"type":32,"tag":135,"props":391,"children":392},{"style":142},[393],{"type":37,"value":156},{"type":32,"tag":135,"props":395,"children":396},{"style":148},[397],{"type":37,"value":398}," total_confidence\n",{"type":32,"tag":135,"props":400,"children":402},{"class":137,"line":401},11,[403,408],{"type":32,"tag":135,"props":404,"children":405},{"style":142},[406],{"type":37,"value":407},"  FROM",{"type":32,"tag":135,"props":409,"children":410},{"style":148},[411],{"type":37,"value":412}," event_stream\n",{"type":32,"tag":135,"props":414,"children":416},{"class":137,"line":415},12,[417,422,427,432,437,442,447,452,457],{"type":32,"tag":135,"props":418,"children":419},{"style":142},[420],{"type":37,"value":421},"  WHERE",{"type":32,"tag":135,"props":423,"children":424},{"style":142},[425],{"type":37,"value":426}," timestamp",{"type":32,"tag":135,"props":428,"children":429},{"style":142},[430],{"type":37,"value":431}," >",{"type":32,"tag":135,"props":433,"children":434},{"style":148},[435],{"type":37,"value":436}," TIMESTAMP_SUB(",{"type":32,"tag":135,"props":438,"children":439},{"style":204},[440],{"type":37,"value":441},"CURRENT_TIMESTAMP",{"type":32,"tag":135,"props":443,"children":444},{"style":148},[445],{"type":37,"value":446},"(), INTERVAL ",{"type":32,"tag":135,"props":448,"children":449},{"style":204},[450],{"type":37,"value":451},"7",{"type":32,"tag":135,"props":453,"children":454},{"style":142},[455],{"type":37,"value":456}," DAY",{"type":32,"tag":135,"props":458,"children":459},{"style":148},[460],{"type":37,"value":461},")\n",{"type":32,"tag":135,"props":463,"children":465},{"class":137,"line":464},13,[466],{"type":32,"tag":135,"props":467,"children":468},{"style":148},[469],{"type":37,"value":461},{"type":32,"tag":135,"props":471,"children":473},{"class":137,"line":472},14,[474,479],{"type":32,"tag":135,"props":475,"children":476},{"style":142},[477],{"type":37,"value":478},"SELECT",{"type":32,"tag":135,"props":480,"children":481},{"style":148},[482],{"type":37,"value":483}," session_id, device_fingerprint, total_confidence,\n",{"type":32,"tag":135,"props":485,"children":487},{"class":137,"line":486},15,[488,493,497,502,507,512],{"type":32,"tag":135,"props":489,"children":490},{"style":142},[491],{"type":37,"value":492},"  CASE",{"type":32,"tag":135,"props":494,"children":495},{"style":142},[496],{"type":37,"value":226},{"type":32,"tag":135,"props":498,"children":499},{"style":148},[500],{"type":37,"value":501}," total_confidence ",{"type":32,"tag":135,"props":503,"children":504},{"style":142},[505],{"type":37,"value":506},">=",{"type":32,"tag":135,"props":508,"children":509},{"style":204},[510],{"type":37,"value":511}," 70",{"type":32,"tag":135,"props":513,"children":514},{"style":148},[515],{"type":37,"value":516}," \n",{"type":32,"tag":135,"props":518,"children":520},{"class":137,"line":519},16,[521,526],{"type":32,"tag":135,"props":522,"children":523},{"style":142},[524],{"type":37,"value":525},"    THEN",{"type":32,"tag":135,"props":527,"children":528},{"style":148},[529],{"type":37,"value":530}," GENERATE_UUID() \n",{"type":32,"tag":135,"props":532,"children":534},{"class":137,"line":533},17,[535,540,545],{"type":32,"tag":135,"props":536,"children":537},{"style":142},[538],{"type":37,"value":539},"    ELSE",{"type":32,"tag":135,"props":541,"children":542},{"style":142},[543],{"type":37,"value":544}," NULL",{"type":32,"tag":135,"props":546,"children":547},{"style":148},[548],{"type":37,"value":516},{"type":32,"tag":135,"props":550,"children":552},{"class":137,"line":551},18,[553,558,563],{"type":32,"tag":135,"props":554,"children":555},{"style":142},[556],{"type":37,"value":557},"  END",{"type":32,"tag":135,"props":559,"children":560},{"style":142},[561],{"type":37,"value":562}," AS",{"type":32,"tag":135,"props":564,"children":565},{"style":148},[566],{"type":37,"value":567}," probabilistic_id\n",{"type":32,"tag":135,"props":569,"children":571},{"class":137,"line":570},19,[572,577],{"type":32,"tag":135,"props":573,"children":574},{"style":142},[575],{"type":37,"value":576},"FROM",{"type":32,"tag":135,"props":578,"children":579},{"style":148},[580],{"type":37,"value":581}," signal_scores\n",{"type":32,"tag":33,"props":583,"children":584},{},[585],{"type":37,"value":586},"Компромисс этого подхода — риск ложных срабатываний. Общее устройство (офисный компьютер) или использование VPN могут объединить разных людей. По этой причине вероятностные ID всегда должны проверяться детерминированным хешем — когда пользователь входит в систему, происходит операция \"слияния\" на основе хеша, исправляются все предыдущие вероятностные сессии.",{"type":32,"tag":40,"props":588,"children":590},{"id":589},"идентификация-домохозяйства-от-набора-устройств-к-единице-дома",[591],{"type":37,"value":592},"Идентификация домохозяйства: от набора устройств к единице дома",{"type":32,"tag":33,"props":594,"children":595},{},[596],{"type":37,"value":597},"Единица принятия решения обычно — не индивид, а домохозяйство. С одного IP-адреса работают три устройства: MacBook (утром женщина), iPhone (весь день), iPad (вечером ребёнок). Объединение их в одного \"индивидуума\" неправильно, но группировка как \"домохозяйство\" критична для сегментации — особенно для товаров длительного пользования (бытовая техника, мебель), где решение о покупке принимается на уровне семьи.",{"type":32,"tag":33,"props":599,"children":600},{},[601],{"type":37,"value":602},"График домохозяйства строится на основе MAC-адреса маршрутизатора\u002Fмодема + подсети IP + GPS-координат. В качестве основы берётся отпечаток сети, а не устройства, потому что WiFi-маршрутизатор даёт один и тот же MAC-адрес шлюза на всех устройствах. Здесь критично фильтровать публичные WiFi — если вы группируете 200 устройств с IP Starbucks как \"домохозяйство\", модель развалится. Это фильтруется порогом количества сессий (на одном IP более 50 уникальных устройств → чёрный список) и паттерном времени нахождения (на одном IP нет сессий длительностью 2+ часа → розничный магазин\u002Fкафе).",{"type":32,"tag":33,"props":604,"children":605},{},[606],{"type":37,"value":607},"В BigQuery вы присваиваете ID домохозяйства следующим образом:",{"type":32,"tag":125,"props":609,"children":611},{"className":127,"code":610,"language":129,"meta":16,"style":16},"CREATE OR REPLACE TABLE households AS\nWITH network_clusters AS (\n  SELECT ip_subnet, router_mac, GPS_lat, GPS_long,\n    APPROX_COUNT_DISTINCT(device_id) AS device_count,\n    AVG(session_duration_sec) AS avg_session\n  FROM sessions\n  WHERE DATE(timestamp) > DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)\n  GROUP BY 1,2,3,4\n  HAVING device_count BETWEEN 1 AND 8 AND avg_session > 120\n)\nSELECT *, GENERATE_UUID() AS household_id\nFROM network_clusters\n",[612],{"type":32,"tag":61,"props":613,"children":614},{"__ignoreMap":16},[615,639,659,672,694,716,728,777,818,868,875,901],{"type":32,"tag":135,"props":616,"children":617},{"class":137,"line":138},[618,623,628,634],{"type":32,"tag":135,"props":619,"children":620},{"style":142},[621],{"type":37,"value":622},"CREATE OR REPLACE",{"type":32,"tag":135,"props":624,"children":625},{"style":142},[626],{"type":37,"value":627}," TABLE",{"type":32,"tag":135,"props":629,"children":631},{"style":630},"--shiki-default:#B392F0",[632],{"type":37,"value":633}," households",{"type":32,"tag":135,"props":635,"children":636},{"style":142},[637],{"type":37,"value":638}," AS\n",{"type":32,"tag":135,"props":640,"children":641},{"class":137,"line":164},[642,646,651,655],{"type":32,"tag":135,"props":643,"children":644},{"style":142},[645],{"type":37,"value":145},{"type":32,"tag":135,"props":647,"children":648},{"style":148},[649],{"type":37,"value":650}," network_clusters ",{"type":32,"tag":135,"props":652,"children":653},{"style":142},[654],{"type":37,"value":156},{"type":32,"tag":135,"props":656,"children":657},{"style":148},[658],{"type":37,"value":161},{"type":32,"tag":135,"props":660,"children":661},{"class":137,"line":173},[662,667],{"type":32,"tag":135,"props":663,"children":664},{"style":142},[665],{"type":37,"value":666},"  SELECT",{"type":32,"tag":135,"props":668,"children":669},{"style":148},[670],{"type":37,"value":671}," ip_subnet, router_mac, GPS_lat, GPS_long,\n",{"type":32,"tag":135,"props":673,"children":674},{"class":137,"line":182},[675,680,685,689],{"type":32,"tag":135,"props":676,"children":677},{"style":204},[678],{"type":37,"value":679},"    APPROX_COUNT_DISTINCT",{"type":32,"tag":135,"props":681,"children":682},{"style":148},[683],{"type":37,"value":684},"(device_id) ",{"type":32,"tag":135,"props":686,"children":687},{"style":142},[688],{"type":37,"value":156},{"type":32,"tag":135,"props":690,"children":691},{"style":148},[692],{"type":37,"value":693}," device_count,\n",{"type":32,"tag":135,"props":695,"children":696},{"class":137,"line":191},[697,702,707,711],{"type":32,"tag":135,"props":698,"children":699},{"style":204},[700],{"type":37,"value":701},"    AVG",{"type":32,"tag":135,"props":703,"children":704},{"style":148},[705],{"type":37,"value":706},"(session_duration_sec) ",{"type":32,"tag":135,"props":708,"children":709},{"style":142},[710],{"type":37,"value":156},{"type":32,"tag":135,"props":712,"children":713},{"style":148},[714],{"type":37,"value":715}," avg_session\n",{"type":32,"tag":135,"props":717,"children":718},{"class":137,"line":200},[719,723],{"type":32,"tag":135,"props":720,"children":721},{"style":142},[722],{"type":37,"value":407},{"type":32,"tag":135,"props":724,"children":725},{"style":142},[726],{"type":37,"value":727}," sessions\n",{"type":32,"tag":135,"props":729,"children":730},{"class":137,"line":215},[731,735,740,745,750,755,759,764,769,773],{"type":32,"tag":135,"props":732,"children":733},{"style":142},[734],{"type":37,"value":421},{"type":32,"tag":135,"props":736,"children":737},{"style":142},[738],{"type":37,"value":739}," DATE",{"type":32,"tag":135,"props":741,"children":742},{"style":148},[743],{"type":37,"value":744},"(",{"type":32,"tag":135,"props":746,"children":747},{"style":142},[748],{"type":37,"value":749},"timestamp",{"type":32,"tag":135,"props":751,"children":752},{"style":148},[753],{"type":37,"value":754},") ",{"type":32,"tag":135,"props":756,"children":757},{"style":142},[758],{"type":37,"value":345},{"type":32,"tag":135,"props":760,"children":761},{"style":148},[762],{"type":37,"value":763}," DATE_SUB(CURRENT_DATE(), INTERVAL ",{"type":32,"tag":135,"props":765,"children":766},{"style":204},[767],{"type":37,"value":768},"30",{"type":32,"tag":135,"props":770,"children":771},{"style":142},[772],{"type":37,"value":456},{"type":32,"tag":135,"props":774,"children":775},{"style":148},[776],{"type":37,"value":461},{"type":32,"tag":135,"props":778,"children":779},{"class":137,"line":264},[780,785,790,795,800,804,809,813],{"type":32,"tag":135,"props":781,"children":782},{"style":142},[783],{"type":37,"value":784},"  GROUP BY",{"type":32,"tag":135,"props":786,"children":787},{"style":204},[788],{"type":37,"value":789}," 1",{"type":32,"tag":135,"props":791,"children":792},{"style":148},[793],{"type":37,"value":794},",",{"type":32,"tag":135,"props":796,"children":797},{"style":204},[798],{"type":37,"value":799},"2",{"type":32,"tag":135,"props":801,"children":802},{"style":148},[803],{"type":37,"value":794},{"type":32,"tag":135,"props":805,"children":806},{"style":204},[807],{"type":37,"value":808},"3",{"type":32,"tag":135,"props":810,"children":811},{"style":148},[812],{"type":37,"value":794},{"type":32,"tag":135,"props":814,"children":815},{"style":204},[816],{"type":37,"value":817},"4\n",{"type":32,"tag":135,"props":819,"children":820},{"class":137,"line":26},[821,826,831,836,840,845,850,854,859,863],{"type":32,"tag":135,"props":822,"children":823},{"style":142},[824],{"type":37,"value":825},"  HAVING",{"type":32,"tag":135,"props":827,"children":828},{"style":148},[829],{"type":37,"value":830}," device_count ",{"type":32,"tag":135,"props":832,"children":833},{"style":142},[834],{"type":37,"value":835},"BETWEEN",{"type":32,"tag":135,"props":837,"children":838},{"style":204},[839],{"type":37,"value":789},{"type":32,"tag":135,"props":841,"children":842},{"style":142},[843],{"type":37,"value":844}," AND",{"type":32,"tag":135,"props":846,"children":847},{"style":204},[848],{"type":37,"value":849}," 8",{"type":32,"tag":135,"props":851,"children":852},{"style":142},[853],{"type":37,"value":844},{"type":32,"tag":135,"props":855,"children":856},{"style":148},[857],{"type":37,"value":858}," avg_session ",{"type":32,"tag":135,"props":860,"children":861},{"style":142},[862],{"type":37,"value":345},{"type":32,"tag":135,"props":864,"children":865},{"style":204},[866],{"type":37,"value":867}," 120\n",{"type":32,"tag":135,"props":869,"children":870},{"class":137,"line":383},[871],{"type":32,"tag":135,"props":872,"children":873},{"style":148},[874],{"type":37,"value":461},{"type":32,"tag":135,"props":876,"children":877},{"class":137,"line":401},[878,882,887,892,896],{"type":32,"tag":135,"props":879,"children":880},{"style":142},[881],{"type":37,"value":478},{"type":32,"tag":135,"props":883,"children":884},{"style":142},[885],{"type":37,"value":886}," *",{"type":32,"tag":135,"props":888,"children":889},{"style":148},[890],{"type":37,"value":891},", GENERATE_UUID() ",{"type":32,"tag":135,"props":893,"children":894},{"style":142},[895],{"type":37,"value":156},{"type":32,"tag":135,"props":897,"children":898},{"style":148},[899],{"type":37,"value":900}," household_id\n",{"type":32,"tag":135,"props":902,"children":903},{"class":137,"line":415},[904,908],{"type":32,"tag":135,"props":905,"children":906},{"style":142},[907],{"type":37,"value":576},{"type":32,"tag":135,"props":909,"children":910},{"style":148},[911],{"type":37,"value":912}," network_clusters\n",{"type":32,"tag":33,"props":914,"children":915},{},[916,918,926],{"type":37,"value":917},"Расчёт пожизненной ценности на уровне домохозяйства более осмыслен, потому что покупка бытовой техники — не выбор одного человека, а необходимость для всего дома. В архитектуре ",{"type":32,"tag":52,"props":919,"children":923},{"href":920,"rel":921},"https:\u002F\u002Fwww.roibase.com.tr\u002Fru\u002Fretention-engineering-cdp",[922],"nofollow",[924],{"type":37,"value":925},"CDP и Retention Engineering",{"type":37,"value":927}," сегменты домохозяйства показывают на 23% выше ROAS по сравнению с индивидуальными сегментами — потому что вместо отправки сообщений на один номер телефона с разных устройств домохозяйство становится стратегической целью.",{"type":32,"tag":40,"props":929,"children":931},{"id":930},"связывание-графа-идентичность-растянутая-во-времени",[932],{"type":37,"value":933},"Связывание графа: идентичность, растянутая во времени",{"type":32,"tag":33,"props":935,"children":936},{},[937],{"type":37,"value":938},"График идентичности статичен — пользователь сегодня анонимен, завтра предоставляет адрес электронной почты, через 5 дней входит в систему, через 2 месяца обновляет номер телефона. Каждый новый сигнал \"связывает\" старые фрагменты — то есть старые вероятностные ID'ы объединяются с новым детерминированным хешем.",{"type":32,"tag":33,"props":940,"children":941},{},[942,944,950,952,958],{"type":37,"value":943},"Вы решаете это в event-driven архитектуре: каждое событие ",{"type":32,"tag":61,"props":945,"children":947},{"className":946},[],[948],{"type":37,"value":949},"user_identified",{"type":37,"value":951}," падает в Pub\u002FSub, вызывается Cloud Function, в BigQuery запускается оператор ",{"type":32,"tag":61,"props":953,"children":955},{"className":954},[],[956],{"type":37,"value":957},"MERGE",{"type":37,"value":959},". Например, пользователь входит в систему → поступает хеш email → все вероятностные ID'ы, созданные с этого же отпечатка устройства за последние 90 дней, связываются с этим хешем. Эта операция backfill должна идти так далеко в прошлое, как окно атрибуции — если у Вас 30-дневное окно конверсии, связывайте на 30 дней в прошлое.",{"type":32,"tag":125,"props":961,"children":963},{"className":127,"code":962,"language":129,"meta":16,"style":16},"MERGE INTO unified_identity AS target\nUSING (\n  SELECT probabilistic_id, email_sha256, MAX(timestamp) AS last_seen\n  FROM identification_events\n  WHERE event_name = 'user_login'\n  GROUP BY 1,2\n) AS source\nON target.probabilistic_id = source.probabilistic_id\nWHEN MATCHED THEN UPDATE SET \n  target.email_sha256 = source.email_sha256,\n  target.is_deterministic = TRUE,\n  target.stitched_at = CURRENT_TIMESTAMP()\n",[964],{"type":32,"tag":61,"props":965,"children":966},{"__ignoreMap":16},[967,993,1005,1043,1055,1078,1098,1114,1154,1185,1223,1248],{"type":32,"tag":135,"props":968,"children":969},{"class":137,"line":138},[970,974,979,984,988],{"type":32,"tag":135,"props":971,"children":972},{"style":142},[973],{"type":37,"value":957},{"type":32,"tag":135,"props":975,"children":976},{"style":142},[977],{"type":37,"value":978}," INTO",{"type":32,"tag":135,"props":980,"children":981},{"style":148},[982],{"type":37,"value":983}," unified_identity ",{"type":32,"tag":135,"props":985,"children":986},{"style":142},[987],{"type":37,"value":156},{"type":32,"tag":135,"props":989,"children":990},{"style":142},[991],{"type":37,"value":992}," target\n",{"type":32,"tag":135,"props":994,"children":995},{"class":137,"line":164},[996,1001],{"type":32,"tag":135,"props":997,"children":998},{"style":142},[999],{"type":37,"value":1000},"USING",{"type":32,"tag":135,"props":1002,"children":1003},{"style":148},[1004],{"type":37,"value":161},{"type":32,"tag":135,"props":1006,"children":1007},{"class":137,"line":173},[1008,1012,1017,1022,1026,1030,1034,1038],{"type":32,"tag":135,"props":1009,"children":1010},{"style":142},[1011],{"type":37,"value":666},{"type":32,"tag":135,"props":1013,"children":1014},{"style":148},[1015],{"type":37,"value":1016}," probabilistic_id, email_sha256, ",{"type":32,"tag":135,"props":1018,"children":1019},{"style":204},[1020],{"type":37,"value":1021},"MAX",{"type":32,"tag":135,"props":1023,"children":1024},{"style":148},[1025],{"type":37,"value":744},{"type":32,"tag":135,"props":1027,"children":1028},{"style":142},[1029],{"type":37,"value":749},{"type":32,"tag":135,"props":1031,"children":1032},{"style":148},[1033],{"type":37,"value":754},{"type":32,"tag":135,"props":1035,"children":1036},{"style":142},[1037],{"type":37,"value":156},{"type":32,"tag":135,"props":1039,"children":1040},{"style":148},[1041],{"type":37,"value":1042}," last_seen\n",{"type":32,"tag":135,"props":1044,"children":1045},{"class":137,"line":182},[1046,1050],{"type":32,"tag":135,"props":1047,"children":1048},{"style":142},[1049],{"type":37,"value":407},{"type":32,"tag":135,"props":1051,"children":1052},{"style":148},[1053],{"type":37,"value":1054}," identification_events\n",{"type":32,"tag":135,"props":1056,"children":1057},{"class":137,"line":191},[1058,1062,1067,1072],{"type":32,"tag":135,"props":1059,"children":1060},{"style":142},[1061],{"type":37,"value":421},{"type":32,"tag":135,"props":1063,"children":1064},{"style":148},[1065],{"type":37,"value":1066}," event_name ",{"type":32,"tag":135,"props":1068,"children":1069},{"style":142},[1070],{"type":37,"value":1071},"=",{"type":32,"tag":135,"props":1073,"children":1075},{"style":1074},"--shiki-default:#9ECBFF",[1076],{"type":37,"value":1077}," 'user_login'\n",{"type":32,"tag":135,"props":1079,"children":1080},{"class":137,"line":200},[1081,1085,1089,1093],{"type":32,"tag":135,"props":1082,"children":1083},{"style":142},[1084],{"type":37,"value":784},{"type":32,"tag":135,"props":1086,"children":1087},{"style":204},[1088],{"type":37,"value":789},{"type":32,"tag":135,"props":1090,"children":1091},{"style":148},[1092],{"type":37,"value":794},{"type":32,"tag":135,"props":1094,"children":1095},{"style":204},[1096],{"type":37,"value":1097},"2\n",{"type":32,"tag":135,"props":1099,"children":1100},{"class":137,"line":215},[1101,1105,1109],{"type":32,"tag":135,"props":1102,"children":1103},{"style":148},[1104],{"type":37,"value":754},{"type":32,"tag":135,"props":1106,"children":1107},{"style":142},[1108],{"type":37,"value":156},{"type":32,"tag":135,"props":1110,"children":1111},{"style":148},[1112],{"type":37,"value":1113}," source\n",{"type":32,"tag":135,"props":1115,"children":1116},{"class":137,"line":264},[1117,1122,1127,1131,1135,1140,1145,1149],{"type":32,"tag":135,"props":1118,"children":1119},{"style":142},[1120],{"type":37,"value":1121},"ON",{"type":32,"tag":135,"props":1123,"children":1124},{"style":204},[1125],{"type":37,"value":1126}," target",{"type":32,"tag":135,"props":1128,"children":1129},{"style":148},[1130],{"type":37,"value":118},{"type":32,"tag":135,"props":1132,"children":1133},{"style":204},[1134],{"type":37,"value":116},{"type":32,"tag":135,"props":1136,"children":1137},{"style":142},[1138],{"type":37,"value":1139}," =",{"type":32,"tag":135,"props":1141,"children":1142},{"style":204},[1143],{"type":37,"value":1144}," source",{"type":32,"tag":135,"props":1146,"children":1147},{"style":148},[1148],{"type":37,"value":118},{"type":32,"tag":135,"props":1150,"children":1151},{"style":204},[1152],{"type":37,"value":1153},"probabilistic_id\n",{"type":32,"tag":135,"props":1155,"children":1156},{"class":137,"line":26},[1157,1162,1167,1171,1176,1181],{"type":32,"tag":135,"props":1158,"children":1159},{"style":142},[1160],{"type":37,"value":1161},"WHEN",{"type":32,"tag":135,"props":1163,"children":1164},{"style":142},[1165],{"type":37,"value":1166}," MATCHED",{"type":32,"tag":135,"props":1168,"children":1169},{"style":142},[1170],{"type":37,"value":303},{"type":32,"tag":135,"props":1172,"children":1173},{"style":142},[1174],{"type":37,"value":1175}," UPDATE",{"type":32,"tag":135,"props":1177,"children":1178},{"style":142},[1179],{"type":37,"value":1180}," SET",{"type":32,"tag":135,"props":1182,"children":1183},{"style":148},[1184],{"type":37,"value":516},{"type":32,"tag":135,"props":1186,"children":1187},{"class":137,"line":383},[1188,1193,1197,1202,1206,1210,1214,1218],{"type":32,"tag":135,"props":1189,"children":1190},{"style":204},[1191],{"type":37,"value":1192},"  target",{"type":32,"tag":135,"props":1194,"children":1195},{"style":148},[1196],{"type":37,"value":118},{"type":32,"tag":135,"props":1198,"children":1199},{"style":204},[1200],{"type":37,"value":1201},"email_sha256",{"type":32,"tag":135,"props":1203,"children":1204},{"style":142},[1205],{"type":37,"value":1139},{"type":32,"tag":135,"props":1207,"children":1208},{"style":204},[1209],{"type":37,"value":1144},{"type":32,"tag":135,"props":1211,"children":1212},{"style":148},[1213],{"type":37,"value":118},{"type":32,"tag":135,"props":1215,"children":1216},{"style":204},[1217],{"type":37,"value":1201},{"type":32,"tag":135,"props":1219,"children":1220},{"style":148},[1221],{"type":37,"value":1222},",\n",{"type":32,"tag":135,"props":1224,"children":1225},{"class":137,"line":401},[1226,1230,1234,1239,1243],{"type":32,"tag":135,"props":1227,"children":1228},{"style":204},[1229],{"type":37,"value":1192},{"type":32,"tag":135,"props":1231,"children":1232},{"style":148},[1233],{"type":37,"value":118},{"type":32,"tag":135,"props":1235,"children":1236},{"style":204},[1237],{"type":37,"value":1238},"is_deterministic",{"type":32,"tag":135,"props":1240,"children":1241},{"style":142},[1242],{"type":37,"value":1139},{"type":32,"tag":135,"props":1244,"children":1245},{"style":148},[1246],{"type":37,"value":1247}," TRUE,\n",{"type":32,"tag":135,"props":1249,"children":1250},{"class":137,"line":415},[1251,1255,1259,1264,1268,1273],{"type":32,"tag":135,"props":1252,"children":1253},{"style":204},[1254],{"type":37,"value":1192},{"type":32,"tag":135,"props":1256,"children":1257},{"style":148},[1258],{"type":37,"value":118},{"type":32,"tag":135,"props":1260,"children":1261},{"style":204},[1262],{"type":37,"value":1263},"stitched_at",{"type":32,"tag":135,"props":1265,"children":1266},{"style":142},[1267],{"type":37,"value":1139},{"type":32,"tag":135,"props":1269,"children":1270},{"style":204},[1271],{"type":37,"value":1272}," CURRENT_TIMESTAMP",{"type":32,"tag":135,"props":1274,"children":1275},{"style":148},[1276],{"type":37,"value":1277},"()\n",{"type":32,"tag":33,"props":1279,"children":1280},{},[1281,1283,1289,1291,1297],{"type":37,"value":1282},"Связывание несёт риск race condition — если пользователь одновременно входит с двух устройств, две попытки слияния разных хешей могут конфликтовать. Это решается блокировкой транзакции или ключом идемпотентности. Ключ идемпотентности обычно — это ",{"type":32,"tag":61,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":37,"value":1288},"device_id + timestamp_truncated_to_second",{"type":37,"value":1290}," — два события ",{"type":32,"tag":61,"props":1292,"children":1294},{"className":1293},[],[1295],{"type":37,"value":1296},"user_login",{"type":37,"value":1298}," с одного устройства в течение одной секунды считаются дубликатом и запускают только одно слияние.",{"type":32,"tag":40,"props":1300,"children":1302},{"id":1301},"приватность-и-соответствие-нормам-хешированные-pii-и-минимизация-данных",[1303],{"type":37,"value":1304},"Приватность и соответствие нормам: хешированные PII и минимизация данных",{"type":32,"tag":33,"props":1306,"children":1307},{},[1308,1310,1316,1318,1324],{"type":37,"value":1309},"Разрешение идентичности в контексте KVKK и GDPR попадает в категорию \"автоматизированное принятие решений\" и \"профилирование\" — это означает, что без явного согласия это делать нельзя. Если от платформы управления согласием (OneTrust, Cookiebot) не приходит сигнал ",{"type":32,"tag":61,"props":1311,"children":1313},{"className":1312},[],[1314],{"type":37,"value":1315},"analytics_storage=granted",{"type":37,"value":1317},", Вы не можете даже взять хеш. В Consent Mode v2 при базовом согласии параметр ",{"type":32,"tag":61,"props":1319,"children":1321},{"className":1320},[],[1322],{"type":37,"value":1323},"user_data",{"type":37,"value":1325}," остаётся пустым, хеш добавляется только при расширенном согласии.",{"type":32,"tag":33,"props":1327,"children":1328},{},[1329,1331,1337,1339,1344],{"type":37,"value":1330},"Хеш не считается PII, а считается псевдонимизацией — это означает, что по GDPR \"право на забывчивость\" распространяется и на хеши. Когда поступает запрос на удаление, Вы должны запустить оператор ",{"type":32,"tag":61,"props":1332,"children":1334},{"className":1333},[],[1335],{"type":37,"value":1336},"DELETE",{"type":37,"value":1338}," на основе ",{"type":32,"tag":61,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":37,"value":1201},{"type":37,"value":1345}," в BigQuery, и это удаление должно распространиться на downstream системы (CDP, CRM). По этой причине таблица отображения хешей должна быть централизована — в распределённых системах хеши не должны быть разбросаны; они должны быть производными из единого источника истины.",{"type":32,"tag":33,"props":1347,"children":1348},{},[1349],{"type":37,"value":1350},"Принцип минимизации данных должен ограничить граф идентичности периодом в 90 дней. Вероятностные ID'ы старше 90 дней должны быть перенесены в архив, долгосрочно должны храниться только детерминированные хеши. Это критично как для соответствия нормам, так и для снижения затрат на хранилище — если применить partition pruning с 90-дневным скользящим окном в BigQuery, стоимость запроса снижается на 60%.",{"type":32,"tag":40,"props":1352,"children":1354},{"id":1353},"архитектура-production-pipeline-гибрид-batch-streaming",[1355],{"type":37,"value":1356},"Архитектура production pipeline: гибрид batch + streaming",{"type":32,"tag":33,"props":1358,"children":1359},{},[1360],{"type":37,"value":1361},"Pipeline разрешения идентичности работает на двух уровнях: streaming layer (сбор сигналов в реальном времени) и batch layer (связывание по ночам). Streaming layer работает через Pub\u002FSub → Dataflow → BigQuery с latency \u003C10 секунд. Batch layer запускается в 04:00 UTC с помощью dbt, на этом уровне выполняются все операции связывания графа и кластеризации домохозяйства.",{"type":32,"tag":33,"props":1363,"children":1364},{},[1365,1367,1373],{"type":37,"value":1366},"На streaming layer'е собираются только сигналы — хеш-сопоставление и вероятностное подсчёт не выполняются, потому что сложные JOIN'ы в streaming'е дорогие. События записываются в Firestore с уникальным ограничением на ",{"type":32,"tag":61,"props":1368,"children":1370},{"className":1369},[],[1371],{"type":37,"value":1372},"event_id",{"type":37,"value":1374},", что предотвращает дублирование записей. Batch layer читает эти события и преобразует их в размерную модель в BigQuery. Макросы dbt связывают генерацию хешей, расчёт оценок и слияние графа в один pipeline.",{"type":32,"tag":33,"props":1376,"children":1377},{},[1378,1380,1386],{"type":37,"value":1379},"Для мониторинга критична метрика coverage графа: ",{"type":32,"tag":61,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":37,"value":1385},"identified_users \u002F total_active_users",{"type":37,"value":1387},". Если она ниже 40%, это означает недостаток детерминированных сигналов — нужно оптимизировать flow входа, сосредоточиться на захвате email в формах лидов. Если выше 75%, это считается здоровым. Эта метрика определяется как dbt тест",{"type":32,"tag":1389,"props":1390,"children":1391},"style",{},[1392],{"type":37,"value":1393},"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":173,"depth":173,"links":1395},[1396,1397,1398,1399,1400,1401],{"id":42,"depth":164,"text":45},{"id":97,"depth":164,"text":100},{"id":589,"depth":164,"text":592},{"id":930,"depth":164,"text":933},{"id":1301,"depth":164,"text":1304},{"id":1353,"depth":164,"text":1356},"markdown","content:ru:data:identity-resolution-6-signalov-k-edinomu-identifikacionnomu-kodu-polzovatelya.md","content","ru\u002Fdata\u002Fidentity-resolution-6-signalov-k-edinomu-identifikacionnomu-kodu-polzovatelya.md","ru\u002Fdata\u002Fidentity-resolution-6-signalov-k-edinomu-identifikacionnomu-kodu-polzovatelya","md",1778709808810]