Собесов

Сценарий ML: почему GBDT обыгрывает DL на табличных данных

ML / Data ScienceДеревья vs нейросетиСредняяSenior

Условие

Почему на tabular данных GBDT (XGBoost / CatBoost) почти всегда обыгрывает MLP и сложные нейросети?

Решение

Подход

Причины (Grinsztajn et al., 2022 — «Why do tree-based models still outperform DL on tabular data?»):

  1. Inductive bias: tree-based models делают axis-aligned splits. На табличных фичи имеют разные масштабы и природу (категории, числа, бинарные) — splits идеально подходят. Нейросети делают smooth boundaries, что лишнее для discontinuous patterns.

  2. Не-гладкие зависимости: бизнес-данные часто имеют резкие пороги (возраст 18, доход 50k). Деревья это ловят за один split, MLP требует много нейронов.

  3. Uninformative features: GBDT их не выберет; нейросеть тратит capacity на overfit на них.

  4. Heterogeneous features: разные масштабы, типы. Деревья invariant к monotonic трансформациям.

  5. Heavy-tail в фичах: outliers ломают gradient flow в NN; деревья режут.

  6. Малая выборка: NN требует много данных, деревья работают с n=1000.

  7. Robustness: scaling не нужен, NaN handling «из коробки», categorical native.

Когда DL выигрывает

  • Очень большие выборки (>1M).
  • Сложные многошаговые взаимодействия (изображения, последовательности).
  • Multimodal: tabular + text + image → NN с эмбеддингами.
  • Когда есть structure (например, geo).

Гибрид: tabular DL подходы

  • TabNet: attention + sparse feature selection.
  • FT-Transformer: tokenize features → transformer.
  • NODE / DANets: «дерево-подобные» нейросети.
  • DeepGBM: ensemble GBDT + DNN.

Обычно паритет с GBDT, редко лучше — и за счёт огромного train time.

Демонстрация

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import fetch_openml
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
 
X, y = fetch_openml('credit-g', as_frame=False, return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42)
gb = GradientBoostingClassifier().fit(X_tr, y_tr)
mlp = MLPClassifier(hidden_layer_sizes=(128,64), max_iter=200).fit(X_tr, y_tr)
 
# Обычно GB AUC > MLP AUC на 3-7%

Подводные камни

  1. «Я попробовал MLP, не зашёл — DL не работает»: возможно, не нормализованы фичи, не tuned learning rate. NN требует больше работы по подготовке.
  2. «Tabular Transformer лучше CatBoost» в paper — на их benchmark + их tuning budget. Воспроизведите.
  3. На multimodal данных (tabular + text) DL может быть единственным выбором.
  4. Бизнес-смежные модели: GBDT интерпретируем через SHAP; DL — сложнее.
  5. Production latency: GBDT 0.5ms vs MLP 5ms vs Transformer 50ms.

Эталонный ответ

GBDT выигрывает на tabular из-за: axis-aligned splits подходят к не-гладким зависимостям; invariance к scaling и monotonic трансформациям; robust к uninformative и heavy-tail фичам; работает на малой выборке. DL побеждает только на multimodal или огромных датасетах (>1M). Гибриды (TabNet, FT-Transformer) обычно паритет с GBDT при многократно бóльшем train time.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти