Inscribite ahora y empezá el lunes 19 de octubre. Tuvimos más alumnos de los que esperábamos y estamos reforzando la estructura y mejorando la calidad académica y la experiencia de cursado: el campus abre ese día. Si ya estás cursando, tu inscripción sigue vigente y retomás apenas reabramos.

Ver cursos
Artículo · Actualizado en octubre de 2026

Cómo convertir variables categóricas a numéricas sin romper tu modelo

Por el Equipo docente del Instituto Data Science · Actualizado en octubre de 2026

Qué pasa cuando codificás mal una variable categórica, qué estrategia conviene según el tipo de dato y por qué comparar modelos solo por su tasa de aciertos puede llevarte a una mala decisión.

Con experimento propioCon código en PythonCon documentación de scikit-learn

Resumen: muchos algoritmos solo aceptan números, así que las variables categóricas hay que convertirlas. Si la variable tiene un orden natural, se le asignan números que lo respeten. Si no lo tiene, conviene One Hot Encoding o, cuando hay muchas categorías, target encoding calculado sin filtrar información del objetivo. Numerar las categorías por orden alfabético es tentador pero puede destruir poder predictivo, y la tasa de aciertos no siempre lo muestra: conviene evaluar con la métrica del negocio.

Por qué hay que convertir las variables categóricas

Muchas variables con alto poder predictivo llegan como texto o categorías: nivel de estudios, nivel socioeconómico, localidad, marca de tarjeta, modalidad de línea telefónica.

Algunos algoritmos las manejan directamente. Otros, como los vecinos más cercanos o las redes neuronales, necesitan entradas numéricas. Además, depende de la implementación: la documentación de scikit-learn aclara que su versión de los árboles de decisión no admite variables categóricas por ahora, así que hay que codificarlas antes de entrenar.

La pregunta práctica es cómo pasar de categorías a números sin perder el poder predictivo de la variable.

Variables ordenables y no ordenables

Antes de elegir un método hay que distinguir dos tipos.

Ordenables

El dato genera una escala: nivel socioeconómico (de A1 a E) o nivel de estudios (primario, secundario, terciario, universitario). Tiene sentido asignar números que preserven el orden: lo cercano queda cerca y lo lejano, lejos.

No ordenables

No existe un orden natural: localidad, marca de tarjeta, origen de una lista. Forzar una escala numérica es donde empiezan los problemas, porque el modelo interpreta el número como una distancia.

La documentación de scikit-learn lo advierte sobre la codificación con enteros: muchos estimadores esperan una entrada continua e interpretarían las categorías como ordenadas, algo que a menudo no es deseable.

Tres estrategias para convertir variables categóricas

Cada una tiene ventajas y un costo.

EstrategiaCómo funcionaVentajaLimitación
One Hot EncodingCrea una columna binaria por cada categoría (1 si pertenece, 0 si no).Simple y robusta; no inventa un orden.Con miles de categorías, el dataset crece mucho y el modelo se vuelve difícil de entrenar y propenso al sobreajuste.
Número por orden alfabéticoOrdena las categorías y asigna 1, 2, 3…Rápida; no agrega columnas.La distancia entre números no refleja ninguna relación real: que “Adrogué” sea 1 y “Avellaneda” sea 2 no las hace parecidas.
Target encodingReemplaza cada categoría por un valor que resume su aporte histórico al objetivo (por ejemplo, su probabilidad de venta).No agrega columnas y la distancia sí tiene significado para el modelo.Depende de la variable objetivo: mal calculado, filtra información y da resultados optimistas.

Una precisión: la numeración por orden alfabético sí es válida cuando el orden es real (niveles de estudio, por ejemplo). El problema es aplicarla a categorías sin orden.

Sobre el target encoding, la documentación de scikit-learn indica que está pensado para categorías nominales con muchas categorías (por ejemplo, códigos postales) y que usa el promedio del objetivo condicionado a la categoría, con un suavizado que acerca las categorías poco frecuentes al promedio global.

Cómo se hace en Python

