Imaginemos llegar a la oficina un día y durante las reuniones de coordinación se haga notar la disponibilidad de un grupo de recursos para ejecutar proyectos dirigidos a resolver un necesidad específica.
En particular, nos han aprobado 100 MM de pesos y existe la posibilidad de llevar adelante un proyecto tecnológico destinado a incrementar la rapidez del SAF (Sistema de Ayuda a los Fiscales). Este proyecto implica, entre otras cosas, el paso desde Oracle a un sistema más barato como PostgreSQl y el traslado de información a la nube.
Ambas mejoras entraman riegos, lo que nos hace dudar si llevar adelante el proyecto o mantener la situación actual. Trasladar la información a otro sistema de base de datos no garantiza que no se pierdan datos de importancia en el proceso. Por su parte, guardar información en la nube entrama riesgos de confidencialidad y costo.
No enfrentamos a una decisión compleja: realizar la mejor tecnológica o continuar en un esquema de Business As Usual (BAU)
Existen, al menos, dos formas de abordar la decisión de un problema de esta índole:
Decidir en base a nuestro juicio
Decidir en base a un modelo estadístico bayesiano
Los A/B test son muy usados cuando se quieren lanzar nuevos productos o nuevas versiones de productos existentes. No obstante la lógica detrás del test es de utilidad para tomar una decisión de asignación de recursos entre dos proyectos.
Aquí, lo que hacemos es testear nuestra creencia acerca de que el proyecto A puede incrementar la productividad en la persecución penal contra la idea de que el proyecto B lo puede incrementar. El punto es determinar si se debe realizar el proyecto o mantener BAU.
En términos metodológicos tomamos seguimos dos pasos:
Uno puede correr un t-test para probar lo mismo, pero al hacerlo Bayesiano podemos construirlo de forma intuitiva
Queremos ver si nuestro proyecto en efecto aumenta la productividad de los fiscales en la persecución penal o no. De esta forma estamos en presencia de un A/B test.
En términos cuantitativos vamos a utilizar dos herramientas poderosas:
Usamos la distribución Beta para estimar la probabilidad de un envento del cual tenemos información disponible y también resultados exitosos. Por ejemplo, la utilizaríamos para calcular la probabilidad de obtener cara cuando has lanzado la moneda 100 veces y has obtenido cara 40 veces.
La distribución beta representa rango de valores continuos, a diferencia de la binomial que representaba valores discretos. El hecho de representar valores continuos nos permite describir un número infinito de posibles hipótesis.
Definimos la distribución beta con una Probability Density Function (PDF) que nos muestra la densidad de probabilidades tomando en cuenta que lidiamos con valores continuos.
Esta es la fórmula:
Lo que obtenemos al final es una función que describe la probabilidad de cada posible hipótesis para nuestra verdadera creencia frente a un problema.
El teorema de Bayes no ayuda a descifrar el siguiente problema:
\(P(creencia|datos) \rightarrow\) Queremos cuantificar que tan fuerte yo mantengo mi creencia dado los datos que observamos.
La fórmula general de Bayes es la siguiente:
Aquí:
P(A|B): Esto es lo que conocemos como el posterior. O sea la probabilida de mi creencia dado los datos que observo
P(A): Este es el prior: Es la fortaleza de mi creencia antes de haber visto los datos
P(B|A): Este es el likelihood. Aquí cuantificamos cuán probable son los datos que vemos dada nuestras creencias.
P(B): Esta es la probabilidad de los datos. Nos ayuda a normalizar nouestro posterior y obtener una probabilidad entre 0 y 1. En la práctica es difícil cuantificarlo y muchas veces no lo necesitamos
Cuando no contamos con P(B), o sea cuando solo tenemos el likelihood y el posterior podemos usar la forma proporcional de Bayes:
Ahora, si usamos esta forma, nuestras probabilidades no suman 1. Sin embargo existe una forma simple de combinar distribuciones beta que nos entrega un posterior normalizado cuando todo lo que tenemos es el likelihood y el prior. Es aquí donde logramos combinar la distribución beta y el teorema de Bayes. Sería:
Lo único que hemos hecho es sumar las alfas y las betas de nuestro prior y likelihood y esto nos conduce a una situación donde el posterior está normalizado. Dado que es simple, es conveniente trabajar con la distribución beta cuado hacemos estadística bayesiana.
Consideremos que tenemos 600 trabajadores en el sistema de fiscalías del país, entendidos en el proceso de persecución penal. Vamos a toma una muestra de 300 para realizar nuestro test. Así dejamos los otros 300 para la implementación.
De las 300 personas que vamos a tetear, vamos a crear dos grupos A y B. El grupo A recibirá una versión con la implementación. Deberá decir si el proyecto mejorará la persecución penal o no. El grupo B recibe la versión BAU y debe contestar la mimsma pregunta.
El prior nos da una idea de la probabiliad de mejora de la persecución penal en el escenario actual. De acuerdo a nuestra información este valor es de un 30%.
Para facilitar las cosas, usamos el mismo prior para ambas vaiantes. Establecemos una distribución prior débil; por débil queremos decir que los datos rapidamente la pueden alterar. Elegimos Beta(3,7). En este caso el promedio es 0.3.
Veamos cómo se representa esta distribución
x <- seq(0, 1, length.out = 100)
y <- dbeta(x, 3, 7)
plot(x, y, type = "l", col = "blue", lwd = 2, main = "Creencia de un prior débil Beta(3,7)", xlab = "Mejora en la persecución penal", ylab = "Density")Esta distribución nos permite representar a 0.3 como el promedio, pero noten que existe un rango importante de posibilidades.
Una vez que tenemos nuestor prior, necesitamos armar nuestro likelihood, o lo que es lo mismo, recolectar información.
Enviamos una encuesta a nuestra muestra de testeo. Los que contestan las pregunta son fiscales, abogados y profesionales que entienden el negocio. Además, comprenden las implicancias de ejecutar el proyecto o no ejecutarlo.
| Variantes | Mejora | No mejora | Tasa de mejora estimada |
|---|---|---|---|
| Proyecto | 36 | 114 | 0.24 |
| BAU | 50 | 100 | 0.33 |
Cada una de estas variantes puede ser vista como un parámetro separado que estamos tratando de estimar. Con el objeto de alcanzat el posterior, tenemos que combinar el prior y el likelihood.
Recuerden que para este caso, el prior que usamos será el mismo para las dos variantes, Beta(3.7) y representa una creencia débil en los valores posibles de la tasa de mejora de la persecución penal dado que no tenemos información adicional. La idea de que es débil descansa en el hecho de que no creemos fervientemente en un rango particular de valores y consideramos todos los posibles valores con una alta probabilidad.
Para el cálculo del likelihood utilizamos nuevamente nuestra distribución beta. En este caso:
Así que tenemos algo así para cada variante:
El gráfico siguiente muestralos los estimados para cada parámatro
# Definir los parámetros para las distribuciones Beta
a1 <- 36 + 3
b1 <- 114 + 7
a2 <- 50 + 3
b2 <- 100 + 7
# Crear secuencia de valores de x
x <- seq(0.1, 0.5, length.out = 100)
# Calcular las densidades
density1 <- dbeta(x, a1, b1)
density2 <- dbeta(x, a2, b2)
# Crear gráfico
plot(x, density1, type = 'l', lwd = 2, col = 'blue', ylim = c(0, max(density1, density2)),
xlab = 'Tasa de mejora', ylab = 'Densidad', main = 'Estimación de parámetros')
lines(x, density2, lwd = 2, col = 'red')
# Agregar leyenda
legend("topright", legend = c("Variante A", "Variante B"),
col = c("blue", "red"), lty = 1, cex = 0.8)
Nuestros datos sugieren que la variante B es mejor en tanto ofrece una
tasa más alta de mejora. Sin embargo, la verdadera tasa de mejoras es
uno de los rangos posibles de valores.
También podemos notar una superposición en las posibles tasas de mejora para ambas variantes. ¿Y si en realidad tuvimos mala suerte y la tasa de mejora de A fue mayor a la que vemos? Tal vez tuvimos demasiada suete con B y la tasa de mejora en este caso fue menor a la que se revela en el gráfico.
La pregunta aquí es: ¿qué tan seguro estamos que la variante B es la
mejor? Aquí es donde entran la simulaciones de Monte
Carlo.
La respuesta precisa acerca de cuál variante genera una mayor tasa de mejora en la persecución penal descansa en la intersección de las dos distribuciones. Para esto usamos una simulación de Monte Carlo. En términos simples una simulación de Monte Carlos es cualquier técnica que usa muestreo aleatorio para resolver un problema.
En este caso lo que se haces elegir muestras de las dos distribuciones de forma aleatoria, donde cada muestra es elegida en base a su probabilidad de ocurrencia dentro de la distribución. De maner que muestras en regiones de mayor probabilidad aparecerán de forma más frecuente.
Por ejemplo, un valor mayor que 0.2 es más probable de ser elegido de la variante A que un valor menor a 0.2. Por otra parte un muestreo aleatorio de B es muy probable que esté por encima de 0.2.
Dado esto, podemos imaginar mundos en los cuáles elegimos muestra de forma aleatoria y obtenemos que la variante A es mejor o que la variante B es mejor.
Podemos imaginar que la distribución posterior representa todos los mundos posibles dado nuestro actual estado de creencias en relación a cada tasa de mejora. Cada vez que elegimos una muestra de nuestra distribución estamos viendo algunos de esos mundos posibles.
Visualmente podemos esperar más mundos donde B es la mejor variante. Mintras más frecuentemente elijamos, más precisión tendremos en determinar en cuánto de los mundos es B la mejor variante.
Una vez que tengamos nuestras muestras, podemos mirar el ratio de los mundos donde B es la mejor variante sobre el número total de mundos ue hemos mirado y calcular una probabilidad exacta de que B sea la mejor variante.
En este caso vamos a usar rbeta() en R para poder calcular nuestras muestras a partir de las distribuciones.
Consideramos cada comparación una simulación. Mientras más simulaciones corramos, más precisión obtendremos en nuestro resultado. Comenzamos con un 100000 simulaciones.
# Definición de parámetros
n_trials<-100000
prior_alpha<-3
prior_beta<-7
# Recolectamos las muestras desde cada variante
a_samples<-rbeta(n_trials, 36+prior_alpha, 114+prior_beta)
b_samples<-rbeta(n_trials, 50+prior_alpha, 100+prior_beta)Aquí guardamos los resultados en variables para poder acceder a ellos más fácilmente luego. Para cada variante consideramos el número de personas que dijo que existiría una mejora y el número de personas que dijo que no habría una mejora.
## [1] 0.96
Lo que vemos aquí es que en el 96% de las 100000 simulaciones, la
variante B fue superior. Basado en la distribución de las tasa de
mejora, en el 96% de los mundos la variante B fue la mejor de las dos.
Este resultado no está indicando que tal vez no debemos invertir los 100
MM de pesos en realizar los ajustes que estamos proponiendo.
Probablemente porque los costos de hacerlo, detectados por los
especialistas y usarios de la herramient son mayores a los beneficios
que se obtendrían en términos de la persecución penal.
Si bien tenemos una forma precisa de determinar que B es la mejor variante, queremos estar seguro si es lo suficientemente importante como para no ejecutar el prooyecto. A fin de cuentas, es posible que los beneficios de invertir los recursos no sean inmediatos. El punto aquí es establecer qué tan importante es la diferencia entre ambas.
Aquí radica el verdadero poder de nuestra simulación de Monte Carlo. Podemos tomar los resultados de nuestra simulación y testear cuánto mejor la variante B es mejor al mirar cuántas veces la variante B es mayor que la variante A.
En términos precios buscamos la distribución del siguiente ratio:
Veámoslo en R
ratio_B_A=b_samples/a_samples
hist(ratio_B_A, breaks = 30, col = 'skyblue', main = 'Histograma de Ratio B/A',
xlab = 'Ratio B/A', ylab = 'Frecuencia')
A partir del histograma vemos que la variante B es más probable a
resultar en un 40% de mejora de la tasa de persecución penal(ratio 1.4)
comparado con A. Sin embargo existen un rango de valores posibles.
En este caso es mucho mejor usar una función de distribución acumulada (CDF). Esta nos entrega un resultado visual más intuitivo. La CDF toma un valor y nos entrega la probabilidad de obtener es valor o menos. En esta caso, dado que estamos trabajando con datos y no una función matemática calcularemos la función de distribución acumulada empírica (ECDF).
# Asumiendo que ratio_B_A ya está definido
# Calcular la ECDF
ecdf_ratio <- ecdf(ratio_B_A)
# Graficar la ECDF
plot(ecdf_ratio, main = "Función de Distribución Empírica",
xlab = "Mejora de B sobre A", ylab = "ECDF", col = "blue", lwd = 2)
# Opcionalmente, añadir más detalles al gráfico
abline(h = seq(0, 1, by = 0.1), col = "gray", lty = "dotted")
abline(v = seq(min(ratio_B_A), max(ratio_B_A), length.out = 10), col = "gray", lty = "dotted")
# Añadir una línea horizontal en el 50%
abline(h = 0.5, col = "black", lwd = 2, lty = 2)
Aquí los resultados son más claros. Existe una pequeña posibilidad que A
sea mejor que B, y si mejor no va a ser por mucho. Podemos ver, además,
que existe un 25% de probabilidad que la variante B genere un 50% o más
de mejora sobre A.
Ahora, finalmente, en elegir invertir los 100 MM o no (elegir B sobre A) podemos razonar aacerca del riesgo de la siguiente forma. La probabilidad de que B sea 20% peor es la misma que sea 100$% mejor. Suena como una buena apuesta de acometer. Tal vez haya que revisar más en detalle la propuesta que se quiere, pero por ahora, los 100 MM no se invierten.