Линейные модели в 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, остальные разбираются в тренажёре.
- Что означает вес признака в обученной линейной регрессии?A)Корреляцию признака с таргетом в диапазоне от −1 до 1B)Долю дисперсии таргета, которую объясняет этот признакC)На сколько изменится предсказание при росте признака на единицу — при прочих равныхD)Важность признака, отнормированную на сумму всех весов модели
показать ответ и разбор
+C)На сколько изменится предсказание при росте признака на единицу — при прочих равных// разбор: Вес — частная производная предсказания по признаку: +1 к признаку даёт +w к предсказанию при фиксированных остальных. «При прочих равных» — ключевая оговорка: когда признаки коррелируют, изолированно менять один нельзя, и интерпретация плывёт. Корреляция и объяснённая дисперсия — другие звери (r и R²).
- Зачем в логистической регрессии нужна сигмоида?A)Сжимает линейную комбинацию признаков в диапазон (0, 1) — выход читается как вероятность классаB)Ускоряет сходимость градиентного спуска на разреженных данныхC)Убирает мультиколлинеарность между признакамиD)Делает границу решения нелинейной: без сигмоиды логрег ничем не отличался бы от обычной линейной регрессии
показать ответ и разбор
+A)Сжимает линейную комбинацию признаков в диапазон (0, 1) — выход читается как вероятность класса// разбор: Линейная часть wᵀx выдаёт число от −∞ до +∞; сигмоида монотонно сжимает его в (0, 1), и выход читается как P(y=1|x). Граница решения при этом остаётся линейной: P = 0.5 ровно там, где wᵀx = 0. Отсюда же интерпретация весов через логиты и odds.
- Что произойдёт, если обучить линейную регрессию без свободного члена (intercept) на несцентрированных данных?A)Ничего: intercept — косметика для читаемости моделиB)Оптимизация перестанет сходиться: без свободного члена у задачи МНК нет решения на большинстве датасетовC)Все веса станут ровно в два раза большеD)Гиперплоскость насильно пройдёт через ноль — систематическое смещение, если среднее таргета не ноль
показать ответ и разбор
+D)Гиперплоскость насильно пройдёт через ноль — систематическое смещение, если среднее таргета не ноль// разбор: Intercept ловит базовый уровень таргета. Без него гиперплоскость прижата к началу координат: если E[y] далёк от нуля, модель компенсирует это искажением весов и всё равно даёт систематическую ошибку. Эквивалентный взгляд: отцентрируй признаки и таргет — intercept честно станет нулём.
- Почему логистическую регрессию обучают на log loss, а не напрямую на accuracy?A)Accuracy не получится посчитать во время обучения, лишь после негоB)Log loss гладкий и выпуклый — есть честные градиенты; accuracy ступенчатая, её градиент почти всюду нольC)Минимизация log loss математически обеспечивает максимально достижимую accuracy на тестовой выборке — поэтому его и выбираютD)Это исторический стандарт первых реализаций, сейчас можно и accuracy
показать ответ и разбор
+B)Log loss гладкий и выпуклый — есть честные градиенты; accuracy ступенчатая, её градиент почти всюду ноль// разбор: Accuracy — кусочно-постоянная функция весов: малый шаг не меняет ни одного предсказания, градиент ноль — оптимизировать нечем. Log loss дифференцируем, для логрега выпукл и штрафует уверенные ошибки сильнее, что и двигает веса. А accuracy никто не мешает мониторить рядом как метрику.
- Линейная регрессия с полиномиальными признаками рисует нелинейную кривую. Почему её всё ещё называют линейной моделью?A)По привычке: формально она уже нелинейнаяB)Потому что полиномиальные признаки допустимы только до второй степениC)Потому что кривая нелинейна лишь на графике, а в данных зависимость линейнаD)Модель линейна по параметрам: предсказание — линейная комбинация весов при любых признаках
показать ответ и разбор
+D)Модель линейна по параметрам: предсказание — линейная комбинация весов при любых признаках// разбор: «Линейность» — про параметры, а не про форму кривой: ŷ = w₀ + w₁x + w₂x² линейна по w, поэтому решается тем же МНК, остаётся выпуклой задачей и сохраняет свойства линейной регрессии. Нелинейность спрятана в преобразовании признаков — тот же трюк, что и ядра в SVM.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.