Ciencia de datos

Seleccionar el número de bins en un histograma

Emplear la cantidad adecuada de bins a la hora de crear un histograma es un factor clave para visualizar estos de forma correcta. Cuando se usan demasiados bins, los histogramas resultantes muestran básicamente ruido, mientras el caso contrario, menos de los necesarios, puede ocultar los patrones que se desean observar en la gráfica. Problema que se ha explicado en detalle en una entrada anterior. En esta ocasión se van a explicar una serie de reglas que se pueden utilizar para seleccionar el número de bins en un histograma, alternativas a los de las reglas de Sturges y de Freedman–Diaconis.

La regla de la raíz cuadrada

Posiblemente una de las reglas para seleccionar el número de bins en un histograma más fáciles de implementar es la de la raíz cuadrada. La cual se basa en la idea intuitiva de distribuir los datos en una cantidad de bins proporcional al número de observaciones. Usando para ello la raíz cuadrada como una forma simple de obtener un valor aproximado de bins k_{sqrt} = \sqrt{n}, donde n es el número de observaciones en el conjunto de datos

La regla de Rice

Otra regla que únicamente usa el tamaño de los datos para estimar el número de bins es la regla de Rice. Esta regla usa dos veces la raíz cúbica del número de observaciones k_{rice} = \sqrt[3]{n}. Este método generalmente sobreestima el bins necesarios, por lo que puede ser una buena opción cuando no se desea terminar con un cantidad insuficiente de bins.

La regla de Scott

A diferencia de las reglas anteriores, la regla de Scott también tiene en cuenta la variabilidad de los datos para estimar el número de bins. Usando para ello un enfoque diferente. En lugar de calcular el número de bins, calcular el ancho óptimo como 3,49 veces la desviación estándar partido de la raíz cúbica del número de registros en los datos h_{scott} = \frac{3.49 \sigma(x)}{\sqrt[3]{n}}. Una vez obtenido el ancho es fácil calcular el número de bins necesarios.

Los resultados son similares a los obtenidos mediante la regla de Freedman-Diaconis. Aunque, es más sensible a la presencia de valores atípicos ya que la desviación estándar no es tan robusta cuando en el conjunto de datos existen registros de este tipo.

La regla de Doane

Finalmente, la regla de Doane es una modificación de la regla de Sturges en la que se intenta mejorar el rendimiento para datos que no son normales. Usando para ello el sesgo (skewness) de los datos. La fórmula usada por la regla de Doane es k_{doane} = 1 + \log2\left | n \right | + \log2\left | 1 + \frac{s}{\sigma_s} \right |, donde s es el sesgo y \sigma_s se define como \sigma_s = \sqrt{\frac{6 (n - 2)}{(n+1)(n+3)}}.

Implementación de las reglas en Python

Las reglas anteriores se pueden implementar fácilmente en Python, tal como se hace en el siguiente ejemplo.

import math
import numpy as np
from scipy.stats import skew


def square_root_bins(datos):
    """
    Calcula el número de bins para un histograma utilizando la regla de la raíz cuadrada.

    Parámetros:
    -----------
    datos : list, array-like
        Los datos de los cuales se desea calcular el número de bins.

    Retorna:
    --------
    numero_bins : int
        El número de bins calculado según la regla de la raíz cuadrada.
    """

    n = len(datos)
    numero_bins = math.ceil(math.sqrt(n))
    return numero_bins


def rice_bins(datos):
    """
    Calcula el número de bins para un histograma utilizando la regla de Rice.

    La regla de Rice elige un número de bins usando la raíz cubica del número de observaciones.

    Parámetros:
    -----------
    datos : array-like
        Los datos de los cuales se desea calcular el número de bins.

    Retorna:
    --------
    numero_bins : int
        El número de bins calculado según la regla de Rice.
    """

    n = len(datos)
    numero_bins = int(np.ceil(np.power(n, 1/3) * 2))
    return numero_bins


def scott_bins(datos):
    """
    Calcula el número de bins para un histograma utilizando la regla de Scott.

    La regla de Scott estima el ancho óptimo de los bins basándose en el error estándar de la muestra y el tamaño total de la muestra.

    Parámetros:
    -----------
    datos : array-like
        Los datos de los cuales se desea calcular el número de bins.

    Retorna:
    --------
    numero_bins : int
        El número de bins calculado según la regla de Scott.
    """

    datos = np.asarray(datos)
    n = len(datos)
    std = np.std(datos)
    if std == 0:
        return 1
    ancho_optimo = 3.49 * std / np.power(n, 1/3)
    numero_bins = int(np.ceil((np.max(datos) - np.min(datos)) / ancho_optimo))
    return numero_bins


def doane_bins(datos):
    """
    Calcula el número de bins para un histograma utilizando la regla de Doane.

    La regla de Doane ajusta el número de bins para tener en cuenta el sesgo (skewness) de la distribución de los datos.

    Parámetros:
    -----------
    datos : array-like
        Los datos de los cuales se desea calcular el número de bins.

    Retorna:
    --------
    numero_bins : int
        El número de bins calculado según la regla de Doane.
    """

    datos = np.asarray(datos)
    n = len(datos)
    skewness = skew(datos)
    se_skewness = np.sqrt((6 * (n - 2)) / ((n + 1) * (n + 3)))

    numero_bins = 1 + math.log2(n) + math.log2(1 + (abs(skewness) / se_skewness))
    return int(numero_bins)

Conclusiones

Hoy se han visto cuatro reglas alternativas que se pueden usar para seleccionar el número de bins en un histograma que complementan a la de Sturges y de Freedman–Diaconis.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Matplotlib

Recent Posts

Por qué migrar tus proyectos TypeScript a ES Modules en 2026

Durante años, CommonJS (require/module.exports) ha sido la forma por defecto de organizar módulos en Node.js,…

4 días ago

Método del codo: interpretación correcta y limitaciones

Cuando usas k-means tienes que decidir algo incómodo de entrada: cuántos grupos, , vas a…

6 días ago

Errores comunes al interpretar resultados estadísticos

La estadística no suele fallar en los cálculos: falla en la interpretación. El test está…

2 semanas ago

Dashboard CLV: cuatro modelos, un mismo dataset, conclusiones muy distintas

Los artículos anteriores de esta serie cubrieron cuatro formas de mirar el valor del cliente:…

2 semanas ago

Curiosidad: Por qué la criptografía habla siempre de Alice y Bob

Quien se acerca a la criptografía descubre enseguida a dos personajes que aparecen en casi…

3 semanas ago

Desbalanceo de Clases en Credit Scoring: Por Qué Usamos Ponderación en lugar de Undersampling

En credit scoring el desbalanceo de clases es la norma, no la excepción. En una…

3 semanas ago

This website uses cookies.