Метод наименьших квадратов и смысл коэффициентов
Регрессия переводит вопрос «от чего зависит срок доставки» из области рассуждений в область измеримых величин, у каждой из которых есть единица измерения и знак.
Суть
До этого момента вы описывали данные: считали средние, доли, разброс, сравнивали группы. Регрессия решает другую задачу. Есть одна величина, которая вас интересует, — назовём её откликом или зависимой переменной. В нашем сквозном примере это фактический срок доставки заказа маркетплейса в часах — от оформления до выдачи покупателю. Есть несколько величин, которые известны в момент оформления: расстояние от склада отгрузки до точки назначения в километрах, вес заказа в килограммах, категория товара, способ получения (пункт выдачи или курьер), регион назначения. Их называют признаками, предикторами или независимыми переменными. Регрессия строит формулу, которая по признакам выдаёт число — предсказанный срок доставки.
Линейная регрессия ограничивает вид формулы: отклик представляется как сумма признаков, каждый со своим множителем, плюс постоянное слагаемое, плюс необъяснённый остаток.
Здесь b₀ — свободный член (константа, intercept), b₁ и b₂ — коэффициенты при признаках. Ограничение выглядит суровым, но именно оно делает результат читаемым: каждому признаку соответствует ровно одно число, и это число имеет прямой смысл. Коэффициент b₁ показывает, на сколько единиц меняется отклик при увеличении первого признака на одну единицу, если остальные признаки остались прежними. Формулировка «если остальные признаки остались прежними» — не украшение, а часть определения; без неё коэффициент читать нельзя.
Что именно минимизирует метод наименьших квадратов
Коэффициенты не берутся из теории — их подбирают под данные. Для каждого заказа в выборке модель выдаёт предсказание, а в данных есть фактическое значение. Разница между фактом и предсказанием называется остатком. Остаток положителен, когда заказ ехал дольше, чем предсказала модель, и отрицателен в обратном случае.
Метод наименьших квадратов (МНК, англ. OLS) выбирает такие b₀, b₁, b₂, при которых сумма квадратов всех остатков минимальна.
Почему квадраты, а не сами остатки? Сумма остатков без возведения в квадрат всегда обращается в ноль: недолёты гасят перелёты, и минимизировать там нечего. Почему квадраты, а не модули разностей? Квадратичный критерий даёт формулу с единственным решением, которое считается напрямую, без перебора. Побочный эффект: квадрат сильно наказывает крупные промахи, поэтому один заказ, пролежавший трое суток в сортировочном центре, сдвинет линию заметнее, чем двадцать заказов с промахом в час.
Как читать коэффициент
У коэффициента есть единица измерения, и она составная: единица отклика, делённая на единицу признака. Если срок измеряется в часах, а расстояние в километрах, то b₁ измеряется в часах на километр. Коэффициент 0,041 читается так: сто дополнительных километров добавляют к сроку 4,1 часа. Коэффициент при весе, равный 0,6 часа на килограмм, означает: заказ тяжелее на пять килограммов доставляется дольше на три часа.
Свободный член b₀ — предсказание модели при нулевых значениях всех признаков. Иногда он содержательно интерпретируется (время на приёмку и сортировку), а иногда указывает на точку, которой в данных не существует. Об этом — ниже, в разделе про частую ошибку.
Расчёт на пяти заказах вручную
Возьмём из витрины заказов пять доставок в один регион и посмотрим на зависимость срока от расстояния до склада отгрузки.
| Расстояние, км | Срок факт, ч | Прогноз, ч | Остаток, ч |
|---|---|---|---|
| 100 | 13 | 12,8 | +0,2 |
| 200 | 16 | 16,9 | −0,9 |
| 300 | 22 | 21,0 | +1,0 |
| 400 | 25 | 25,1 | −0,1 |
| 500 | 29 | 29,2 | −0,2 |
Среднее расстояние — 300 км, средний срок — 21 час. Коэффициент наклона считается как сумма произведений отклонений, делённая на сумму квадратов отклонений признака.
Проверка: сумма остатков равна 0,2 − 0,9 + 1,0 − 0,1 − 0,2 = 0. Это не совпадение, а свойство МНК: при наличии свободного члена остатки всегда суммируются в ноль. Если в вашем расчёте это не так, где-то ошибка.
Допустим, полная модель, обученная на витрине заказов маркетплейса за квартал, дала такие коэффициенты: свободный член 8,0 часа, расстояние до склада 0,045 часа за километр, вес 0,6 часа за килограмм. Оцениваем заказ: 400 км, 5 кг. Прогноз = 8,0 + 0,045 × 400 + 0,6 × 5 = 8,0 + 18,0 + 3,0 = 29,0 часа. Второй заказ, отгружаемый с дальнего склада: 800 км, 2 кг. Прогноз = 8,0 + 36,0 + 1,2 = 45,2 часа. Фактический срок первого заказа оказался 31 час, значит остаток равен +2,0 часа — модель недооценила этот заказ на два часа.
В отчёте свободный член 8,7 часа объявляют «временем сборки и упаковки заказа на складе, не зависящим от расстояния». Между тем в витрине минимальное расстояние — 100 км: заказы, где склад и пункт выдачи стоят в одном здании, в выборку не попадают, и точки с расстоянием около нуля в данных нет вовсе. Свободный член здесь — результат продления прямой далеко за пределы наблюдений, а не измеренная величина. Заметить это можно одной проверкой: посмотрите минимум и максимум каждого признака в выборке и спросите, попадает ли ноль внутрь этого диапазона. Если нет, свободный член — техническая точка привязки линии, и содержательных выводов из него делать не следует.
- Коэффициент — это изменение отклика на единицу признака при неизменных остальных признаках; у него всегда есть единица измерения.
- МНК подбирает коэффициенты так, чтобы сумма квадратов остатков была минимальной; сумма самих остатков при этом равна нулю.
- Квадратичный критерий делает модель чувствительной к крупным выбросам сильнее, чем к множеству мелких промахов.
- Свободный член интерпретируется содержательно только тогда, когда нулевые значения признаков реально встречаются в данных.
R², остатки и гетероскедастичность
Коэффициенты отвечают на вопрос «как связано», а качество модели и разбор остатков отвечают на вопрос «насколько этому прогнозу можно доверять».
Суть
У отклика есть собственный разброс: сроки доставки различаются от заказа к заказу. Часть этого разброса модель объясняет — она знает расстояние и вес, и потому предсказывает разные сроки для разных заказов. Часть остаётся необъяснённой и оседает в остатках. Коэффициент детерминации R² измеряет, какую долю исходного разброса модель забрала себе.
В числителе — сумма квадратов остатков модели, в знаменателе — сумма квадратов отклонений от общего среднего. Знаменатель соответствует наивной модели «всегда предсказываю средний срок». Если ваша модель промахивается так же, как среднее, дробь равна единице и R² равен нулю. Если модель попадает точно, числитель равен нулю и R² равен единице. Обычные значения лежат между.
Возьмём пять заказов из предыдущей темы. Сумма квадратов отклонений от среднего: 64 + 25 + 1 + 16 + 64 = 170. Сумма квадратов остатков: 0,04 + 0,81 + 1,00 + 0,01 + 0,04 = 1,90. Значит R² = 1 − 1,90 / 170 = 0,989. Впечатляющая цифра, но на пяти точках и двух подбираемых параметрах она мало что доказывает.
Чего R² не говорит
Первое: R² не измеряет правильность модели, он измеряет только тесноту подгонки. Кривая зависимость, описанная прямой, может дать R² около 0,8 и при этом систематически ошибаться в обе стороны.
Второе: R² на обучающих данных не уменьшается при добавлении признаков — никогда. Добавьте номер заказа, день недели, случайное число — R² вырастет или останется прежним. Поэтому сравнение моделей по R² на тех же данных, на которых они обучены, ничего не решает. Частичное лекарство — скорректированный R², который штрафует за число признаков.
При n = 500 000 наблюдений и k = 4 признаках и R² = 0,62 поправка почти незаметна: 1 − 0,38 × 499 999 / 499 995 = 0,620. При n = 30 и k = 10 та же величина R² = 0,62 превращается в 1 − 0,38 × 29 / 19 = 1 − 0,58 = 0,42. Разница между 0,62 и 0,42 показывает, сколько подгонки было куплено за счёт числа параметров.
Третье: R² несопоставим между моделями с разными откликами. Модель для срока в часах и модель для логарифма срока дают числа, которые нельзя ставить рядом.
Остатки как основной диагностический инструмент
Практичнее R² оказывается график остатков: по горизонтали — прогноз модели, по вертикали — остаток. У здоровой модели облако точек лежит горизонтальной полосой одинаковой толщины вокруг нуля, без изгибов и без расширений. Любая структура на этом графике — сообщение о том, чего модель не учла.
Дуга вверх или вниз означает нелинейность: связь есть, но она не прямая. Горизонтальные полосы, смещённые относительно друг друга, означают пропущенный категориальный признак — например, категорию товара или способ получения. Расширяющийся вправо конус означает гетероскедастичность.
Гетероскедастичность
Слово означает «неодинаковый разброс». Модель линейной регрессии по умолчанию исходит из того, что величина ошибки одинакова по всему диапазону: и для коротких маршрутов, и для длинных. В доставке маркетплейса это условие нарушается почти всегда. Заказ с ближнего склада, 150 км до пункта выдачи, укладывается в предсказанный срок с точностью до пары часов. Заказ, который едет 1500 км через два сортировочных центра, зависит от стыковки рейсов, погоды и загрузки хаба, и разброс там измеряется половиной суток.
Сами коэффициенты при гетероскедастичности остаются в среднем корректными — портятся стандартные ошибки, доверительные интервалы и p-значения. Модель начинает утверждать, что знает срок длинного маршрута точнее, чем знает на самом деле. Стандартные способы обхода: считать робастные (устойчивые) стандартные ошибки, моделировать логарифм срока вместо самого срока или строить отдельные модели для внутригородских и межрегиональных плеч.
Модель срока доставки, обученная на случайной выборке в 500 тыс. заказов из витрины маркетплейса, даёт R² = 0,62. Дисперсия срока в выборке равна 84 (часа в квадрате), то есть стандартное отклонение около 9,2 часа. Модель объясняет 62 % дисперсии, необъяснённой остаётся 84 × 0,38 = 31,9. Корень из этой величины, √31,9 ≈ 5,65 часа, — типичный промах модели. Формулировка для отчёта: «модель объясняет около 62 % различий в сроках доставки, типичная ошибка прогноза — примерно 5,6 часа».
В карточку товара и в отчёт для поддержки выносят единый интервал: «прогноз ± 5,6 часа для любого заказа». На заказах с ближнего склада реальный разброс остатков составляет около 2 часов, на межрегиональных плечах свыше 1000 км — около 14 часов. В результате близким заказам обещают слишком осторожный срок, а дальним — недостижимо точный, и именно по дальним приходят обращения о нарушенном сроке. Заметить проблему можно так: разбейте заказы на пять групп по величине прогноза и посчитайте стандартное отклонение остатков внутри каждой группы. Если крайние группы различаются в несколько раз, единый интервал использовать нельзя.
- R² — доля объяснённой дисперсии отклика; на обучающих данных он не падает при добавлении любых признаков, поэтому для сравнения моделей его недостаточно.
- График остатков против прогноза диагностирует больше, чем любое одно число: дуга означает нелинейность, конус — неравный разброс, полосы — пропущенную категорию.
- Гетероскедастичность не смещает коэффициенты, но делает доверительные интервалы и p-значения недостоверными.
- Точность прогноза удобнее сообщать в единицах отклика (часах), а не в долях объяснённой дисперсии.
Мультиколлинеарность и контроль переменных
Когда два признака говорят почти одно и то же, модель не может распределить между ними вклад, и коэффициенты начинают вести себя непредсказуемо — при том что качество прогноза не страдает.
Суть
Мультиколлинеарность — это сильная линейная связь между самими признаками, а не между признаком и откликом. Классический случай в витрине заказов: есть расстояние от склада до точки назначения в километрах и есть плановое время в пути по нормативам перевозчика. Второе рассчитано из первого, корреляция между ними 0,97.
Регрессия отвечает на вопрос: как меняется срок при изменении расстояния на километр, если плановое время в пути осталось прежним. Но в данных таких пар почти нет — расстояние не меняется без изменения планового времени. Модель вынуждена оценивать эффект по редким, шумным исключениям — вроде заказов, поехавших в объезд закрытого участка трассы. Отсюда три следствия: коэффициенты получают огромные стандартные ошибки, их знаки могут оказаться противоположными здравому смыслу, и они резко скачут при добавлении или удалении сотни строк.
Важное уточнение: качество прогноза при этом не падает. Модель по-прежнему предсказывает срок нормально. Разрушается только интерпретация отдельных коэффициентов.
Как это выглядит в выводе модели
| Модель | Признак | Коэффициент | Станд. ошибка | R² |
|---|---|---|---|---|
| А: расстояние + плановое время | расстояние, ч/км | −0,012 | 0,031 | 0,621 |
| А: расстояние + плановое время | плановое время, ч/ч | 3,40 | 1,90 | 0,621 |
| Б: только расстояние | расстояние, ч/км | 0,045 | 0,002 | 0,619 |
В модели А коэффициент расстояния отрицателен, то есть формально «чем дальше, тем быстрее», а его стандартная ошибка в два с половиной раза больше самого коэффициента. Отношение оценки к стандартной ошибке равно −0,39, что означает полное отсутствие статистической значимости. В модели Б тот же признак даёт 0,045 при ошибке 0,002, отношение 22,5. R² при этом различается на две тысячных: обе модели предсказывают одинаково, но интерпретируема только вторая.
VIF: как измерить
Стандартный показатель — фактор инфляции дисперсии, VIF. Для каждого признака строится вспомогательная регрессия: этот признак объясняется всеми остальными признаками. Полученный R² подставляется в формулу.
Если расстояние на 94 % объясняется остальными признаками, то VIF = 1 / (1 − 0,94) = 1 / 0,06 ≈ 16,7. Содержательный смысл: стандартная ошибка коэффициента в √16,7 ≈ 4,1 раза больше, чем была бы при некоррелированных признаках. Ориентиры: VIF до 5 — рабочая ситуация, VIF свыше 10 — сигнал разбираться. Лечение обычно состоит в удалении одного из пары дублирующих признаков или в их объединении в один показатель.
Контроль переменных: зачем добавлять признаки
Обратная сторона медали. Иногда признак добавляют не ради прогноза, а ради корректной интерпретации другого признака. Такой признак называют контрольной переменной.
Сравним способы получения в лоб. Заказы, которые покупатель забирает в пункте выдачи, едут в среднем 34,0 часа, заказы с доставкой курьером — 27,0 часа. Разница +7,0 часа не в пользу пункта выдачи, что противоречит устройству процесса. Дело в том, что курьерская доставка предлагается в основном там, где склад рядом: среднее расстояние заказов с курьером 400 км, а пункты выдачи закрывают в том числе дальние регионы, и там среднее расстояние 700 км. Разница в 300 км при коэффициенте 0,045 часа на километр сама по себе даёт 13,5 часа.
Если добавить расстояние в модель, коэффициент при признаке «пункт выдачи» становится равен 7,0 − 13,5 = −6,5 часа. Прочтение меняется на противоположное: при одинаковом расстоянии заказ до пункта выдачи приезжает на 6,5 часа быстрее курьерского, потому что курьерскому нужен согласованный с покупателем интервал и заказ ждёт своего слота. Именно эта величина отвечает на управленческий вопрос, а исходные +7,0 часа отвечали на вопрос «какие заказы в среднем едут дольше».
Таблица VIF по итоговой модели срока доставки после чистки признаков: расстояние 1,4; вес 1,3; число товаров в заказе 1,5; категория товара 1,6; признак «пункт выдачи» 1,2. Все значения ниже 2, коэффициенты устойчивы. До удаления планового времени в пути VIF расстояния был 16,7, планового времени — 16,9, и коэффициент расстояния менял знак при пересчёте модели на заказах следующего квартала. После удаления одного признака R² снизился с 0,621 до 0,619, то есть прогнозная сила осталась прежней, а интерпретация стала осмысленной.
В модель добавляют «фактическое время заказа в пути по трекингу» как контрольную переменную, чтобы «учесть дорожную обстановку». После этого коэффициент расстояния падает до 0,004 при ошибке 0,006, и в отчёте появляется вывод: «расстояние до склада не влияет на срок доставки». Фактическое время в пути — не посторонний фактор, а звено между расстоянием и сроком: расстояние действует именно через него. Контроль такого посредника поглощает весь эффект. Заметить это можно вопросом о направлении: если признак измеряется позже интересующей вас причины и порождается ею, он не контрольная переменная, а часть механизма, и в модель его добавлять не нужно.
- Мультиколлинеарность портит интерпретацию коэффициентов и их стандартные ошибки, но не портит качество прогноза.
- Признаки распознаются по VIF: значение выше 10 требует объединить или удалить дублирующие показатели.
- Контрольная переменная добавляется ради корректного чтения другого коэффициента; из-за неё оценка может изменить знак — и новая оценка обычно и есть искомая.
- Посредник между причиной и следствием контрольной переменной не является; его включение обнуляет реальный эффект.
Категориальные признаки, dummy-кодирование и взаимодействия
Регион назначения, категория товара и способ получения — не числа, и от того, как их превратить в числа, зависит, будет ли модель отвечать на ваш вопрос или на посторонний.
Суть
Регрессия умножает признак на коэффициент, поэтому признак обязан быть числом. Регион назначения числом не является. Соблазн пронумеровать регионы — Центр 1, Северо-Запад 2, Юг 3, Сибирь 4 — приводит к бессмысленной модели: она будет считать, что Юг ровно настолько же «больше» Северо-Запада, насколько Северо-Запад «больше» Центра, и что переход от Центра к Сибири втрое сильнее перехода от Центра к Северо-Западу.
Корректный приём называется dummy-кодированием (кодирование индикаторами, one-hot). Одна категориальная переменная с четырьмя значениями превращается в набор бинарных столбцов: в каждом стоит 1, если наблюдение принадлежит этой категории, и 0 в остальных случаях.
Столбцов на один меньше, чем категорий. Четвёртая категория, Центр, отдельного столбца не получает и становится базовой (референсной). Заказ из Центра описывается нулями во всех трёх столбцах.
Базовая категория и dummy-ловушка
Если создать четыре столбца на четыре региона, их сумма в каждой строке будет равна единице — то есть в точности равна столбцу констант, который отвечает за свободный член. Возникает идеальная линейная зависимость, и система уравнений МНК теряет единственное решение. Это называют dummy-ловушкой; библиотеки либо выдают ошибку, либо молча отбрасывают один столбец. Правило: категорий n, столбцов n − 1.
Базовую категорию выбирают осознанно, потому что все коэффициенты читаются относительно неё. Разумно брать самую массовую или содержательно нейтральную группу. Смена базы не меняет прогнозы модели вообще, но полностью меняет таблицу коэффициентов в отчёте.
Как читать коэффициенты при dummy
| Признак | Коэффициент, ч | Чтение |
|---|---|---|
| свободный член | 8,0 | база: Центр, доставка курьером |
| расстояние до склада, за км | 0,045 | +4,5 ч на каждые 100 км |
| вес, за кг | 0,60 | +0,6 ч на каждый кг |
| пункт выдачи | −6,50 | на 6,5 ч быстрее курьера |
| Северо-Запад | +2,50 | на 2,5 ч дольше Центра |
| Юг | +1,20 | на 1,2 ч дольше Центра |
| Сибирь | +9,00 | на 9,0 ч дольше Центра |
Каждый коэффициент при dummy — это сдвиг относительно базовой категории при одинаковых значениях остальных признаков. Разница между двумя небазовыми категориями получается вычитанием: Сибирь дольше Юга на 9,00 − 1,20 = 7,80 часа.
Взаимодействия
Модель выше предполагает, что килограмм веса добавляет 0,6 часа одинаково во всех регионах. В нашем примере в Сибири вес играет большую роль: там больше перегрузок между сортировочными центрами, и тяжёлые заказы теряют время на каждой. Такую зависимость описывает взаимодействие — новый признак, равный произведению двух исходных.
Коэффициент 0,35 читается как добавка к наклону: в базовых регионах килограмм стоит 0,60 часа, в Сибири — 0,60 + 0,35 = 0,95 часа. Без взаимодействия модель для Сибири рисовала бы линию, параллельную линии Центра; со взаимодействием линия становится круче. Правило оформления: если в модель входит произведение, оба сомножителя должны присутствовать в ней и по отдельности, иначе коэффициенты теряют смысл.
Редкие категории
Если в справочнике 60 регионов, а в 40 из них меньше тысячи заказов на фоне миллионов по стране, коэффициенты по этим регионам будут шумом. Практика — объединять малочисленные категории в группу «прочие» либо укрупнять до федеральных округов. Отдельно проверьте, что уровни категории записаны единообразно: «Северо-Запад», «Северо-запад» и «СЗФО» превратятся в три разных столбца.
Заказ с доставкой курьером, 600 км, 4 кг, Сибирь. Прогноз = 8,0 + 0,045 × 600 + 0,60 × 4 + 9,00 = 8,0 + 27,0 + 2,4 + 9,0 = 46,4 часа. Тот же заказ в Центр: 8,0 + 27,0 + 2,4 = 37,4 часа; разница ровно 9,0 часа, как и указано коэффициентом. Если покупатель выбрал пункт выдачи, к сибирскому заказу добавляется −6,5: 46,4 − 6,5 = 39,9 часа. Теперь тяжёлый заказ курьером, 10 кг, 600 км, Сибирь, с учётом взаимодействия: 8,0 + 27,0 + 6,0 + 9,0 + 0,35 × 10 = 53,5 часа. Модель без взаимодействия дала бы 50,0 часа, то есть занизила бы срок на 3,5 часа.
Регион назначения кодируют одним числовым столбцом со значениями 1, 2, 3, 4 — так делает функция автоматического преобразования текста в числа во многих библиотеках. Модель выдаёт один коэффициент «регион = 2,4 часа», и в отчёт попадает фраза «каждый следующий регион добавляет 2,4 часа к сроку доставки». Обнаружить подмену можно двумя признаками: во-первых, в таблице коэффициентов у категориальной переменной одна строка вместо нескольких; во-вторых, прогноз для региона с кодом 3 оказывается ровно посередине между прогнозами для кодов 2 и 4 — при том что содержательно эти регионы ничем не упорядочены. То же самое случается с категорией товара, когда справочник категорий приходит в витрину числовыми идентификаторами. Проверьте также, что перестановка кодов между регионами меняет качество модели: если меняет, порядок в данные внесён искусственно.
- Категория с n уровнями кодируется n − 1 бинарным столбцом; пропущенный уровень становится базой, относительно которой читаются все коэффициенты.
- Нумерация категорий числами навязывает модели несуществующий порядок и равные интервалы между уровнями.
- Взаимодействие (произведение двух признаков) описывает ситуацию, когда эффект одного признака различается внутри групп; оба сомножителя должны остаться в модели отдельно.
- Редкие уровни и разные написания одного уровня следует объединить до построения модели.
Логистическая регрессия, шансы и odds ratio
Когда отклик — это факт «да или нет» (клиент банка ушёл или остался), линейная регрессия не годится, а результат логистической приходится пересчитывать в вероятность, иначе отчёт будет утверждать неверное.
Суть
Второй сквозной пример модуля: по клиентской базе банка предсказать, уйдёт ли клиент в ближайший квартал — перестанет ли пользоваться картой и переведёт ли основной оборот в другой банк. Отклик принимает два значения — 0 или 1. Линейная регрессия здесь даёт прогнозы вроде −0,3 или 1,4, которые нельзя назвать вероятностями, и предполагает, что эффект признака одинаков у клиента с вероятностью ухода 5 % и у клиента с вероятностью 95 %.
Логистическая регрессия решает обе проблемы, моделируя не саму вероятность, а логарифм шансов. Шансы (odds) — отношение вероятности события к вероятности его отсутствия.
Вероятность живёт в отрезке от 0 до 1, шансы — на луче от 0 до бесконечности, логарифм шансов — на всей числовой прямой. Правая часть уравнения может принимать любое значение, и противоречия не возникает. Обратный пересчёт всегда даёт вероятность внутри допустимого диапазона.
Шансы и вероятность — разные шкалы
Вероятность 0,10 соответствует шансам 0,10 / 0,90 = 0,111, то есть «один к девяти». Вероятность 0,50 — шансам 1,0, «один к одному». Вероятность 0,90 — шансам 9,0. Шкала шансов растянута на краях: между вероятностями 0,90 и 0,95 шансы меняются с 9 до 19, вдвое, а между 0,45 и 0,50 — с 0,818 до 1,0, на 22 %.
Odds ratio и почему его нельзя читать как «во столько раз вероятнее»
Коэффициент логистической регрессии измеряется в логарифмах шансов, и читать его напрямую неудобно. Поэтому публикуют его экспоненту — отношение шансов, odds ratio (OR).
OR = 2,46 означает: наличие признака умножает шансы ухода на 2,46. Не вероятность, а шансы. Разница видна на числах: возьмём один и тот же коэффициент и трёх клиентов с разной базовой вероятностью ухода.
| Было: вероятность | Было: шансы | Стало: шансы (× 2,46) | Стало: вероятность | Прирост, п. п. |
|---|---|---|---|---|
| 0,100 | 0,111 | 0,273 | 0,215 | +11,5 |
| 0,500 | 1,000 | 2,460 | 0,711 | +21,1 |
| 0,900 | 9,000 | 22,14 | 0,957 | +5,7 |
Одно и то же OR = 2,46 даёт прирост вероятности 11,5 пункта, 21,1 пункта и 5,7 пункта в зависимости от того, с чего клиент начинал. Проверьте одну строку вручную: шансы 1,000 × 2,46 = 2,460; вероятность = 2,460 / (1 + 2,460) = 2,460 / 3,460 = 0,711. Отсюда правило: OR — постоянная величина, прирост вероятности — переменная, и переносить одно на другое нельзя.
Чтение модели оттока
Модель оттока по клиентской базе банка — допустим, 28 млн активных клиентов:
Свободный член −2,20 соответствует шансам e^(−2,20) ≈ 0,111 и вероятности 0,10: клиент без жалоб и без единой операции за месяц. Коэффициент 0,90 при жалобе даёт OR 2,46. Коэффициент −0,08 при числе операций даёт OR e^(−0,08) ≈ 0,923, то есть каждая дополнительная операция по карте в месяц снижает шансы ухода примерно на 7,7 %. Десять операций дают e^(−0,80) ≈ 0,449 — шансы уменьшаются более чем вдвое.
Знак коэффициента читается напрямую: положительный увеличивает шансы события, отрицательный уменьшает. Коэффициент, равный нулю, даёт OR = 1, то есть отсутствие связи. Поэтому доверительный интервал для OR проверяют на попадание единицы: интервал от 1,8 до 3,4 говорит об эффекте, интервал от 0,7 до 2,9 — не говорит ничего, хотя точечная оценка в нём выглядит внушительно.
Отдельный вопрос — что делать с полученной вероятностью. Модель выдаёт число от 0 до 1 для каждого клиента, а решение о звонке из службы удержания бинарно, поэтому вводится порог отсечения. Порог не является частью модели и не подбирается методом обучения: он выбирается из соображений стоимости контакта и ценности удержанного клиента. Об этом подробнее в теме «Переобучение, train/test и метрики качества».
Клиент А: была жалоба, 2 операции по карте в месяц. Логарифм шансов = −2,20 + 0,90 − 0,08 × 2 = −1,46. Шансы = e^(−1,46) ≈ 0,232. Вероятность = 0,232 / 1,232 = 0,188. Клиент Б: тоже была жалоба, но 10 операций в месяц. Логарифм шансов = −2,20 + 0,90 − 0,80 = −2,10. Шансы = e^(−2,10) ≈ 0,122. Вероятность = 0,122 / 1,122 = 0,109. Вывод для отчёта: у активного клиента жалоба тоже повышает риск ухода, но остаточный риск ниже более чем в полтора раза — 10,9 % против 18,8 %.
В презентацию для розничного блока выносят строку: «жалоба повышает вероятность оттока в 2,46 раза». Модель утверждала другое — в 2,46 раза растут шансы, а вероятность у клиента с базовым риском 10 % растёт с 0,100 до 0,215, то есть в 2,15 раза. Проверка, которая ловит эту подмену за секунды: примените заявленный множитель к клиенту с базовой вероятностью 0,50. Получится 1,23 — вероятность больше единицы, чего не бывает. Если множитель применим не ко всем клиентам, он относится к шансам, а не к вероятности. Корректная формулировка для отчёта содержит либо слово «шансы», либо конкретные вероятности до и после для названного сегмента клиентов.
- Логистическая регрессия моделирует логарифм шансов; обратный пересчёт p = шансы / (1 + шансы) всегда даёт вероятность от 0 до 1.
- Odds ratio — это множитель для шансов, а не для вероятности; одно и то же OR даёт разный прирост вероятности при разной базе.
- Прирост в процентных пунктах имеет смысл только вместе с указанием базовой вероятности группы.
- Коэффициент, близкий к нулю, соответствует OR около 1, то есть отсутствию эффекта.
Переобучение, train/test и метрики качества
Модель оценивают не по тому, насколько хорошо она описала прошлые заказы, а по тому, насколько точно она предскажет те, которых ещё не видела.
Суть
МНК подбирает коэффициенты, минимизируя ошибку на конкретной выборке. Чем больше у модели свободы — признаков, взаимодействий, степеней, — тем точнее она подгоняется под эту выборку, включая её случайные особенности. Начиная с некоторого момента модель перестаёт улавливать закономерность и начинает запоминать шум. Это и есть переобучение: качество на обучающих данных растёт, качество на новых данных падает.
Обнаружить переобучение по обучающей выборке невозможно в принципе, потому что на ней переобученная модель выглядит лучше всех. Нужны данные, которых модель не видела при подборе коэффициентов.
Разделение выборки
Данные делят на обучающую часть (train, обычно 70–80 %) и отложенную часть (test, 20–30 %). Коэффициенты подбираются только на обучающей. Метрики считаются на обеих, и сравниваются между собой. Расхождение — мера переобучения.
| Модель | R² на train | R² на test | Расхождение |
|---|---|---|---|
| 4 признака | 0,64 | 0,62 | 0,02 |
| 40 признаков и взаимодействий | 0,87 | 0,49 | 0,38 |
Вторая модель на обучающих данных выглядит заметно сильнее и на новых заказах работает хуже первой. В отчёт идёт первая.
Разделение нарушают тремя типовыми способами. Первый — утечка признака: в модель попадает величина, известная только после наступления события. Признак «дата фактического вручения» в модели срока доставки даёт почти идеальное качество и нулевую пользу. Второй — подбор порогов, признаков и параметров по отложенной выборке: если вы двадцать раз меняли модель, глядя на test, отложенная выборка перестала быть отложенной, и нужна третья часть, валидационная. Третий — случайное деление там, где данные упорядочены во времени: для прогноза будущих заказов делить нужно по дате, обучаясь на раннем периоде и проверяясь на позднем.
Метрики для числового отклика
MAE — средняя абсолютная ошибка, измеряется в часах и читается напрямую: «модель в среднем ошибается на 5,1 часа». RMSE — корень из средней квадратичной ошибки, тоже в часах, но крупные промахи в неё входят с усиленным весом. RMSE всегда не меньше MAE; чем больше разрыв, тем сильнее в данных отдельные крупные промахи. Если модель ошибается на 5,1 часа в среднем, а RMSE равен 6,9 часа, среди заказов есть заметная доля тех, где промах измеряется десятками часов.
Метрики для классификации
Модель оттока выдаёт вероятность. Чтобы получить решение «звонить или не звонить», вероятность сравнивают с порогом. Результат сводят в матрицу ошибок на отложенной выборке из 2 млн клиентов банка, из которых за квартал ушли 300 тыс.
| Клиентов, тыс. | Прогноз: уйдёт | Прогноз: останется | Всего |
|---|---|---|---|
| Факт: ушёл | 120 | 180 | 300 |
| Факт: остался | 60 | 1640 | 1700 |
| Всего | 180 | 1820 | 2000 |
Все числа в таблице — тысячи клиентов, поэтому доли считаются по ним напрямую. Точность (precision) — доля верных среди помеченных: 120 / 180 = 0,67. Полнота (recall) — доля пойманных среди действительно ушедших: 120 / 300 = 0,40. F1 — их гармоническое среднее: 2 × 0,67 × 0,40 / (0,67 + 0,40) = 0,50. Доля верных ответов (accuracy) = (120 + 1640) / 2000 = 0,88.
Когда данных мало и одно разделение выборки даёт неустойчивую оценку, применяют перекрёстную проверку: выборку режут на k равных частей (обычно пять), обучают модель k раз, каждый раз откладывая одну часть для проверки, и усредняют метрики. Оценка получается устойчивее, а заодно виден её разброс: если качество на пяти отложенных частях колеблется от 0,44 до 0,71, среднее значение 0,58 сообщать без указания разброса не следует.
Снижаем порог с 0,50 до 0,25. Список кандидатов на удержание растёт со 180 тыс. до 500 тыс. клиентов, попаданий — со 120 тыс. до 210 тыс. Точность падает до 210 / 500 = 0,42, полнота растёт до 210 / 300 = 0,70, F1 = 2 × 0,42 × 0,70 / 1,12 = 0,53. Переводим в операционные величины: если удержать удаётся треть тех, кто попал в список и действительно собирался уйти, то при пороге 0,50 это 40 тыс. удержанных на 180 тыс. контактов (4,5 контакта на одного удержанного), при пороге 0,25 — 70 тыс. удержанных на 500 тыс. контактов (7,1 контакта). Выбор порога определяется тем, что дороже: контакт службы удержания или потерянный клиент.
В отчёте на управляющий комитет пишут: «модель предсказывает отток клиентов с точностью 88 %». Во-первых, здесь смешаны accuracy и precision — это разные величины, 0,88 и 0,67. Во-вторых, доля ушедших в выборке 300 / 2000 = 15 %, поэтому модель «никто не уйдёт» даёт accuracy 1700 / 2000 = 0,85, не предсказывая вообще ничего. Прибавка модели — три процентных пункта, а не восемьдесят восемь. Проверка занимает одну строку: посчитайте долю самого частого класса и сравните с accuracy модели. Если разница мала, докладывать нужно полноту и точность, а не долю верных ответов.
- Качество модели измеряется только на данных, не участвовавших в подборе коэффициентов; большое расхождение между train и test означает переобучение.
- Для временных данных деление на обучающую и отложенную части делают по дате, а не случайно.
- MAE и RMSE выражены в единицах отклика; разрыв между ними указывает на присутствие крупных промахов.
- При редком событии доля верных ответов бессмысленна — сообщайте точность и полноту вместе с выбранным порогом.
Временные ряды: тренд, сезонность, скользящее среднее
Данные, упорядоченные по времени, требуют отдельного обращения: соседние точки в них связаны, а большая часть колебаний объясняется календарём, а не бизнесом.
Суть
Временной ряд — последовательность измерений одной величины через равные промежутки: число заказов по дням, средний срок доставки по неделям, выручка по месяцам. Ключевое отличие от обычной таблицы в том, что строки не независимы: сегодняшнее число заказов связано со вчерашним, а мартовское — с прошлогодним мартовским.
Ряд принято раскладывать на три составляющие. Тренд (или уровень) — медленное движение вверх или вниз, очищенное от колебаний. Сезонность — повторяющийся с фиксированным периодом рисунок: недельный, месячный, годовой. Остаток — то, что не объясняется ни тем, ни другим: акции, аварии, погода, случайность.
Мультипликативная форма (с умножением) подходит, когда амплитуда сезонных колебаний растёт вместе с уровнем ряда — так обычно и бывает с потоком заказов. Аддитивная форма (со сложением) применяется, когда амплитуда постоянна.
Скользящее среднее
Чтобы увидеть тренд, нужно погасить сезонность. Базовый приём — скользящее среднее по окну, равному длине сезонного цикла. Для недельной сезонности окно равно семи дням: каждая точка заменяется средним по себе и трём соседям с каждой стороны.
Так как окно покрывает ровно один полный недельный цикл, каждый день недели входит в него один раз, и недельная волна исчезает. Два свойства скользящего среднего стоит держать в голове. Первое: результат отстаёт по краям — у первых и последних трёх дней ряда значения нет. Второе: окно сглаживает и реальные скачки, поэтому резкий рост после запуска нового направления на графике скользящего среднего выглядит пологим подъёмом длиной в неделю.
Сезонные индексы
Средненедельное число заказов маркетплейса в нашем примере равно 11,0 млн в день. Разделив фактическое среднее по каждому дню недели на эту величину, получаем сезонные индексы.
| День | Пн | Вт | Ср | Чт | Пт | Сб | Вс |
|---|---|---|---|---|---|---|---|
| Заказов, млн | 12,0 | 11,4 | 11,8 | 12,6 | 15,2 | 8,4 | 5,6 |
| Индекс | 1,09 | 1,04 | 1,07 | 1,15 | 1,38 | 0,76 | 0,51 |
Сумма индексов равна 7,00 — это контроль корректности расчёта. Индекс 1,38 читается так: пятница даёт на 38 % больше заказов, чем средний день недели. Воскресенье даёт 51 % от среднего дня. Очистка ряда от сезонности состоит в делении факта на индекс: если в пятницу пришло 16,1 млн заказов, то очищенное значение равно 16,1 / 1,38 = 11,67 млн, то есть уровень выше обычных 11,0 — рост реальный, а не пятничный.
Прогноз и чего с рядом делать не следует
Базовый рабочий прогноз собирается обратно из компонентов: берём текущий уровень, продлеваем его тренд на нужное число периодов и умножаем на сезонный индекс целевого дня. Уровень 11,0 млн растёт примерно на 0,3 млн в неделю. Прогноз на пятницу следующей недели: (11,0 + 0,3) × 1,38 = 11,3 × 1,38 = 15,59 ≈ 15,6 млн заказов. Прогноз на субботу через две недели: (11,0 + 0,6) × 0,76 = 11,6 × 0,76 = 8,82 ≈ 8,8 млн.
Два приёма, которых стоит избегать. Первый — обычная линейная регрессия «величина от номера дня» без учёта сезонности и автокорреляции: она даёт правдоподобный наклон и совершенно недостоверные доверительные интервалы, потому что нарушено условие независимости наблюдений. Второй — сравнение соседних точек ряда: падение с пятницы на субботу составляет (8,4 − 15,2) / 15,2 = −44,7 %, и это чистая календарная механика, а не событие. Сравнивать нужно сопоставимое: неделю с неделей, субботу с субботой, месяц с тем же месяцем прошлого года.
Пересчёт скользящего среднего по витрине заказов при добавлении дня. Окно текущей недели даёт сумму 12,0 + 11,4 + 11,8 + 12,6 + 15,2 + 8,4 + 5,6 = 77,0 и среднее 77,0 / 7 = 11,0 млн. Наступил новый понедельник с 12,4 млн заказов; из окна выпадает старый понедельник с 12,0. Новая сумма = 77,0 − 12,0 + 12,4 = 77,4, новое среднее = 11,06. Уровень вырос на 0,06 млн заказов в день, тогда как сырое сравнение «понедельник к воскресенью» показало бы рост с 5,6 до 12,4, то есть в 2,2 раза.
Месяцы сравнивают по суммарному числу заказов маркетплейса, не учитывая состав дней недели. Месяц из 31 дня, на который выпали пять пятниц, пять суббот и пять воскресений, имеет суммарный сезонный вес 4 × 7,00 + 1,38 + 0,76 + 0,51 = 30,65 и при уровне 11,0 даёт 337,2 млн заказов. Месяц из 30 дней с пятью понедельниками и пятью вторниками имеет вес 4 × 7,00 + 1,09 + 1,04 = 30,13 и даёт 331,4 млн. Разница почти в 6 млн заказов (около 1,7 %) целиком объясняется календарём. Средний день при этом ведёт себя противоположно: 337,2 / 31 = 10,88 против 331,4 / 30 = 11,05, то есть по сумме «лучше» первый месяц, а по среднему дню — второй, при полностью одинаковом спросе. Заметить подмену можно так: посчитайте состав дней недели в сравниваемых месяцах, и если он различается, сравнивайте скользящее среднее или показатель на сопоставимый день недели.
- Ряд раскладывается на уровень, сезонность и остаток; выводы делаются по уровню, а не по сырым значениям.
- Скользящее среднее с окном в один сезонный цикл гасит сезонность, но отстаёт по краям и сглаживает реальные скачки.
- Сезонные индексы позволяют очистить факт от календаря делением и собрать прогноз обратно умножением; сумма индексов должна равняться числу периодов в цикле.
- Сравнивать в ряду можно только сопоставимые периоды; различие в составе дней недели создаёт различия в итогах само по себе.
Теория без задач не держится
Восемь задач по этому модулю: выбор ответа и расчёт, с разбором каждого решения. Задачи, в которых вы ошиблись, вернутся в следующий заход.
Перейти к тренажёру