El marketing digital ha democratizado el acceso a una cantidad de datos sin precedentes. Cada clic, cada impresión y cada conversión pueden ser medidos. Sin embargo, esta abundancia de información a menudo conduce a la “parálisis por análisis” o, peor aún, a la obsesión por “métricas de vanidad” que lucen bien en un informe pero no se correlacionan con los objetivos de negocio.
La clave para una estrategia de marketing digital exitosa no es medirlo todo, sino medir lo correcto. Esto implica construir un dashboard con Key Performance Indicators (KPIs) que cuenten una historia coherente del viaje del cliente, desde el primer contacto hasta su valor a largo plazo.
Este post explora un conjunto de KPIs esenciales de marketing digital, los enmarca en un funnel estratégico y demuestra cómo simular y visualizar un dashboard de seguimiento de campañas en R, proporcionando una hoja de ruta para estudiantes y profesionales del marketing.
Un framework para tus KPIs digitales
Para dar sentido a las métricas, es útil organizarlas según la etapa del viaje del cliente en la que impactan. Un framework clásico y efectivo es el siguiente:
Notoriedad (Awareness): ¿Cómo nos descubren los clientes potenciales? Medimos el alcance y la atracción inicial.
Engagement (Interacción): Una vez nos conocen, ¿interactúan con nuestro contenido? Medimos la calidad y relevancia de nuestro mensaje.
Conversión (Conversion): ¿Realizan la acción de valor que buscamos? Medición del momento de la verdad para el ROI (retorno de la inversión).
Valor del Cliente (Customer Value): Una vez convertidos, ¿son clientes valiosos a largo plazo? Medimos la rentabilidad sostenida.
KPIs Esenciales
1. Métricas de notoriedad
Click-Through Rate (CTR) - Tasa de Clics:
¿Qué es? Es el porcentaje de personas que, habiendo visto un anuncio o enlace (impresiones), hacen clic en él.
Fórmula:(Número de Clics / Número de Impresiones) * 100
¿Por qué importa? Es un indicador directo de la relevancia y atractivo de tu anuncio o creatividad. Un CTR bajo indica que tu mensaje no resuena con la audiencia a la que te diriges.
2. Métricas de engagement
Bounce Rate - Tasa de Rebote:
¿Qué es? El porcentaje de visitantes que llegan a una página de tu web y la abandonan sin realizar ninguna otra acción (sin hacer clic en otro enlace, sin rellenar un formulario, etc.).
¿Por qué importa? Una tasa de rebote alta es una señal de alarma. Puede significar que la página de destino no cumple las expectativas generadas por el anuncio, que la usabilidad es mala o que el contenido no es relevante.
3. Métricas de conversión
Conversion Rate (CVR) - Tasa de Conversión:
¿Qué es? El porcentaje de visitantes que completan un objetivo deseado (una compra, una suscripción, una descarga).
Fórmula:(Número de Conversiones / Número de Clics o Sesiones) * 100
¿Por qué importa? Es el KPI de rendimiento por excelencia. Mide la efectividad de tu web y de tu propuesta de valor para persuadir a los visitantes a actuar.
Cost Per Acquisition (CPA) - Coste por Adquisición:
¿Qué es? El coste total de marketing invertido para adquirir un nuevo cliente.
Fórmula:Coste Total de la Campaña / Número de Conversiones
¿Por qué importa? Es la métrica que conecta el marketing con las finanzas. Permite evaluar la eficiencia y rentabilidad de las campañas. Un CVR alto no sirve de nada si el CPA es insostenible.
4. Métricas de valor de cliente
Customer Lifetime Value (CLV) - Valor de Vida del Cliente:
¿Qué es? Una predicción del beneficio neto atribuido a toda la relación futura con un cliente. Es la métrica más estratégica de todas.
Fórmula (simplificada):(Valor Medio de Compra * Frecuencia de Compra) * Vida Media del Cliente
¿Por qué importa? Cambia el enfoque del marketing de la adquisición a corto plazo a la rentabilidad a largo plazo. Un CPA de 50€ puede parecer alto, pero es una gran inversión si el CLV de ese cliente es de 500€. Permite identificar qué canales y campañas atraen a los clientes más valiosos (Fader et al., 2005).
Ejemplo en R
Definidos esos KPI, pasemos a cómo calcularlos. Imaginemos que hemos lanzado dos campañas publicitarias (“Campaña Creativa A” y “Campaña de Descuento B”) en dos plataformas (“Redes Sociales” y “Búsqueda”) durante 3 meses y queremos evaluar su rendimiento.
Creación datos sintéticos
Los datos sintéticos se crean artificialmente, no provienen de eventos del mundo real. Estos datos pueden ser generados por algoritmos o simulaciones para replicar las propiedades estadísticas de los datos del mundo real. Se utilizan para diversos fines, como el entrenamiento de modelos de aprendizaje automático, las pruebas de software y el análisis de datos. Así, creemos nuestro ejemplo:
Code
# Cargar libreríaslibrary(dplyr)library(ggplot2)library(lubridate)library(tidyr)library(knitr)library(patchwork) # Para combinar gráficos# Simular datos diarios de campañas durante 3 mesesset.seed(42)n_days <-90start_date <-as.Date("2024-01-01")# Creamos la estructura de datoscampaign_data <-expand_grid(date = start_date +0:(n_days -1),campaign =c("Creativa A", "Descuento B"),platform =c("Redes Sociales", "Búsqueda"))# Simulamos métricas con perfiles de rendimiento distintoscampaign_data <- campaign_data %>%mutate(# Búsqueda suele tener menos impresiones pero más intencionalidad (mayor CTR y CVR)impressions =floor(case_when( platform =="Búsqueda"~runif(n(), 5000, 10000), platform =="Redes Sociales"~runif(n(), 20000, 50000) )),cost =case_when( platform =="Búsqueda"~ impressions *runif(n(), 0.01, 0.02), # Mayor coste por impresión platform =="Redes Sociales"~ impressions *runif(n(), 0.003, 0.008) ),clicks =floor(impressions *case_when( platform =="Búsqueda"& campaign =="Creativa A"~runif(n(), 0.04, 0.06), # Buen CTR platform =="Búsqueda"& campaign =="Descuento B"~runif(n(), 0.05, 0.08), # Descuento es más efectivo en búsqueda platform =="Redes Sociales"& campaign =="Creativa A"~runif(n(), 0.01, 0.02), # Creatividad funciona mejor en social platform =="Redes Sociales"& campaign =="Descuento B"~runif(n(), 0.008, 0.015) )),bounces =floor(clicks *runif(n(), 0.4, 0.6)), # Rebote aleatorioconversions =floor(clicks *case_when( platform =="Búsqueda"~runif(n(), 0.03, 0.05), # Mayor CVR platform =="Redes Sociales"& campaign =="Creativa A"~runif(n(), 0.01, 0.02), platform =="Redes Sociales"& campaign =="Descuento B"~runif(n(), 0.005, 0.01) # Descuento atrae clics pero no convierte bien en social )),revenue = conversions *case_when( campaign =="Creativa A"~rnorm(n(), 120, 20), # Creativa A atrae compras de mayor valor campaign =="Descuento B"~rnorm(n(), 70, 15) ) )kable(head(campaign_data), caption="Vista previa de los datos diarios de las campañas.")
Vista previa de los datos diarios de las campañas.
date
campaign
platform
impressions
cost
clicks
bounces
conversions
revenue
2024-01-01
Creativa A
Redes Sociales
36805
185.8017
612
344
6
868.8489
2024-01-01
Creativa A
Búsqueda
9685
157.3917
434
184
20
1847.6743
2024-01-01
Descuento B
Redes Sociales
28387
136.8232
280
155
2
200.0599
2024-01-01
Descuento B
Búsqueda
9152
125.6641
723
318
26
2315.9322
2024-01-02
Creativa A
Redes Sociales
39315
256.0746
499
282
6
730.4520
2024-01-02
Creativa A
Búsqueda
7595
137.8633
396
160
14
1628.9369
Cálculo de los KPIs
Ahora, agrupamos los datos a nivel de campaña y plataforma para calcular nuestros KPIs.
Code
# Agregamos los datos a nivel de campaña y plataformakpi_dashboard_data <- campaign_data %>%group_by(campaign, platform) %>%summarise(total_cost =sum(cost),total_impressions =sum(impressions),total_clicks =sum(clicks),total_bounces =sum(bounces),total_conversions =sum(conversions),total_revenue =sum(revenue),.groups ='drop' ) %>%# Calculamos los KPIsmutate(ctr = (total_clicks / total_impressions) *100,bounce_rate = (total_bounces / total_clicks) *100,cvr = (total_conversions / total_clicks) *100,cpa = total_cost / total_conversions,# Simulación de CLV simple: asumimos que la Campaña Creativa A atrae clientes que compran 5 veces,# mientras que los de Descuento B solo compran 2 veces.avg_order_value = total_revenue / total_conversions,clv =case_when( campaign =="Creativa A"~ avg_order_value *5, campaign =="Descuento B"~ avg_order_value *2 ) )kable(kpi_dashboard_data, caption="KPIs calculados para el dashboard de rendimiento.", digits=2)
KPIs calculados para el dashboard de rendimiento.
campaign
platform
total_cost
total_impressions
total_clicks
total_bounces
total_conversions
total_revenue
ctr
bounce_rate
cvr
cpa
avg_order_value
clv
Creativa A
Búsqueda
9648.76
649539
32368
16029
1252
151713.43
4.98
49.52
3.87
7.71
121.18
605.88
Creativa A
Redes Sociales
16708.67
3105315
46183
23137
642
75038.86
1.49
50.10
1.39
26.03
116.88
584.41
Descuento B
Búsqueda
9944.79
696678
45923
22635
1859
130645.68
6.59
49.29
4.05
5.35
70.28
140.55
Descuento B
Redes Sociales
17314.32
3136475
35427
17755
223
15675.67
1.13
50.12
0.63
77.64
70.29
140.59
Dashboard de Rendimiento
Creamos varios gráficos, cada uno enfocado en una etapa del funnel, y los unimos en un dashboard con patchwork.
Code
# Gráfico 1: Notoriedad (CTR)p1 <-ggplot(kpi_dashboard_data, aes(x = campaign, y = ctr, fill = platform)) +geom_col(position ="dodge") +geom_text(aes(label =sprintf("%.2f%%", ctr)), position =position_dodge(width =0.9), vjust =-0.5) +labs(title ="1. Notoriedad: Tasa de Clics (CTR)", y ="CTR (%)", x =NULL) +theme_minimal()# Gráfico 2: Engagement y Conversión (Bounce Rate y CVR)p2_data <- kpi_dashboard_data %>%select(campaign, platform, bounce_rate, cvr) %>%pivot_longer(cols =c(bounce_rate, cvr), names_to ="metric", values_to ="value")p2 <-ggplot(p2_data, aes(x = campaign, y = value, fill = platform)) +geom_col(position ="dodge") +geom_text(aes(label =sprintf("%.2f%%", value)), position =position_dodge(width =0.9), vjust =-0.5) +facet_wrap(~ metric, scales ="free_y") +labs(title ="2. Engagement y Conversión: Tasa de Rebote y CVR", y ="Tasa (%)", x =NULL) +theme_minimal() +theme(strip.text =element_text(face ="bold"))# Gráfico 3: Valor de Negocio (CPA y CLV)p3_data <- kpi_dashboard_data %>%select(campaign, platform, cpa, clv) %>%pivot_longer(cols =c(cpa, clv), names_to ="metric", values_to ="value")p3 <-ggplot(p3_data, aes(x = campaign, y = value, fill = platform)) +geom_col(position ="dodge") +geom_text(aes(label =sprintf("€%.2f", value)), position =position_dodge(width =0.9), vjust =-0.5) +facet_wrap(~ metric, scales ="free_y") +labs(title ="3. Valor de Negocio: Coste por Adquisición y Valor de Vida del Cliente", y ="Valor (€)", x =NULL) +theme_minimal() +theme(strip.text =element_text(face ="bold"))# Combinar los gráficos en un solo dashboarddashboard <- (p1 / p2 / p3) +plot_layout(guides ='collect') &theme(legend.position ='bottom')dashboard
Dashboard de Rendimiento de Campañas de Marketing Digital.
Interpretación y Conclusión Estratégica
El dashboard nos permite contar una historia completa y tomar decisiones informadas:
Campaña de Descuento B en Búsqueda: A primera vista, parece un éxito. Tiene el CTR más alto (6.52%), lo que indica que la oferta es muy atractiva para la gente que ya busca activamente. Sin embargo, su historia se tuerce más adelante.
Campaña Creativa A en Redes Sociales: Genera un CTR bajo (1.49%), pero su Tasa de Rebote es la más baja, lo que sugiere que aunque atrae a menos gente, los que llegan están genuinamente interesados en el contenido.
La Historia del Valor: El gráfico final es el más revelador. La “Campaña de Descuento B” tiene un CPA bajo, pero también un CLV muy bajo (140-143€). Atrae a “cazadores de ofertas” que no vuelven a comprar. En cambio, la “Campaña Creativa A”, especialmente en la plataforma de Búsqueda, tiene un CPA más alto (19.49€) pero atrae a clientes con un CLV altísimo (594€).
Decisión Estratégica: En lugar de optimizar ciegamente para obtener el CTR más alto o el CPA más bajo, el dashboard nos dice que debemos invertir más en la “Campaña Creativa A en Búsqueda”. Aunque es más cara de adquirir, cada cliente es más de 4 veces más valioso a largo plazo. Este tipo de visión holística, que conecta los clics con el valor de vida del cliente, es la verdadera esencia del marketing digital basado en datos.
Referencias
Chatterjee, P., Hoffman, D. L., & Novak, T. P. (2003). Modeling the clickstream: Implications for web-based advertising efforts. Marketing Science, 22(4), 520-541. https://doi.org/10.1287/mksc.22.4.520.24906
Fader, P. S., Hardie, B. G., & Lee, K. L. (2005). “Counting your customers” the easy way: An alternative to the Pareto/NBD model. Marketing Science, 24(2), 275-284. https://doi.org/10.1287/mksc.1040.0098
Moe, W. W., & Fader, P. S. (2004). Capturing evolving visit behavior in clickstream data. Journal of Interactive Marketing, 18(1), 5-19. https://doi.org/10.1002/dir.10074
Pauwels, K., Ambler, T., Clark, B. H., LaPointe, P., Reibstein, D., Skiera, B., Wierenga, B., & Wiesel, T. (2009). Dashboards as a service: Why, what, how, and what research is needed?. Journal of Service Research, 12(2), 175-189. https://doi.org/10.1177/1094670509344213