Explorando TabPFN: un modelo básico creado para datos tabulares

Consulté TabPFN en el artículo ICLR 2023: TabPFN: un transformador que resuelve pequeños problemas de clasificación tabular en un segundo. El artículo presentó TabPFN, un modelo transformador de código abierto creado específicamente para conjuntos de datos tabulares, un espacio que realmente no se ha beneficiado del aprendizaje profundo y donde los modelos de árboles de decisión impulsados ​​por gradientes aún dominan.

En ese momento, TabPFN solo admitía hasta 1000 muestras de entrenamiento y 100 funciones puramente numéricas, por lo que su uso en entornos del mundo real era bastante limitado. Sin embargo, con el tiempo, ha habido varias mejoras incrementales, incluido TabPFN-2, que se introdujo en 2025 a través del artículo: Predicciones precisas sobre datos pequeños con un modelo de base tabular (TabPFN-2).

Evolución de TabPFN

Más recientemente, se lanzó TabPFN-2.5 y esta versión puede manejar cerca de 100.000 puntos de datos y alrededor de 2.000 funciones, lo que la hace bastante práctica para tareas de predicción del mundo real. He pasado gran parte de mis años profesionales trabajando con conjuntos de datos tabulares, por lo que esto, naturalmente, captó mi interés y me impulsó a mirar más profundamente. En este artículo, ofrezco una descripción general de alto nivel de TabPFN y también explico una implementación rápida utilizando una competencia de Kaggle para ayudarlo a comenzar.

¿Qué es TabPFN?

TabPFN significa Red ajustada de datos anteriores tabulares, un modelo básico que se basa en la idea de ajustar un modelo a conjuntos de datos tabulares anteriores, en lugar de a un único conjunto de datos, de ahí el nombre.

Mientras leía los informes técnicos, había muchos fragmentos interesantes de estos modelos. Por ejemplo, TabPFN puede ofrecer predicciones tabulares sólidas con una latencia muy baja, a menudo comparable a los métodos de conjunto sintonizado, pero sin bucles de entrenamiento repetidos.

Desde la perspectiva del flujo de trabajo, tampoco existe una curva de aprendizaje, ya que se adapta naturalmente a las configuraciones existentes a través de una interfaz de estilo scikit-learn. Puede manejar valores faltantes, valores atípicos y tipos de características mixtas con un preprocesamiento mínimo que cubriremos durante la implementación más adelante en este artículo.

La necesidad de un modelo básico para datos tabulares

Antes de explicar cómo funciona TabPFN, primero intentemos comprender el problema más amplio que intenta abordar.

Con el aprendizaje automático tradicional en conjuntos de datos tabulares, normalmente se entrena un nuevo modelo para cada nuevo conjunto de datos. Esto a menudo implica largos ciclos de capacitación y también significa que un modelo previamente entrenado realmente no se puede reutilizar.

Sin embargo, si nos fijamos en los modelos básicos para texto e imágenes, su idea es radicalmente diferente. En lugar de volver a entrenar desde cero, se realiza una gran cantidad de entrenamiento previo por adelantado en muchos conjuntos de datos y el modelo resultante se puede aplicar a nuevos conjuntos de datos sin volver a entrenar en la mayoría de los casos.

En mi opinión, esta es la brecha que el modelo está tratando de cerrar para los datos tabulares, es decir, reducir la necesidad de entrenar un nuevo modelo desde cero para cada conjunto de datos y esta parece un área de investigación prometedora.

Canal de inferencia y capacitación de TabPFN a un alto nivel

Una descripción general de alto nivel del proceso de capacitación e inferencia del modelo TabPFN

TabPFN utiliza el aprendizaje en contexto para adaptar una red neuronal a conjuntos de datos tabulares anteriores. Lo que esto significa es que en lugar de aprender una tarea a la vez, el modelo aprende cómo tienden a verse los problemas tabulares en general y luego usa ese conocimiento para hacer predicciones sobre nuevos conjuntos de datos a través de un único paso hacia adelante. Aquí hay un extracto del artículo de Nature de TabPFN:

