Pruebas AB con programación R

La prueba dividida es otro nombre de la prueba A/B y es una metodología común o general. Se usa en línea cuando se quiere probar una nueva característica o un producto. La agenda principal aquí es diseñar un experimento que brinde resultados repetibles y robustos para tomar una decisión informada de lanzarlo o no. Generalmente, esta prueba incluye una comparación de dos páginas web representando las variantes A y B para ellas, a medida que el número de visitantes es similar, la tasa de conversión que brinda la variante mejora. En general, es un experimento en el que se comparan dos o más variaciones de la misma página web mostrándolas a los visitantes en tiempo real y, a través de eso, determina cuál funciona mejor para un objetivo determinado. Las pruebas A/B no solo se usan o se limitan solo a las páginas web, se pueden usar en correos electrónicos, ventanas emergentes, formularios de registro, aplicaciones y más. Veamos el ejemplo de un estudio de caso. Así que implementemos pruebas AB en ellenguaje R.

Caso de estudio

Imaginemos que tenemos resultados de pruebas A/B de dos sitios web de reservas de hoteles (Nota: los datos no son los reales). Primero, necesitamos realizar un análisis de prueba de los datos; en segundo lugar, debemos sacar conclusiones de los datos que obtuvimos en el primer paso y, en el paso final, hacemos recomendaciones o sugerencias a los equipos de producto o de gestión.

Resumen del conjunto de datos

Descargue el conjunto de datos desde aquí .

  • La variante A es del grupo de control que indica las características o productos existentes en un sitio web.
  • La variante B es del grupo experimental para verificar la nueva versión de una función o producto para ver si a los usuarios les gusta o si aumenta las conversiones (reservas).
  • Convertido se basa en el conjunto de datos dado, hay dos categorías definidas por valor lógico. Se mostrará verdadero cuando el cliente complete las reservas y se mostrará falso cuando el cliente visite los sitios pero no haga una reserva.

Hipótesis de prueba

  • Hipótesis nula: ambas versiones A y B tienen la misma probabilidad de conversión o de impulsar la reserva del cliente. En otras palabras, no hay diferencia o ningún efecto entre las versiones A y B.
  • Hipótesis alternativa: las versiones A y B tienen diferentes probabilidades de conversión o de impulsar la reserva del cliente y hay una diferencia entre la versión A y la versión B. La versión B es mejor que la versión A para impulsar las reservas de los clientes. PEx_B! = Pcont_A.

Análisis en R

1. Prepare el conjunto de datos y cargue la biblioteca tidyverse que contiene los paquetes relevantes utilizados para el análisis.

R

# load the library
library(tidyverse)
  
# set up your own directory
setwd(“~egot_\\Projects\\ABTest”) 
  
# Using read.csv base import function  
ABTest <- read.csv("Website Results.csv", 
                   header = TRUE)
  
# save in your own directory
save(ABTest, file = "~rda\\ABTest.rda")

2. Filtremos las conversiones para las variantes A y B y calculemos sus tasas de conversión correspondientes.

R

# Let's filter out conversions for variant_A  
conversion_subset_A <- ABTest %>% 
    filter(variant == "A" & converted == "TRUE")
  
# Total Number of Conversions for variant_A
conversions_A <- nrow(conversion_subset_A)
  
# Number of Visitors for variant_A
visitors_A <- nrow(ABTest %>% 
    filter(variant == "A"))
  
# Conversion_rate_A
conv_rate_A <- (conversions_A/visitors_A)  
print(conv_rate_A) # 0.02773925
  
# Let's take a subset of conversions for variant_B
conversion_subset_B <- ABTest %>% 
    filter(variant == "B" & converted == "TRUE")
  
# Number of Conversions for variant_B
conversions_B <- nrow(conversion_subset_B)
  
# Number of Visitors for variant_B
visitors_B <- nrow(ABTest %>% 
    filter(variant == "B"))
  
# Conversion_rate_B
conv_rate_B <- (conversions_B/visitors_B)  
print(conv_rate_B) # 0.05068493

Producción:

0.02773925
0.05068493

3. Calculemos el aumento relativo utilizando las tasas de conversión A y B. El aumento es un porcentaje del aumento

R

uplift <- (conv_rate_B - conv_rate_A) / conv_rate_A * 100
uplift # 82.72%

Producción:

82.72%

B es mejor que A en un 83%. Esto es lo suficientemente alto como para decidir un ganador.

4. Calculemos la probabilidad combinada, el error estándar, el margen de error y la diferencia en proporción (estimación puntual) para las variantes A y B

R

# Pooled sample proportion for variants A & B
p_pool <- (conversions_A + conversions_B) / (visitors_A +
                                             visitors_B)
