6 · Histogramas y percentiles
Ve la distribución completa de un vistazo — y entiende por qué la latencia p99 importa más que el promedio.
Un histograma muestra lo que un solo número nunca puede decirte — la forma completa de tu distribución.
Sin esto:
Sin histogramas, no puedes detectar distribuciones bimodales, colas pesadas ni la señal de transformación logarítmica que se esconde en tus datos.
Dos números de resumen — media y desviación estándar — pueden describir un dataset perfectamente gaussiano, o uno bimodal, o uno tan sesgado a la derecha que abarca seis órdenes de magnitud. No pueden decirte cuál es cuál. Un histograma sí puede.
Un histograma agrupa los datos en intervalos (llamados bins), cuenta las observaciones en cada bin y dibuja una barra cuya altura es proporcional a ese conteo (o frecuencia/densidad). El resultado es una huella visual de la forma de la distribución.
El número de bins es un parámetro. Muy pocos bins: la estructura detallada desaparece en un bloque ancho. Demasiados bins: cada barra tiene 0 o 1 observación y el gráfico parece un peine. Heurísticas comunes:
| Regla | Fórmula | Mejor para | |---|---|---| | Sturges | k = ⌈log₂(n)⌉ + 1 | Datasets pequeños normales | | Freedman–Diaconis | h = 2·IQR / n^(1/3) | Datasets grandes o sesgados | | Scott | h = 3.5·σ / n^(1/3) | Propósito general |
bins='auto' de matplotlib usa el máximo entre Sturges y Freedman–Diaconis.
Un percentil (o cuantil) responde: "¿qué valor separa el p% inferior de los datos del (100−p)% superior?" El percentil 50 es la mediana. El 25 y el 75 son Q1 y Q3. La latencia del percentil 99 significa exactamente una cosa: el 1% de las solicitudes tarda más que este valor.
Python (in browser)
La forma de campana confirma la normalidad. Rojo discontinuo = media, azul punteado = mediana — para una distribución simétrica casi coinciden. Abre /tmp/hist_normal.png en el panel de salida para ver.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
np.percentile(x, q) devuelve el percentil q. El percentil 99 (p99) es el número por debajo del cual cae el 99% de las observaciones — el 1% de solicitudes más lentas lo supera.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Los mismos datos exponenciales graficados con 5 vs 50 bins. Cinco bins oculta completamente la cola larga; cincuenta bins revela claramente la caída. La elección de bins es una decisión editorial. Abre /tmp/hist_bins.png para comparar.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Tres reglas para el número de bins: Sturges (rápida, asume normalidad), Scott (óptima para gaussiana), Freedman–Diaconis (robusta, preferida para datos sesgados o grandes). bins='auto' de matplotlib es un buen default.
Si el tiempo de respuesta de una solicitud está en el percentil 99 de la distribución, eso significa...
- Un **histograma** revela forma (sesgo, modas, colas) que las estadísticas de resumen ocultan. El número de bins es un parámetro — prueba varios valores.
- El **percentil p** es el valor por debajo del cual cae el p% de los datos. La latencia del percentil 99 (p99) es la métrica canónica de latencia de cola en sistemas de ML en producción.
- El `bins='auto'` de matplotlib (máximo de Sturges y Freedman–Diaconis) es un buen default. Usa Freedman–Diaconis explícitamente para datasets grandes o sesgados.
Los histogramas son la primera gráfica en todo notebook de EDA — revelan modas, sesgo y outliers de un vistazo y te dicen si aplicar una transformación logarítmica. Los objetivos de latencia p99 definen los presupuestos de infraestructura de servicio de modelos y los contratos de SLA.
Si lo quitas: No puedes detectar visualmente una distribución bimodal, una cola pesada, ni estimar la transformación correcta (log, sqrt) que aplicar antes del entrenamiento.