Equilibrio entre complejidad y rendimiento: una mirada en profundidad a la codificación de destino K-fold
Los profesionales de la ciencia de datos enfrentan numerosos desafíos al manejar diversos tipos de datos en varios proyectos, cada uno de los cuales exige 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 la característica tiene una cardinalidad alta (es decir, una gran cantidad de valores únicos), lo que complica el procesamiento e impide la precisión del modelo.
La cardinalidad alta se refiere a la cantidad de elementos únicos dentro de una característica, abordando específicamente el recuento distinto 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 forma numérica 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 drásticamente 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 con 2000 identificaciones únicas, cada identificación vinculada a uno de sólo 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 mediante One-Hot Encoding. Esto crearía un conjunto de datos de dimensiones extremadamente altas, lo que generaría ineficiencia y un consumo significativo de recursos.
Una solución ampliamente adoptada entre los científicos de datos es Codificación de destino K-Fold. Este método de codificación ayuda a reducir la cardinalidad de las características al reemplazar etiquetas categóricas con valores medios 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, conocidos como “pliegues”, donde “K” representa el número de estos subconjuntos. Al dividir el conjunto de datos en varios grupos, este método calcula la media ponderada entre subconjuntos para cada etiqueta categórica, lo que mejora la solidez de la codificación y reduce los riesgos de sobreajuste.
Usando un ejemplo de Higo 1. A partir de un conjunto de datos de muestra 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 se debe plantear con este conjunto de datos es “¿Cuál es la media ponderada para cada etiqueta categórica en ‘Aerolíneas’ al observar la característica ‘Emisiones de HC’?”. Sin embargo, es posible que tengas la misma pregunta que la gente me ha estado haciendo. “Pero, si simplemente los calculara utilizando la característica objetivo, ¿no podría resultar como otra característica de alta cardinalidad?”. La respuesta sencilla es “Sí, podría”.
¿Por qué?
En los casos en los que un conjunto de datos grande tiene una característica de destino altamente aleatoria sin patrones identificables, la codificación de destino K-Fold podría 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 abordar la alta cardinalidad, no necesariamente reducirla drásticamente. 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, en cada pliegue, se calcula la media de la característica objetivo a partir de los otros pliegues. Este enfoque proporciona 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 pliegues, como se muestra en Higo 2. Puede asignar pliegues manualmente para garantizar una distribución equitativa o automatizar este proceso utilizando el siguiente código de muestra:
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)