[{"data":1,"prerenderedAt":1422},["ShallowReactive",2],{"article-alternates":3,"article-\u002Ftr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine":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":12,"_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":1416,"_id":1417,"_source":1418,"_file":1419,"_stem":1420,"_extension":1421},"data",false,"","Identity Resolution: 6 Sinyalden Tek Müşteri Kimliğine","Hash matching, probabilistic linking ve household identity ile dağınık sinyalleri tek müşteri kimliğine dönüştüren modern çözüm mimarileri.","2026-05-12",[21,22,23,24,25],"identity-resolution","hash-matching","probabilistic-linking","cdp","first-party-data",8,"Roibase",{"type":29,"children":30,"toc":1408},"root",[31,39,46,69,74,95,101,106,119,124,583,588,594,599,604,609,914,929,935,940,961,1279,1300,1306,1327,1347,1352,1358,1363,1376,1397,1402],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Ortalama bir e-ticaret müşterisi satın almaya karar vermeden önce 6 farklı cihazdan 11 touchpoint üzerinden sizi görüyor. GA4 bunları 4 farklı user, CRM 2 farklı lead, e-posta platformu 1 subscriber olarak kaydediyor. Cookie sonrası dünyada bu parçaları birleştirmeden attribution imkansız, segmentasyon anlamsız, müşteri yaşam boyu değeri hesaplanamaz. Identity resolution bu parçaları birleştiren data engineering disiplini — deterministik hash matching'den probabilistic linking'e kadar 3 katmanlı mimari gerektiriyor.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"hash-matching-deterministik-kimlik-omurgası",[44],{"type":37,"value":45},"Hash Matching: Deterministik Kimlik Omurgası",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,67],{"type":37,"value":50},"Deterministik eşleşme SHA-256 hash üzerinden çalışır. E-posta adresi \"",{"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},"\" → hash \"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8\" → her sistemde aynı hash varsa aynı kişi. Server-side GTM event payload'ına kullanıcı login olduğu anda ",{"type":32,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":37,"value":66},"user_data.email_sha256",{"type":37,"value":68}," parametresi ekliyorsun, BigQuery'de bu hash üzerinden web session + CRM lead + Klaviyo subscriber tek satırda birleşiyor.",{"type":32,"tag":33,"props":70,"children":71},{},[72],{"type":37,"value":73},"İki kritik nokta: hash salt stratejisi ve collision riski. Salt kullanmadan direkt hash alırsan rainbow table attack riski var ama pazarlama data pipeline'ında salt her sistemde tutarlı olmalı yoksa aynı e-posta farklı hash üretir. Collision riski SHA-256'da teorik — 2^256 uzayında pratik çakışma yok ama telefon numarası gibi düşük entropi alanlarında determinizm zayıflıyor. Bu yüzden e-posta + telefon kombinasyonu daha güvenli omurga oluşturuyor.",{"type":32,"tag":33,"props":75,"children":76},{},[77,79,85,87,93],{"type":37,"value":78},"Klaviyo'dan BigQuery'ye veri çekerken ",{"type":32,"tag":61,"props":80,"children":82},{"className":81},[],[83],{"type":37,"value":84},"user_properties.email_sha256",{"type":37,"value":86}," sütunu ekleyip dbt model'inde ",{"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}," yapıyorsun. Böylece anonim web session ile subscriber profili tek satıra düşüyor. Snapshot tablo stratejisi önemli — hash eşleşmeleri günlük snapshot'larda saklanmalı çünkü kullanıcı e-posta değiştirdiğinde geçmiş eşleşmeler kaybolmamalı.",{"type":32,"tag":40,"props":96,"children":98},{"id":97},"probabilistic-linking-fuzzy-logic-ile-sinyal-birleştirme",[99],{"type":37,"value":100},"Probabilistic Linking: Fuzzy Logic ile Sinyal Birleştirme",{"type":32,"tag":33,"props":102,"children":103},{},[104],{"type":37,"value":105},"Deterministik eşleşme cookie'siz mobil web'de yetersiz kalıyor. Kullanıcı login olmadan çıkış yapıyor, e-posta vermiyor ama IP + user agent + timezone + language kombinasyonu %87 ihtimalle aynı kişi. Burada probabilistic identity graph devreye giriyor — Bayesian probability ile sinyal ağırlıklandırması yapıyorsun.",{"type":32,"tag":33,"props":107,"children":108},{},[109,111,117],{"type":37,"value":110},"Altı temel sinyal katmanı var: device fingerprint (canvas hash, WebGL renderer), network layer (IP subnet, ASN), behavioral pattern (session duration, path sequence), geolocation (GPS lat\u002Flong clustering), temporal signal (active hour pattern) ve contextual metadata (referrer domain, UTM consistency). Her sinyal 0-100 confidence score alıyor, ağırlıklı toplam 70'in üzerindeyse geçici bir ",{"type":32,"tag":61,"props":112,"children":114},{"className":113},[],[115],{"type":37,"value":116},"probabilistic_id",{"type":37,"value":118}," atanıyor.",{"type":32,"tag":33,"props":120,"children":121},{},[122],{"type":37,"value":123},"BigQuery'de bunu şöyle modelliyorsun:",{"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,324,382,400,414,463,471,485,518,532,550,569],{"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":264},{"class":137,"line":26},[265,269,273,278,283,288,293,298,303,308,312,316,320],{"type":32,"tag":135,"props":266,"children":267},{"style":142},[268],{"type":37,"value":221},{"type":32,"tag":135,"props":270,"children":271},{"style":142},[272],{"type":37,"value":226},{"type":32,"tag":135,"props":274,"children":275},{"style":148},[276],{"type":37,"value":277}," ip_subnet_match ",{"type":32,"tag":135,"props":279,"children":280},{"style":142},[281],{"type":37,"value":282},"AND",{"type":32,"tag":135,"props":284,"children":285},{"style":148},[286],{"type":37,"value":287}," hour_diff ",{"type":32,"tag":135,"props":289,"children":290},{"style":142},[291],{"type":37,"value":292},"\u003C",{"type":32,"tag":135,"props":294,"children":295},{"style":204},[296],{"type":37,"value":297}," 4",{"type":32,"tag":135,"props":299,"children":300},{"style":142},[301],{"type":37,"value":302}," THEN",{"type":32,"tag":135,"props":304,"children":305},{"style":204},[306],{"type":37,"value":307}," 25",{"type":32,"tag":135,"props":309,"children":310},{"style":142},[311],{"type":37,"value":246},{"type":32,"tag":135,"props":313,"children":314},{"style":204},[315],{"type":37,"value":251},{"type":32,"tag":135,"props":317,"children":318},{"style":142},[319],{"type":37,"value":256},{"type":32,"tag":135,"props":321,"children":322},{"style":142},[323],{"type":37,"value":261},{"type":32,"tag":135,"props":325,"children":327},{"class":137,"line":326},9,[328,332,336,341,346,350,355,360,364,369,373,377],{"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":354},".",{"type":32,"tag":135,"props":356,"children":357},{"style":204},[358],{"type":37,"value":359},"8",{"type":32,"tag":135,"props":361,"children":362},{"style":142},[363],{"type":37,"value":302},{"type":32,"tag":135,"props":365,"children":366},{"style":204},[367],{"type":37,"value":368}," 20",{"type":32,"tag":135,"props":370,"children":371},{"style":142},[372],{"type":37,"value":246},{"type":32,"tag":135,"props":374,"children":375},{"style":204},[376],{"type":37,"value":251},{"type":32,"tag":135,"props":378,"children":379},{"style":142},[380],{"type":37,"value":381}," END\n",{"type":32,"tag":135,"props":383,"children":385},{"class":137,"line":384},10,[386,391,395],{"type":32,"tag":135,"props":387,"children":388},{"style":148},[389],{"type":37,"value":390},"    ) ",{"type":32,"tag":135,"props":392,"children":393},{"style":142},[394],{"type":37,"value":156},{"type":32,"tag":135,"props":396,"children":397},{"style":148},[398],{"type":37,"value":399}," total_confidence\n",{"type":32,"tag":135,"props":401,"children":403},{"class":137,"line":402},11,[404,409],{"type":32,"tag":135,"props":405,"children":406},{"style":142},[407],{"type":37,"value":408},"  FROM",{"type":32,"tag":135,"props":410,"children":411},{"style":148},[412],{"type":37,"value":413}," event_stream\n",{"type":32,"tag":135,"props":415,"children":417},{"class":137,"line":416},12,[418,423,428,433,438,443,448,453,458],{"type":32,"tag":135,"props":419,"children":420},{"style":142},[421],{"type":37,"value":422},"  WHERE",{"type":32,"tag":135,"props":424,"children":425},{"style":142},[426],{"type":37,"value":427}," timestamp",{"type":32,"tag":135,"props":429,"children":430},{"style":142},[431],{"type":37,"value":432}," >",{"type":32,"tag":135,"props":434,"children":435},{"style":148},[436],{"type":37,"value":437}," TIMESTAMP_SUB(",{"type":32,"tag":135,"props":439,"children":440},{"style":204},[441],{"type":37,"value":442},"CURRENT_TIMESTAMP",{"type":32,"tag":135,"props":444,"children":445},{"style":148},[446],{"type":37,"value":447},"(), INTERVAL ",{"type":32,"tag":135,"props":449,"children":450},{"style":204},[451],{"type":37,"value":452},"7",{"type":32,"tag":135,"props":454,"children":455},{"style":142},[456],{"type":37,"value":457}," DAY",{"type":32,"tag":135,"props":459,"children":460},{"style":148},[461],{"type":37,"value":462},")\n",{"type":32,"tag":135,"props":464,"children":466},{"class":137,"line":465},13,[467],{"type":32,"tag":135,"props":468,"children":469},{"style":148},[470],{"type":37,"value":462},{"type":32,"tag":135,"props":472,"children":474},{"class":137,"line":473},14,[475,480],{"type":32,"tag":135,"props":476,"children":477},{"style":142},[478],{"type":37,"value":479},"SELECT",{"type":32,"tag":135,"props":481,"children":482},{"style":148},[483],{"type":37,"value":484}," session_id, device_fingerprint, total_confidence,\n",{"type":32,"tag":135,"props":486,"children":488},{"class":137,"line":487},15,[489,494,498,503,508,513],{"type":32,"tag":135,"props":490,"children":491},{"style":142},[492],{"type":37,"value":493},"  CASE",{"type":32,"tag":135,"props":495,"children":496},{"style":142},[497],{"type":37,"value":226},{"type":32,"tag":135,"props":499,"children":500},{"style":148},[501],{"type":37,"value":502}," total_confidence ",{"type":32,"tag":135,"props":504,"children":505},{"style":142},[506],{"type":37,"value":507},">=",{"type":32,"tag":135,"props":509,"children":510},{"style":204},[511],{"type":37,"value":512}," 70",{"type":32,"tag":135,"props":514,"children":515},{"style":148},[516],{"type":37,"value":517}," \n",{"type":32,"tag":135,"props":519,"children":521},{"class":137,"line":520},16,[522,527],{"type":32,"tag":135,"props":523,"children":524},{"style":142},[525],{"type":37,"value":526},"    THEN",{"type":32,"tag":135,"props":528,"children":529},{"style":148},[530],{"type":37,"value":531}," GENERATE_UUID() \n",{"type":32,"tag":135,"props":533,"children":535},{"class":137,"line":534},17,[536,541,546],{"type":32,"tag":135,"props":537,"children":538},{"style":142},[539],{"type":37,"value":540},"    ELSE",{"type":32,"tag":135,"props":542,"children":543},{"style":142},[544],{"type":37,"value":545}," NULL",{"type":32,"tag":135,"props":547,"children":548},{"style":148},[549],{"type":37,"value":517},{"type":32,"tag":135,"props":551,"children":553},{"class":137,"line":552},18,[554,559,564],{"type":32,"tag":135,"props":555,"children":556},{"style":142},[557],{"type":37,"value":558},"  END",{"type":32,"tag":135,"props":560,"children":561},{"style":142},[562],{"type":37,"value":563}," AS",{"type":32,"tag":135,"props":565,"children":566},{"style":148},[567],{"type":37,"value":568}," probabilistic_id\n",{"type":32,"tag":135,"props":570,"children":572},{"class":137,"line":571},19,[573,578],{"type":32,"tag":135,"props":574,"children":575},{"style":142},[576],{"type":37,"value":577},"FROM",{"type":32,"tag":135,"props":579,"children":580},{"style":148},[581],{"type":37,"value":582}," signal_scores\n",{"type":32,"tag":33,"props":584,"children":585},{},[586],{"type":37,"value":587},"Bu yaklaşımın trade-off'u false positive riski — shared device (ofis bilgisayarı) veya VPN kullanımı farklı kişileri birleştirebiliyor. Bu yüzden probabilistic ID'ler mutlaka deterministic hash ile doğrulanmalı — kullanıcı login olduğu anda hash üzerinden \"merge\" operasyonu yapılıp geçmiş probabilistic session'lar düzeltiliyor.",{"type":32,"tag":40,"props":589,"children":591},{"id":590},"household-identity-cihaz-kümesinden-ev-birimi",[592],{"type":37,"value":593},"Household Identity: Cihaz Kümesinden Ev Birimi",{"type":32,"tag":33,"props":595,"children":596},{},[597],{"type":37,"value":598},"Karar birimi genellikle birey değil, ev. Aynı IP'den 3 cihaz var: MacBook (sabah kadın kullanıyor), iPhone (gün boyu), iPad (akşam çocuk). Bunları tek \"individual\" olarak merge etmek yanlış ama \"household\" olarak gruplamak segmentasyon için kritik — özellikle dayanıklı tüketim ürünlerinde (beyaz eşya, mobilya) satın alma kararı aile seviyesinde alınıyor.",{"type":32,"tag":33,"props":600,"children":601},{},[602],{"type":37,"value":603},"Household graph router\u002Fmodem MAC adresi + IP subnet + GPS konumu üzerinden kuruluyor. Device fingerprint değil network fingerprint baz alınıyor çünkü WiFi router her cihazda aynı gateway MAC'i veriyor. Burada dikkat edilmesi gereken alan public WiFi filtreleme — Starbucks IP'sinden gelen 200 cihazı \"household\" diye gruplarsan model çöküyor. Bunu session count threshold (aynı IP 50+ unique device → blacklist) ve dwelling time pattern (aynı IP'den 2+ saat session yok → retailer\u002Fcafe) ile filtreliyorsun.",{"type":32,"tag":33,"props":605,"children":606},{},[607],{"type":37,"value":608},"BigQuery'de household ID'yi şöyle atıyorsun:",{"type":32,"tag":125,"props":610,"children":612},{"className":127,"code":611,"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",[613],{"type":32,"tag":61,"props":614,"children":615},{"__ignoreMap":16},[616,640,660,673,695,717,729,778,819,869,876,902],{"type":32,"tag":135,"props":617,"children":618},{"class":137,"line":138},[619,624,629,635],{"type":32,"tag":135,"props":620,"children":621},{"style":142},[622],{"type":37,"value":623},"CREATE OR REPLACE",{"type":32,"tag":135,"props":625,"children":626},{"style":142},[627],{"type":37,"value":628}," TABLE",{"type":32,"tag":135,"props":630,"children":632},{"style":631},"--shiki-default:#B392F0",[633],{"type":37,"value":634}," households",{"type":32,"tag":135,"props":636,"children":637},{"style":142},[638],{"type":37,"value":639}," AS\n",{"type":32,"tag":135,"props":641,"children":642},{"class":137,"line":164},[643,647,652,656],{"type":32,"tag":135,"props":644,"children":645},{"style":142},[646],{"type":37,"value":145},{"type":32,"tag":135,"props":648,"children":649},{"style":148},[650],{"type":37,"value":651}," network_clusters ",{"type":32,"tag":135,"props":653,"children":654},{"style":142},[655],{"type":37,"value":156},{"type":32,"tag":135,"props":657,"children":658},{"style":148},[659],{"type":37,"value":161},{"type":32,"tag":135,"props":661,"children":662},{"class":137,"line":173},[663,668],{"type":32,"tag":135,"props":664,"children":665},{"style":142},[666],{"type":37,"value":667},"  SELECT",{"type":32,"tag":135,"props":669,"children":670},{"style":148},[671],{"type":37,"value":672}," ip_subnet, router_mac, GPS_lat, GPS_long,\n",{"type":32,"tag":135,"props":674,"children":675},{"class":137,"line":182},[676,681,686,690],{"type":32,"tag":135,"props":677,"children":678},{"style":204},[679],{"type":37,"value":680},"    APPROX_COUNT_DISTINCT",{"type":32,"tag":135,"props":682,"children":683},{"style":148},[684],{"type":37,"value":685},"(device_id) ",{"type":32,"tag":135,"props":687,"children":688},{"style":142},[689],{"type":37,"value":156},{"type":32,"tag":135,"props":691,"children":692},{"style":148},[693],{"type":37,"value":694}," device_count,\n",{"type":32,"tag":135,"props":696,"children":697},{"class":137,"line":191},[698,703,708,712],{"type":32,"tag":135,"props":699,"children":700},{"style":204},[701],{"type":37,"value":702},"    AVG",{"type":32,"tag":135,"props":704,"children":705},{"style":148},[706],{"type":37,"value":707},"(session_duration_sec) ",{"type":32,"tag":135,"props":709,"children":710},{"style":142},[711],{"type":37,"value":156},{"type":32,"tag":135,"props":713,"children":714},{"style":148},[715],{"type":37,"value":716}," avg_session\n",{"type":32,"tag":135,"props":718,"children":719},{"class":137,"line":200},[720,724],{"type":32,"tag":135,"props":721,"children":722},{"style":142},[723],{"type":37,"value":408},{"type":32,"tag":135,"props":725,"children":726},{"style":142},[727],{"type":37,"value":728}," sessions\n",{"type":32,"tag":135,"props":730,"children":731},{"class":137,"line":215},[732,736,741,746,751,756,760,765,770,774],{"type":32,"tag":135,"props":733,"children":734},{"style":142},[735],{"type":37,"value":422},{"type":32,"tag":135,"props":737,"children":738},{"style":142},[739],{"type":37,"value":740}," DATE",{"type":32,"tag":135,"props":742,"children":743},{"style":148},[744],{"type":37,"value":745},"(",{"type":32,"tag":135,"props":747,"children":748},{"style":142},[749],{"type":37,"value":750},"timestamp",{"type":32,"tag":135,"props":752,"children":753},{"style":148},[754],{"type":37,"value":755},") ",{"type":32,"tag":135,"props":757,"children":758},{"style":142},[759],{"type":37,"value":345},{"type":32,"tag":135,"props":761,"children":762},{"style":148},[763],{"type":37,"value":764}," DATE_SUB(CURRENT_DATE(), INTERVAL ",{"type":32,"tag":135,"props":766,"children":767},{"style":204},[768],{"type":37,"value":769},"30",{"type":32,"tag":135,"props":771,"children":772},{"style":142},[773],{"type":37,"value":457},{"type":32,"tag":135,"props":775,"children":776},{"style":148},[777],{"type":37,"value":462},{"type":32,"tag":135,"props":779,"children":780},{"class":137,"line":26},[781,786,791,796,801,805,810,814],{"type":32,"tag":135,"props":782,"children":783},{"style":142},[784],{"type":37,"value":785},"  GROUP BY",{"type":32,"tag":135,"props":787,"children":788},{"style":204},[789],{"type":37,"value":790}," 1",{"type":32,"tag":135,"props":792,"children":793},{"style":148},[794],{"type":37,"value":795},",",{"type":32,"tag":135,"props":797,"children":798},{"style":204},[799],{"type":37,"value":800},"2",{"type":32,"tag":135,"props":802,"children":803},{"style":148},[804],{"type":37,"value":795},{"type":32,"tag":135,"props":806,"children":807},{"style":204},[808],{"type":37,"value":809},"3",{"type":32,"tag":135,"props":811,"children":812},{"style":148},[813],{"type":37,"value":795},{"type":32,"tag":135,"props":815,"children":816},{"style":204},[817],{"type":37,"value":818},"4\n",{"type":32,"tag":135,"props":820,"children":821},{"class":137,"line":326},[822,827,832,837,841,846,851,855,860,864],{"type":32,"tag":135,"props":823,"children":824},{"style":142},[825],{"type":37,"value":826},"  HAVING",{"type":32,"tag":135,"props":828,"children":829},{"style":148},[830],{"type":37,"value":831}," device_count ",{"type":32,"tag":135,"props":833,"children":834},{"style":142},[835],{"type":37,"value":836},"BETWEEN",{"type":32,"tag":135,"props":838,"children":839},{"style":204},[840],{"type":37,"value":790},{"type":32,"tag":135,"props":842,"children":843},{"style":142},[844],{"type":37,"value":845}," AND",{"type":32,"tag":135,"props":847,"children":848},{"style":204},[849],{"type":37,"value":850}," 8",{"type":32,"tag":135,"props":852,"children":853},{"style":142},[854],{"type":37,"value":845},{"type":32,"tag":135,"props":856,"children":857},{"style":148},[858],{"type":37,"value":859}," avg_session ",{"type":32,"tag":135,"props":861,"children":862},{"style":142},[863],{"type":37,"value":345},{"type":32,"tag":135,"props":865,"children":866},{"style":204},[867],{"type":37,"value":868}," 120\n",{"type":32,"tag":135,"props":870,"children":871},{"class":137,"line":384},[872],{"type":32,"tag":135,"props":873,"children":874},{"style":148},[875],{"type":37,"value":462},{"type":32,"tag":135,"props":877,"children":878},{"class":137,"line":402},[879,883,888,893,897],{"type":32,"tag":135,"props":880,"children":881},{"style":142},[882],{"type":37,"value":479},{"type":32,"tag":135,"props":884,"children":885},{"style":142},[886],{"type":37,"value":887}," *",{"type":32,"tag":135,"props":889,"children":890},{"style":148},[891],{"type":37,"value":892},", GENERATE_UUID() ",{"type":32,"tag":135,"props":894,"children":895},{"style":142},[896],{"type":37,"value":156},{"type":32,"tag":135,"props":898,"children":899},{"style":148},[900],{"type":37,"value":901}," household_id\n",{"type":32,"tag":135,"props":903,"children":904},{"class":137,"line":416},[905,909],{"type":32,"tag":135,"props":906,"children":907},{"style":142},[908],{"type":37,"value":577},{"type":32,"tag":135,"props":910,"children":911},{"style":148},[912],{"type":37,"value":913}," network_clusters\n",{"type":32,"tag":33,"props":915,"children":916},{},[917,919,927],{"type":37,"value":918},"Household seviyesinde lifetime value hesaplaması daha anlamlı çünkü beyaz eşya alımı tek kişi yapsın diye değil, ev için yapılıyor. ",{"type":32,"tag":52,"props":920,"children":924},{"href":921,"rel":922},"https:\u002F\u002Fwww.roibase.com.tr\u002Ftr\u002Fretention-engineering-cdp",[923],"nofollow",[925],{"type":37,"value":926},"CDP & Retention Engineering",{"type":37,"value":928}," mimarisinde household segment'ler kampanya hedeflemede bireysel segmentlerden %23 daha yüksek ROAS veriyor — çünkü tek bir telefon numarası farklı cihazlara mesaj göndermek yerine ev birimi stratejik hedefe dönüşüyor.",{"type":32,"tag":40,"props":930,"children":932},{"id":931},"graph-stitching-zamana-yayılı-kimlik-birleşimi",[933],{"type":37,"value":934},"Graph Stitching: Zamana Yayılı Kimlik Birleşimi",{"type":32,"tag":33,"props":936,"children":937},{},[938],{"type":37,"value":939},"Identity graph statik değil — kullanıcı bugün anonim, yarın e-posta veriyor, 5 gün sonra login oluyor, 2 ay sonra telefon numarasını güncelliyor. Her yeni sinyal geldiğinde geçmiş fragmentler \"stitch\" ediliyor — yani eski probabilistic ID'ler yeni deterministic hash'e merge ediliyor.",{"type":32,"tag":33,"props":941,"children":942},{},[943,945,951,953,959],{"type":37,"value":944},"Bunu event-driven yapıda çözüyorsun: her ",{"type":32,"tag":61,"props":946,"children":948},{"className":947},[],[949],{"type":37,"value":950},"user_identified",{"type":37,"value":952}," event'i Pub\u002FSub'a düşüyor, Cloud Function tetikleniyor, BigQuery'de ",{"type":32,"tag":61,"props":954,"children":956},{"className":955},[],[957],{"type":37,"value":958},"MERGE",{"type":37,"value":960}," statement çalışıyor. Örneğin kullanıcı login oldu → e-posta hash geldi → son 90 gün içinde aynı device fingerprint ile oluşturulmuş probabilistic ID'ler bu hash'e bağlanıyor. Bu backfill operasyonu attribution penceresi kadar geriye gitmeli — 30 günlük conversion window varsa 30 gün geriye stitch yapmalısın.",{"type":32,"tag":125,"props":962,"children":964},{"className":127,"code":963,"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",[965],{"type":32,"tag":61,"props":966,"children":967},{"__ignoreMap":16},[968,994,1006,1044,1056,1079,1099,1115,1155,1186,1224,1249],{"type":32,"tag":135,"props":969,"children":970},{"class":137,"line":138},[971,975,980,985,989],{"type":32,"tag":135,"props":972,"children":973},{"style":142},[974],{"type":37,"value":958},{"type":32,"tag":135,"props":976,"children":977},{"style":142},[978],{"type":37,"value":979}," INTO",{"type":32,"tag":135,"props":981,"children":982},{"style":148},[983],{"type":37,"value":984}," unified_identity ",{"type":32,"tag":135,"props":986,"children":987},{"style":142},[988],{"type":37,"value":156},{"type":32,"tag":135,"props":990,"children":991},{"style":142},[992],{"type":37,"value":993}," target\n",{"type":32,"tag":135,"props":995,"children":996},{"class":137,"line":164},[997,1002],{"type":32,"tag":135,"props":998,"children":999},{"style":142},[1000],{"type":37,"value":1001},"USING",{"type":32,"tag":135,"props":1003,"children":1004},{"style":148},[1005],{"type":37,"value":161},{"type":32,"tag":135,"props":1007,"children":1008},{"class":137,"line":173},[1009,1013,1018,1023,1027,1031,1035,1039],{"type":32,"tag":135,"props":1010,"children":1011},{"style":142},[1012],{"type":37,"value":667},{"type":32,"tag":135,"props":1014,"children":1015},{"style":148},[1016],{"type":37,"value":1017}," probabilistic_id, email_sha256, ",{"type":32,"tag":135,"props":1019,"children":1020},{"style":204},[1021],{"type":37,"value":1022},"MAX",{"type":32,"tag":135,"props":1024,"children":1025},{"style":148},[1026],{"type":37,"value":745},{"type":32,"tag":135,"props":1028,"children":1029},{"style":142},[1030],{"type":37,"value":750},{"type":32,"tag":135,"props":1032,"children":1033},{"style":148},[1034],{"type":37,"value":755},{"type":32,"tag":135,"props":1036,"children":1037},{"style":142},[1038],{"type":37,"value":156},{"type":32,"tag":135,"props":1040,"children":1041},{"style":148},[1042],{"type":37,"value":1043}," last_seen\n",{"type":32,"tag":135,"props":1045,"children":1046},{"class":137,"line":182},[1047,1051],{"type":32,"tag":135,"props":1048,"children":1049},{"style":142},[1050],{"type":37,"value":408},{"type":32,"tag":135,"props":1052,"children":1053},{"style":148},[1054],{"type":37,"value":1055}," identification_events\n",{"type":32,"tag":135,"props":1057,"children":1058},{"class":137,"line":191},[1059,1063,1068,1073],{"type":32,"tag":135,"props":1060,"children":1061},{"style":142},[1062],{"type":37,"value":422},{"type":32,"tag":135,"props":1064,"children":1065},{"style":148},[1066],{"type":37,"value":1067}," event_name ",{"type":32,"tag":135,"props":1069,"children":1070},{"style":142},[1071],{"type":37,"value":1072},"=",{"type":32,"tag":135,"props":1074,"children":1076},{"style":1075},"--shiki-default:#9ECBFF",[1077],{"type":37,"value":1078}," 'user_login'\n",{"type":32,"tag":135,"props":1080,"children":1081},{"class":137,"line":200},[1082,1086,1090,1094],{"type":32,"tag":135,"props":1083,"children":1084},{"style":142},[1085],{"type":37,"value":785},{"type":32,"tag":135,"props":1087,"children":1088},{"style":204},[1089],{"type":37,"value":790},{"type":32,"tag":135,"props":1091,"children":1092},{"style":148},[1093],{"type":37,"value":795},{"type":32,"tag":135,"props":1095,"children":1096},{"style":204},[1097],{"type":37,"value":1098},"2\n",{"type":32,"tag":135,"props":1100,"children":1101},{"class":137,"line":215},[1102,1106,1110],{"type":32,"tag":135,"props":1103,"children":1104},{"style":148},[1105],{"type":37,"value":755},{"type":32,"tag":135,"props":1107,"children":1108},{"style":142},[1109],{"type":37,"value":156},{"type":32,"tag":135,"props":1111,"children":1112},{"style":148},[1113],{"type":37,"value":1114}," source\n",{"type":32,"tag":135,"props":1116,"children":1117},{"class":137,"line":26},[1118,1123,1128,1132,1136,1141,1146,1150],{"type":32,"tag":135,"props":1119,"children":1120},{"style":142},[1121],{"type":37,"value":1122},"ON",{"type":32,"tag":135,"props":1124,"children":1125},{"style":204},[1126],{"type":37,"value":1127}," target",{"type":32,"tag":135,"props":1129,"children":1130},{"style":148},[1131],{"type":37,"value":354},{"type":32,"tag":135,"props":1133,"children":1134},{"style":204},[1135],{"type":37,"value":116},{"type":32,"tag":135,"props":1137,"children":1138},{"style":142},[1139],{"type":37,"value":1140}," =",{"type":32,"tag":135,"props":1142,"children":1143},{"style":204},[1144],{"type":37,"value":1145}," source",{"type":32,"tag":135,"props":1147,"children":1148},{"style":148},[1149],{"type":37,"value":354},{"type":32,"tag":135,"props":1151,"children":1152},{"style":204},[1153],{"type":37,"value":1154},"probabilistic_id\n",{"type":32,"tag":135,"props":1156,"children":1157},{"class":137,"line":326},[1158,1163,1168,1172,1177,1182],{"type":32,"tag":135,"props":1159,"children":1160},{"style":142},[1161],{"type":37,"value":1162},"WHEN",{"type":32,"tag":135,"props":1164,"children":1165},{"style":142},[1166],{"type":37,"value":1167}," MATCHED",{"type":32,"tag":135,"props":1169,"children":1170},{"style":142},[1171],{"type":37,"value":302},{"type":32,"tag":135,"props":1173,"children":1174},{"style":142},[1175],{"type":37,"value":1176}," UPDATE",{"type":32,"tag":135,"props":1178,"children":1179},{"style":142},[1180],{"type":37,"value":1181}," SET",{"type":32,"tag":135,"props":1183,"children":1184},{"style":148},[1185],{"type":37,"value":517},{"type":32,"tag":135,"props":1187,"children":1188},{"class":137,"line":384},[1189,1194,1198,1203,1207,1211,1215,1219],{"type":32,"tag":135,"props":1190,"children":1191},{"style":204},[1192],{"type":37,"value":1193},"  target",{"type":32,"tag":135,"props":1195,"children":1196},{"style":148},[1197],{"type":37,"value":354},{"type":32,"tag":135,"props":1199,"children":1200},{"style":204},[1201],{"type":37,"value":1202},"email_sha256",{"type":32,"tag":135,"props":1204,"children":1205},{"style":142},[1206],{"type":37,"value":1140},{"type":32,"tag":135,"props":1208,"children":1209},{"style":204},[1210],{"type":37,"value":1145},{"type":32,"tag":135,"props":1212,"children":1213},{"style":148},[1214],{"type":37,"value":354},{"type":32,"tag":135,"props":1216,"children":1217},{"style":204},[1218],{"type":37,"value":1202},{"type":32,"tag":135,"props":1220,"children":1221},{"style":148},[1222],{"type":37,"value":1223},",\n",{"type":32,"tag":135,"props":1225,"children":1226},{"class":137,"line":402},[1227,1231,1235,1240,1244],{"type":32,"tag":135,"props":1228,"children":1229},{"style":204},[1230],{"type":37,"value":1193},{"type":32,"tag":135,"props":1232,"children":1233},{"style":148},[1234],{"type":37,"value":354},{"type":32,"tag":135,"props":1236,"children":1237},{"style":204},[1238],{"type":37,"value":1239},"is_deterministic",{"type":32,"tag":135,"props":1241,"children":1242},{"style":142},[1243],{"type":37,"value":1140},{"type":32,"tag":135,"props":1245,"children":1246},{"style":148},[1247],{"type":37,"value":1248}," TRUE,\n",{"type":32,"tag":135,"props":1250,"children":1251},{"class":137,"line":416},[1252,1256,1260,1265,1269,1274],{"type":32,"tag":135,"props":1253,"children":1254},{"style":204},[1255],{"type":37,"value":1193},{"type":32,"tag":135,"props":1257,"children":1258},{"style":148},[1259],{"type":37,"value":354},{"type":32,"tag":135,"props":1261,"children":1262},{"style":204},[1263],{"type":37,"value":1264},"stitched_at",{"type":32,"tag":135,"props":1266,"children":1267},{"style":142},[1268],{"type":37,"value":1140},{"type":32,"tag":135,"props":1270,"children":1271},{"style":204},[1272],{"type":37,"value":1273}," CURRENT_TIMESTAMP",{"type":32,"tag":135,"props":1275,"children":1276},{"style":148},[1277],{"type":37,"value":1278},"()\n",{"type":32,"tag":33,"props":1280,"children":1281},{},[1282,1284,1290,1292,1298],{"type":37,"value":1283},"Stitching race condition riski taşıyor — aynı kullanıcı 2 cihazdan eşzamanlı login olursa iki farklı hash merge denemesi çakışabiliyor. Bunu transaction lock veya idempotency key ile çözüyorsun. Idempotency key genellikle ",{"type":32,"tag":61,"props":1285,"children":1287},{"className":1286},[],[1288],{"type":37,"value":1289},"device_id + timestamp_truncated_to_second",{"type":37,"value":1291}," oluyor — aynı saniye içinde aynı cihazdan gelen iki ",{"type":32,"tag":61,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":37,"value":1297},"user_login",{"type":37,"value":1299}," eventi duplicate sayılıp tek merge tetikliyor.",{"type":32,"tag":40,"props":1301,"children":1303},{"id":1302},"privacy-compliance-hashed-pii-ve-veri-minimizasyonu",[1304],{"type":37,"value":1305},"Privacy + Compliance: Hashed PII ve Veri Minimizasyonu",{"type":32,"tag":33,"props":1307,"children":1308},{},[1309,1311,1317,1319,1325],{"type":37,"value":1310},"Identity resolution KVKK ve GDPR bağlamında \"automated decision making\" ve \"profiling\" kategorisine düşüyor — yani açık rıza olmadan yapılamaz. Consent Management Platform'dan (OneTrust, Cookiebot) ",{"type":32,"tag":61,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":37,"value":1316},"analytics_storage=granted",{"type":37,"value":1318}," sinyali gelmediyse hash bile alamazsın. Consent Mode v2'de basic consent varken ",{"type":32,"tag":61,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":37,"value":1324},"user_data",{"type":37,"value":1326}," parametresi boş bırakılıyor, enhanced consent sonrası hash ekleniyor.",{"type":32,"tag":33,"props":1328,"children":1329},{},[1330,1332,1337,1339,1345],{"type":37,"value":1331},"Hash PII sayılmaz ama pseudonymization olarak kabul ediliyor — yani GDPR \"right to be forgotten\" kapsamında hash'lerin de silinmesi gerekiyor. BigQuery'de deletion request geldiğinde ",{"type":32,"tag":61,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":37,"value":1202},{"type":37,"value":1338}," üzerinden ",{"type":32,"tag":61,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":37,"value":1344},"DELETE",{"type":37,"value":1346}," statement çalıştırmalısın ve bu silme işlemi downstream sistemlere (CDP, CRM) de yayılmalı. Bu yüzden hash mapping tablosu merkezi olmalı — dağıtık sistemlerde hash scattered halde durmak yerine single source of truth'tan türemeli.",{"type":32,"tag":33,"props":1348,"children":1349},{},[1350],{"type":37,"value":1351},"Veri minimizasyonu prensibi identity graph'i 90 günle sınırlamalı. 90 günden eski probabilistic ID'ler archive'e taşınmalı, sadece deterministic hash'ler long-term saklanmalı. Bu hem compliance hem storage cost açısından kritik — BigQuery'de partition pruning ile 90 günlük rolling window uygulanırsa query cost %60 düşüyor.",{"type":32,"tag":40,"props":1353,"children":1355},{"id":1354},"prodüksiyon-pipeline-mimarisi-batch-streaming-hibrit",[1356],{"type":37,"value":1357},"Prodüksiyon Pipeline Mimarisi: Batch + Streaming Hibrit",{"type":32,"tag":33,"props":1359,"children":1360},{},[1361],{"type":37,"value":1362},"Identity resolution pipeline'ı iki katmanda çalışır: streaming layer (gerçek zamanlı sinyal toplama) ve batch layer (gece stitching). Streaming layer Pub\u002FSub → Dataflow → BigQuery write streaming insert ile çalışır, latency \u003C10 saniye. Batch layer dbt scheduled run ile sabah 04:00'te tetiklenir, tüm graph stitching ve household clustering bu katmanda yapılır.",{"type":32,"tag":33,"props":1364,"children":1365},{},[1366,1368,1374],{"type":37,"value":1367},"Streaming layer'da sadece sinyal toplanır — hash matching ve probabilistic scoring yapılmaz çünkü streaming'de complex JOIN pahalı. Event Firestore'a yazılır, ",{"type":32,"tag":61,"props":1369,"children":1371},{"className":1370},[],[1372],{"type":37,"value":1373},"event_id",{"type":37,"value":1375}," unique constraint ile duplicate yazma engellenir. Batch layer bu event'leri okuyup BigQuery'de dimensional model'e dönüştürür. dbt macro'ları ile hash generation, score calculation, graph merge tek pipeline'da zincirlenir.",{"type":32,"tag":33,"props":1377,"children":1378},{},[1379,1381,1387,1389,1395],{"type":37,"value":1380},"Monitoring için graph coverage metriği kritik: ",{"type":32,"tag":61,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":37,"value":1386},"identified_users \u002F total_active_users",{"type":37,"value":1388}," oranı. %40'ın altındaysa deterministik sinyal eksikliği var demektir — login flow optimize edilmeli, lead form'lar e-posta capture'a odaklanmalı. %75'in üzerindeyse sağlıklı coverage sayılır. Bu metrik dbt test olarak ",{"type":32,"tag":61,"props":1390,"children":1392},{"className":1391},[],[1393],{"type":37,"value":1394},"data_tests\u002Fidentity_coverage.sql",{"type":37,"value":1396}," dosyasında tanımlanır ve CI\u002FCD'de her deployment öncesi çalıştırılır.",{"type":32,"tag":33,"props":1398,"children":1399},{},[1400],{"type":37,"value":1401},"Identity resolution modern pazarlama stack'inin omurgası. Cookie'siz dünya deterministic hash'i altın standart yaptı ama tek başına yetersiz — probabilistic linking ve household clustering ile 3 katmanlı kimlik grafiği kurmalısın. BigQuery'de dbt ile modellenen bu pipeline consent-aware, privacy-compliant ve production-ready olduğunda attribution modellerini, segmentasyon stratejisini ve lifetime value tahminini aynı tek müşteri görüntüsü üzerinden kurabilirsin.",{"type":32,"tag":1403,"props":1404,"children":1405},"style",{},[1406],{"type":37,"value":1407},"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":1409},[1410,1411,1412,1413,1414,1415],{"id":42,"depth":164,"text":45},{"id":97,"depth":164,"text":100},{"id":590,"depth":164,"text":593},{"id":931,"depth":164,"text":934},{"id":1302,"depth":164,"text":1305},{"id":1354,"depth":164,"text":1357},"markdown","content:tr:data:identity-resolution-6-sinyalden-tek-musteri-kimligine.md","content","tr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine.md","tr\u002Fdata\u002Fidentity-resolution-6-sinyalden-tek-musteri-kimligine","md",1778709807627]