Cómo TabPFN aprovecha el aprendizaje en contexto para lograr una precisión superior en conjuntos de datos tabulares en comparación con Random Forest y CatBoost

Los datos tabulares (información estructurada almacenada en filas y columnas) están en el centro de la mayoría de los problemas de aprendizaje automático del mundo real, desde registros de atención médica hasta transacciones financieras. Con el paso de los años, los modelos basados ​​en árboles de decisión, como Random Forest, XGBoost y CatBoost, se han convertido en la opción predeterminada para estas tareas. Su punto fuerte radica en el manejo de tipos de datos mixtos, la captura de interacciones de funciones complejas y la entrega de un rendimiento sólido sin un preprocesamiento pesado. Si bien el aprendizaje profundo ha transformado áreas como la visión por computadora y el procesamiento del lenguaje natural, históricamente ha tenido dificultades para superar consistentemente estos enfoques basados ​​en árboles en conjuntos de datos tabulares.

Esa tendencia de larga data ahora está siendo cuestionada. Un enfoque más nuevo, TabPFN, introduce una forma diferente de abordar los problemas tabulares, una que evita por completo el entrenamiento tradicional específico de conjuntos de datos. En lugar de aprender desde cero cada vez, se basa en un modelo previamente entrenado para hacer predicciones directamente, trasladando efectivamente gran parte del proceso de aprendizaje al tiempo de inferencia. En este artículo, analizamos más de cerca esta idea y la ponemos a prueba comparando TabPFN con modelos establecidos basados ​​en árboles como Random Forest y CatBoost en un conjunto de datos de muestra, evaluando su rendimiento en términos de precisión, tiempo de entrenamiento y velocidad de inferencia.

TabPFN es un modelo básico tabular diseñado para manejar datos estructurados de una manera completamente diferente al aprendizaje automático tradicional. En lugar de entrenar un nuevo modelo para cada conjunto de datos, TabPFN se entrena previamente en millones de tareas tabulares sintéticas generadas a partir de procesos causales. Esto le permite aprender una estrategia general para resolver problemas de aprendizaje supervisado. Cuando le proporciona su conjunto de datos, no pasa por un entrenamiento iterativo como los modelos basados ​​en árboles; en cambio, realiza predicciones directamente aprovechando lo que ya ha aprendido. En esencia, aplica una forma de aprendizaje en contexto a datos tabulares, similar a cómo funcionan los modelos de lenguaje grandes para texto.

La última versión, TabPFN-2.5, amplía significativamente esta idea al admitir conjuntos de datos más grandes y complejos, al tiempo que mejora el rendimiento. Se ha demostrado que supera a los modelos sintonizados basados ​​en árboles como XGBoost y CatBoost en puntos de referencia estándar e incluso iguala sistemas de conjunto potentes como AutoGluon. Al mismo tiempo, reduce la necesidad de ajuste de hiperparámetros y esfuerzo manual. Para que sea práctico para la implementación en el mundo real, TabPFN también introduce un enfoque de destilación, donde sus predicciones se pueden convertir en modelos más pequeños, como redes neuronales o conjuntos de árboles, conservando la mayor parte de la precisión y permitiendo una inferencia mucho más rápida.

Configurando las dependencias

pip instala tabpfn-client scikit-learn catboost
importar tiempo importar numpy como np desde sklearn.datasets importar make_classification desde sklearn.model_selection importar train_test_split desde sklearn.metrics importar precision_score # Modelos de sklearn.ensemble importar RandomForestClassifier desde catboost importar CatBoostClassifier desde tabpfn_client importar TabPFNClassifier

Para ejecutar el modelo, necesita la clave API TabPFN. Puede obtener lo mismo en https://ux.priorlabs.ai/home

importar sistema operativo desde getpass importar getpass os.environ[‘TABPFN_TOKEN’] = getpass(‘Ingrese el token TABPFN: ‘)

Creando el conjunto de datos

Para nuestro experimento, generamos un conjunto de datos de clasificación binaria sintética utilizando make_classification de scikit-learn. El conjunto de datos contiene 5000 muestras y 20 características, de las cuales 10 son informativas (en realidad contribuyen a predecir el objetivo) y 5 son redundantes (derivadas de las informativas). Esta configuración ayuda a simular un escenario tabular realista en el que no todas las funciones son igualmente útiles y algunas introducen ruido o correlación.

Luego dividimos los datos en conjuntos de entrenamiento (80%) y pruebas (20%) para evaluar el rendimiento del modelo en datos invisibles. El uso de un conjunto de datos sintéticos nos permite tener control total sobre las características de los datos y al mismo tiempo garantizar una comparación justa y reproducible entre TabPFN y los modelos tradicionales basados ​​en árboles.

X, y = make_classification( n_samples=5000, n_features=20, n_informative=10, n_redundant=5, random_state=42 ) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 )

Prueba de bosque aleatorio

Comenzamos con un clasificador de bosque aleatorio como base, utilizando 200 árboles. Random Forest es un método de conjunto sólido que crea múltiples árboles de decisión y agrega sus predicciones, lo que lo convierte en una opción sólida y confiable para datos tabulares sin requerir ajustes pesados.

Después del entrenamiento en el conjunto de datos, el modelo logra una precisión del 95,5%, lo cual es un desempeño sólido dada la naturaleza sintética de los datos. Sin embargo, esto conlleva un tiempo de entrenamiento de 9,56 segundos, lo que refleja el coste de construir cientos de árboles. En el lado positivo, la inferencia es relativamente rápida (0,0627 segundos), ya que las predicciones sólo implican pasar datos a través de los árboles ya construidos. Este resultado sirve como una base sólida para comparar con métodos más avanzados como CatBoost y TabPFN.

rf = RandomForestClassifier(n_estimators=200) inicio = time.time() rf.fit(X_train, y_train) rf_train_time = time.time() – inicio inicio = time.time() rf_preds = rf.predict(X_test) rf_infer_time = time.time() – inicio rf_acc = precision_score(y_test, rf_preds) print(f”RandomForest → Acc: {rf_acc:.4f}, Tren: {rf_train_time:.2f}s, Inferir: {rf_infer_time:.4f}s”)

Probando CatBoost

A continuación, entrenamos un clasificador CatBoost, un modelo de aumento de gradiente diseñado específicamente para datos tabulares. Construye árboles de forma secuencial, donde cada nuevo árbol corrige los errores de los anteriores. En comparación con Random Forest, CatBoost suele ser más preciso debido a este enfoque de impulso y su capacidad para modelar patrones complejos de manera más efectiva.

En nuestro conjunto de datos, CatBoost logra una precisión del 96,7 %, superando a Random Forest y demostrando su solidez como método de última generación basado en árboles. También entrena un poco más rápido, tardando 8,15 segundos, a pesar de utilizar 500 iteraciones de impulso. Una de sus mayores ventajas es la velocidad de inferencia: las predicciones son extremadamente rápidas, con solo 0,0119 segundos, lo que las hace muy adecuadas para escenarios de producción donde la baja latencia es fundamental. Esto convierte a CatBoost en un punto de referencia sólido antes de compararlo con enfoques más nuevos como TabPFN.

cat = CatBoostClassifier( iteraciones=500, profundidad=6, tasa_de_aprendizaje=0.1, detallado=0 ) inicio = tiempo.tiempo() cat.fit(X_train, y_train) cat_train_time = tiempo.time() – inicio inicio = tiempo.tiempo() cat_preds = cat.predict(X_test) cat_infer_time = tiempo.time() – inicio cat_acc = precision_score(y_test, cat_preds) print(f”CatBoost → Acc: {cat_acc:.4f}, Tren: {cat_train_time:.2f}s, Infer: {cat_infer_time:.4f}s”)

Pestaña de pruebaPFN

Finalmente, evaluamos TabPFN, que adopta un enfoque fundamentalmente diferente en comparación con los modelos tradicionales. En lugar de aprender desde cero sobre el conjunto de datos, aprovecha un modelo previamente entrenado y simplemente condiciona los datos de entrenamiento durante la inferencia. El paso .fit() implica principalmente cargar las pesas previamente entrenadas, por lo que es extremadamente rápido.

En nuestro conjunto de datos, TabPFN logra la precisión más alta del 98,8%, superando tanto a Random Forest como a CatBoost. El tiempo de ajuste es de sólo 0,47 segundos, significativamente más rápido que el de los modelos basados ​​en árboles, ya que no se realiza ningún entrenamiento real. Sin embargo, este cambio tiene una desventaja: la inferencia tarda 2,21 segundos, que es mucho más lenta que CatBoost y Random Forest. Esto se debe a que TabPFN procesa los datos de entrenamiento y de prueba juntos durante la predicción, realizando efectivamente el paso de “aprendizaje” en el momento de la inferencia.

En general, TabPFN demuestra una gran ventaja en precisión y velocidad de configuración, al tiempo que destaca una compensación computacional diferente en comparación con los modelos tabulares tradicionales.

tabpfn = TabPFNClassifier() inicio = time.time() tabpfn.fit(X_train, y_train) # carga el modelo previamente entrenado tabpfn_train_time = time.time() – inicio inicio = time.time() tabpfn_preds = tabpfn.predict(X_test) tabpfn_infer_time = time.time() – inicio tabpfn_acc = precision_score(y_test, tabpfn_preds) print(f”TabPFN → Acc: {tabpfn_acc:.4f}, Ajuste: {tabpfn_train_time:.2f}s, Inferir: {tabpfn_infer_time:.4f}s”)

En todos nuestros experimentos, TabPFN ofrece el rendimiento general más sólido, logrando la mayor precisión (98,8 %) y prácticamente no requiere tiempo de entrenamiento (0,47 s) en comparación con Random Forest (9,56 s) y CatBoost (8,15 s). Esto resalta su ventaja clave: eliminar el entrenamiento específico del conjunto de datos y el ajuste de hiperparámetros y al mismo tiempo superar los métodos basados ​​en árboles bien establecidos. Sin embargo, este beneficio tiene una desventaja: la latencia de inferencia es significativamente mayor (2,21 s), ya que el modelo procesa datos de entrenamiento y de prueba juntos durante la predicción. Por el contrario, CatBoost y Random Forest ofrecen una inferencia mucho más rápida, lo que los hace más adecuados para aplicaciones en tiempo real.

Desde un punto de vista práctico, TabPFN es muy eficaz para tareas tabulares pequeñas y medianas, experimentación rápida y escenarios en los que minimizar el tiempo de desarrollo es fundamental. Para entornos de producción, especialmente aquellos que requieren predicciones de baja latencia o manejan conjuntos de datos muy grandes, los avances más recientes, como el motor de destilación de TabPFN, ayudan a cerrar esta brecha al convertir el modelo en redes neuronales compactas o conjuntos de árboles, conservando la mayor parte de su precisión y mejorando drásticamente la velocidad de inferencia. Además, la compatibilidad con el escalado a millones de filas lo hace cada vez más viable para casos de uso empresarial. En general, TabPFN representa un cambio en el aprendizaje automático tabular: cambia el esfuerzo de capacitación tradicional por un enfoque más flexible basado en inferencias.

Consulte los códigos completos con Notebook aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 130.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.

¿Necesita asociarse con nosotros para promocionar su repositorio de GitHub O su página principal de Hugging O su lanzamiento de producto O seminario web, etc.? Conéctate con nosotros

Soy graduado en ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en diversas áreas.