TGViewer
Data Science | Machinelearning [ru] Data Science | Machinelearning [ru] @devsp · 19.8K subscribers
Post #5738 1.31K
⁣Динамический merge скоринговых реплик TensorFlow и GBDT через online-совместную реоптимизацию сплитов на стыке признаковых пространств

Когда в production-пайплайне работают две принципиально разные модели — TensorFlow (нейросеть) и GBDT (бустинг), — и возникает необходимость объединить их скоринговые реплики, стандартные подходы дают сбой. Усреднение выходов без учёта структуры дрейфа данных ломается, а мета-модель устаревает, как только распределение признаков сдвигается. Типичная ошибка — считать, что статическое усреднение или простая мета-модель решают проблему на non-stationary данные.

Проблема статического merge
Простое взвешенное усреднение (например, 0.5 * прогноз TF + 0.5 * прогноз GBDT) работает только пока валидационное распределение совпадает с production. В моей практике на рекомендательной системе в рекламном RTB-трафике это приводило к падению ROC-AUC на 3-4% при дрифте сезонных паттернов. Каждая переобучение всей связки — неделя времени. Причина — модель не адаптируется к локальным изменениям на стыке пространств.

Динамический merge с online-реоптимизацией сплитов
Решение — не складывать выходы, а построить общее признаковое пространство из эмбеддингов TF (выходы последнего скрытого слоя) и leaf values GBDT с градиентами. На этом стыке мы запускаем онлайн-дерево, которое пересчитывает сплиты на каждом новом батче. Пример из пайплайна click-through rate prediction: батч пришёл -> вытащили эмбеддинги TF -> предсказали листья GBDT -> склеили в joint-вектор -> прогнали через онлайн-дерево, которое реоптимизирует сплиты на основе градиента. Важно: ни TF, ни GBDT не переобучаются. Это снижает cost на адаптацию на 80% по сравнению с full retrain.

Баланс bias/variance и практический совет
Самый тонкий момент — не словить шум. Если пересчитывать сплиты на каждом батче без early stopping, модель начнёт подстраиваться под единичные выбросы. Личный опыт: я использую валидационное окно из последних 100 семплов. Как только метрика на окне перестаёт улучшаться — сплиты замораживаются до следующего триггера дрейфа. Это даёт стабильный прирост ROC-AUC на 3-5% на дрифтящих данных.

Типичная ошибка и trade-offs
Ошибка — пытаться реоптимизировать сплиты без учёта latency. Если joint-пространство получается большим (например, эмбеддинги 512-мерные, листьев 1000), online-дерево может тормозить. Решение: сжимать эмбеддинги через PCA до 32-64 компонент и ресамплировать листья по частоте. Это увеличивает latency всего на 2-3 мс на батч, но снижает cost на 5x. Иначе — перегрузка памяти и просадка throughput.

Вывод: Динамический merge через online-реоптимизацию сплитов на стыке признаковых пространств позволяет адаптировать ансамбль из TF и GBDT к дрейфу без полного переобучения, давая устойчивый прирост метрик при контроле bias/variance и latency.
  • 🔥 2
  • 👍 1
  • 😁 1
More from @devsp
  1. Sep 26, 2026Post #5961
  2. Sep 25, 2026[Перевод] Jev за 25 строк на Python Про Jev галдят все, кому не лень. Jev там, Jev сям. Тв…
  3. Sep 25, 2026Что под капотом у рекомендаций Авито на главной Они решают две задачи: 1️⃣ Показывают поль…
  4. Sep 25, 2026🤣 «Смотря какой fabric, смотря какой details» 💥 xCode Journal
  5. Sep 24, 2026Post #5957
  6. Sep 24, 2026Как мы обучили детектор джейлбрейков для русскоязычных AI-агентов Привет, Хабр! На связи R…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →