Каждый раз, когда ChatGPT делает что-то умное, заголовки кричат про «революцию нейросетей». И возникает обманчивое впечатление, что старые алгоритмы — линейная регрессия, решающие деревья — это вчерашний день, музей ML. Но зайдите в любой банк, страховую компанию или e-commerce, посмотрите, что реально предсказывает отток клиентов, оценивает кредитный риск или ранжирует товары в выдаче. С вероятностью 80% там работает не LLM, а градиентный бустинг — алгоритм, которому в этом году исполняется 22 года.
Эта статья — про классическое машинное обучение: алгоритмы, которые были до нейросетей и никуда не ушли. Мы разберём их не через формулы, а через одну общую метафору: подгонку. Все эти методы делают одно и то же — подгоняют модель под данные, — но подгоняют по-разному, и именно способ подгонки определяет, где алгоритм силён, а где беспомощен.
1. Главная идея: подобрать функцию
Машинное обучение, в самом грубом приближении, сводится к одной задаче. У вас есть данные (наблюдения) и вы хотите подобрать функцию, которая по входам предсказывает выход. Входы — это признаки (возраст, доход, количество покупок); выход — то, что нужно предсказать (вернёт ли клиент кредит, купит ли товар).
| |
Разница между алгоритмами — в том, каким семейством функций мы разрешаем быть f, и как ищем лучшую в этом семействе. От ответов на эти два вопроса и рождаются регрессии, деревья и нейросети.
2. Линейная регрессия: провести прямую
Самый старый житель города. Идея настолько проста, что её знали ещё Гаусс и Лежандр в начале XIX века: представьте, что f — это прямая линия. Подберите её наклон и смещение так, чтобы она прошла как можно ближе ко всем точкам данных.
«Как можно ближе» — это функция потерь: сумма квадратов вертикальных отклонений от точек до прямой. Минимизируем её — получаем оптимальные коэффициенты. Алгоритм, который это делает, называется градиентным спуском: маленькими шагами двигаем коэффициенты в сторону уменьшения ошибки.
| |
Где работает. Прогноз продаж, оценка стоимости недвижимости, любая задача «число по числам», где связь между признаками и ответом примерно линейна. Интерпретируема как ничто другое: коэффициент w2 = 0.3 буквально значит «каждый дополнительный рубль дохода повышает предсказанный ответ на 0.3».
Где ломается. Когда зависимость нелинейна. Если ответ зависит от произведения признаков, от их взаимодействия, от порога («доход выше 100к — совсем другая история») — прямая линия не опишет это, и линейная регрессия промахнётся систематически. Тут нужна либо нелинейная модель, либо ручная генерация признаков.
3. Логистическая регрессия: регрессия, которая классифицирует
Название сбивает с толку: это не «регрессия» в смысле «предсказать число», а классификатор. Идея та же — линейная комбинация признаков, — но результат пропускается через сигмоиду: функцию, которая сжимает любое число в интервал (0, 1).
z = w1·возраст + w2·доход + ...
p = 1 / (1 + e^(-z)) # сигмоида, p ∈ (0,1)
# p трактуется как вероятность класса «да»
Порог 0.5 делит ответы на «да/нет». Но важна не сама бинарность, а что p — это калиброванная вероятность: если модель говорит «80%», то примерно в 80 случаях из 100 такой клиент действительно вернёт кредит. Поэтому логрег до сих пор — стандарт в задачах, где нужна не просто классификация, а именно оценка вероятности: риск-модели, скоринг, медицинская диагностика.
Главное преимущество — интерпретируемость. В отличие от нейросети, в логреге всегда видно, какой признак и насколько влияет на ответ. Регулятор в банке может спросить «почему отказано в кредите?» — и вы покажете: потому что доход × w_доход + просрочки × w_просрочки дали p < 0.3. С LLM такого не объяснишь.
4. Решающее дерево: серия вопросов
Если линейная регрессия — это «подобрать формулу», то решающее дерево — это «задавать вопросы по одному». Представьте игру «данетки»: вы хотите угадать животное, задавая вопросы «оно больше кошки?», «у него есть перья?». Каждый вопрос делит варианты пополам, и через 5–10 вопросов остаётся один ответ.
Дерево делает буквально это. На каждом узле оно выбирает признак и порог, которые лучше всего разделяют данные («возраст > 30?» делит чище, чем «вес > 70?»). Рекурсивно разбивает, пока в листьях не останутся почти однородные группы. Обучение — это поиск оптимальных порогов; инференс — спуск по дереву от корня к листу.
[возраст > 30?]
/ \
да нет
| |
[доход > 80k?] → класс A
/ \
да нет
| |
→ класс B → класс C
Плюсы. Естественно ловит нелинейности и взаимодействия (в одной ветке важен возраст, в другой — доход). Интерпретируемо («если возраст > 30 и доход > 80, то класс B»). Работает с категориальными признаками без кодирования.
Минусы. Одно дерево легко переобучается — запоминает конкретные данные, теряя обобщение. Дерево, обученное на 90% данных, может сильно отличаться от дерева на других 90%. Это нестабильность, и именно она привела к идее ансамблей.
5. Случайный лес: мудрость толпы деревьев
Если одно дерево капризно — давайте построим много. Случайный лес обучает сотни деревьев, каждое на случайном подмножестве данных (bootstrap) и случайном подмножестве признаков. Итог — голосование: для классификации большинство, для регрессии — среднее.
Идея глубже, чем кажется. Каждое дерево по-своему ошибается (оно видело свои данные, свои признаки). Но если ошибки деревьев независимы, то при голосовании они компенсируют друг друга — как если бы вы спросили 500 экспертов и усреднили: шум взаимно уничтожается, сигнал остаётся. Это тот же принцип, что в теории информации: усреднение независимых наблюдений снижает энтропию ошибки.
Где хорош. «Из коробки» даёт достойный результат почти на любой табличной задаче. Устойчив к переобучению (для этого и придуман), не требует масштабирования признаков, ловит нелинейности. Долгое время был «базовой линией» в любой новой задаче.
6. Градиентный бустинг: деревья, исправляющие друг друга
Если случайный лес — деревья, работающие независимо и голосующие, то бустинг — деревья, работающие последовательно, где каждое исправляет ошибки предыдущих. Это различие фундаментально.
Механика. Первое дерево учится на данных и предсказывает с ошибкой. Второе дерево учится предсказывать эту ошибку (точнее, её градиент — направление уменьшения). Третье учится на ошибке уже композиции первых двух. И так далее. Каждое следующее дерево — это поправка, добавляемая к сумме.
F_0 = среднее(y) # простейший старт
F_1 = F_0 + α·дерево_1(данные → ошибка_0)
F_2 = F_1 + α·дерево_2(данные → ошибка_1)
...
F_n = F_0 + α·Σ дерево_i # финальная модель
Здесь α — learning rate, маленький шаг (0.01–0.1), который не даёт последующим деревьям «заглушить» предыдущие. Бустинг чувствителен к гиперпараметрам (число деревьев, глубина, learning rate), и его легко переобучить — но при правильной настройке он бьёт всё остальное на табличных данных.
Почему именно он — король таблиц. На изображениях и тексте правят нейросети: там признаковое пространство огромное и неструктурированное, нужна «глубина». Но на табличных данных (столбцы в CSV) признаков мало, они уже осмысленны (возраст, доход), и ценность не в «извлечении признаков», а в тонком взаимодействии между ними. Бустинг ловит эти взаимодействия через деревья и исправляет ошибки через последовательность — это сочетание оказывается оптимальным. Именно поэтому XGBoost, LightGBM, CatBoost доминируют в Kaggle-соревнованиях на табличных данных.
7. Когда классика, а когда нейросети
Это вопрос, который задают чаще всего, и ответ на него — инженерный, а не модный.
| Критерий | Классическое ML | Нейросети / LLM |
|---|---|---|
| Данные табличные | ✅ бустинг — лучший выбор | ❌ чаще проигрывает |
| Данные — текст/картинки | ❌ плохо (нужны признаки руками) | ✅ нейросети (CNN, Transformer) |
| Мало данных (< 10k строк) | ✅ классика стабильнее | ❌ нейросеть переобучится |
| Нужна интерпретируемость | ✅ логрег/дерево объяснимы | ❌ чёрный ящик |
| Инференс на CPU/edge | ✅ миллисекунды | ❌ тяжёлые, нужен GPU |
| Связи простые/линейные | ✅ логрег даст максимум | ⚠️ избыточно |
Правило большого пальца: начинайте с простого. Логистическая регрессия как baseline → если не хватает качества, поднимайтесь до случайного леса → если всё ещё мало, бустинг. И только когда вы на табличных данных упрётесь в потолок бустинга — имеет смысл думать о нейросетях. Чаще всего не упрётесь.
8. Почему это всё ещё важно для self-hosting и инженеров
Если вы работаете с инфраструктурой, у вас регулярно появляются задачи, где классическое ML — правильный инструмент, а не «модная» нейросеть.
Аналитика и мониторинг. Та же observability, о которой мы говорили в статье про Шеннона, часто строится на классических методах: PCA для снижения размерности метрик, k-means для кластеризации аномалий, изоляционный лес для детекции выбросов. Это лёгкие, быстрые модели, которые можно держать прямо в пайплайне мониторинга, без GPU и без облачных API.
Предсказание нагрузки. Прогноз трафика, потребления ресурсов, времени отклика — это временные ряды, и лучшим решением часто оказывается не «LSTM-нейросеть», а простая линейная регрессия с сезонными признаками или Prophet (тоже статистическая модель). Прозрачно, дёшево, легко деплоится.
Скрининг и валидация. Если у вас есть поток логов и нужно отсеивать подозрительные события — логрег с TF-IDF-признаками отработает за миллисекунды на CPU и будет объяснимым. Поднять для этого LLM — это как забивать гвозди микроскопом: дорого, медленно и непрозрачно.
Уважение к инструментам. Главное, что даёт знание классики — понимание, что «новее» не значит «лучше». У каждого алгоритма своя ниша. Инженер, который достаёт LLM там, где хватило бы логрега, либо тратит лишние деньги своей компании, либо украшает резюме модными словами. Хороший инженер выбирает инструмент под задачу, а не задачу под модный инструмент.
Заключение
Классическое машинное обучение — не музей. Это фундамент, на котором стоит весь AI, и в половине продакшн-задач именно классика остаётся лучшим решением. Линейная и логистическая регрессия, решающие деревья, случайный лес, градиентный бустинг — пять алгоритмов, каждый из которых отвечает на вопрос «как подобрать функцию под данные» своим способом.
Регрессия — формула. Дерево — серия вопросов. Лес — голосование независимых. Бустинг — последовательность исправляющих. Нейросеть (к которой мы придём в следующих статьях) — это просто ещё один способ подбора функции, только с гораздо более широким семейством и более сложным поиском. Поняв общую логику подгонки, вы увидите, что вся индустрия ML — это вариации одной и той же темы.
В следующей статье серии мы спустимся в нейросети и разберём, как свёрточные сети научились «видеть» изображения — почему свёртка оказалась тем приёмом, который сделал возможным компьютерное зрение.