Contexto: Ripley quiere mejorar las conversiones en su campaña de email marketing. Tienes estos datos de Google Analytics almacenados en el archivo datos_email.csv :
Variable | Tipo de Dato | Descripción | Ejemplo de Valor |
---|---|---|---|
user_id |
Character | Identificador único del usuario (anonimizado). | “USER_45782” |
grupo |
Factor | Grupo asignado aleatoriamente (A: 20% OFF, B: Envío gratis). | “A” o “B” |
conversion |
Integer | Binaria: 1 si el usuario compró, 0 si no. | 0 o 1 |
Carga de bases de datos:
## user_id grupo conversion
## 1 1 A 1
## 2 2 A 0
## 3 3 A 0
## 4 4 B 0
## 5 5 A 0
## 6 6 B 0
Objetivo: Queremos probar si el envío gratis (B) es realmente mejor que el descuento del 20% (A) para generar conversiones.
En términos de negocio:
## Warning: package 'ggplot2' was built under R version 4.4.3
ggplot(datos_email, aes(x = grupo, fill = factor(conversion))) +
geom_bar(position = "fill") +
scale_fill_manual(values = c("#FF9AA2", "#FFB7B2"),
labels = c("No convirtió", "Convirtió")) +
labs(title = "¿Qué cupón genera más conversiones?",
y = "Porcentaje de conversión")
Hipótesis Nula (H₀):
“La tasa de conversión del grupo B (envío gratis) es igual o
menor que la del grupo A (20% OFF).”
H0:pB≤pA
Hipótesis Alternativa (H₁):
“La tasa de conversión del grupo B (envío gratis) es
mayor que la del grupo A (20% OFF).”
H1:pB>pA
prop.test(
x = c(sum(datos_email$conversion[datos_email$grupo == "B"]),
sum(datos_email$conversion[datos_email$grupo == "A"])),
n = c(sum(datos_email$grupo == "B"), sum(datos_email$grupo == "A")),
alternative = "greater"
)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: c(sum(datos_email$conversion[datos_email$grupo == "B"]), sum(datos_email$conversion[datos_email$grupo == "A"])) out of c(sum(datos_email$grupo == "B"), sum(datos_email$grupo == "A"))
## X-squared = 31.193, df = 1, p-value = 1.168e-08
## alternative hypothesis: greater
## 95 percent confidence interval:
## 0.01894271 1.00000000
## sample estimates:
## prop 1 prop 2
## 0.1468517 0.1199046
Métrica | Grupo A (20% OFF) | Grupo B (Envío Gratis) |
---|---|---|
Tasa de Conversión | 11.99% | 14.69% |
Diferencia Observada | +2.7% (B - A) | |
p-value | 1.168e-08 (≈
0.00000001168) |
¡Significativo! |
IC 95% (Diferencia) | [1.89%, 100%] |
El envío gratis (B) aumenta significativamente las conversiones (p < 0.05)..
Recomendación: Usar el envío gratis como gancho principal.
Escenario Ripley:
Si envían 1 millón de emails:
Conversiones esperadas con A (20% OFF): 119,904.
Conversiones esperadas con B (Envío Gratis): 146,852.
Ganancia neta: +26,948 conversiones (¡Solo con cambiar el texto!).
ROI Estimado:
Si cada conversión vale S/100 en ganancias:
Implementar el envío gratis en la próxima campaña (evidencia estadística sólida).
Monitorear el ticket promedio: Asegurarse de que el mayor volumen no reduzca el margen.
Testear combinaciones: Ejemplo: “¿Envío gratis + 10% OFF funciona mejor?” (nuevo test A/B/C).
Contexto: Oechsle probó dos diseños para su página de producto.
Origen: Datos de Google Analytics y Heatmaps.
Objetivo: Comparar el tiempo de sesión en dos diseños de botón “Comprar” en la página de producto de Oechsle.
Variable | Tipo de Dato | Descripción | Ejemplo de Valor |
---|---|---|---|
diseño |
Factor | Grupo A/B: A (abajo) = Botón al final de la página, B (flotante) = Botón visible siempre. | “A (abajo)” |
segundos |
Numeric | Tiempo en segundos que el usuario permaneció en la página antes de comprar o salir. | 105.3 segundos |
##Carga de la base de datos
tiempo_en_pagina=read.csv("tiempo_en_pagina.csv")
head(tiempo_en_pagina)
## diseño segundos
## 1 A (abajo) 63.12957
## 2 A (abajo) 102.43551
## 3 A (abajo) 106.01749
## 4 A (abajo) 62.22215
## 5 A (abajo) 75.71286
## 6 A (abajo) 83.51878
##
## Shapiro-Wilk normality test
##
## data: tiempo_en_pagina$segundos[tiempo_en_pagina$diseño == "A (abajo)"]
## W = 0.99714, p-value = 0.5384
##
## Shapiro-Wilk normality test
##
## data: tiempo_en_pagina$segundos[tiempo_en_pagina$diseño == "B (flotante)"]
## W = 0.99848, p-value = 0.9473
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
tiempo_en_pagina %>%
group_by(diseño) %>%
summarise(
n_usuarios = n(),
tiempo_promedio = mean(segundos),
desviacion = sd(segundos),
mediana = median(segundos)
)
## # A tibble: 2 × 5
## diseño n_usuarios tiempo_promedio desviacion mediana
## <chr> <int> <dbl> <dbl> <dbl>
## 1 A (abajo) 500 92.0 19.4 91.7
## 2 B (flotante) 500 110. 24.7 110.
Diferencia observada: +18.41 segundos (B vs A, +20% de aumento).
## Warning: package 'ggridges' was built under R version 4.4.3
ggplot(tiempo_en_pagina, aes(x = segundos, y = diseño, fill = diseño)) +
geom_density_ridges() +
scale_fill_manual(values = c("#A0E7E5", "#B5EAD7")) +
labs(title = "Distribución del Tiempo en Página",
x = "Segundos", y = "")
## Picking joint bandwidth of 5.73
Validez del Test:
Hipótesis Nula (H₀):
“El tiempo promedio en página no aumenta con el
botón flotante (B) comparado con el botón tradicional (A).”
H0:μB≤μA
Hipótesis Alternativa (H₁):
“El tiempo promedio en página es mayor con el botón
flotante (B) que con el botón tradicional (A).”
H1:μB>μA
Objetivo del Test: Determinar si el botón flotante (siempre visible) retiene más tiempo a los usuarios que el botón al final de la página.
En términos de negocio:
##
## Welch Two Sample t-test
##
## data: segundos by diseño
## t = -13.088, df = 945.2, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group A (abajo) and group B (flotante) is less than 0
## 95 percent confidence interval:
## -Inf -16.092
## sample estimates:
## mean in group A (abajo) mean in group B (flotante)
## 91.96299 110.37072
Métrica | Valor | Interpretación |
---|---|---|
Diferencia de Medias | 110.37 - 91.96 = 18.41s |
El botón flotante (B) retuvo 18.41 segundos más en promedio por sesión. |
Estadístico t | -13.088 |
Valor extremo (fuera de la zona de aceptación de H₀). |
p-value | < 2.2e-16 (≈ 0) |
Evidencia abrumadora contra H₀ (la diferencia es estadísticamente significativa). |
IC 95% (unilateral) | [-Inf, -16.092] |
Con 95% de confianza, la diferencia real es al menos 16.092 segundos a favor de B. |
Proyección para Oechsle:
Si el sitio recibe 500,000 visitas/mes, el botón flotante podría generar:
+9,205 horas adicionales de engagement
(18.41s × 500,000
).
+6,000 conversiones adicionales (asumiendo el 1.2% de mejora).
Contexto: Saga Falabella quiere saber qué tipo de descuento genera mayor valor de compra:
Objetivo: Comparar el valor de compra promedio entre dos tipos de promociones:
A (% descuento): Ej. “30% OFF en toda la tienda”.
B (S/ fijos): Ej. “S/ 50 de descuento en compras mayores a S/ 200”.
Variable | Tipo de Dato | Descripción | Ejemplo de Valor |
---|---|---|---|
promocion |
Factor | Tipo de promoción asignada aleatoriamente: “% descuento” o “S/ fijos”. | “% descuento” |
valor_compra |
Numeric | Monto total gastado por el cliente (en S/). Distribución no normal. | 185.50 |
## promocion valor_compra
## 1 % descuento 110.52770
## 2 % descuento 65.51758
## 3 % descuento 52.73959
## 4 % descuento 39.74649
## 5 % descuento 118.97741
## 6 % descuento 26.16210
library(dplyr)
ventas %>%
group_by(promocion) %>%
summarise(
n_transacciones = n(),
valor_promedio = mean(valor_compra),
mediana = median(valor_compra),
desviacion = sd(valor_compra)
)
## # A tibble: 2 × 5
## promocion n_transacciones valor_promedio mediana desviacion
## <chr> <int> <dbl> <dbl> <dbl>
## 1 % descuento 300 102. 83.5 72.0
## 2 S/ fijos 300 177. 160. 96.4
## Warning: package 'ggpubr' was built under R version 4.4.3
ggboxplot(ventas, x = "promocion", y = "valor_compra",
color = "promocion", palette = c("#FFD700", "#C9E4CA")) +
labs(title = "¿Qué promo genera mayor ticket?")
Hipótesis Nula (H₀):
“El valor mediano de compra con descuentos en S/ fijos
(B) es menor o igual al de descuentos en
% (A).”
H0:MedianaB≤MedianaA
(Usamos la mediana por la distribución no normal de los datos).
Hipótesis Alternativa (H₁):
“El valor mediano de compra con descuentos en S/ fijos
(B) es mayor que con descuentos en %
(A).”
H1:MedianaB>MedianaA
wilcox.test(
valor_compra ~ promocion,
data = ventas,
alternative = "greater", # Queremos probar si B > A
conf.int = TRUE # Para calcular el IC de la diferencia
)
##
## Wilcoxon rank sum test with continuity correction
##
## data: valor_compra by promocion
## W = 22895, p-value = 1
## alternative hypothesis: true location shift is greater than 0
## 95 percent confidence interval:
## -80.34775 Inf
## sample estimates:
## difference in location
## -69.73388
p-value = 1: No hay evidencia para rechazar H₀.
Diferencia estimada:
-69.73
(negativa).
IC 95%:
[-80.35, Inf]
.