TabPFN aprovecha el aprendizaje en contexto (ICL), el mismo mecanismo que condujo al asombroso rendimiento de grandes modelos de lenguaje, para generar un poderoso algoritmo de predicción tabular que se aprende completamente. Aunque ICL se observó por primera vez en modelos de lenguaje grandes, trabajos recientes han demostrado que los transformadores pueden aprender algoritmos simples como la regresión logística a través de ICL.

El proceso se puede dividir en tres pasos principales:

1. Generación de conjuntos de datos sintéticos

TabPFN trata un conjunto de datos completo como un único punto de datos (o un token) introducido en la red. Esto significa que requiere exposición a una gran cantidad de conjuntos de datos durante el entrenamiento. Por este motivo, el entrenamiento de TabPFN comienza con conjuntos de datos tabulares sintéticos. ¿Por qué sintético? A diferencia del texto o las imágenes, no hay muchos conjuntos de datos tabulares grandes y diversos del mundo real disponibles, lo que hace que los datos sintéticos sean una parte clave de la configuración. Para ponerlo en perspectiva, TabPFN 2 se entrenó en 130 millones de conjuntos de datos.

El proceso de generación de conjuntos de datos sintéticos es interesante en sí mismo. TabPFN utiliza un modelo causal estructural altamente paramétrico para crear conjuntos de datos tabulares con estructuras variadas, relaciones de características, niveles de ruido y funciones objetivo. Al tomar muestras de este modelo, se puede generar un conjunto grande y diverso de conjuntos de datos, cada uno de los cuales actúa como una señal de entrenamiento para la red. Esto anima al modelo a aprender patrones generales en muchos tipos de problemas tabulares, en lugar de sobreajustarlos a un solo conjunto de datos.

2. Entrenamiento

La siguiente figura ha sido tomada del artículo de Nature, mencionado anteriormente, y demuestra claramente el proceso de entrenamiento e inferencia.

La descripción general de alto nivel del uso y la capacitación previa de TabPFN | Fuente: Predicciones precisas sobre datos pequeños con un modelo de base tabular (artículo de acceso abierto)

Durante el entrenamiento, se muestrea un conjunto de datos tabulares sintéticos y se divide en tren X, tren Y, prueba X y prueba Y. Los valores de la prueba Y se mantienen y las partes restantes se pasan a la red neuronal que genera una distribución de probabilidad para cada punto de datos de la prueba Y, como se muestra en la figura de la izquierda.

Los valores de prueba Y obtenidos se evalúan luego bajo estas distribuciones previstas. Luego se calcula una pérdida de entropía cruzada y la red se actualiza para minimizar esta pérdida. Esto completa un paso de retropropagación para un único conjunto de datos y luego este proceso se repite para millones de conjuntos de datos sintéticos.

3. Inferencia

En el momento de la prueba, el modelo TabPFN entrenado se aplica a un conjunto de datos real. Esto corresponde a la figura de la derecha, donde se utiliza el modelo para realizar inferencias. Como puedes ver, la interfaz sigue siendo la misma que durante el entrenamiento. Usted proporciona el tren X, el tren Y y la prueba X, y el modelo genera predicciones para la prueba Y mediante un único paso hacia adelante.

Lo más importante es que no hay reentrenamiento en el momento de la prueba y TabPFN realiza lo que efectivamente es una inferencia de tiro cero, produciendo predicciones inmediatamente sin actualizar sus ponderaciones.

Arquitectura

La arquitectura TabPFN | Fuente: Predicciones precisas sobre datos pequeños con un modelo de base tabular (artículo de acceso abierto)

