Soy un desarrollador de software que trabaja en sistemas de prueba A / B. No tengo antecedentes sólidos de estadísticas, pero he estado adquiriendo conocimientos en los últimos meses.
Un escenario de prueba típico implica comparar dos URL en un sitio web. Un visitante visita LANDING_URL
y luego se reenvía al azar a cualquiera URL_CONTROL
o URL_EXPERIMENTAL
. Un visitante constituye una muestra, y se logra 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 tasas de conversión es la tasa de conversión (generalmente expresada como un porcentaje). Una tasa de conversión típica para una URL dada es algo en el ámbito de 0.01% a 0.08%. Realizamos pruebas para determinar cómo se comparan las nuevas URL con las antiguas. Si URL_EXPERIMENTAL
se muestra un rendimiento superior URL_CONTROL
, lo reemplazamos URL_CONTROL
con URL_EXPERIMENTAL
.
Hemos desarrollado un sistema utilizando técnicas simples de prueba de hipótesis. Usé las respuestas a otra pregunta CrossValidated aquí para desarrollar este sistema.
Una prueba se configura de la siguiente manera:
- La tasa de conversión estimada
CRE_CONTROL
deURL_CONTROL
se calcula utilizando datos históricos. - Se establece la tasa
CRE_EXPERIMENTAL
de conversión objetivo deseada deURL_EXPERIMENTAL
. - Normalmente se usa un nivel de significación de 0,95.
- Normalmente se usa una potencia de 0.8.
Juntos, todos estos valores se utilizan para calcular el tamaño de muestra deseado. Estoy usando la función R power.prop.test
para obtener este tamaño de muestra.
Se ejecutará una prueba hasta que se recojan todas las muestras. En este punto, se calculan los intervalos de confianza para CR_CONTROL
y CR_EXPERIMENTAL
. Si no se superponen, 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 preocupaciones principales:
1. Si, en algún momento durante la prueba, se recolectan suficientes muestras para mostrar un ganador claro, ¿no se puede detener la prueba?
2. Si no se declara ningún ganador al final de la prueba, ¿podemos ejecutar la prueba más tiempo para ver si podemos recolectar suficientes muestras para encontrar un ganador?
Cabe señalar que existen muchas herramientas comerciales que permiten a sus usuarios hacer exactamente lo que nuestros propios usuarios desean. He leído que hay muchas falacias con lo anterior, pero también he encontrado la idea de una regla de detención y me gustaría explorar la posibilidad de usar dicha regla en nuestros propios sistemas.
Aquí hay dos enfoques que nos gustaría considerar:
1. Utilizando power.prop.test
, compare las tasas de conversión medidas actuales con el número actual de muestras y vea si se han recolectado 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 325 muestras, CRM_CONTROL
(la tasa de conversión medida para el control) es 0.08 y CRM_EXPERIMENTAL
0.15. power.prop.test
se ejecuta con estas tasas de conversión y N
se encuentra en 325. ¡Exactamente el número de muestras necesarias para declarar CRM_EXPERIMENTAL
que es el ganador! En este punto, esperamos que la prueba pueda finalizar. Del mismo modo, si la prueba alcanza las 1774 muestras pero no se encuentra un ganador, pero luego alcanza las 2122 muestras, lo que es suficiente para mostrar que CRM_CONTROL
0.1 y CRM_EXPERIMENTAL
0.128 es un resultado en el que se puede declarar un ganador.
En una pregunta relacionada, los usuarios informaron que tal prueba es menos creíble debido a que alienta a las paradas tempranas a tener menos muestras y también es vulnerable al sesgo de estimación y a un mayor número de errores de Tipo I y Tipo II. ¿Hay alguna manera de hacer que esta regla de detención funcione? Este es nuestro enfoque preferido ya que significa menos tiempo de programación para nosotros. ¿Quizás esta regla de detención podría funcionar ofreciendo algún tipo de puntaje numérico o puntajes que midan la credibilidad de la prueba en caso de que se detenga antes?
2. Utilizando 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 comenzar una prueba y finalizarla de tal manera que no pierdan el tiempo excesivo en las pruebas? Ejecutar una prueba demasiado tiempo o tener que comenzar una prueba nuevamente con diferentes parámetros.
De los dos métodos anteriores, estoy a favor de SPRT porque las matemáticas son un poco más fáciles de entender y porque parece que puede ser más fácil de programar. Sin embargo, no entiendo cómo usar la función de probabilidad en este contexto. Si alguien pudiera construir un ejemplo de cómo calcular la razón de probabilidad, la suma acumulativa de la razón de probabilidad, y continuar con un ejemplo que ilustra una situación en la que uno continuaría monitoreando, cuando uno aceptaría la hipótesis nula y la hipótesis alternativa, eso nos ayudaría a determinar si SPRT es el camino correcto.