scikit-learn trae un codificador para cada estrategia.

from sklearn.preprocessing import OneHotEncoder, OrdinalEncoder, TargetEncoder

# 1) Variable sin orden y pocas categorías: One Hot Encoding
ohe = OneHotEncoder(handle_unknown="infrequent_if_exist", min_frequency=20)
X_marca = ohe.fit_transform(df[["marca_tarjeta"]])

# 2) Variable con orden real: OrdinalEncoder indicando el orden
orden = [["primario", "secundario", "terciario", "universitario"]]
ord_enc = OrdinalEncoder(categories=orden)
X_estudios = ord_enc.fit_transform(df[["nivel_estudios"]])

# 3) Variable con muchas categorías: target encoding
te = TargetEncoder(smooth="auto")
X_loc_train = te.fit_transform(X_train[["localidad"]], y_train)  # no uses fit + transform
X_loc_test = te.transform(X_test[["localidad"]])

Ojo con el target encoding: la documentación de scikit-learn indica que fit_transform usa internamente validación cruzada para evitar que la información del objetivo se filtre en la representación de entrenamiento, y que para entrenar hay que usar fit_transform(X_train, y_train). Calcular las probabilidades con todo el dataset y después dividir en entrenamiento y prueba contamina la evaluación.

Los nombres de columnas y los valores de min_frequency son ilustrativos: ajustalos a tus datos.

El experimento: tres árboles sobre un mismo dataset

Para comparar las estrategias, el equipo docente usó datos reales de un call center que vendía electrónica con llamadas en frío.

El problema

Cada contacto tenía un costo fijo y cada venta generaba una ganancia neta. La pregunta de negocio: ¿a quién conviene llamar para maximizar la ganancia?

Las variables

Año de contacto, marca de tarjeta, modalidad de línea (fija, CPP o MPP), localidad, origen de la lista y resultado de la llamada.

Por qué árboles

Reportan la importancia de las variables y, en la herramienta usada, aceptaban tanto datos numéricos como categóricos. Eso permitió comparar las tres estrategias con el mismo algoritmo.

Los tres árboles

  1. Árbol 1: la localidad como variable categórica nativa.
  2. Árbol 2: la localidad reemplazada por un número según el orden alfabético.
  3. Árbol 3: la localidad reemplazada por su probabilidad histórica de venta (target encoding).

Dos tratamientos previos

  • Categorías raras: si una localidad aparecía en la prueba pero no en el entrenamiento, el modelo no podía predecir. Se filtraron las categorías con pocas muestras.
  • Clases desbalanceadas: las ventas son poco frecuentes. Se aplicó down sampling sobre la clase mayoritaria para que el modelo aprendiera de las ventas reales y no se limitara a predecir lo más común.

Qué pasó con la importancia de las variables: en el árbol 1 la localidad fue la variable más importante; en el 2, con el número alfabético, perdió mucha relevancia; y en el 3, con la probabilidad histórica, la recuperó. Hasta ahí todo coincidía con la intuición previa.

Cuando la métrica miente

Al comparar los tres modelos por tasa de aciertos sobre el conjunto de prueba, los resultados fueron prácticamente iguales.

La intuición decía que el árbol 2 debía ser claramente peor, pero la tasa de aciertos indicaba que daba lo mismo. La diferencia apareció al medir con una métrica económica: la ganancia neta de la operación, descontando el costo de cada contacto y sumando la ganancia de cada venta. En esa métrica el árbol 2 (número alfabético) rendía menos que los otros dos. Según el equipo docente, la diferencia fue material para la operación, del orden de millones; en este artículo no publicamos la tabla de ganancias, así que tomá la magnitud como ilustrativa de un caso y no como una regla.

Por qué la tasa de aciertos puede engañar

Porque trata todos los errores como equivalentes, y casi nunca lo son:

Falso positivo

Llamar a alguien que no compra: cuesta el contacto.

Falso negativo

No llamar a alguien que hubiera comprado: cuesta la ganancia que se pierde.

