Soy desarrollador de software y trabajo en sistemas de pruebas A/B. No tengo una formación sólida en estadística, pero he ido adquiriendo conocimientos en los últimos meses.
Un escenario de prueba típico consiste en comparar dos URL de un sitio web. Un visitante visita LANDING_URL
y luego se reenvía aleatoriamente a URL_CONTROL
o URL_EXPERIMENTAL
. Un visitante constituye una muestra, y se alcanza una condición de victoria cuando el visitante realiza alguna acción deseable en ese sitio. Esto constituye una conversión y la tasa de conversión es la tasa de conversión (normalmente expresada en porcentaje). Una tasa de conversión típica para una URL determinada se sitúa entre el 0,01% y el 0,08%. Hacemos pruebas para determinar cómo se comparan las nuevas URL con las antiguas. Si URL_EXPERIMENTAL
supera a URL_CONTROL
sustituimos URL_CONTROL
con URL_EXPERIMENTAL
.
Hemos desarrollado un sistema que utiliza técnicas sencillas de comprobación de hipótesis. He utilizado las respuestas a otra pregunta de CrossValidated ici para desarrollar este sistema.
Se establece una prueba de la siguiente manera:
- Estimación del índice de conversión
CRE_CONTROL
deURL_CONTROL
se calcula a partir de datos históricos. - La tasa de conversión deseada
CRE_EXPERIMENTAL
deURL_EXPERIMENTAL
está ajustado. - Se suele utilizar un nivel de significación del 0,95.
- Se suele utilizar una potencia de 0,8.
En conjunto, todos estos valores se utilizan para calcular el tamaño de muestra deseado. Utilizo la función de R power.prop.test
para obtener este tamaño de muestra.
Se realizará una prueba hasta que se recojan todas las muestras. En este punto, los intervalos de confianza para CR_CONTROL
y CR_EXPERIMENTAL
se calculan. Si no se solapan, se puede declarar un ganador con un nivel de significación de 0,95 y una potencia de 0,8.
Sin embargo, los usuarios de nuestras pruebas tienen dos grandes preocupaciones:
1. Si, en algún momento de la prueba, se recogen suficientes muestras para mostrar un claro ganador, ¿no se puede detener la prueba?
2. Si al final de la prueba no se ha declarado ningún ganador, ¿podemos prolongar la prueba para ver si podemos recoger suficientes muestras para encontrar un ganador?
Hay que señalar que existen muchas herramientas comerciales que permiten a sus usuarios hacer exactamente lo que nosotros deseamos. He leído que hay muchas falacias con lo anterior, pero también me he topado con la idea de una regla de parada y me gustaría explorar la posibilidad de utilizar una regla de este tipo en nuestros propios sistemas.
He aquí dos enfoques que nos gustaría considerar:
1. En power.prop.test
Compara los índices de conversión medidos con el número actual de muestras y comprueba si se han recogido suficientes muestras para declarar un ganador.
Ejemplo: Se ha configurado una prueba para ver si existe el siguiente comportamiento en nuestro sistema:
CRE_CONTROL
: 0.1CRE_EXPERIMENTAL
: 0.1 * 1.3- Con estos parámetros, el tamaño de la muestra
N
es 1774.
Sin embargo, a medida que la prueba avanza y alcanza las 325 muestras, CRM_CONTROL
(índice de conversión medido para el control) es 0,08 y CRM_EXPERIMENTAL
es 0,15. power.prop.test
se ejecuta en estas tasas de conversión y N
es de 325. Exactamente el número de muestras necesarias para declarar CRM_EXPERIMENTAL
¡para ser el ganador! Llegados a este punto, esperamos poder dar por concluida la prueba. Del mismo modo, si la prueba alcanza 1774 muestras pero no se encuentra ningún ganador, pero luego llega a 2122 muestras, lo que es suficiente para demostrar que CRM_CONTROL
de 0,1 y CRM_EXPERIMENTAL
0,128 es un resultado en el que se puede declarar un ganador.
En un pregunta relacionada los usuarios advirtieron de que una prueba de este tipo es menos creíble debido a que fomenta las paradas tempranas al tener menos muestras y también es vulnerable a sesgo de estimación y un mayor número de errores de tipo I y II. ¿Hay alguna forma de hacer que funcione esta regla de parada? Este es nuestro enfoque preferido, ya que significa menos tiempo de programación para nosotros. ¿Quizás esta regla de parada podría funcionar ofreciendo algún tipo de puntuación o puntuaciones numéricas que midieran la credibilidad de la prueba en caso de que se detuviera antes de tiempo?
2. Utilización de análisis secuencial o SPRT .
Estos métodos de prueba están diseñados exactamente para la situación en la que nos encontramos: ¿cómo pueden nuestros usuarios empezar una prueba y terminarla de tal manera que no pierdan un tiempo excesivo en la prueba? Ya sea realizando una prueba demasiado larga o teniendo que volver a empezar una prueba con parámetros diferentes.
De los dos métodos anteriores, me inclino por el SPRT porque las matemáticas son un poco más fáciles de entender para mí y porque parece que puede ser más fácil de programar. Sin embargo, no entiendo cómo utilizar el función de verosimilitud en este contexto. Si alguien pudiera construir un ejemplo de cómo calcular la razón de verosimilitud, la suma acumulativa de la razón de verosimilitud, y continuar con un ejemplo que ilustrara una situación en la que uno continuaría controlando, en la que uno aceptaría la hipótesis nula y la hipótesis alternativa, eso nos ayudaría a determinar si SPRT es el camino correcto a seguir.