[{"data":1,"prerenderedAt":857},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fes\u002Fmarketing\u002Forquestacion-multicanal-atribucion-paid-email-push":13},{"i18nKey":4,"paths":5},"marketing-007-2026-06",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fmarketing\u002Fcross-channel-orchestrierung-paid-email-push-attribution","\u002Fen\u002Fmarketing\u002Fcross-channel-orchestration-attribution","\u002Fes\u002Fmarketing\u002Forquestacion-multicanal-atribucion-paid-email-push","\u002Ffr\u002Fmarketing\u002Forchestration-multi-canal-attribution","\u002Fit\u002Fmarketing\u002Forkestrazione-multicanale-attribuzione","\u002Fru\u002Fmarketing\u002Forquestracion-multicanal-atribucion-identidad","\u002Ftr\u002Fmarketing\u002Fcross-channel-orkestrasyon-paid-email-push-atribusyon",{"_path":8,"_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":851,"_id":852,"_source":853,"_file":854,"_stem":855,"_extension":856},"marketing",false,"","Orquestación Multicanal: Atribución de Paid + Email + Push","Identity graph, mapeo de eventos de ciclo de vida y grupos de control son obligatorios para medir la contribución de canales. ¿Cómo construir la orquestación en la era post-cookie?","2026-06-11",[21,22,23,24,25],"atribucion-multicanal","identity-graph","marketing-ciclo-vida","prueba-control","incrementalidad",8,"Roibase",{"type":29,"children":30,"toc":843},"root",[31,39,46,51,116,129,134,140,145,240,280,442,447,453,458,471,476,484,489,502,508,513,518,523,677,682,697,703,708,713,769,774,779,785,795,805,815,832,837],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","Cuando murió el dato de terceros, los especialistas en marketing preguntaron primero: \"¿Cómo cambia el modelo de atribución?\" La pregunta real era diferente: \"¿Qué canal aporta realmente cuánto, y cómo vinculamos todos los puntos de contacto al mismo usuario?\" En 2026, la orquestación multicanal no es un problema de integración, sino de identidad e incrementalidad. Sin vincular paid media, email y push al mismo usuario y sin aislar la contribución de cada uno, es imposible distribuir presupuesto de campaña de forma inteligente. En este artículo construimos la arquitectura práctica para poner canales bajo orquestación usando identity graph, mapeo de eventos de ciclo de vida y diseño de grupos de control.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"identity-graph-identificar-el-usuario-across-canales",[44],{"type":37,"value":45},"Identity Graph: Identificar el Usuario Across Canales",{"type":32,"tag":33,"props":47,"children":48},{},[49],{"type":37,"value":50},"Un identity graph es una estructura de datos que vincula las señales que un mismo usuario deja en diferentes canales (email, device ID, cookie, teléfono hasheado) a un único perfil. En la orquestación multicanal, el primer paso es construir este gráfico server-side, porque la cookie client-side ya no es válida entre dispositivos y navegadores.",{"type":32,"tag":33,"props":52,"children":53},{},[54,56,63,65,71,73,79,80,86,87,93,94,100,102,107,109,114],{"type":37,"value":55},"Una estructura típica de graph se ve así: ",{"type":32,"tag":57,"props":58,"children":60},"code",{"className":59},[],[61],{"type":37,"value":62},"user_id",{"type":37,"value":64}," (nodo central), ",{"type":32,"tag":57,"props":66,"children":68},{"className":67},[],[69],{"type":37,"value":70},"email_hash",{"type":37,"value":72},", ",{"type":32,"tag":57,"props":74,"children":76},{"className":75},[],[77],{"type":37,"value":78},"gclid",{"type":37,"value":72},{"type":32,"tag":57,"props":81,"children":83},{"className":82},[],[84],{"type":37,"value":85},"device_id_ios",{"type":37,"value":72},{"type":32,"tag":57,"props":88,"children":90},{"className":89},[],[91],{"type":37,"value":92},"device_id_android",{"type":37,"value":72},{"type":32,"tag":57,"props":95,"children":97},{"className":96},[],[98],{"type":37,"value":99},"utm_source=email",{"type":37,"value":101},". Estos nodos se almacenan como una tabla de bordes en BigQuery o Snowflake. Cada evento (conversion, session_start, add_to_cart) se etiqueta con uno de estos nodos y mediante un proceso de resolución se vincula al ",{"type":32,"tag":57,"props":103,"children":105},{"className":104},[],[106],{"type":37,"value":62},{"type":37,"value":108}," central. Por ejemplo, un usuario llega primero desde Google Ads (gclid), luego hace clic desde email (email_hash), después compra en la app móvil (device_id) — todo se une bajo el mismo ",{"type":32,"tag":57,"props":110,"children":112},{"className":111},[],[113],{"type":37,"value":62},{"type":37,"value":115},".",{"type":32,"tag":33,"props":117,"children":118},{},[119,121,127],{"type":37,"value":120},"Para esta estructura necesitas combinar matching determinístico (email, teléfono como coincidencia exacta) con matching probabilístico (IP + user-agent + timestamp con lógica fuzzy). El matching determinístico proporciona %65-75 de cobertura, y el resto se captura con el modelo probabilístico. Pero privacidad primero: usa PII hasheado (SHA-256) para cumplir GDPR\u002FKVKK y limita el matching con gestión de consentimiento. Cada edge del graph debe llevar un ",{"type":32,"tag":57,"props":122,"children":124},{"className":123},[],[125],{"type":37,"value":126},"consent_timestamp",{"type":37,"value":128}," y si se retira el consentimiento, ese edge se elimina automáticamente.",{"type":32,"tag":33,"props":130,"children":131},{},[132],{"type":37,"value":133},"La resolución de identidad requiere un pipeline que funciona continuamente. Ya sea streaming (Kafka + Flink) o batch (dbt + Airflow), nuevas señales se añaden al graph cada día. La calidad del graph se mide con match rate e incrementalidad: match rate > %80, dedup precision > %95 son los objetivos. Estas métricas deben monitorearse diariamente en Looker o Preset porque si el graph se corrompe, toda la atribución se rompe.",{"type":32,"tag":40,"props":135,"children":137},{"id":136},"mapeo-de-eventos-de-ciclo-de-vida-distribuir-la-contribución-del-canal-en-el-tiempo",[138],{"type":37,"value":139},"Mapeo de Eventos de Ciclo de Vida: Distribuir la Contribución del Canal en el Tiempo",{"type":32,"tag":33,"props":141,"children":142},{},[143],{"type":37,"value":144},"Cuando el identity graph responde \"quién\", la siguiente pregunta es \"qué canal contribuyó cuándo\". El mapeo de eventos de ciclo de vida vincula cada punto de contacto a un momento significativo en la jornada del usuario: awareness, consideration, purchase, retention. Este mapping te permite desagregar la contribución de paid media como primer contacto, email como re-engagement, y push como retención.",{"type":32,"tag":33,"props":146,"children":147},{},[148,150,156,158,164,166,172,174,180,181,187,188,194,195,201,203,209,210,216,217,223,224,230,232,238],{"type":37,"value":149},"Para el mapping, primero normaliza los eventos nativos de cada canal. Google Ads ",{"type":32,"tag":57,"props":151,"children":153},{"className":152},[],[154],{"type":37,"value":155},"first_open",{"type":37,"value":157},", email ",{"type":32,"tag":57,"props":159,"children":161},{"className":160},[],[162],{"type":37,"value":163},"email_click",{"type":37,"value":165},", push ",{"type":32,"tag":57,"props":167,"children":169},{"className":168},[],[170],{"type":37,"value":171},"notification_open",{"type":37,"value":173}," — todos se transforman a eventos estándar en GA4 o tu CDP: ",{"type":32,"tag":57,"props":175,"children":177},{"className":176},[],[178],{"type":37,"value":179},"session_start",{"type":37,"value":72},{"type":32,"tag":57,"props":182,"children":184},{"className":183},[],[185],{"type":37,"value":186},"add_to_cart",{"type":37,"value":72},{"type":32,"tag":57,"props":189,"children":191},{"className":190},[],[192],{"type":37,"value":193},"purchase",{"type":37,"value":72},{"type":32,"tag":57,"props":196,"children":198},{"className":197},[],[199],{"type":37,"value":200},"churn_risk",{"type":37,"value":202},". Luego etiqueta cada evento con su stage de ciclo de vida: ",{"type":32,"tag":57,"props":204,"children":206},{"className":205},[],[207],{"type":37,"value":208},"awareness",{"type":37,"value":72},{"type":32,"tag":57,"props":211,"children":213},{"className":212},[],[214],{"type":37,"value":215},"activation",{"type":37,"value":72},{"type":32,"tag":57,"props":218,"children":220},{"className":219},[],[221],{"type":37,"value":222},"revenue",{"type":37,"value":72},{"type":32,"tag":57,"props":225,"children":227},{"className":226},[],[228],{"type":37,"value":229},"retention",{"type":37,"value":231},". Estas etiquetas se almacenan en un JSON field ",{"type":32,"tag":57,"props":233,"children":235},{"className":234},[],[236],{"type":37,"value":237},"event_properties",{"type":37,"value":239}," o en columnas STRUCT de BigQuery.",{"type":32,"tag":33,"props":241,"children":242},{},[243,245,250,252,257,259,265,267,272,273,278],{"type":37,"value":244},"Ejemplo de escenario: un usuario llega por primera vez desde Meta Ads (",{"type":32,"tag":57,"props":246,"children":248},{"className":247},[],[249],{"type":37,"value":208},{"type":37,"value":251},"), navega por el sitio pero no compra. Tres días después, una campaña de email dispara ",{"type":32,"tag":57,"props":253,"children":255},{"className":254},[],[256],{"type":37,"value":186},{"type":37,"value":258}," (",{"type":32,"tag":57,"props":260,"children":262},{"className":261},[],[263],{"type":37,"value":264},"consideration",{"type":37,"value":266},"), y una notificación push completa la ",{"type":32,"tag":57,"props":268,"children":270},{"className":269},[],[271],{"type":37,"value":193},{"type":37,"value":258},{"type":32,"tag":57,"props":274,"children":276},{"className":275},[],[277],{"type":37,"value":222},{"type":37,"value":279},"). Este escenario se consulta con este SQL:",{"type":32,"tag":281,"props":282,"children":286},"pre",{"code":283,"language":284,"meta":16,"className":285,"style":16},"SELECT\n  user_id,\n  ARRAY_AGG(STRUCT(event_name, channel, timestamp, lifecycle_stage) ORDER BY timestamp) AS journey\nFROM events\nWHERE user_id = 'xyz'\n  AND timestamp BETWEEN '2026-06-01' AND '2026-06-10'\nGROUP BY user_id\n","sql","language-sql shiki shiki-themes github-dark",[287],{"type":32,"tag":57,"props":288,"children":289},{"__ignoreMap":16},[290,302,312,356,370,395,428],{"type":32,"tag":291,"props":292,"children":295},"span",{"class":293,"line":294},"line",1,[296],{"type":32,"tag":291,"props":297,"children":299},{"style":298},"--shiki-default:#F97583",[300],{"type":37,"value":301},"SELECT\n",{"type":32,"tag":291,"props":303,"children":305},{"class":293,"line":304},2,[306],{"type":32,"tag":291,"props":307,"children":309},{"style":308},"--shiki-default:#E1E4E8",[310],{"type":37,"value":311},"  user_id,\n",{"type":32,"tag":291,"props":313,"children":315},{"class":293,"line":314},3,[316,321,326,331,336,341,346,351],{"type":32,"tag":291,"props":317,"children":318},{"style":308},[319],{"type":37,"value":320},"  ARRAY_AGG(STRUCT(event_name, channel, ",{"type":32,"tag":291,"props":322,"children":323},{"style":298},[324],{"type":37,"value":325},"timestamp",{"type":32,"tag":291,"props":327,"children":328},{"style":308},[329],{"type":37,"value":330},", lifecycle_stage) ",{"type":32,"tag":291,"props":332,"children":333},{"style":298},[334],{"type":37,"value":335},"ORDER BY",{"type":32,"tag":291,"props":337,"children":338},{"style":298},[339],{"type":37,"value":340}," timestamp",{"type":32,"tag":291,"props":342,"children":343},{"style":308},[344],{"type":37,"value":345},") ",{"type":32,"tag":291,"props":347,"children":348},{"style":298},[349],{"type":37,"value":350},"AS",{"type":32,"tag":291,"props":352,"children":353},{"style":308},[354],{"type":37,"value":355}," journey\n",{"type":32,"tag":291,"props":357,"children":359},{"class":293,"line":358},4,[360,365],{"type":32,"tag":291,"props":361,"children":362},{"style":298},[363],{"type":37,"value":364},"FROM",{"type":32,"tag":291,"props":366,"children":367},{"style":308},[368],{"type":37,"value":369}," events\n",{"type":32,"tag":291,"props":371,"children":373},{"class":293,"line":372},5,[374,379,384,389],{"type":32,"tag":291,"props":375,"children":376},{"style":298},[377],{"type":37,"value":378},"WHERE",{"type":32,"tag":291,"props":380,"children":381},{"style":308},[382],{"type":37,"value":383}," user_id ",{"type":32,"tag":291,"props":385,"children":386},{"style":298},[387],{"type":37,"value":388},"=",{"type":32,"tag":291,"props":390,"children":392},{"style":391},"--shiki-default:#9ECBFF",[393],{"type":37,"value":394}," 'xyz'\n",{"type":32,"tag":291,"props":396,"children":398},{"class":293,"line":397},6,[399,404,408,413,418,423],{"type":32,"tag":291,"props":400,"children":401},{"style":298},[402],{"type":37,"value":403},"  AND",{"type":32,"tag":291,"props":405,"children":406},{"style":298},[407],{"type":37,"value":340},{"type":32,"tag":291,"props":409,"children":410},{"style":298},[411],{"type":37,"value":412}," BETWEEN",{"type":32,"tag":291,"props":414,"children":415},{"style":391},[416],{"type":37,"value":417}," '2026-06-01'",{"type":32,"tag":291,"props":419,"children":420},{"style":298},[421],{"type":37,"value":422}," AND",{"type":32,"tag":291,"props":424,"children":425},{"style":391},[426],{"type":37,"value":427}," '2026-06-10'\n",{"type":32,"tag":291,"props":429,"children":431},{"class":293,"line":430},7,[432,437],{"type":32,"tag":291,"props":433,"children":434},{"style":298},[435],{"type":37,"value":436},"GROUP BY",{"type":32,"tag":291,"props":438,"children":439},{"style":308},[440],{"type":37,"value":441}," user_id\n",{"type":32,"tag":33,"props":443,"children":444},{},[445],{"type":37,"value":446},"El punto crítico del mapeo de ciclo de vida es el solapamiento de canales. Si un usuario recibe tanto email como push el mismo día, ¿cuál causó la conversión? Entra en juego la regla de ventana de tiempo: el canal que disparó un evento dentro de 24 horas antes de la conversión se prioriza. Pero esto no es suficiente — sin medir incrementalidad, no puedes saber realmente la contribución de un canal. Aquí es donde entran los grupos de control.",{"type":32,"tag":40,"props":448,"children":450},{"id":449},"grupos-de-control-medir-la-incrementalidad",[451],{"type":37,"value":452},"Grupos de Control: Medir la Incrementalidad",{"type":32,"tag":33,"props":454,"children":455},{},[456],{"type":37,"value":457},"Un grupo de control (holdout group) es un segmento de usuarios que no recibe mensajes de un canal específico. Con este grupo mides el impacto real del canal (incrementalidad): la diferencia en conversion entre el grupo de tratamiento y el grupo de control es el lift del canal. En orquestación multicanal, debes diseñar un grupo de control separado para cada canal porque paid+email+push pueden enmascararse mutuamente.",{"type":32,"tag":33,"props":459,"children":460},{},[461,463,469],{"type":37,"value":462},"El diseño típico de control: excluye el %10 de usuarios de email, %10 de push, y %5 de retargeting paid. Estos segmentos deben seleccionarse aleatoriamente (randomización) y mantenerse fijos durante al menos 2 semanas. Por ejemplo, el grupo de control de email: ",{"type":32,"tag":57,"props":464,"children":466},{"className":465},[],[467],{"type":37,"value":468},"user_id % 10 = 0",{"type":37,"value":470}," con selección basada en hash. Este grupo no recibe ningún email pero sí recibe paid y push. De la misma forma, el grupo de control de push recibe email y paid pero no push.",{"type":32,"tag":33,"props":472,"children":473},{},[474],{"type":37,"value":475},"El cálculo de incrementalidad es una simple prueba de diferencia:",{"type":32,"tag":281,"props":477,"children":479},{"code":478},"Lift = (Treatment Conversion Rate - Holdout Conversion Rate) \u002F Holdout Conversion Rate\n",[480],{"type":32,"tag":57,"props":481,"children":482},{"__ignoreMap":16},[483],{"type":37,"value":478},{"type":32,"tag":33,"props":485,"children":486},{},[487],{"type":37,"value":488},"Por ejemplo, si el grupo de tratamiento de email da %3.5 de conversión y el grupo de control %2.8, entonces lift = (3.5 - 2.8) \u002F 2.8 = %25. Esto significa que sin email, %2.8 de usuarios ya convertirían de todas formas; email añade solo %0.7 puntos. Ese %0.7 es la verdadera contribución incremental del email.",{"type":32,"tag":33,"props":490,"children":491},{},[492,494,500],{"type":37,"value":493},"El tamaño del grupo de control es crítico: muy pequeño (%1-2) = baja potencia estadística, muy grande (%20+) = pérdida de oportunidad. Lo óptimo es %5-10. Además, el control puede variar por canal: %10 para email (canal de alta frecuencia), %5 para push (canal de baja frecuencia). Almacena el holdout en una tabla ",{"type":32,"tag":57,"props":495,"children":497},{"className":496},[],[498],{"type":37,"value":499},"user_segments",{"type":37,"value":501}," en BigQuery y en cada disparo de campaña, verifica esta tabla con un LEFT JOIN — si el usuario está en el segmento de control, no envíes el mensaje.",{"type":32,"tag":40,"props":503,"children":505},{"id":504},"atribución-multi-touch-puntuación-de-canales",[506],{"type":37,"value":507},"Atribución Multi-Touch: Puntuación de Canales",{"type":32,"tag":33,"props":509,"children":510},{},[511],{"type":37,"value":512},"Después de construir el identity graph y hacer el mapeo de ciclo de vida, puedes puntuar la contribución total de cada canal con un modelo de atribución multi-touch (MTA). MTA distribuye peso entre todos los puntos de contacto en una ruta de conversión. El modelo más común es Shapley Value: viene de teoría de juegos cooperativos y mide la contribución marginal de cada jugador (canal).",{"type":32,"tag":33,"props":514,"children":515},{},[516],{"type":37,"value":517},"El cálculo de Shapley es matemáticamente complejo pero implementable en Python. Alternativamente, el modelo de atribución data-driven de Google Analytics 4 ya usa un algoritmo similar a Shapley. Sin embargo, GA4 solo ve canales en el ecosistema de Google (Ads, Organic, Display). Para incluir email y push necesitas export de eventos custom (BigQuery + Looker Studio) o un pipeline CDP (Segment, mParticle).",{"type":32,"tag":33,"props":519,"children":520},{},[521],{"type":37,"value":522},"Un ejemplo práctico de puntuación multicanal:",{"type":32,"tag":524,"props":525,"children":526},"table",{},[527,561],{"type":32,"tag":528,"props":529,"children":530},"thead",{},[531],{"type":32,"tag":532,"props":533,"children":534},"tr",{},[535,541,546,551,556],{"type":32,"tag":536,"props":537,"children":538},"th",{},[539],{"type":37,"value":540},"Canal",{"type":32,"tag":536,"props":542,"children":543},{},[544],{"type":37,"value":545},"Puntos de Contacto",{"type":32,"tag":536,"props":547,"children":548},{},[549],{"type":37,"value":550},"Shapley Score",{"type":32,"tag":536,"props":552,"children":553},{},[554],{"type":37,"value":555},"Lift Holdout",{"type":32,"tag":536,"props":557,"children":558},{},[559],{"type":37,"value":560},"Peso Final",{"type":32,"tag":562,"props":563,"children":564},"tbody",{},[565,594,622,650],{"type":32,"tag":532,"props":566,"children":567},{},[568,574,579,584,589],{"type":32,"tag":569,"props":570,"children":571},"td",{},[572],{"type":37,"value":573},"Paid (Meta)",{"type":32,"tag":569,"props":575,"children":576},{},[577],{"type":37,"value":578},"1200",{"type":32,"tag":569,"props":580,"children":581},{},[582],{"type":37,"value":583},"0.32",{"type":32,"tag":569,"props":585,"children":586},{},[587],{"type":37,"value":588},"%18",{"type":32,"tag":569,"props":590,"children":591},{},[592],{"type":37,"value":593},"0.28",{"type":32,"tag":532,"props":595,"children":596},{},[597,602,607,612,617],{"type":32,"tag":569,"props":598,"children":599},{},[600],{"type":37,"value":601},"Email",{"type":32,"tag":569,"props":603,"children":604},{},[605],{"type":37,"value":606},"3400",{"type":32,"tag":569,"props":608,"children":609},{},[610],{"type":37,"value":611},"0.41",{"type":32,"tag":569,"props":613,"children":614},{},[615],{"type":37,"value":616},"%25",{"type":32,"tag":569,"props":618,"children":619},{},[620],{"type":37,"value":621},"0.38",{"type":32,"tag":532,"props":623,"children":624},{},[625,630,635,640,645],{"type":32,"tag":569,"props":626,"children":627},{},[628],{"type":37,"value":629},"Push",{"type":32,"tag":569,"props":631,"children":632},{},[633],{"type":37,"value":634},"2100",{"type":32,"tag":569,"props":636,"children":637},{},[638],{"type":37,"value":639},"0.27",{"type":32,"tag":569,"props":641,"children":642},{},[643],{"type":37,"value":644},"%12",{"type":32,"tag":569,"props":646,"children":647},{},[648],{"type":37,"value":649},"0.21",{"type":32,"tag":532,"props":651,"children":652},{},[653,658,663,668,672],{"type":32,"tag":569,"props":654,"children":655},{},[656],{"type":37,"value":657},"Organic",{"type":32,"tag":569,"props":659,"children":660},{},[661],{"type":37,"value":662},"800",{"type":32,"tag":569,"props":664,"children":665},{},[666],{"type":37,"value":667},"—",{"type":32,"tag":569,"props":669,"children":670},{},[671],{"type":37,"value":667},{"type":32,"tag":569,"props":673,"children":674},{},[675],{"type":37,"value":676},"0.13",{"type":32,"tag":33,"props":678,"children":679},{},[680],{"type":37,"value":681},"En esta tabla, Peso Final = (Shapley Score × 0.6) + (Lift Holdout normalizado × 0.4). Así combinas tanto path contribution como incrementalidad. De esta forma, si email aparece mucho en los paths pero da poco lift real, se equilibra.",{"type":32,"tag":33,"props":683,"children":684},{},[685,687,696],{"type":37,"value":686},"El resultado de la puntuación alimenta la asignación de presupuesto: si email tiene peso %38, asigna %38 del presupuesto total de marketing a email. Pero esto no es estático — cada mes renuevas las pruebas de control y actualizas el score de Shapley. Este ciclo es un feedback loop continuo dentro de la disciplina de ",{"type":32,"tag":688,"props":689,"children":693},"a",{"href":690,"rel":691},"https:\u002F\u002Fwww.roibase.com.tr\u002Fes\u002Fppc",[692],"nofollow",[694],{"type":37,"value":695},"marketing de performance",{"type":37,"value":115},{"type":32,"tag":40,"props":698,"children":700},{"id":699},"infraestructura-de-orquestación-cdp-workflow-engine",[701],{"type":37,"value":702},"Infraestructura de Orquestación: CDP + Workflow Engine",{"type":32,"tag":33,"props":704,"children":705},{},[706],{"type":37,"value":707},"No puedes gestionar la orquestación multicanal manualmente. Necesitas una Customer Data Platform (CDP) o un workflow engine (Airflow, n8n, Braze). El CDP mantiene el identity graph, actualiza segmentos en tiempo real y envía mensajes al momento correcto en cada canal. El workflow engine automatiza el control de holdout, el mapeo de eventos y el cálculo de atribución.",{"type":32,"tag":33,"props":709,"children":710},{},[711],{"type":37,"value":712},"Un stack típico de orquestación:",{"type":32,"tag":714,"props":715,"children":716},"ul",{},[717,729,739,749,759],{"type":32,"tag":718,"props":719,"children":720},"li",{},[721,727],{"type":32,"tag":722,"props":723,"children":724},"strong",{},[725],{"type":37,"value":726},"Identity Resolution:",{"type":37,"value":728}," Segment Protocols, mParticle, RudderStack",{"type":32,"tag":718,"props":730,"children":731},{},[732,737],{"type":32,"tag":722,"props":733,"children":734},{},[735],{"type":37,"value":736},"Event Normalization:",{"type":37,"value":738}," Modelos dbt, transforms Fivetran",{"type":32,"tag":718,"props":740,"children":741},{},[742,747],{"type":32,"tag":722,"props":743,"children":744},{},[745],{"type":37,"value":746},"Hold-Out Management:",{"type":37,"value":748}," Queries programadas de BigQuery + Cloud Functions",{"type":32,"tag":718,"props":750,"children":751},{},[752,757],{"type":32,"tag":722,"props":753,"children":754},{},[755],{"type":37,"value":756},"Attribution:",{"type":37,"value":758}," Python custom (Shapley) o Rockerbox, Northbeam",{"type":32,"tag":718,"props":760,"children":761},{},[762,767],{"type":32,"tag":722,"props":763,"children":764},{},[765],{"type":37,"value":766},"Activation:",{"type":37,"value":768}," Braze, Iterable, Customer.io",{"type":32,"tag":33,"props":770,"children":771},{},[772],{"type":37,"value":773},"El centro de este stack debe ser BigQuery o Snowflake porque todos los datos de eventos de todos los canales convergen allí. El CDP es solo la capa de activación — la limpieza de datos y la lógica de atribución viven en el warehouse. Por ejemplo, cada día a las 02:00 se dispara un DAG de Airflow: nuevos eventos se cargan en el warehouse, runs de resolución de identidad, lifecycle stages se actualizan, segmentos de holdout se refrescan, score de Shapley se recalcula, el resultado se publica a Looker.",{"type":32,"tag":33,"props":775,"children":776},{},[777],{"type":37,"value":778},"Los objetivos de desempeño de la infraestructura de orquestación son: event ingestion latency \u003C 5 minutos, identity resolution batch \u003C 1 hora, attribution refresh \u003C 24 horas. Estas métricas deben monitorearse con Datadog o New Relic. Si el pipeline falla (por ejemplo, rate limit del CDP API), el fallback es: toma decisiones con los últimos 24 horas de datos, cambia de real-time a batch.",{"type":32,"tag":40,"props":780,"children":782},{"id":781},"trampas-a-evitar",[783],{"type":37,"value":784},"Trampas a Evitar",{"type":32,"tag":33,"props":786,"children":787},{},[788,793],{"type":32,"tag":722,"props":789,"children":790},{},[791],{"type":37,"value":792},"Trampa 1: Over-attribution.",{"type":37,"value":794}," Cada canal exagera su propia contribución porque aparece en la ruta de conversión. Ni siquiera Shapley es suficiente — valida con lift de holdout antes de distribuir presupuesto. Si no lo haces, email y push acaparan presupuesto mientras paid se queda atrás.",{"type":32,"tag":33,"props":796,"children":797},{},[798,803],{"type":32,"tag":722,"props":799,"children":800},{},[801],{"type":37,"value":802},"Trampa 2: Identity graph drift.",{"type":37,"value":804}," Con el tiempo, el graph acumula edges erróneos (por ejemplo, dos usuarios comparten el mismo dispositivo). Dedup precision cae, match rate sube artificialmente. Solución: calcula confidence score de cada edge cada mes, elimina los que están por debajo del %50.",{"type":32,"tag":33,"props":806,"children":807},{},[808,813],{"type":32,"tag":722,"props":809,"children":810},{},[811],{"type":37,"value":812},"Trampa 3: No separar holdout por canal.",{"type":37,"value":814}," Si usas un solo grupo de control para todos los canales, no mides efectos cruzados. Email+push juntos podrían dar lift aunque solos no lo den. Necesitas holdout separado para cada canal.",{"type":32,"tag":33,"props":816,"children":817},{},[818,823,825,831],{"type":32,"tag":722,"props":819,"children":820},{},[821],{"type":37,"value":822},"Trampa 4: Etiquetar lifecycle stages manualmente.",{"type":37,"value":824}," Si etiquetas eventos a mano, no escala. Crea un classifier rule-based o basado en ML para cada evento: ",{"type":32,"tag":57,"props":826,"children":828},{"className":827},[],[829],{"type":37,"value":830},"if add_to_cart AND first_time_user THEN lifecycle_stage = 'activation'",{"type":37,"value":115},{"type":32,"tag":33,"props":833,"children":834},{},[835],{"type":37,"value":836},"Una vez que construyes orquestación multicanal, necesita iteración continua. Identity graph accuracy, tendencia de lift de holdout, distribución de Shapley — todas son métricas vivas. Sin revisarlas semanalmente, la sincronización entre canales se pierde y el desperdicio de presupuesto aumenta. Orquestación no es engineering puro, es engineering + data science + ops. Ahora toca construir el gráfico, diseñar el holdout y medir el lift.",{"type":32,"tag":838,"props":839,"children":840},"style",{},[841],{"type":37,"value":842},"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":314,"depth":314,"links":844},[845,846,847,848,849,850],{"id":42,"depth":304,"text":45},{"id":136,"depth":304,"text":139},{"id":449,"depth":304,"text":452},{"id":504,"depth":304,"text":507},{"id":699,"depth":304,"text":702},{"id":781,"depth":304,"text":784},"markdown","content:es:marketing:orquestacion-multicanal-atribucion-paid-email-push.md","content","es\u002Fmarketing\u002Forquestacion-multicanal-atribucion-paid-email-push.md","es\u002Fmarketing\u002Forquestacion-multicanal-atribucion-paid-email-push","md",1782079490613]