En el mundo actual, es difícil imaginar el desarrollo de productos sin pruebas A / B. Para lanzar con éxito un producto o una nueva funcionalidad, debe diseñar correctamente A / B, calcular e interpretar sus resultados. A veces necesitamos pruebas para más de dos grupos. En este artículo, consideraremos un caso así: pruebas múltiples:
- Hablaremos sobre cuándo y por qué realizar múltiples pruebas;
- considerar los principales métodos para calcular los resultados de las pruebas y los principios matemáticos en los que se basan los métodos;
- damos ejemplos de la implementación de software de los métodos; Puede usar estos ejemplos en sus proyectos.
Entonces comencemos.

Múltiples experimentos: cuándo y por qué
Obviamente, cualquier complicación técnica del experimento debe justificarse por necesidad práctica. Esto también se aplica a múltiples pruebas. Si la audiencia se divide en más de dos subgrupos, la probabilidad de obtener un error de primer tipo durante el experimento aumenta exponencialmente:
donde
- el número de subgrupos,
- un determinado nivel de significación estadística.
Por lo tanto, al agregar solo un subgrupo adicional a la prueba de pares habitual (
) en un nivel estándar dado
obtenemos la probabilidad de un error de primer tipo
que excede significativamente nuestro objetivo
.
¿Por qué hacer múltiples experimentos si reducen la precisión de los resultados de la investigación? Puede haber varias razones:
- Es necesario probar varios cambios y su efecto acumulativo en las métricas del producto. Un ejemplo es mostrar al usuario en la página de servicio dos elementos nuevos que están ubicados de manera diferente entre sí.
- Los cambios solo se pueden probar en un período de tiempo, ya que son interdependientes y sensibles a la estacionalidad semanal. Un ejemplo es deshabilitar los canales publicitarios para calcular el efecto de la canibalización entre canales.
- El cliente desea recibir una respuesta lo antes posible y más barata, cuál de las opciones se debe elegir, ahorrando al mismo tiempo el desarrollo y la implementación del experimento.
Si nos enfrentamos a uno de estos problemas y tenemos que calcular la significancia estadística para la prueba, debemos considerar la necesidad de correcciones para pruebas múltiples. Sobre qué es y cómo hacerlo bien, y se discutirá a continuación.
Múltiples experimentos: características de cálculo
Conceptos basicos
Considere el caso general cuando se trata de
hipótesis
,
sobre igualdad de pares de mediana o promedio
subgrupos En este caso, tanto el resultado verdadero como el incorrecto son posibles.
para cada uno de
hipótesis Presente los resultados como un experimento de matriz de confusión:
Por lo tanto, rechazado incorrectamente
de
rechazó hipótesis básicas.
En base a estos parámetros, presentamos dos conceptos importantes de errores, que se controlan durante las pruebas múltiples:
y
.
Probabilidad de error grupal
(Tasa de error familiar) es la probabilidad de obtener al menos un error del primer tipo y está determinada por la fórmula:
(False Discovery Rate) es la expectativa matemática de la relación de errores del primer tipo al número total de desviaciones de la hipótesis principal:
Considere los métodos para controlar estos errores utilizando el ejemplo de un caso de producto estándar.
Descripción del caso
Como un ejemplo simple, considere un experimento en el que a tres grupos de usuarios aislados y disjuntos se les mostraron tres opciones de página con una oferta para hacer clic en el botón de llamada de un anuncio. Como métrica básica para la simplicidad de cálculo, tomamos el número total de llamadas en cada grupo.
Veamos cómo cambió la métrica en estudio:
Fig. 1. El gráfico de la dinámica de presionar el botón de llamada
Usaremos el método estándar
para que la distribución de la métrica objetivo en las muestras sea normal, y observe los histogramas y los gráficos de rango de los valores promedio en las muestras:
Fig. 2. El histograma de la distribución de valores promedio en grupos.
Fig. 3. El rango de valores promedio en grupos
A juzgar por los gráficos, el grupo C gana por el número de clics en el botón de llamada. Sin embargo, es necesario verificar la significación estadística de los resultados. Para hacer esto, llevamos la métrica estimada a la forma de la distribución normal y usamos el criterio t de Student habitual para la comparación por pares de grupos en el experimento, y luego - métodos de control
y
para tener en cuenta las correcciones para comparaciones múltiples.
Control FWER
Existen muchos métodos para controlar este error, pero dos son los más comunes:
1) procedimiento de un paso con ajuste simultáneo
para todas las hipótesis probadas utilizando el método Bonferroni;
2) ajuste secuencial e iterativo
c toma de decisiones en cada paso de acuerdo con el resultado del método Hill.
1. Enmienda de Bonferroni
Este procedimiento de un solo paso reduce la probabilidad de un resultado falso positivo del experimento. La esencia del método es aceptar una hipótesis alternativa si:
donde
- el número de hipótesis probadas.
El método puede implementarse simplemente usando la biblioteca estándar
:
from bootstrapped import bootstrap as bs from bootstrapped import compare_functions as bs_cmp from bootstrapped import stats_functions as bs_st bs_ab_estims = bs.bootstrap_ab(np.array(group_A), np.array(group_B), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4) bs_bc_estims = bs.bootstrap_ab(np.array(group_B), np.array(group_C), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4) bs_ac_estims = bs.bootstrap_ab(np.array(group_A), np.array(group_C), bs_st.mean bs_cmp.difference, num_iterations=5000, alpha=0.05/3, iteration_batch_size=100, scale_test_by=1, num_threads=4)
Una vez obtenidos los resultados de una evaluación estadística, podemos concluir si los grupos difieren o no.
El principal inconveniente del enfoque: cuantos más subgrupos, menor es el poder del criterio, lo que aumenta la probabilidad de aceptar la hipótesis incorrecta. Por ejemplo, para diez pruebas y
necesita conseguir
decir que la diferencia es significativa. Para nivelar estas deficiencias, puede elegir el método Hill.
2. Método de la colina
Este es un procedimiento de cambio secuencial hacia abajo.
. En el primer paso del algoritmo del método, real
ordenados ascendentes:
entonces el original
-nivel:
después de lo cual se verifica la condición
y concluye si la hipótesis principal es verdadera
.
Punto de corte del algoritmo: momento i cuando se acepta la primera hipótesis principal
y todos los posteriores
.
Puede implementar este método usando el procedimiento
de la biblioteca
con parámetro
:
from bootstrapped import bootstrap as bs from bootstrapped import stats_functions as bs_st from scipy.stats import ttest_ind from statsmodels.sandbox.stats.multicomp import multipletests bs_a = bs.bootstrap(np.array(group_A), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) bs_b = bs.bootstrap(np.array(group_B), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) bs_c = bs.bootstrap(np.array(group_C), stat_func=bs_st.mean, num_iterations=10000, iteration_batch_size=300, return_distribution=True) stat_ab, p_ab = stats.ttest_ind(pd.DataFrame(bs_a), pd.DataFrame(bs_b)) stat_bc, p_bc = stats.ttest_ind(pd.DataFrame(bs_b), pd.DataFrame(bs_c)) stat_ac, p_ac = stats.ttest_ind(pd.DataFrame(bs_a), pd.DataFrame(bs_c)) print(sorted([p_ab, p_bc, p_ac])) print("FWER: " + str(multipletests(sorted([p_ab, p_bc, p_ac]), alpha=0.05, method='holm', is_sorted = True)))
Control FDR
Control
significa que se cumple la condición
. Al mismo tiempo
, es decir, la probabilidad de obtener un error de primer orden en el control
en declive
Método Benjamini-Hochberg
Este procedimiento ascendente implica un cambio secuencial.
pre-ordenado ascendente:
Entonces fuente
-nivel se ajusta mediante la fórmula:
entonces, como en el método Holm, se verifica la condición
y concluye si la hipótesis principal es verdadera
y todo posterior
.
El método Benjamini-Hochberg, así como el método Holm, se pueden implementar utilizando el procedimiento
:
print("FDR: " + str(multipletests([p_ab, p_bc, p_ac], alpha=0.05, method='fdr_bh', is_sorted = False)))
Conclusión
En el artículo hablamos sobre los principales métodos para evaluar los resultados de múltiples pruebas y proporcionamos ejemplos de código de programa que implementa estos métodos. Esperamos que haya pasado tiempo con beneficio e interés y pueda poner en práctica los procedimientos descritos. Y si tiene alguna pregunta, estaremos encantados de responderla.
Gracias por su atencion!