Del clic al valor

Author

Roberto Gil-Saura

Published

March 9, 2024

Introducción: navegando, navegando …

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:

  1. Notoriedad (Awareness): ¿Cómo nos descubren los clientes potenciales? Medimos el alcance y la atracción inicial.
  2. Engagement (Interacción): Una vez nos conocen, ¿interactúan con nuestro contenido? Medimos la calidad y relevancia de nuestro mensaje.
  3. 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).
  4. 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ías
library(dplyr)
library(ggplot2)
library(lubridate)
library(tidyr)
library(knitr)
library(patchwork) # Para combinar gráficos

# Simular datos diarios de campañas durante 3 meses
set.seed(42)
n_days <- 90
start_date <- as.Date("2024-01-01")

# Creamos la estructura de datos
campaign_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 distintos
campaign_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 aleatorio
    conversions = 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 plataforma
kpi_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 KPIs
  mutate(
    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 dashboard
dashboard <- (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:

  1. 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.
  2. 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.
  3. 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