Equilibrio entre complejidad y rendimiento: una mirada en profundidad a la codificación de objetivos K-fold
Los profesionales de la ciencia de datos enfrentan muchos desafíos al procesar varios tipos de datos en varios proyectos, cada uno de los cuales requiere métodos de procesamiento únicos. Un obstáculo común es trabajar con formatos de datos que los modelos tradicionales de aprendizaje automático tienen dificultades para procesar de manera efectiva, lo que resulta en un rendimiento deficiente del modelo. Dado que la mayoría de los algoritmos de aprendizaje automático están optimizados para datos numéricos, es esencial transformar datos categóricos en forma numérica. Sin embargo, esto a menudo simplifica demasiado las relaciones categóricas complejas, especialmente cuando las características tienen una cardinalidad alta (es decir, una gran cantidad de valores únicos), lo que complica el procesamiento y perjudica la precisión del modelo.
La cardinalidad alta se refiere a la cantidad de elementos únicos dentro de una característica, abordando específicamente la cantidad distinta de etiquetas categóricas en un contexto de aprendizaje automático. Cuando una característica tiene muchas etiquetas categóricas únicas, tiene una cardinalidad alta, lo que puede complicar el procesamiento del modelo. Para que los datos categóricos sean utilizables en el aprendizaje automático, estas etiquetas a menudo se convierten a formato digital utilizando métodos de codificación basados en la complejidad de los datos. Un método popular es la codificación One-Hot, que asigna a cada etiqueta única un vector binario distinto. Sin embargo, con datos de alta cardinalidad, One-Hot Encoding puede aumentar significativamente la dimensionalidad, lo que genera conjuntos de datos complejos y de alta dimensión que requieren una capacidad computacional significativa para el entrenamiento del modelo y potencialmente ralentizan el rendimiento.
Considere un conjunto de datos que contiene 2000 identificadores únicos, con cada identificador vinculado a solo uno de tres países. En este caso, mientras que la característica de ID tiene una cardinalidad de 2000 (ya que cada ID es única), la característica de país tiene una cardinalidad de solo 3. Ahora imagine una característica con 100 000 etiquetas categóricas que deben codificarse usando One-Hot Encoding. Esto crearía un conjunto de datos de muy altas dimensiones, lo que generaría ineficiencia y un consumo significativo de recursos.
Una solución ampliamente adoptada por los científicos de datos es Codificación de destino plegada en K. Este método de codificación ayuda a reducir la cardinalidad de las características al reemplazar las etiquetas categóricas con valores promedio objetivo, según la validación cruzada de K-Fold. Al centrarse en patrones de datos individuales, K-Fold Target Encoding reduce el riesgo de sobreajuste, lo que ayuda al modelo a aprender relaciones específicas dentro de los datos en lugar de patrones demasiado generales que pueden dañar el rendimiento del modelo.
La codificación de objetivos K-Fold implica dividir el conjunto de datos en varios subconjuntos del mismo tamaño, llamados «pliegues», donde «K» representa el número de estos subconjuntos. Al dividir el conjunto de datos en varios grupos, este método calcula el promedio ponderado entre subconjuntos para cada etiqueta categórica, mejorando así la solidez de la codificación y reduciendo la posibilidad de sobreajuste.
Usando un ejemplo de Figura 1. Utilizando una muestra de datos de emisiones de vuelos nacionales de Indonesia para cada ciclo de vuelo, podemos poner esta técnica en práctica. La pregunta básica que cabe plantearse con este conjunto de datos es «¿Cuál es el promedio ponderado de cada etiqueta categórica en ‘Aerolíneas’ cuando se analiza la función ‘Emisiones de HC’?» Sin embargo, podrías hacer la misma pregunta que la gente me hace a mí. «Pero si simplemente los calcularas usando la característica específica, ¿no podría eso dar lugar a otra característica de alta cardinalidad?» La respuesta sencilla es “Sí, es posible”.
¿Para qué?
En los casos en que un conjunto de datos grande tiene una característica de destino altamente aleatoria sin patrones identificables, la codificación de destino K-Fold puede producir una amplia variedad de valores medios para cada etiqueta categórica, preservando potencialmente una alta cardinalidad en lugar de reducirla. Sin embargo, el objetivo principal de K-Fold Target Encoding es lidiar con una cardinalidad alta, no necesariamente reducirla significativamente. Este método funciona mejor cuando existe una correlación significativa entre la característica de destino y los segmentos de datos dentro de cada etiqueta categórica.
¿Cómo funciona la codificación de destino K-Fold? La forma más sencilla de explicar esto es que dentro de cada pliegue se promedia la característica objetivo de los otros pliegues. Este enfoque asigna a cada etiqueta categórica un peso único, representado como un valor numérico, lo que la hace más informativa. Veamos un cálculo de ejemplo utilizando nuestro conjunto de datos para una comprensión más clara.
Para calcular el peso de la etiqueta «AirAsia» para la primera observación, comience dividiendo los datos en varios paneles, como se muestra en Figura 2. Puede asignar pliegues manualmente para garantizar una distribución equitativa o automatizar este proceso utilizando el siguiente ejemplo de código:
import seaborn as sns
import matplotlib.pyplot as plt# In order to split our data into several parts equally lets assign KFold numbers to each of the data randomly.
# Calculate the number of samples per fold
num_samples = len(df) // 8
# Assign fold numbers
df['kfold'] = np.repeat(np.arange(1, 9), num_samples)
# Handle any remaining samples (if len(df) is not divisible by 8)
remaining_samples = len(df) % 8
if remaining_samples > 0:
df.loc[-remaining_samples:, 'kfold'] = np.arange(1, remaining_samples + 1)
# Shuffle again to ensure randomness
fold_df = df.sample(frac=1, random_state=42).reset_index(drop=True)