print(p_pool) # 0.03928325
  
# Let's compute Standard error for variants A & B (SE_pool)
SE_pool <- sqrt(p_pool * (1 - p_pool) * ((1 / visitors_A) + 
                                         (1 / visitors_B)))
print(SE_pool) # 0.01020014
  
# Let's compute the margin of error for the pool
MOE <- SE_pool * qnorm(0.975)
print(MOE) # 0.0199919
  
# Point Estimate or Difference in proportion
d_hat <- conv_rate_B - conv_rate_A

Producción:

0.03928325
0.01020014
0.0199919

5. Calculemos el puntaje z

R

# Compute the Z-score so we
# can determine the p-value
z_score <- d_hat / SE_pool
print(z_score) # 2.249546

Producción:

2.249546

6. Usando este puntaje z, podemos determinar rápidamente el valor p a través de una tabla de búsqueda o usando el siguiente código:

R

# Let's compute p_value 
# using the z_score value
p_value <- pnorm(q = -z_score, 
                 mean = 0, 
                 sd = 1) * 2
print(p_value) # 0.02447777

Producción:

0.02447777

7. Calculemos el intervalo de confianza para el grupo

R

# Let's compute Confidence interval for the 
# pool using pre-calculated results
ci <- c(d_hat - MOE, d_hat + MOE) 
ci # 0.002953777 0.042937584
  
# Using same steps as already shown, 
# let's compute the confidence 
# interval for variants A separately
X_hat_A <- conversions_A / visitors_A
se_hat_A <- sqrt(X_hat_A * (1 - X_hat_A) / visitors_A) 
ci_A <- c(X_hat_A - qnorm(0.975) * se_hat_A, X_hat_A
          + qnorm(0.975) * se_hat_A) 
print(ci_A) # 0.01575201 0.03972649
  
# Using same steps as already shown, 
# let's compute the confidence 
# interval for variants B separately                                 
X_hat_B <- conversions_B / visitors_B
se_hat_B <- sqrt(X_hat_B * (1 - X_hat_B) / visitors_B) 
ci_B <- c(X_hat_B - qnorm(0.975) * se_hat_B, 
          X_hat_B + qnorm(0.975) * se_hat_B) 
print(ci_B) # 0.03477269 0.06659717

Producción:

0.002953777 0.042937584
0.01575201 0.03972649
0.03477269 0.06659717

8. Visualicemos los resultados calculados hasta ahora en un marco de datos (tabla) :

R

vis_result_pool <- data.frame(
  metric = c(
    'Estimated Difference',
    'Relative Uplift(%)',
    'pooled sample proportion',
    'Standard Error of Difference',
    'z_score',
    'p-value',
    'Margin of Error',
    'CI-lower',
    'CI-upper'),
  value = c(
    conv_rate_B - conv_rate_A,
    uplift,
    p_pool,
    SE_pool,
    z_score,
    p_value,
    MOE,
    ci_lower,
    ci_upper
  ))
vis_result_pool

Producción:

                     metric       value
1         Estimated Difference  0.02294568
2           Relative Uplift(%) 82.71917808
3     pooled sample proportion  0.03928325
4 Standard Error of Difference  0.01020014
5                      z_score  2.24954609
6                      p-value  0.02447777
7              Margin of Error  0.01999190
8                     CI-lower  0.00000000
9                     CI-upper  0.04589136

Recomendaciones y Conclusiones

  • La variante A tiene 20 conversiones y 721 visitas, mientras que la variante B tiene 37 conversiones y 730 visitas.
  • El aumento relativo del 82,72 % basado en una tasa de conversión de la variante A es del 2,77 % y para la B es del 5,07 %. Por lo tanto, la variante B es mejor que la A en un 82,72 %.
  • Para este análisis, el valor P calculado fue 0,02448. Por lo tanto, existe una fuerte significación estadística en los resultados de las pruebas.
  • De los resultados anteriores que representan una fuerte significación estadística. Debe rechazar la hipótesis nula y proceder con el lanzamiento.
  • Por lo tanto, acepte la Variante B y podrá transferirla a los usuarios al 100 %.

Si desea conocer el análisis completo y los detalles de los conjuntos de datos, haga clic en este enlace de Github. 

Limitaciones

Es una de las herramientas para la optimización de conversiones y no es una solución independiente y no va a solucionar todos nuestros problemas de conversión y no puede solucionar los problemas a medida que obtiene datos desordenados y necesita realizar más que solo un Test A/B para mejorar las conversiones. 

Publicación traducida automáticamente

Artículo escrito por pranithpashikanti786 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *