30 июня 2026 года Google Research представил TabFM — foundation-модель для табличных данных, которую в народе уже окрестили «ChatGPT для таблиц». Идея звучит почти еретически для любого, кто годами обучал градиентный бустинг: не обучать модель вовсе, а показать ей горсть примеров — и она предскажет по аналогии. Я занимаюсь Data Science, и первое, что захотелось сделать — не читать чужие бенчмарки, а прогнать TabFM на настоящей, злой, несбалансированной задаче. Взял то, что у меня под рукой: 1.9 млн госконтрактов Казахстана из портала госзакупок. Ниже — что вышло, с цифрами, графиком и готовым рецептом, чтобы повторить у себя.
Коротко для тех, кто спешит
XGBoost — обучаешь модель с нуля на своих данных. Классика (Chen & Guestrin, 2016), работает везде.
TabFM (Google, релиз 30 июня 2026) — готовый «табличный мозг», обученный один раз Гуглом. Ты его НЕ обучаешь — показываешь горсть примеров, и он отвечает по аналогии. Как few-shot промпт в ChatGPT, только для таблиц.
На малых данных TabFM реально круче XGBoost. На больших — сливает, потому что физически не переваривает миллионы строк.
Нужен GPU. На обычном CPU работает, но в ~100–500 раз медленнее XGBoost.
1. Что это вообще такое, на пальцах
Есть два подхода к задаче «предскажи, исполнит ли поставщик госконтракт в срок». Классика (XGBoost): все данные → model.fit() → строятся деревья под конкретно твою задачу → получается файл модели. Новые данные — переобучаешь.
TabFM — принципиально другое. Google заранее прогнал модель через сотни миллионов синтетических табличек, сгенерированных структурными причинными моделями (SCM). И она выучила не твою задачу, а «как вообще устроены таблицы, как признаки связаны с результатом» — своего рода «табличную физику». Идея выросла из TabPFN (Nature, 2025) и TabICL: TabFM совмещает TabPFN-подобное чередующееся внимание по строкам и колонкам с in-context learning в стиле TabICL.
Когда ты вызываешь TabFM.fit(X, y), она ничего не учит — просто запоминает строки как примеры. А predict — это буквально: «вот 1000 примеров: контракт с такими признаками → исполнен/провален; а теперь новый контракт — исполнится?». Модель прогоняет примеры и вопрос через большой трансформер за один проход (single forward pass) и отвечает по аналогии. Это in-context learning. Всё «умение» — из претрейна Гугла, твои данные — просто подсказка.
Отсюда три свойства. (1) Не надо обучать и тюнить → работает даже на 200 строках. (2) Не жрёт большие данные → как нельзя вставить миллион строк в промпт, так и сюда влезает лишь пара тысяч строк. (3) Медленный → каждый ответ = прогон здоровенного трансформера, а не быстрый спуск по готовым деревьям.
Кстати, Google не остановился на Python-библиотеке: TabFM встраивается прямо в BigQuery через SQL-команду AI.PREDICT — то есть предсказание по таблице можно будет звать одним запросом, без питона вообще.
2. Реальный тест: скоринг госзакупок Казахстана
Никаких игрушечных датасетов. Задача: исполнит ли победитель госконтракт в срок и в полном объёме. Данные: ClickHouse goszakup, 1.9 млн контрактов, 19 признаков (история поставщика и заказчика, суммы, сроки, способ закупки) — строго на момент подписания, без утечки будущего.
Проверка честная — out-of-time: учим на 2019–2023, тестируем на 2024–2025. Все модели меряем на одном и том же тесте. База: 66.8% контрактов исполняются успешно, значит наивная модель «всегда успех» даёт accuracy 0.668 — вот эту планку и надо бить.
Важный нюанс: TabFM не берёт 1.3 млн строк — контекст ограничен. Поэтому я сделал развёртку по размеру обучающей выборки — 200 / 500 / 1000 / 2000 / 5000 примеров — и отдельно прогнал XGBoost и LightGBM на всех 1.3 млн, чего TabFM физически не может.
3. Результаты
Метрика — ROC-AUC (чем ближе к 1, тем лучше). На каждом размере выборки TabFM обходит XGBoost. Но пунктирная линия сверху — бустинг на всех 1.3 млн строк (AUC 0.889) — это потолок, до которого few-shot TabFM так и не дотягивается.
ROC-AUC vs размер обучающей выборки
Реальный датасет госзакупок РК, out-of-time тест 2024–2025
Метрики посчитаны через roc_auc_score из scikit-learn. LightGBM-прод на всех 1.3 млн дал ещё чуть выше — 0.890.
Теперь accuracy при пороге 0.5 — и вот тут начинается самое интересное. Смотрим на балансированную accuracy (bal), F1 и время работы:
| Модель | Accuracy | Balanced | F1 | Время |
|---|---|---|---|---|
| XGBoost · 1000 строк | 0.750 | 0.631 | 0.840 | 4 сек |
| TabFM · few-shot 1000 | 0.816 | 0.775 | 0.867 | 120 сек |
| XGBoost · 5000 строк | 0.812 | 0.767 | 0.865 | 0.3 сек |
| TabFM · few-shot 5000 | 0.824 | 0.778 | 0.874 | 262 сек |
| XGBoost · все 1.3 млн | 0.833 | 0.790 | 0.880 | 35 сек |
| LightGBM · прод, 1.3 млн | 0.838 | 0.795 | 0.884 | 18 сек |
Ключевой момент. При 1000 строк XGBoost скатывается в «предсказываю успех всем» (recall 0.98, balanced всего 0.63) — он плохо откалиброван на мелкой выборке. TabFM же честно различает классы (balanced 0.77), поэтому его accuracy выше на 6.6 пункта. На малых данных лучшая калибровка вероятностей из коробки — главное преимущество TabFM.
TabFM — не убийца XGBoost. Это другой инструмент для другой ситуации: когда данных мало, а обучать и тюнить некогда. Как только данных много — бустинг снова первый.
4. Плюсы и минусы TabFM
Плюсы
- Король малых данных: ≤2000 строк — это +2–3 пункта AUC и +6 пунктов accuracy.
- Ноль обучения и тюнинга: ни гиперпараметров, ни кросс-валидации.
- Лучше калиброванные вероятности из коробки — критично для риск-скоров с порогом.
- Идеален для cold-start: новая категория, регион или таргет, где данных ещё почти нет.
Минусы
- Не масштабируется: из 1.9 млн строк использует <0.4%; бустинг на полных данных точнее и в сотни раз дешевле.
- Тяжёлый и медленный: большая модель, ~100–300 сек на прогон на CPU против долей секунды у XGBoost.
- Чёрный ящик: нет привычных feature importance / SHAP.
- Лимит 10 классов — жёсткое ограничение из документации.
- Non-Commercial License v1.0 — коммерческое использование запрещено лицензией.
Два минуса, о которых легко забыть. Во-первых, TabFM держит максимум 10 классов — для многоклассовых задач это стоп. Во-вторых, модель выпущена под TabFM Non-Commercial License v1.0: для прод-продукта это отдельный юридический стоп-фактор, который надо решить до внедрения.
Замечу: TabFM меряют на бенчмарке TabArena (38 задач классификации + 13 регрессии, выборки от 700 до 150 000 строк, оптимизация под таблицы до 500 признаков, embedding dim 256). То есть сам Google честно позиционирует его как модель для малых и средних таблиц, а не для миллионов строк — мой тест это ровно подтверждает. Хороший разбор состояния всей области — «The state of Tabular Foundation Models (2026)» и технический отчёт TabPFN-2.5 от Prior Labs.
5. Про железо
Гонял на CPU без GPU: 16 ядер, машина была загружена. Загрузка модели разово ~100 сек. Один прогон (fit + predict на 3000 строк) — 100–300 сек у TabFM против 0.3–4 сек у XGBoost. Обучение на 1.3 млн у TabFM невозможно вообще, у XGBoost — 20–35 сек. И это ещё я урезал ансамбль TabFM ради скорости: на полном качестве время умножай в несколько раз, один прогон был бы десятки минут на CPU.
Вывод простой: для экспериментов хватит CPU и 16+ ГБ RAM, будет медленно, но заведётся. Для реальной работы TabFM нужен GPU (NVIDIA, 16+ ГБ видеопамяти). А XGBoost и LightGBM прекрасно живут на CPU и перемалывают миллионы строк за секунды — поэтому в проде на больших данных они вне конкуренции.
6. Готовый рецепт
Установка. Ставим TabFM (официальный репозиторий) и классику для сравнения:
pip install tabfm[pytorch] # или jax-версия отдельно
pip install xgboost scikit-learn pandas pyarrowЗагрузка модели — по актуальному API из карточки на Hugging Face:
from tabfm import TabFMClassifier, tabfm_v1_0_0_pytorch as tabfm_v1_0_0
model = tabfm_v1_0_0.load(model_type="classification")
clf = TabFMClassifier(model=model)
# для полного качества: TabFMClassifier.ensemble(...)Минимальный compare.py. Читает parquet, делает честный out-of-time сплит (или train_test_split), учит XGBoost на всём train, а TabFM — few-shot на подвыборке максимум ~5000 строк (важно: не весь train, контекст ограничен), и печатает AUC / accuracy / время:
import time, pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score
from xgboost import XGBClassifier
from tabfm import TabFMClassifier, tabfm_v1_0_0_pytorch as tabfm_v1_0_0
df = pd.read_parquet("goszakup.parquet")
X, y = df.drop(columns=["target"]), df["target"]
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=42)
# --- XGBoost на всём train ---
t = time.time()
xgb = XGBClassifier(n_estimators=400, max_depth=6, learning_rate=0.05)
xgb.fit(Xtr, ytr)
p = xgb.predict_proba(Xte)[:, 1]
print(f"XGBoost AUC={roc_auc_score(yte, p):.3f} "
f"acc={accuracy_score(yte, p > 0.5):.3f} {time.time()-t:.1f}s")
# --- TabFM few-shot на <=5000 строк ---
n = min(5000, len(Xtr))
Xs, ys = Xtr.sample(n, random_state=0), ytr.loc[Xtr.sample(n, random_state=0).index]
t = time.time()
clf = TabFMClassifier(model=tabfm_v1_0_0.load(model_type="classification"))
clf.fit(Xs, ys) # ничего не учит — просто запоминает
p = clf.predict_proba(Xte)[:, 1]
print(f"TabFM AUC={roc_auc_score(yte, p):.3f} "
f"acc={accuracy_score(yte, p > 0.5):.3f} {time.time()-t:.1f}s")Вариант Б — готовый промпт для Claude Code / Cursor. Если лень возиться с кодом — скопируйте промпт ниже в AI-агента в VSCode. Он сам поставит TabFM, сам найдёт ваши данные (а если файла нет — просто спросит, что вы хотите прогнозировать), сам придумает целевое событие и в конце ответит по-человечески, да или нет: можно ли вообще по вашим данным что-то предсказывать и стоит ли на этом что-то строить:
Ты — мой ML-помощник. Объясняй всё МАКСИМАЛЬНО ПРОСТО, как для новичка,
без терминов. Главный ответ в конце — одним словом: ДА или НЕТ.
Установи мне Google TabFM (pip install tabfm[pytorch]) и XGBoost для сравнения.
ШАГ 0 — ДАННЫЕ.
Мои данные лежат здесь: <путь к моему .csv или .parquet файлу>.
Если путь я не указал или файла нет — не сдавайся:
• поищи сам подходящие таблицы в текущей папке и в стандартных местах
(Desktop, Downloads, папка проекта) — .csv, .parquet, .xlsx;
• если так ничего и не нашёл — не выдумывай данные. Просто спроси меня,
что я вообще хочу прогнозировать, и объясни на пальцах, годится ли
для этого машинное обучение или нет.
ШАГ 1 — ЦЕЛЬ.
Изучи мои колонки и САМ придумай осмысленное целевое событие (что предсказываем):
например «клиент уйдёт / останется», «сделка закроется / нет»,
«поставщик исполнит контракт / сорвёт срок». Объясни простыми словами,
что выбрал и зачем это мне.
ШАГ 2 — ПРОВЕРКА.
Если в данных есть дата — учи на старом, проверяй на новом (честная проверка
«на будущем»), иначе просто раздели данные на обучение и тест.
ШАГ 3 — ДВЕ МОДЕЛИ.
Обучи XGBoost на всех данных, а TabFM — на выборке до 5000 строк.
Замерь у обеих точность и время. Сравни их с «глупой» базой
(всегда предсказывать самый частый ответ) — чтобы было видно,
модель реально что-то умеет или просто угадывает.
ШАГ 4 — ВЕРДИКT (самое главное, напиши крупно и просто):
• Можно ли вообще по этим данным что-то прогнозировать? ДА или НЕТ.
• Если ДА — насколько точно (в процентах «попаданий»), и стоит ли
на этом что-то строить. Какую модель брать: TabFM (данных мало)
или XGBoost (данных много).
• Если НЕТ — честно скажи, что модель угадывает не лучше монетки,
и объясни простыми словами, почему (мало данных / нет связи /
не тот таргет) и что можно собрать, чтобы стало можно.
Про железо: без видеокарты (GPU) один прогон TabFM идёт 1-5 минут,
поэтому держи тест на 3-5 тысячах строк. Скажи, хватает ли моего компьютера.Подставьте свой путь к файлу вместо <путь…> — и всё. Агент установит модель, сам разметит target, посчитает метрики и вынесет вердикт. Большие веса грузятся в память один раз, так что первый запуск будет дольше остальных.
Итог
TabFM — не «убийца XGBoost», а новый инструмент под конкретную ситуацию: данных мало. Там он выигрывает честно — без обучения и тюнинга, с лучшей калибровкой. Как только данных много, градиентный бустинг снова первый: точнее, в сотни раз быстрее и объяснимее.
А для прода TabFM готовь GPU — и не забудь про Non-Commercial лицензию. Все цифры выше — на реальном датасете госзакупок РК, честный out-of-time ретротест 2024–2025. Хотите проверить сами — рецепт из шестого раздела повторяется за вечер. Больше контекста по теме — в разборах MarkTechPost, ExplainX и AI Weekly, а сам анонс — на GIGAZINE.