Frequency Encoding

Escrito por

en

¿Qué es Frequency Encoding?

Frequency Encoding es una técnica de codificación de variables categóricas que sustituye cada categoría por la frecuencia con la que aparece en el conjunto de datos.

A diferencia de técnicas como One-Hot Encoding o Ordinal Encoding, no crea nuevas columnas ni asigna valores arbitrarios. En su lugar, utiliza información estadística real de los datos para representar cada categoría mediante su número de apariciones o su frecuencia relativa.

Esta técnica resulta especialmente útil cuando una variable contiene un gran número de categorías, ya que permite reducir la dimensionalidad sin perder información relacionada con la distribución de los datos.

¿Cómo funciona?

El proceso consiste en:

  • Identificar todas las categorías únicas de una variable.
  • Contar cuántas veces aparece cada categoría.
  • Calcular la frecuencia absoluta o relativa de cada una.
  • Sustituir cada categoría por su frecuencia correspondiente.

La frecuencia absoluta se calcula como:

$$Frecuencia(c)=Conteo(c)$$

La frecuencia relativa se obtiene mediante:

$$Frecuencia\ Relativa(c)=\frac{Conteo(c)}{N}$$

Donde:

  • (c) representa una categoría.
  • (Conteo(c)) es el número de veces que aparece la categoría.
  • (N) es el número total de observaciones.

Ejemplo de Frequency Encoding

Supongamos la siguiente variable:

Ciudad
Madrid
Barcelona
Madrid
Sevilla
Madrid
Barcelona

Calculamos las frecuencias:

CiudadFrecuencia
Madrid3
Barcelona2
Sevilla1

Tras aplicar Frequency Encoding:

Ciudad OriginalCiudad Codificada
Madrid3
Barcelona2
Madrid3
Sevilla1
Madrid3
Barcelona2

Si se utiliza frecuencia relativa:

CiudadFrecuencia Relativa
Madrid0.50
Barcelona0.33
Sevilla0.17

¿Por qué utilizar Frequency Encoding?

Cuando una variable contiene muchas categorías, técnicas como One-Hot Encoding pueden generar cientos o miles de nuevas columnas.

Por ejemplo:

  • Código postal.
  • Ciudad.
  • Producto.
  • Usuario.
  • Categoría de negocio.

En estos escenarios, Frequency Encoding permite mantener una única columna y reducir considerablemente el tamaño del dataset.

Beneficios de Frequency Encoding

  • Reduce la dimensionalidad.
  • Mantiene una única columna por variable.
  • Es sencillo de implementar.
  • Aprovecha información estadística real de los datos.
  • Escala bien con variables de alta cardinalidad.
  • Requiere poca memoria.
  • Puede mejorar la eficiencia computacional.

¿Cuándo utilizar Frequency Encoding?

  • Existen muchas categorías distintas.
  • Se desea evitar la explosión dimensional de One-Hot Encoding.
  • La frecuencia de aparición contiene información relevante.
  • Se trabaja con grandes volúmenes de datos.
  • La variable tiene alta cardinalidad.

Algunos ejemplos habituales son:

  • Códigos postales.
  • Ciudades.
  • Productos.
  • Clientes.
  • Identificadores de negocio.
  • Categorías de comercio electrónico.

Ventajas

Las principales ventajas son:

  • No incrementa el número de columnas.
  • Funciona bien con variables de alta cardinalidad.
  • Bajo consumo de memoria.
  • Fácil de interpretar.
  • Implementación sencilla.
  • Compatible con la mayoría de algoritmos de Machine Learning.
  • Captura información sobre la distribución de las categorías.

Desventajas

  • Categorías diferentes pueden recibir el mismo valor.
  • Se pierde la identidad original de algunas categorías.
  • No incorpora información directa sobre la variable objetivo.
  • Puede generar ambigüedad cuando varias categorías comparten frecuencia.
  • No representa relaciones semánticas entre categorías.

Por ejemplo:

CategoríaFrecuencia
A50
B50

Tras la codificación, ambas categorías serán idénticas para el modelo.

Limitaciones

Antes de aplicar esta técnica conviene considerar que:

  • No refleja similitud entre categorías.
  • No captura relaciones con la variable objetivo.
  • Puede perder información discriminativa.
  • Los valores dependen del conjunto de entrenamiento.
  • Nuevas categorías requieren un tratamiento especial.

Además, cuando la distribución de categorías cambia con el tiempo, las frecuencias calculadas inicialmente pueden dejar de ser representativas.

Comparación con otras técnicas de codificación

CaracterísticaFrequency EncodingOne-Hot EncodingOrdinal EncodingTarget Encoding
Mantiene una sola columnaNo
Adecuado para alta cardinalidadNo
Conserva identidad completa de categoríasNoNo
Utiliza información de la variable objetivoNoNoNo
Riesgo de sobreajusteBajoBajoBajoAlto
Incrementa dimensionalidadNoNoNo

Frequency Encoding vs One-Hot Encoding

AspectoFrequency EncodingOne-Hot Encoding
Número de columnasUnaUna por categoría
Alta cardinalidadExcelenteProblemática
Consumo de memoriaBajoAlto
InterpretabilidadMediaAlta
Riesgo de explosión dimensionalNo

Frequency Encoding vs Target Encoding

AspectoFrequency EncodingTarget Encoding
Utiliza la variable objetivoNo
Riesgo de fuga de informaciónNo
Facilidad de implementaciónAltaMedia
Riesgo de sobreajusteBajoAlto
InterpretabilidadAltaMedia

Aplicaciones en Data Science y Machine Learning

  • Sistemas de recomendación.
  • Predicción de abandono de clientes.
  • Detección de fraude.
  • Marketing analítico.
  • Comercio electrónico.
  • Segmentación de clientes.
  • Modelos de scoring.
  • Predicción de demanda.
  • Sistemas de clasificación.

Es especialmente útil cuando se trabaja con variables categóricas de alta cardinalidad que dificultan la aplicación de One-Hot Encoding.

Algoritmos donde suele utilizarse

  • Regresión logística.
  • Árboles de decisión.
  • Random Forest.
  • Gradient Boosting.
  • XGBoost.
  • LightGBM.
  • CatBoost.
  • Redes neuronales.
  • Máquinas de vectores de soporte (SVM).

Al reducir la dimensionalidad, suele facilitar el entrenamiento de modelos sobre grandes volúmenes de datos.

Implementación en Python

Utilizando Pandas

import pandas as pd

df = pd.DataFrame({
    "ciudad": [
        "Madrid",
        "Barcelona",
        "Madrid",
        "Sevilla",
        "Madrid",
        "Barcelona"
    ]
})

frecuencias = df["ciudad"].value_counts()

df["ciudad_frequency"] = df["ciudad"].map(frecuencias)

print(df)
      ciudad  ciudad_frequency
0     Madrid                 3
1  Barcelona                 2
2     Madrid                 3
3    Sevilla                 1
4     Madrid                 3
5  Barcelona                 2

Utilizando frecuencia relativa

import pandas as pd

frecuencias = (
    df["ciudad"]
    .value_counts(normalize=True)
)

df["ciudad_frequency"] = (
    df["ciudad"]
    .map(frecuencias)
)

print(df)
      ciudad  ciudad_frequency
0     Madrid             0.50
1  Barcelona             0.33
2     Madrid             0.50
3    Sevilla             0.17
4     Madrid             0.50
5  Barcelona             0.33

Creando un transformador para Scikit-Learn

from sklearn.base import BaseEstimator, TransformerMixin

class FrequencyEncoder(
    BaseEstimator,
    TransformerMixin
):

    def fit(self, X, y=None):
        self.freq_map = (
            X.iloc[:, 0]
            .value_counts()
            .to_dict()
        )
        return self

    def transform(self, X):
        return X.iloc[:, 0].map(
            self.freq_map
        ).to_frame()

Uso dentro de un Pipeline

from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier

pipeline = Pipeline([
    ("encoder", FrequencyEncoder()),
    ("modelo", RandomForestClassifier())
])

pipeline.fit(X_train, y_train)

Buenas prácticas

Al utilizar Frequency Encoding es recomendable:

  • Calcular las frecuencias únicamente sobre el conjunto de entrenamiento.
  • Aplicar exactamente el mismo mapeo al conjunto de prueba.
  • Definir una estrategia para categorías no vistas.
  • Evaluar posibles colisiones entre categorías con igual frecuencia.
  • Comparar su rendimiento frente a One-Hot Encoding y Target Encoding.

Conclusión

Frequency Encoding es una técnica eficiente para transformar variables categóricas sustituyendo cada categoría por su frecuencia de aparición en los datos. Su principal ventaja es que permite manejar variables de alta cardinalidad sin aumentar la dimensionalidad del conjunto de datos, manteniendo una representación compacta y fácil de implementar.

Aunque puede perder información cuando distintas categorías comparten la misma frecuencia, sigue siendo una alternativa muy útil en proyectos de Data Science y Machine Learning donde el tamaño del dataset y la eficiencia computacional son factores importantes. Utilizada correctamente, puede proporcionar una representación simple y efectiva de variables categóricas complejas sin incurrir en los problemas de dimensionalidad asociados a otras técnicas de codificación.