Desequilibrio de Clases Desde el Sobremuestreo Aleatorio hasta ROSE
Desequilibrio de Clases Sobremuestreo Aleatorio a ROSE
¡Vamos a definir formalmente el problema de desequilibrio de clases y luego derivar soluciones intuitivas para él!
Últimamente, he estado construyendo un paquete para abordar el desequilibrio de clases en Julia llamado Imbalance.jl. Me llevó mucho esfuerzo en términos de leer documentos y analizar implementaciones mientras construía el paquete y pensé que podría ser útil compartir lo que he aprendido sobre el problema de desequilibrio de clases en general, junto con algunos de los algoritmos más populares utilizados para abordarlo. Esto incluye el sobremuestreo aleatorio ingenuo, ROSE, SMOTE, SMOTE-Nominal y SMOTE-Nominal Continuous. Para este artículo nos centraremos en los primeros dos.
Antes de comenzar con los algoritmos, primero entendamos formalmente el desequilibrio de clases.
El Problema de Desequilibrio de Clases
La mayoría, si no todos, los algoritmos de aprendizaje automático se pueden ver como una forma de minimización empírica de riesgos, donde el objetivo es encontrar los parámetros θ que minimicen una función de pérdida L:
Por ejemplo, la regresión lineal toma L como la función de pérdida cuadrática, la regresión logística toma la función de pérdida de entropía cruzada, SVM toma la función de pérdida hinge, Adaptive boosting toma la función de pérdida exponencial.
- Cómo utilizar la API de ChatGPT en Python para tus datos en tiempo ...
- 3 Estrategias para que las startups de IA ganen contra las grandes ...
- Auto-GPT y GPT-Engineer Una guía detallada sobre los principales ag...
La suposición subyacente es que si f_θ minimiza este riesgo empírico sobre el conjunto de datos, que se puede ver como una muestra aleatoria de la población, entonces debería ser lo suficientemente cercano a la función objetivo f que buscamos el modelo que minimiza la misma cantidad pero sobre el conjunto de datos y, además, sobre toda la población.
En un entorno de múltiples clases con K clases, podemos escribir el riesgo empírico como
El desequilibrio de clases ocurre cuando algunas clases tienen muchos menos ejemplos que otras clases. En este caso, los términos correspondientes contribuyen mínimamente a la suma, lo que facilita que cualquier algoritmo de aprendizaje encuentre una solución aproximada al riesgo empírico que principalmente solo minimiza las sumas significativas. Esto produce una hipótesis f_θ que puede ser muy diferente de la verdadera función objetivo f con respecto a las clases minoritarias, que pueden ser las más importantes para la aplicación en cuestión.
En conclusión, las siguientes son las condiciones en las que tenemos un problema de desequilibrio de clases:
1 — Los puntos en el conjunto de entrenamiento no están distribuidos “equitativamente” entre las clases; algunas clases tienen muchos menos puntos que pertenecen a ellas que otras.
2 — El modelo no tiene un buen rendimiento en los puntos que pertenecen a esas clases minoritarias después del entrenamiento.
El grado en que este problema es adverso depende de qué tan importantes sean esas clases minoritarias para la aplicación. A menudo, son mucho más importantes que la clase mayoritaria (por ejemplo, clasificar transacciones fraudulentas).
Solucionando el Problema de Desequilibrio de Clases
Se vuelve obvio a partir de la descripción del problema que uno de los remedios es ponderar las sumas más pequeñas (es decir, las pertenecientes a las clases minoritarias) para que un algoritmo de aprendizaje evite más fácilmente soluciones aproximadas que exploten su insignificancia. A menudo es posible modificar los algoritmos de aprendizaje automático con ese propósito, especialmente cuando son explícitamente una forma de minimización empírica de riesgos y no solo son equivalentes a ella para alguna función de pérdida.
Otro enfoque que intenta resolver el problema es el remuestreo de datos. En su forma más simple, se puede ver como equivalente al enfoque de asignar pesos que consideran el costo. Considera el siguiente algoritmo
Dado: Un conjunto de datos desequilibrado con K clases y un número entero para cada claseDeseado: Un conjunto de datos donde los datos de cada clase se replican según el número enteroOperación: Repetir cada punto en la clase k, c veces, donde c es el número entero asociado
Debe ser obvio al reemplazar en la suma que esto es equivalente al enfoque de costo sensible; recuerda que minimizar una función es equivalente a minimizar un múltiplo escalar positivo de ella.
Sobremuestreo Aleatorio
El algoritmo mencionado anteriormente sufre de un pequeño problema; si la clase A tiene 900 ejemplos y la clase B tiene 600 ejemplos, entonces no hay un múltiplo entero que podamos usar para sobremuestrear la clase B y equilibrar el conjunto de datos. Podemos extender el algoritmo para lidiar con ratios de replicación que no sean enteros mediante la elección aleatoria de puntos para replicar. Por ejemplo, si queremos sobremuestrear 300 ejemplos para la clase B para equilibrar el sistema (equivalente a una proporción de 1.5), podemos hacerlo de la siguiente manera…
1 — Elegir 300 puntos al azar de la clase B2— Replicar esos puntos
Este algoritmo se llama sobremuestreo aleatorio ingenuo y lo que hace formalmente es:
1 — Calcular el número necesario de puntos a generar para cada clase (calculado a partir de algunas proporciones dadas)2— Supongamos que para la clase X ese número es Nx, entonces elegir Nx puntos al azar con reemplazo de los puntos pertenecientes a esa clase y agregarlos para formar el nuevo conjunto de datos
Debería ser obvio que esto equivale en promedio al algoritmo mencionado anteriormente y, por lo tanto, también al ponderado por clase. Si la proporción para la clase X es de 2.0, en promedio cada punto será seleccionado una vez al azar.
Aquí hay un conjunto de datos desequilibrado aleatorio que he generado para tres clases (0, 1, 2) que muestra un histograma de las clases y un diagrama de dispersión de los puntos antes y después del sobremuestreo.