También mencionemos la arquitectura central del modelo como se menciona en el artículo. En un nivel alto, TabPFN adapta la arquitectura del transformador para adaptarse mejor a los datos tabulares. En lugar de aplanar una tabla en una secuencia larga, el modelo trata cada valor de la tabla como su propia unidad. Utiliza un mecanismo de atención de dos etapas en el que primero aprende cómo se relacionan las características entre sí dentro de una sola fila y luego aprende cómo se comporta la misma característica en diferentes filas.

Esta forma de estructurar la atención es vital ya que coincide con cómo se organizan realmente los datos tabulares. Esto también significa que al modelo no le importa el orden de las filas o columnas, lo que significa que puede manejar tablas más grandes que aquellas en las que fue entrenado.

Implementación

Ahora veamos una implementación de TabPFN-2.5 y la comparemos con un clasificador básico XGBoost para proporcionar un punto de referencia familiar. Si bien los pesos de los modelos se pueden descargar desde Hugging Face, usar Kaggle Notebooks es más sencillo ya que el modelo está disponible allí y la compatibilidad con GPU viene lista para usar para una inferencia más rápida. En cualquier caso, debes aceptar los términos del modelo antes de usarlo. Después de agregar el modelo TabPFN al entorno del cuaderno Kaggle, ejecute la siguiente celda para importarlo.

# importando el modelo import os.environ["TABPFN_MODEL_CACHE_DIR"] = "/kaggle/input/tabpfn-2-5/pytorch/default/2"

Puede encontrar el código completo en el cuaderno de Kaggle adjunto aquí.

Instalación

Puede acceder a TabPFN de dos maneras, ya sea como un paquete Python y ejecutarlo localmente o como un cliente API para ejecutar el modelo en la nube:

# Paquete Python pip install tabpfn # Como cliente API pip install tabpfn-client

Conjunto de datos: conjunto de datos de competencia de Kaggle Playground

Para tener una mejor idea de cómo funciona TabPFN en un entorno del mundo real, lo probé en una competencia de Kaggle Playground que concluyó hace unos meses. La tarea, Predicción binaria con un conjunto de datos de lluvia (licencia MIT), requiere predecir la probabilidad de lluvia para cada identificación en el conjunto de prueba. La evaluación se realiza utilizando ROC-AUC, lo que lo convierte en una buena opción para modelos basados ​​en probabilidad como TabPFN. Los datos de entrenamiento se ven así:

Primeras filas de los datos de entrenamiento.

Entrenamiento de un clasificador TabPFN

El entrenamiento del clasificador TabPFN es sencillo y sigue una interfaz familiar de estilo scikit-learn. Si bien no existe una capacitación para tareas específicas en el sentido tradicional, sigue siendo importante habilitar la compatibilidad con GPU; de lo contrario, la inferencia puede ser notablemente más lenta. El siguiente fragmento de código explica cómo preparar los datos, entrenar un clasificador TabPFN y evaluar su rendimiento utilizando la puntuación ROC-AUC.

# Importar bibliotecas necesarias desde tabpfn import TabPFNClassifier importar pandas como pd, numpy como np de sklearn.model_selection import train_test_split # Seleccionar columnas de características FEATURES = [c for c in train.columns if c not in ["rainfall",'id']] X = train[FEATURES].copy() y = train["rainfall"].copy() # Dividir datos en tren y validación establece train_index, valid_index = train_test_split( train.index, test_size=0.2, random_state=42 ) x_train = X.loc[train_index].copy() y_train = y.loc[train_index].copy() x_valid = X.loc[valid_index].copy() y_valid = y.loc[valid_index].copy() # Inicializar y entrenar TabPFN model_pfn = TabPFNClassifier(device=["cuda:0", "cuda:1"]) model_pfn.fit(x_train, y_train) # Predecir probabilidades de clase probs_pfn = model_pfn.predict_proba(x_valid) # # Usar probabilidad de la clase positiva pos_probs = probs_pfn[:, 1] # # Evaluar usando ROC AUC print(f"ROC AUC: {roc_auc_score(y_valid, pos_probs):.4f}") ————————————————- ROC AUC: 0,8722

A continuación, entrenemos un clasificador XGBoost básico.

