TabPFN vs XGBoost: benchmark uitgevoerd op een RTX 4070 Ti
Wat deze modellen precies doen
Een tabulair funderingsmodel is vooraf getraind op miljoenen synthetische tabellen die hiervoor speciaal zijn gegenereerd. Wanneer er een nieuwe tabel binnenkomt, past het model geen enkel gewicht aan: het ontvangt de trainingsrijen als context en produceert de voorspellingen in één enkele forward pass.
Dit is hetzelfde concept van in-context learning dat we kennen van taalmodellen, maar dan verplaatst van woorden naar kolommen. Daarom is het werkwoord "trainen" hier ongebruikelijk: de code noemt het nog steeds fit, maar intern vindt er geen gradient descent plaats; er is enkel sprake van het kopiëren van data naar de videokaart.
Dit verklaart ook waarom de kosten op een onverwachte plek optreden. Het fitten is vrijwel gratis, terwijl de voorspelling de rekenkracht kost—precies het omgekeerde van een beslissingsboom.
Concreet ziet de reis van één rij er als volgt uit: er komt een verzoek binnen met een lege cel, het model weegt dit af tegen alles wat al is gebeurd, lost dit in één pass op en geeft een voorspelling terug.
Voorbeelden van gemeten casussen
| Verzoek | Context | Proces | Voorspelling |
|---|---|---|---|
| Kredietrisico: Een kredietaanvraag komt binnen | 2100 reeds afgehandelde aanvragen · 10 kolommen | TabICL · niet getuned · 0,8 s | Betaalt de klant terug? (AUC 0,8528) |
| Verkoopcampagne: Een contact komt op de lijst | 2100 reeds gemaakte calls · 7 kolommen | TabICL · niet getuned · 0,8 s | Is het de moeite waard hen te bellen? (AUC 0,8699) |
| Klinische heropname: Een patiënt wordt ontslagen | 2100 eerdere ontslagen · 7 kolommen | TabICL · niet getuned · 0,8 s | Worden ze heropgenomen? (AUC 0,6484) |
| Recidive: Een zaak wordt beoordeeld | 2100 reeds gesloten zaken · 11 kolommen | TabICL · niet getuned · 0,6 s | Zullen ze opnieuw in de fout gaan? (AUC 0,7329) |
| Elektriciteitsvraag: Een marktperiode sluit | 2100 eerdere periodes · 7 kolommen | TabICL · niet getuned · 0,8 s | Gaat de prijs omhoog of omlaag? (AUC 0,8873) |
| Moleculaire screening: Een kandidaat-molecuul komt binnen | 2100 reeds geteste moleculen · 419 kolommen | TabICL · niet getuned · 6,0 s | Veroorzaakt het een biologische respons? (AUC 0,8667) |
Analyse per categorie
Kredietrisico: het funderingsmodel wint
De meest voorkomende casus in de bankensector: beslissen wie een lening krijgt.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| credit | 3000 × 10 | 0,7667 | 0,7578 | 0,7533 |
| heloc | 3000 × 22 | 0,7222 | 0,7300 | 0,7078 |
| default-of-credit | 3000 × 20 | 0,6956 | 0,6967 | 0,6944 |
Alle drie de datasets worden gewonnen door het funderingsmodel. Op heloc scoort TabPFN 0,022 en TabICL 0,014; in kredietrisico is dat geen onbeduidend verschil. Context: clf_num/credit.csv uit de inria-soda/tabular-benchmark suite, getrimd tot 3.000 rijen, seed 0, split 70/30 met stratificatie.
Verkoopcampagne: het funderingsmodel wint
Wie moet je eerst bellen als er duizend contacten zijn maar je slechts tijd hebt voor honderd.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| bank-marketing | 3000 × 7 | 0,7944 | 0,7967 | 0,7833 |
Dit is de enige casus waarin TabPFN vóór TabICL eindigt. Beiden verslaan getuned boosting.
Klinische heropname: het funderingsmodel wint
Een echt ziekenhuisregister: welke patiënt wordt opnieuw opgenomen.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| Diabetes130US | 3000 × 7 | 0,5911 | 0,5933 | 0,5900 |
Op basis van accuratesse liggen ze bijna gelijk, maar de Area Under the Curve (AUC) vertoont een scherp verschil: 0,6484 tegenover 0,6264. De risico-ordening, essentieel voor triage, verbetert aanzienlijk meer dan de accuratesse suggereert.
Recidive: het funderingsmodel wint
De dataset die het debat over algoritmische bias in de rechtspraak opende.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| compas-two-years | 3000 × 11 | 0,6733 | 0,6767 | 0,6700 |
Het funderingsmodel wint, hoewel een beter model hier het gebruik niet per se legitimeert; het argument bij deze dataset ging nooit over accuratesse.
Elektriciteitsvraag: een gelijkspel
Consumptie- en prijsreeksen van een elektriciteitsmarkt.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| electricity | 3000 × 7 | 0,8178 | 0,8111 | 0,8178 |
Een gelijkspel. TabICL matcht getuned boosting tot op het vierde decimaal, terwijl TabPFN eronder zakt.
Moleculaire screening: afhankelijk van het model
419 kolommen met chemische descriptoren: de "brede" tabel.
| Dataset | Grootte | TabICL | TabPFN | Tuned XGB |
|---|---|---|---|---|
| Bioresponse | 3000 × 419 | 0,7922 | 0,7567 | 0,7744 |
Hier breekt TabPFN: 0,7567 is slechter dan zelfs ongetuned XGBoost, en het kost 18,1 seconden. TabICL houdt stand en eindigt als eerste. Het is de breedte van de tabel, niet de lengte, die hier de beperkende factor is.
Waar dit concreet voor dient
Een tabel is in essentie een spreadsheet: rijen die gevallen zijn en kolommen die attributen zijn. De taak is altijd hetzelfde: voorspel één kolom op basis van de andere. Bijvoorbeeld:
- Klantentabel: kenmerken zoals verblijfsduur, abonnement, gebruik en klachten, om te schatten wie volgende maand opzegt.
- Transactielog: bedrag, handelaar, tijdstip en land, om fraude te signaleren.
- Kredietgeschiedenis: inkomen, schulden en betaalgedrag, om in te schatten wie niet zal terugbetalen.
- Sensordata: metingen van een machine, om te anticiperen wanneer deze kapotgaat.
- Patiëntendossiers: symptomen en laboratoriumuitslagen, om prioriteit te bepalen bij triage.
Dit beslaat een groot deel van het datawerk in elk bedrijf. Het is ook het terrein waar deep learning jarenlang verloor van gradient-boosted tree ensembles.
Wat verandert er als de belofte waar is?
Vandaag de dag is het oplossen van deze zaken een ritueel: data voorbereiden, model kiezen, hyperparameters zoeken, valideren, herhalen. Het zoeken naar hyperparameters is het saaiste deel en vreet menselijke en machine-uren. In deze benchmark duurde het zoeken voor XGBoost tot 50 seconden per dataset; bij echte problemen met meer rijen en combinaties gaat dit over minuten of uren.
Een tabulair funderingsmodel stelt voor dit ritueel volledig over te slaan. Je geeft het de tabel, het geeft in een seconde antwoord, en dat is alles. Geen boomdiepte kiezen, geen learning rate bepalen, geen cross-validatie tussen vijfentwintig kandidaten. In plaats van een middag te besteden aan het tunen van een churn-model, heb je het antwoord in de tijd die nodig is om koffie te zetten.
De regels van de benchmark
Om een betrouwbare benchmark te bouwen, heb ik de volgende regels gehanteerd:
- Data: Ik gebruikte de Grinsztajn-benchmark (third-party) om manipulatie van resultaten te voorkomen.
- XGBoost: Deze werd getuned. Ik gebruikte twee versies: één met vaste, redelijke parameters en één met een random search over 25 combinaties en three-fold cross-validation.
- Consistentie: Dezelfde split, seed en kolommen voor iedereen. Categorische variabelen zijn integer-encoded.
- Betrouwbaarheid: Vijf seeds per dataset; de mediaan wordt gerapporteerd.
- Tijdmeting: Inclusief twee inference-passes (klasse en probabiliteit), wat funderingsmodellen relatief duurder maakt.
- Hardware: Alles is uitgevoerd op een 16 GB RTX 4070 Ti SUPER, waarbij twee CPU-cores vrij werden gelaten om scheduler-problemen te voorkomen.
Struikelblokken tijdens het proces
Het traject naar de uiteindelijke resultaten verliep niet zonder problemen:
PyTorch schakelde de GPU stilzwijgend uit
Bij de eerste run gaf de output device: cpu aan, ondanks dat de kaart beschikbaar was. PyTorch had een build voor CUDA 13.0 geselecteerd, terwijl de driver 12.8 exposeerde. In plaats van een foutmelding te geven, schakelde PyTorch simpelweg over naar de CPU. Dit werd opgelost door de versie strikt vast te pinnen: pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cu128 torch==2.9.1+cu128
OpenML API gaf 504-fouten
De oorspronkelijke bron voor datasets, OpenML, was tijdens de run volledig onbereikbaar (gateway timeout). Ik ben overgestapt op de CSV's van dezelfde benchmark op HuggingFace.
De licentiebarière van TabPFN
TabPFN is het meest genoemde model in dit veld. Echter, versie 8.3.0 vereist nu een account, acceptatie van de licentie via een browser en een export van een account-token. Het is niet langer een model dat je simpelweg installeert en runt. Ik heb daarom twee alternatieven geprobeerd:
- TabPFN 2.x: Deze serie downloadt de gewichten nog zonder registratie (versie 2.2.1 is gebruikt in de tabellen).
- TabICL: Van het Soda-team van Inria. Dit model heeft een drie-clausule BSD-licentie, downloadt zonder barrières en bleek in mijn metingen superieur.
De resultaten
Veertien datasets, elk getrimd tot 3.000 rijen. Accuratesse is de mediaan van vijf seeds. De kolom 'seconden' is de som van fitting en predictie.
| Dataset | Grootte | TabICL | TabPFN 2.2.1 | XGBoost | Tuned XGB | s TabICL | s Tuned XGB |
|---|---|---|---|---|---|---|---|
| bank-marketing | 3000 × 7 | 0,7944 | 0,7967 | 0,7711 | 0,7833 | 0,8 | 1,8 |
| credit | 3000 × 10 | 0,7667 | 0,7578 | 0,7478 | 0,7533 | 0,8 | 2,2 |
| heloc | 3000 × 22 | 0,7222 | 0,7300 | 0,7022 | 0,7078 | 0,8 | 1,6 |
| pol | 3000 × 26 | 0,9844 | 0,9833 | 0,9778 | 0,9756 | 0,8 | 1,0 |
| eye_movements | 3000 × 20 | 0,6100 | 0,6111 | 0,5944 | 0,5833 | 0,8 | 3,0 |
| california | 3000 × 8 | 0,8967 | 0,8978 | 0,8833 | 0,8767 | 0,6 | 1,6 |
| house_16H | 3000 × 16 | 0,8811 | 0,8744 | 0,8722 | 0,8711 | 1,1 | 3,0 |
| MagicTelescope | 3000 × 10 | 0,8778 | 0,8622 | 0,8489 | 0,8456 | 1,3 | 2,4 |
| electricity | 3000 × 7 | 0,8178 | 0,8111 | 0,8156 | 0,8178 | 0,8 | 2,4 |
| Diabetes130US | 3000 × 7 | 0,5911 | 0,5933 | 0,5644 | 0,5900 | 0,8 | 1,4 |
| default-of-credit | 3000 × 20 | 0,6956 | 0,6967 | 0,6878 | 0,6944 | 0,9 | 4,5 |
| compas-two-years | 3000 × 11 | 0,6733 | 0,6767 | 0,6444 | 0,6700 | 0,6 | 0,7 |
| Bioresponse | 3000 × 419 | 0,7922 | 0,7567 | 0,7844 | 0,7744 | 6,0 | 27,2 |
| albert | 3000 × 31 | 0,6500 | 0,6611 | 0,6511 | 0,6611 | 1,8 | 2,6 |
Analyse van de winst
Vergeleken met getuned XGBoost (op basis van accuratesse):
- TabICL: twaalf winstpartijen, één gelijkspel (electricity) en één verlies (albert). Gemiddeld verschil: +0,0106.
- TabPFN 2.2.1: elf winstpartijen, één gelijkspel (albert) en twee verliezen (electricity en Bioresponse). Gemiddeld verschil: +0,0075.
Kijkt men echter naar de Area Under the Curve (AUC), dan wordt het resultaat scherper:
- TabICL: 14 van de 14 datasets gewonnen. Gemiddeld verschil: +0,0114.
- TabPFN 2.2.1: 13 van de 14 datasets gewonnen. Gemiddeld verschil: +0,0089.
TabICL verslaat getuned XGBoost op elke dataset zonder uitzondering. Zelfs op albert, waar het op accuratesse verliest, heeft het een betere AUC (0,7101 tegenover 0,7094).
De kosten zijn het omgekeerde van wat je verwacht
Het belangrijkste argument is niet de accuratesse (het verschil is immers klein), maar de tijd. TabICL lost een dataset op in minder dan een seconde zonder enige tuning. Tuned XGBoost doet er tussen de 0,7 en 27,2 seconden over om hyperparameters te zoeken, en eindigt desondanks lager. De dure factor van het werk—menselijke en machine-uren voor tuning—verdwijnt simpelweg.
De invloed van schaal: rijen vs. kolommen
Ik heb getest of de belofte standhoudt bij grotere datasets met de jannis dataset.
| Rijen | TabICL | XGBoost | Tuned XGB | s TabICL | s Tuned XGB |
|---|---|---|---|---|---|
| 500 | 0,7533 | 0,7733 | 0,7533 | 0,7 | 3,2 |
| 1.000 | 0,7733 | 0,7467 | 0,7533 | 0,9 | 4,9 |
| 2.000 | 0,7800 | 0,7583 | 0,7667 | 1,1 | 9,4 |
| 4.000 | 0,7817 | 0,7692 | 0,7725 | 1,8 | 21,1 |
| 8.000 | 0,7958 | 0,7658 | 0,7583 | 2,6 | 19,7 |
| 16.000 | 0,8090 | 0,7785 | 0,7852 | 5,3 | 34,6 |
| 32.000 | 0,8230 | 0,7894 | 0,7929 | 11,7 | 50,3 |
Het voordeel breekt niet bij meer rijen; bij 32.000 rijen consolideert het zelfs (+0,030). De tijdmeting bevestigt dit: 11,7 seconden tegenover 50,3 seconden.
Echter, de breedte van de tabel is wél een probleem. Bij Bioresponse (419 kolommen) zakt TabPFN naar 0,7567 (slechter dan ongetuned XGBoost) en stijgt de rekentijd naar 18,1 seconden. TabICL houdt beter stand (0,7922), maar ook daar stijgt de tijd naar 6,0 seconden. Het aantal kolommen beïnvloedt de attention cost van de transformer; synthetische pretraining dekt tabellen met tientallen kolommen goed, maar niet honderden.
Beperkingen van dit onderzoek
- Alleen binaire classificatie: Regressie of multiclass is niet getest.
- Plafond: In de hoofdbenchmark is er een limiet van 3.000 rijen.
- Tuning intensiteit: De hyperparameter search voor XGBoost bestond uit 25 combinaties. Agressievere tuning zou het gat mogelijk kunnen verkleinen.
- AUC tuning: XGBoost was getuned op accuratesse, niet op AUC.
- Encoding: Categoricals waren integer-encoded; een betere behandeling zou XGBoost waarschijnlijk meer bevoordelen.
- Data lek: Encoding en null-filling zijn over de hele tabel berekend vóór de split. Dit inflateert de scores voor alle modellen gelijkmatig.
- Variabiliteit: Bij sommige datasets is de winst kleiner dan de variatie tussen seeds.
- Breedte-hypothese: De conclusie over brede tabellen rust op één enkele dataset (
Bioresponse). - Versie TabPFN: De huidige versie 8.3.0 is niet gemeten vanwege de licentiebarière; resultaten zijn van versie 2.2.1.
Conclusie: Wanneer wel en wanneer niet gebruiken?
Wel gebruiken: Bij elke tabel tussen de 1.000 en 30.000 rijen met minder dan honderd kolommen, waarbij menselijke tijd kostbaarder is dan een fractie van een procent accuratesse. Voor een initiële exploratie is het bijna onmogelijk om dit over te slaan.
Niet gebruiken:
- Bij zeer brede tabellen (prestatieverlies en hogere kosten).
- In productieomgevingen zonder GPU.
- Wanneer een lichtgewicht artifact nodig is (een getrainde boom weegt kilobytes; een transformer moet geladen worden).
- Wanneer auditbaarheid van de gewichten vereist is (in dat geval is TabICL de enige optie die je zonder toestemming kunt downloaden en draaien).
***
Technische specificaties: Gemeten op 16 augustus 2026 op een 16 GB RTX 4070 Ti SUPER, met torch 2.9.1+cu128, XGBoost 3.4.1, TabICL 2.1.1 en TabPFN 2.2.1. Data afkomstig uit de inria-soda/tabular-benchmark suite.
Bronnen
- Accurate predictions on small data with a tabular foundation model, Hollmann et al., Nature 637 (2025).
- TabPFN: A Transformer That Solves Small Tabular Classification Problems in a Second, arXiv:2207.01848.
- TabICL: A Tabular Foundation Model for In-Context Learning on Large Data, arXiv:2502.05564.
soda-inria/tabicl(BSD-licentie).PriorLabs/TabPFN(GitHub repository).
Groetjes,