сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Классический ML

Линейные модели в ML

Зачем это спрашивают

Линейные модели - вопрос-фильтр DS-собеса. По ним сразу видно, понимаешь ли ты, что происходит под капотом, или умеешь только позвать fit и predict. Спрашивают три вещи: как читать коэффициенты, зачем нужна регуляризация и когда простая линейка обыгрывает бустинг.

И это не музей. Скоринг, uplift, бейзлайны в проде часто именно линейные: быстро, дёшево, объяснимо. В банке объяснимость - аргумент перед регулятором, на собесе - перед сеньором.

// Типовые формулировки: «что значит коэффициент при фиче?», «чем Ridge отличается от Lasso?», «когда возьмёшь линейку вместо бустинга?».

Линейная регрессия: прямая через облако точек

Модель до неприличия простая: предсказание это взвешенная сумма признаков, y = w1·x1 + … + wn·xn + b. Каждому признаку свой вес, плюс общий сдвиг. Всё обучение сводится к подбору этих весов.

Подбирают их так, чтобы ошибки были поменьше, а меру ошибки берут квадратичную - MSE (mean squared error), средний квадрат отклонения предсказания от правды. Найти минимум можно двумя путями: формулой сразу (нормальное уравнение, но при тысячах признаков оно неприлично дорого, O(d³)) или градиентным спуском - маленькими шагами в сторону уменьшения ошибки, и это работает на любых объёмах.

Геометрически ты просто проводишь прямую через облако точек, а в многомерном случае - гиперплоскость. И квадрат в формуле ошибки означает вот что: один дикий промах обходится дороже, чем десять мелких, поэтому выбросы заметно тянут прямую на себя.

// Пример, на котором всё становится понятно: цена квартиры = 120к·метры + 800к·центр − 50к·первый_этаж + 2М. Вес при метрах читается как «сколько добавляет один метр при прочих равных». Вот эти три слова, «при прочих равных», интервьюер и ждёт услышать.

градиентный спуск
идти маленькими шагами туда, где ошибка меньше, пока не упрёшься в минимум

Логистическая регрессия: та же прямая, но про классы

Берём ту же взвешенную сумму и пропускаем её через сигмоиду σ(z) = 1/(1+e^−z) - функцию, которая любое число ужимает в промежуток между нулём и единицей. Теперь выход можно читать как вероятность класса.

Учится она на функции потерь log loss, и устроена та по-человечески понятно: за уверенную ошибку штраф почти бесконечный, за робкую - копеечный. Сказал «вероятность 0.99» и промахнулся - получи по полной. Сказал «0.55» и промахнулся - ну бывает.

Геометрия та же: модель рисует гиперплоскость, только теперь это граница между классами. Чем дальше объект от границы, тем увереннее прогноз.

// Деталь, которая решает исход вопроса: логрег выдаёт вероятность, а класс появляется только после того, как ты выбрал порог. И 0.5 тут не закон природы. Если пропущенный фрод стоит дорого, порог опускают - ловят больше, ценой большего числа ложных тревог.

log loss
штраф за неверную вероятность; растёт резко, когда модель уверена и не права

Регуляризация: зачем душить веса

Проблема выглядит так. Если два признака сильно похожи друг на друга - скажем, площадь в метрах и площадь в футах, - модель не знает, кому из них отдать вес. Она может поставить одному +1000, другому −990, и сумма всё равно сойдётся. Веса раздуваются и скачут от выборки к выборке, а это уже не обучение, а заучивание шума. Явление зовут мультиколлинеарностью.

Лечится добавкой к функции потерь: штрафом за большие веса. Вариантов три, и различаются они формой штрафа.

L2, он же Ridge, штрафует квадраты весов: мягко прижимает все к нулю, а похожие признаки заставляет поделить вес между собой поровну. L1, он же Lasso, штрафует модули: часть весов он выводит ровно в ноль, и получается бесплатный отбор признаков - правда, из группы похожих он выберет одного победителя более-менее произвольно. ElasticNet смешивает оба, когда хочется и отбора, и стабильности.

// Сила штрафа - отдельная ручка, её подбирают по валидации. Крутанёшь слишком сильно - модель станет проще, чем задача, и недоучится.

мультиколлинеарность
признаки сильно похожи друг на друга, и веса из-за этого становятся неустойчивыми

Как отвечать: «Чем Ridge отличается от Lasso и когда что берёшь?»

Оба добавляют штраф за большие веса, чтобы модель не переобучалась, но штрафуют по-разному: Ridge квадраты весов, Lasso модули. Из-за этого Ridge мягко прижимает все веса и хорошо держится, когда признаки коррелируют, а Lasso часть весов зануляет и заодно отбирает признаки. Если признаков много и половина, подозреваю, мусорные - начну с Lasso или ElasticNet. Если признаки осмысленные, но связаны между собой - возьму Ridge. И в обоих случаях сначала отмасштабирую признаки, иначе штраф получится несправедливым: у признака в миллионах вес мелкий, и штраф его почти не заметит.

Названо различие и сразу показано, как оно меняет выбор модели, плюс масштабирование - шаг, который забывают чаще всего.