Observa que no hay diferencia visual en las dos figuras de abajo porque todos los puntos generados son réplicas de los existentes.
Por último, ten en cuenta que si en lugar de elegir aleatoriamente ejemplos para replicar en las clases minoritarias, elegimos aleatoriamente puntos para eliminar en las clases mayoritarias, entonces el algoritmo se convierte en un submuestreo aleatorio ingenuo. Esto obviamente tiene la desventaja de perder datos útiles, pero a veces eliminar datos de las clases mayoritarias “no tan útiles” resuelve el problema del desequilibrio y lleva a un rendimiento mucho mejor hacia las clases minoritarias “mucho más útiles”. En este y los próximos artículos nos centraremos en los métodos de sobremuestreo.
Ejemplos de Sobremuestreo Aleatorio
Tiene sentido que lograríamos mejores resultados que el sobremuestreo aleatorio ingenuo si en su lugar agregáramos naturalmente los puntos para cada clase recolectando más datos en nuestro conjunto de datos. Por ejemplo, supongamos que…
- Queremos detectar si una transacción es fraudulenta
- Hemos recolectado un conjunto de datos de 1K transacciones fraudulentas y 999K transacciones válidas
Es obvio que resolver el problema del desequilibrio mediante la recolección de otras 998K transacciones fraudulentas es mucho más superior que repetir las existentes 1K veces. En particular, corremos un alto riesgo de sobreajustar a los datos particulares observados en el último caso.
La realidad es obviamente que generalmente no es factible recolectar más datos para las clases minoritarias; sin embargo, esto nos muestra que podemos hacer algo mejor que el sobremuestreo ingenuo repitiendo ejemplos. Sabemos que cualquier dato adicional que recolectemos sigue la distribución de probabilidad de la población subyacente de datos que pertenecen a la clase minoritaria, así que ¿qué tal si aproximamos esta distribución de probabilidad y luego muestreamos de ella para simular la recolección de ejemplos reales? Esto es lo que hace el algoritmo de ejemplos de sobremuestreo aleatorio (ROSE).
Entonces, ROSE intenta estimar la distribución de probabilidad P(x|y=k) para cada clase X y luego extrae las muestras necesarias Nx de ella. Es bien sabido que una forma de estimar dicha densidad es a través de la estimación de densidad del núcleo (KDE), que se puede derivar o intuir a partir de versiones más rudimentarias como el análisis de histograma. Lo siguiente describe el KDE:
Dado: puntos de datos x Deseado: Una estimación de P(x)Operación: Elige una función de núcleo K(x) y luego estima P(x) como
Típicamente, queremos poder controlar la escala de la función de núcleo que afectaría a P(x), por lo que en un sentido más general tenemos
En esencia, lo que hace es colocar la función del núcleo encima de cada punto y luego sumarlos y normalizarlos para que integren a 1.

La elección de la función del núcleo en sí es un hiperparámetro; tal vez uno que se ha demostrado no ser tan significativo siempre y cuando cumpla con propiedades básicas como la suavidad y la simetría. Una elección común es una simple Gaussiana con σ como la escala, que ROSE utiliza para su KDE.
ROSE muestrea los puntos Nx de esta distribución realizando lo siguiente:
- Elegir un punto al azar
- Colocar la Gaussiana en él
- Extraer una muestra de la Gaussiana
Esto es similar al sobremuestreo aleatorio, excepto que después de elegir un punto al azar, se coloca una Gaussiana en él y se extrae una muestra de la Gaussiana para generar el nuevo punto en lugar de repetir el punto elegido.
En este caso, ROSE establece la anchura de banda h (o más generalmente la matriz de suavizado en dimensiones superiores, que es el parámetro de la matriz de covarianza en la distribución normal) utilizando una regla empírica llamada Silverman para minimizar el error cuadrado medio integrado. En particular,
donde D_σ es una matriz diagonal de las desviaciones estándar de cada característica, d es el número de características y N es el número de puntos.
En el paquete Imbalance.jl, esto se multiplica por otra constante s para permitir un control opcional del hiperparámetro. Para s=1, se mantiene como en el artículo y para s=0, ROSE se vuelve equivalente al sobremuestreo aleatorio. La siguiente animación producida con el paquete ilustra el efecto de aumentar s en los puntos generados.

Observa que los puntos originales no se mueven y que a medida que aumentamos s, los puntos sintéticos generados debido a cada punto original elegido al azar se alejan aún más de él.
Espero que esta historia te haya iluminado sobre el problema del desequilibrio de clases en el aprendizaje automático y cómo se puede resolver. Consideremos los algoritmos presentados en el artículo SMOTE para la próxima historia.
Referencia:[1] G Menardi, N. Torelli, “Training and assessing classification rules with imbalanced data,” Data Mining and Knowledge Discovery, 28(1), pp.92–122, 2014.