1n5ripqzd0byy0adbrk3byg.png

Arranque sobre grandes conjuntos de datos

El bootstrap es una técnica útil para inferir características estadísticas (por ejemplo, media, decil, intervalos de confianza) de una población a partir de una muestra recopilada. Implementarlo a escala puede ser difícil y, en casos de uso con datos en tiempo real, muy complicado. Al intentar aprender a hacer bootstrap a escala, Me encontré con un blog de Google (de casi una década de antigüedad) que introduce el método de arranque de Poisson. Desde entonces, descubrí un artículo aún más antiguo, Hanley y MacGibbon (2006), que describe una versión de esta técnica. Esta publicación es un intento de asegurarme de que he entendido la lógica lo suficientemente bien como para explicársela a otra persona. Comenzaremos con una descripción del bootstrapping clásico para explicar por qué el bootstrapping de Poisson es genial.

Arranque clásico

Supongamos que queremos calcular la edad media de los estudiantes de una escuela. Podríamos extraer repetidamente muestras de 100 estudiantes, calcular las medias y almacenarlas. Luego, podríamos tomar una media final de esas medias de muestra. Esta media final es una estimación de la media de la población.

En la práctica, a menudo no es posible extraer muestras repetidas de una población. Aquí es donde entra en juego el bootstrapping. El bootstrapping imita este proceso. En lugar de extraer muestras de la población, extraemos muestras (con reemplazo) de la muestra que hemos recolectado. Las pseudomuestras se denominan remuestreos.

Resulta que esto es extremadamente efectivo. Es más costoso computacionalmente que una solución de forma cerrada, pero no hace suposiciones sólidas sobre la distribución de la población. Además, es más económico que repetir colecciones de muestras. En la práctica, se usa mucho en la industria porque en muchos casos no existen soluciones de forma cerrada o es difícil obtenerlas correctamente, por ejemplo, al inferir deciles de una población.

¿Por qué funciona el bootstrap?

El bootstrapping me parece incorrecto. O al menos la primera vez que lo oí, no me pareció correcto. ¿Por qué una muestra debería contener tanta información?

El muestreo con reemplazo de la muestra original que extrajiste es solo una forma de imitar la extracción de la población. La muestra original que extrajiste, en promedio, se parece a tu población. Entonces, cuando vuelves a tomar muestras de ella, básicamente estás extrayendo muestras de la misma distribución de probabilidad.

¿Qué sucede si por casualidad extraes una muestra extraña? Es posible y por eso remuestreamos. El remuestreo nos ayuda a conocer la distribución de la muestra en sí. ¿Qué sucede si la muestra original es demasiado pequeña? A medida que aumenta la cantidad de observaciones en la muestra, las estimaciones de bootstrap convergen a valores de población. Sin embargo, no hay garantías en muestras finitas.

Existen problemas, pero dadas las limitaciones con las que operamos, es la mejor información posible que tenemos sobre la población. No tenemos que suponer que la población tiene una forma específica. Dado que el cálculo es bastante barato, el bootstrap se convierte en una herramienta muy poderosa.

Demostración del bootstrapping clásico

Explicaremos el bootstrap con dos ejemplos. El primero es un conjunto de datos pequeño en el que la idea es que puedas hacer los cálculos en tu cabeza. El segundo es un conjunto de datos más grande para el que escribiré el código.

Ejemplo 1: Determinar la edad media de los alumnos de una escuela

Tenemos la tarea de determinar la edad media de los estudiantes de una escuela. Seleccionamos 5 estudiantes al azar. La idea es utilizar esos 5 estudiantes para inferir la edad media de todos los estudiantes de la escuela. Esto es una tontería (y estadísticamente incorrecto), pero tengan paciencia.

ages = [12, 8, 10, 15, 9]

Ahora tomamos una muestra de esta lista con reemplazo.

sample_1 = [ 8, 10,  8, 15, 12]
sample_2 = [10, 10, 12, 8, 15]
sample_3 = [10, 12, 9, 9, 9]
....
do this a 1000 times
....
sample_1000 = [ 9, 12, 12, 15, 8]

Para cada nueva muestra, calcule la media.

mean_sample_1 = 10.6
mean_sample_2 = 11
mean_sample_3 = 9.8
...
mean_sample_1000 = 11.2

Tome una media de esos medios.

mean_over_samples=mean(mean_sample_1, mean_sample_2, .. , mean_sample_1000)

Esta media se convierte entonces en su estimación de la media de la población. Puede hacer lo mismo con cualquier propiedad estadística: intervalos de confianza, desviaciones, etc.

Ejemplo 2: Determinación del percentil 95 para el «tiempo de procesamiento del pago»

Los clientes de una aplicación de entrega de comida realizan pagos en la aplicación. Una vez que el pago se realiza correctamente, se realiza un pedido en el restaurante. tiempo para procesar el pago Calculado como el tiempo transcurrido entre el momento en que un cliente presiona el botón «Realizar pago» y el momento en que se envía la respuesta (pago exitoso, pago fallido), es una métrica fundamental que refleja la confiabilidad de la plataforma. Millones de clientes realizan pagos en la aplicación todos los días.

Tenemos la tarea de estimar el percentil 95% de la distribución para poder detectar problemas rápidamente.

Ilustramos el bootstrap clásico de la siguiente manera:

  • Suponemos que existe una población que tiene un millón de observaciones. En el mundo real, nunca observamos estos datos.
  • Tomamos una muestra aleatoria de 1/10 de esta población, por lo que tomamos 10.000 observaciones. En realidad, estos son los únicos datos que observamos.
  • Luego aplicamos el mismo procedimiento que analizamos anteriormente. Remuestreamos las observaciones de nuestros datos observados con reemplazo. Hacemos esto muchas, muchas veces.
  • Cada vez que volvemos a muestrear, calculamos el percentil 95 de esa distribución.
  • Finalmente tomamos la media de los valores del percentil 95 y encontramos intervalos de confianza a su alrededor.

Obtenemos el gráfico que aparece a continuación. Mágicamente, descubrimos que los intervalos de confianza que acabamos de generar contienen el percentil 95 real (de nuestra población).

Podemos ver los mismos datos a nivel de la estadística bootstrap.

¡El código para generar lo anterior se encuentra a continuación, pruébelo usted mismo!