На чём валят

  • Читать коэффициенты немасштабированной модели как «важность признаков»: они в разных единицах и напрямую не сравнимы.
  • Называть логрег классификатором и не сказать слово «вероятность»: порог это отдельное решение под цену ошибок, а не свойство модели.
  • Считать отбор признаков через L1 стабильным: при похожих признаках выбор произволен и меняется от запуска к запуску.
  • Лечить недообучение добавлением эпох: нелинейную зависимость линейка сама не выучит, ей нужны признаки - полиномы, биннинг, взаимодействия.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 15, остальные разбираются в тренажёре.

  1. #linear_models1 / 5
    Что означает вес признака в обученной линейной регрессии?
    A)Корреляцию признака с таргетом в диапазоне от −1 до 1
    B)Долю дисперсии таргета, которую объясняет этот признак
    C)На сколько изменится предсказание при росте признака на единицу — при прочих равных
    D)Важность признака, отнормированную на сумму всех весов модели
    показать ответ и разбор
    +C)На сколько изменится предсказание при росте признака на единицу — при прочих равных

    // разбор: Вес — частная производная предсказания по признаку: +1 к признаку даёт +w к предсказанию при фиксированных остальных. «При прочих равных» — ключевая оговорка: когда признаки коррелируют, изолированно менять один нельзя, и интерпретация плывёт. Корреляция и объяснённая дисперсия — другие звери (r и R²).

  2. #linear_models2 / 5
    Зачем в логистической регрессии нужна сигмоида?
    A)Сжимает линейную комбинацию признаков в диапазон (0, 1) — выход читается как вероятность класса
    B)Ускоряет сходимость градиентного спуска на разреженных данных
    C)Убирает мультиколлинеарность между признаками
    D)Делает границу решения нелинейной: без сигмоиды логрег ничем не отличался бы от обычной линейной регрессии
    показать ответ и разбор
    +A)Сжимает линейную комбинацию признаков в диапазон (0, 1) — выход читается как вероятность класса

    // разбор: Линейная часть wᵀx выдаёт число от −∞ до +∞; сигмоида монотонно сжимает его в (0, 1), и выход читается как P(y=1|x). Граница решения при этом остаётся линейной: P = 0.5 ровно там, где wᵀx = 0. Отсюда же интерпретация весов через логиты и odds.

  3. #linear_models3 / 5
    Что произойдёт, если обучить линейную регрессию без свободного члена (intercept) на несцентрированных данных?
    A)Ничего: intercept — косметика для читаемости модели
    B)Оптимизация перестанет сходиться: без свободного члена у задачи МНК нет решения на большинстве датасетов
    C)Все веса станут ровно в два раза больше
    D)Гиперплоскость насильно пройдёт через ноль — систематическое смещение, если среднее таргета не ноль
    показать ответ и разбор
    +D)Гиперплоскость насильно пройдёт через ноль — систематическое смещение, если среднее таргета не ноль

    // разбор: Intercept ловит базовый уровень таргета. Без него гиперплоскость прижата к началу координат: если E[y] далёк от нуля, модель компенсирует это искажением весов и всё равно даёт систематическую ошибку. Эквивалентный взгляд: отцентрируй признаки и таргет — intercept честно станет нулём.

  4. #linear_models4 / 5
    Почему логистическую регрессию обучают на log loss, а не напрямую на accuracy?
    A)Accuracy не получится посчитать во время обучения, лишь после него
    B)Log loss гладкий и выпуклый — есть честные градиенты; accuracy ступенчатая, её градиент почти всюду ноль
    C)Минимизация log loss математически обеспечивает максимально достижимую accuracy на тестовой выборке — поэтому его и выбирают
    D)Это исторический стандарт первых реализаций, сейчас можно и accuracy
    показать ответ и разбор
    +B)Log loss гладкий и выпуклый — есть честные градиенты; accuracy ступенчатая, её градиент почти всюду ноль

    // разбор: Accuracy — кусочно-постоянная функция весов: малый шаг не меняет ни одного предсказания, градиент ноль — оптимизировать нечем. Log loss дифференцируем, для логрега выпукл и штрафует уверенные ошибки сильнее, что и двигает веса. А accuracy никто не мешает мониторить рядом как метрику.

  5. #linear_models5 / 5
    Линейная регрессия с полиномиальными признаками рисует нелинейную кривую. Почему её всё ещё называют линейной моделью?
    A)По привычке: формально она уже нелинейная
    B)Потому что полиномиальные признаки допустимы только до второй степени
    C)Потому что кривая нелинейна лишь на графике, а в данных зависимость линейна
    D)Модель линейна по параметрам: предсказание — линейная комбинация весов при любых признаках
    показать ответ и разбор
    +D)Модель линейна по параметрам: предсказание — линейная комбинация весов при любых признаках

    // разбор: «Линейность» — про параметры, а не про форму кривой: ŷ = w₀ + w₁x + w₂x² линейна по w, поэтому решается тем же МНК, остаётся выпуклой задачей и сохраняет свойства линейной регрессии. Нелинейность спрятана в преобразовании признаков — тот же трюк, что и ядра в SVM.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.