No se nada sobre A/B testing
Tags: datascience, machinelearning, tutorial, python
Published: 2020-09-04 18:16:12

Pero eso va a cambiar ahora.

Estoy buscando [trabajo](linkedin.com/in/ruiz-leandro) como data scientist hace algunos dias y descubrí que es un requisito muy común tener conocimientos sobre A/B testing. Por lo tanto me puse manos a la obra y esto es todo lo que aprendí sobre ello.

---

# ¿Que es un A/B testing?

Es un experimento controlado donde se enfrenta un cambio (usualmente en un sitio web) ante su forma original. Por ejemplo, cambiando el color de un botón de compra de azul a naranja.

En este caso se realizar un A/B test para saber que botón funciona mejor. 

Tambien se puede utilizar este tipo de test en otras situaciones, tales como:

- Cambios de diseño.
- Cambios en la interfaz de usuario.
- Cambios en un algoritmo.
- Cambios de precios (aunque no es muy recomendable).

---

# ¿Cómo se mide?

Antes que nada, el primer paso para realizar este experimento es definir que métrica se quiere optimizar. Puede ser ingresos, ganancias, clicks o visualizaciones de publicidad. Se puede elegir una o varias de estas métricas segun el caso. Cuando muchas de estas mejoran, quiere decir que se va por el camino correcto.

> Es muy importante saber a quien atribuir una conversión. Por ejemplo, si realizamos un cambio en  la página A, y un usuario pasa de la página A a la página B, y luego a la página C, ¿es gracias al cambio realizado? 

Tambien hay que tener en cuenta que cuando se realiza un A/B test, la varianza es nuestro enemigo. Por eso intenta elegir una métrica que tenga poca varianza para no afectar a las conclusiones del experimento.

---

# T-statistic y p-value

Son dos herramientas de la estadística para saber si un resultado es real.

## T-statistic

T-statistic o T-test (test-T en español), es una medición de la diferencia en comportamiento entre los dos grupos, expresado en unidades de error estándar.

Su resultado se interpreta de la siguiente manera: un valor-T alto significa que hay probabilidad de una diferencia real. Uno bajo, indica lo contrario.

Además, hay alternativas a esta prueba según la métrica que se observa: prueba exacta de Fisher (porcentaje de clics), E-test (transacciones por usuario), Chi-squared test (cantidad de ordenes).

## p-value

El p-value (valor-p) es la probabilidad de que el experimento satisfaga la hipótesis nula, es decir, la probabilidad de que no haya una diferencia real entre los dos grupos.

Un valor-p bajo nos indica que hay una alta probabilidad de que el cambio tenga un impacto real en las métricas analizadas.

Asi que, lo que estamos buscando es un T-statistic alto y un p-value bajo. Pero antes de comenzer el experimento, hay que decidir el limite inicial de éxito que estamos buscando. Puede ser un valor-p de 1 o 5 (más riesgo), pero siempre es posible que el resultado sea aleatorio.

> Cuando el resultado del experimento es negativo, no querras correrlo por mucho tiempo o te expones a perder dinero. Por eso es una buena idea que monitorees los resultados a diario.

---

# Midiendo T-statistic y p-value en Python

Gracias a la biblioteca `scipy` es bastante simple medir estos valores.

Vamos a utilizar datos sintéticos como ilustración:

```python
In[1]:
	import numpy as np
	from scipy import stats

	A = np.random.normal(26.0, 5.0, 10000)
	B = np.random.normal(25.0, 5.0, 10000)

	stats.ttest_ind(A, B)

Out[1]: 
	Ttest_indResult(statistic=-14.702166911741832, pvalue=1.1209149921150975e-48)
```

El valor de T-test negativo nos indica que realizamos un mal cambio, y el valor-p muy bajo nos confirma que es muy improbable de que el resultado sea asi de casualidad.

En resumen, lo que estamos buscando es un test-T alto un valor-p bajo, para estar seguros que nuestros cambios son positivos y consecuencia del experimento y no del azar.

![GitHub Button](https://dev-to-uploads.s3.amazonaws.com/i/3gqapph6qcbm0ocmp5zl.png)
<figure>
  <figcaption>[Link a GitHub](https://github.com/ruizleandro/A-B-Testing)</figcaption>
</figure>

---

# ¿Cuando terminar el experimento?

Depende de los objetivos fijados antes del experimento, si llegaste al valor-p de 1 o 5, es un buen momento.

Si pasan muchos días donde el valor-p no baja, quiere decir que no va a ocurrir, y ahi debes decidir cual es el tiempo máximo que estas dispuesto a esperar (pueden ser unas tres o cuatro semanas más) entendiendo que puedes utilizar ese tiempo para otro experimento.

---

# A/B test gotchas

Correlación no implica causalidad. Siempre existe la posibilidad de que no haya un efecto real.

- Efectos de novedad: tu cambio funciona solo porque es nuevo. La unica forma de asegurarse de los resultados es hacer el experimento de nuevo, y replicar los resultados.
- Efectos temporales: si llevas a cabo el experimento en Navidad (donde la gente gasta más) o en verano (donde la gente esta más tiempo de vacaciones). Por esto, hay que estar conciente del momento del año donde se realiza la prueba. En caso de realizarlo en una epoca "especial", deberías comparar los resultados con el mismo periodo del año anterior.
- Selección parcial: hay que tener cuidado con la manera en que eliges en que grupo irá cada usuario (por ejemplo, poner usuarios nuevos en un grupo y viejos en otro), porque puede condicionarse la forma en que reaccione un grupo al cambio. Tambien debes asegurarte que durante una sesián el usuario permanezca en el grupo asignado.

> Performa un A/A test (es decir, usar dos grupos iguales) para chequear la parcialidad u otro tipo de problemas.

---

# Ruido en los datos

Es muy importante limpiar los datos antes de hacer un A/B testing. Hay que observar que tipo de outliers hay, ya que puede haber muchos comportamientos extraños que necesitan ser filtrados.

## Errores en la atribución

Debes pensar como vas a contar conversiones como una función de distancia del cambio que realizaste, y ponerte de acuerdo en como vas a medir esos efectos. Además, si estas llevando a cabo varios experimentos al mismo tiempo, ¿estos crearán problemas al otro? Eso es mucho muy importante.

De nuevo, siempre hay que tomar los resultados con un grano de sal. Hay muchas cosas que pueden alterar los resultados. Además, si no tienes mucho tiempo, tienes que tomar los resultados con cuidado e idealmente probarlos de nuevo en otro momento. 

---

# Conclusión

Estos son los aspectos básicos de A/B testing, yo tampoco sabía nada sobre esto pero gracias a la investigación que realice para este artículo tengo una buena base de conceptos.