Si ajustás los hiperparámetros con la tasa de aciertos, optimizás un objetivo que no es el del negocio. Cuando después comparás con la métrica económica, ningún modelo está bien afinado.

La regla práctica
  • Definí desde el principio una métrica del negocio: pesos, conversiones, ahorro de tiempo, vidas salvadas.
  • Usala para elegir las variables, ajustar los hiperparámetros y comparar modelos.
  • Usala también para elegir el umbral de decisión del clasificador.

scikit-learn incluye una herramienta para esto último: TunedThresholdClassifierCV ajusta el umbral de decisión con validación cruzada para maximizar una métrica dada, y su documentación recomienda elegir una métrica significativa para el caso de uso en lugar de quedarse con la predeterminada.

Buenas prácticas

Un resumen de lo que conviene revisar antes de entrenar.

Antes de codificar
  • Identificá si la variable tiene un orden real.
  • Contá cuántas categorías tiene y cuántas son raras.
  • Decidí qué hacer con las categorías que no aparezcan en el entrenamiento.
Al codificar
  • No numeres por orden alfabético categorías sin orden.
  • Con pocas categorías, One Hot Encoding. Con muchas, agrupá las raras o usá target encoding con validación cruzada.
  • Ajustá el codificador solo con los datos de entrenamiento.
Al evaluar
  • Compará modelos con la métrica del negocio, no solo con accuracy, F1 o AUC.
  • Si las clases están desbalanceadas, balanceá con muestreo o con pesos. La documentación de scikit-learn sugiere equilibrar el peso de cada clase.
  • Ajustá el umbral de decisión con datos distintos de los de entrenamiento.

El caso comentado es una sola operación. No demuestra que numerar por orden alfabético siempre falle, pero deja esa práctica bajo sospecha y muestra que la elección de la métrica es tan importante como la elección del algoritmo.

Para ver dónde encaja este paso en un proyecto, mirá el ciclo de vida de un proyecto de ciencia de datos.

Preguntas frecuentes

¿Cuándo uso One Hot Encoding?

Cuando la variable no tiene orden y tiene pocas categorías. Con muchas categorías conviene agruparlas o usar target encoding. Ver Tres estrategias.

¿Es siempre un error numerar las categorías por orden alfabético?

Es un error cuando las categorías no tienen un orden real, porque el modelo interpreta los números como distancias. Si el orden es real, como en los niveles de estudio, sí corresponde. Ver Ordenables y no ordenables.

¿Qué es el target encoding?

Es reemplazar cada categoría por un valor que resume su relación con la variable objetivo, por ejemplo su probabilidad histórica de venta. Hay que calcularlo sin filtrar información entre entrenamiento y prueba. Ver Cómo se hace en Python.

¿Por qué la tasa de aciertos no alcanza para comparar modelos?

Porque trata todos los errores por igual, y en un problema real equivocarse en un sentido cuesta distinto que en otro. Ver Cuando la métrica miente.

¿Hace falta balancear las clases?

Si el evento que buscás es raro, como una venta, conviene hacerlo para que el modelo no aprenda solo la clase más común. Ver El experimento.

¿Las redes neuronales y los árboles necesitan lo mismo?

No. Las redes neuronales requieren entradas numéricas. Los árboles dependen de la implementación: algunas aceptan categorías directamente y la de scikit-learn, según su documentación, todavía no. Ver Por qué hay que convertirlas.

Cómo seguir después de este artículo

Relación con la formación

Este artículo es informativo y no reemplaza un plan de estudios. Si buscás formación estructurada, el instituto ofrece cursos de ciencia de datos online, diplomaturas en ciencia de datos y cursos on demand.

Fuentes: scikit-learn: Preprocessing data (OneHotEncoder, OrdinalEncoder, TargetEncoder); scikit-learn: Tuning the decision threshold; scikit-learn: Decision Trees. Consultadas en octubre de 2026. El experimento del call center es un caso del equipo docente y no está publicado en una revista científica.

Item added to cart.
0 items - $0,00