Entrenando un clasificador XGBoost

from xgboost import XGBClassifier # Inicializar el clasificador XGBoost model_xgb = XGBClassifier( Objective="binary:logistic", tree_method="hist", dispositivo="cuda", enable_categorical=True, random_state=42, n_jobs=1 ) # Entrenar el modelo model_xgb.fit(x_train, y_train) # Predecir probabilidades de clase probs_xgb = model_xgb.predict_proba(x_valid) # Usar probabilidad de la clase positiva pos_probs_xgb = probs_xgb[:, 1] # Evaluar usando ROC AUC print(f"ROC AUC: {roc_auc_score(y_valid, pos_probs_xgb):.4f}") ———————————————————— ROC AUC: 0.8515

Como puede ver, TabPFN funciona bastante bien desde el primer momento. Si bien XGBoost ciertamente se puede ajustar aún más, mi intención aquí es comparar implementaciones básicas y básicas en lugar de modelos optimizados. Me colocó en el puesto 22 de la clasificación pública. A continuación se muestran las 3 puntuaciones principales como referencia.

Puntuación de la tabla de clasificación de Kaggle usando TabPFN

¿Qué pasa con la explicabilidad del modelo?

Los modelos de transformadores no son inherentemente interpretables y, por lo tanto, para comprender las predicciones, se utilizan comúnmente técnicas de interpretabilidad post-hoc como SHAP (SHapley Additive Explanations) para analizar predicciones individuales y contribuciones de características. TabPFN proporciona una extensión de interpretabilidad dedicada que se integra con SHAP, lo que facilita la inspección y el razonamiento sobre las predicciones del modelo. Para acceder a eso, primero deberá instalar la extensión:

# Instalar la extensión de interpretabilidad: pip install "tabpfn-extensions[interpretability]" from tabpfn_extensions import interpretability # Calcular valores SHAP shap_values = interpretability.shap.get_shap_values( estimator=model_pfn, test_x=x_test[:50], atributo_names=FEATURES, algoritmo="permutación", ) # Crear visualización fig = interpretabilidad.shap.plot_shap(shap_values)

Izquierda: valores SHAP por función en predicciones individuales | Derecha: importancia promedio de las características SHAP en todo el conjunto de datos. Los valores SHAP se calcularon en un subconjunto de muestras de validación para determinar la eficiencia.

El gráfico de la izquierda muestra la importancia promedio de las características SHAP en todo el conjunto de datos, lo que brinda una vista global de qué características son más importantes para el modelo. El gráfico de la derecha es un gráfico de resumen SHAP (abejas), que proporciona una vista más granular al mostrar valores SHAP para cada característica en predicciones individuales.

De los gráficos anteriores, es evidente que la nubosidad, la luz solar, la humedad y el punto de rocío tienen el mayor impacto general en las predicciones del modelo, mientras que características como la dirección del viento, la presión y las variables relacionadas con la temperatura desempeñan un papel comparativamente menor.

Es importante señalar que SHAP explica las relaciones aprendidas del modelo, no la causalidad física.

Conclusión

Hay mucho más en TabPFN de lo que he cubierto en este artículo. Lo que personalmente me gustó es tanto la idea subyacente como lo fácil que es empezar. Hay muchos aspectos que no he mencionado aquí, como el uso de TabPFN en el pronóstico de series de tiempo, la detección de anomalías, la generación de datos tabulares sintéticos y la extracción de incrustaciones de modelos TabPFN.

Otra área que estoy particularmente interesado en explorar es el ajuste, donde estos modelos se pueden adaptar a datos de un dominio específico. Dicho esto, este artículo pretendía ser una ligera introducción basada en mi primera experiencia práctica. Planeo explorar estas capacidades adicionales con más profundidad en publicaciones futuras. Por ahora, la documentación oficial es un buen lugar para profundizar más.

Nota: Todas las imágenes, a menos que se indique lo contrario, son creadas por el autor.