Пряма крізь хаос

Лінійна регресія — найпростіша модель, яку варто зрозуміти до кінця. Бо все, що складніше, вчиться рівно тим самим способом.

Уяви, що тобі треба назвати ціну будинку, знаючи лише його площу. У тебе є записи про два десятки вже проданих будинків. Точки на графіку лежать не на одній лінії — вони розкидані хмарою, бо ціну визначає ще й район, стан ремонту, поверх, настрій продавця. Але крізь цю хмару вгадується напрямок: більша площа — дорожче.

Лінійна регресія — це спроба провести крізь хаос одну пряму так, щоб вона описувала загальний напрямок якнайточніше. Звучить примітивно. Проте саме тут ховаються ідеї, на яких тримається все машинне навчання: як виміряти помилку, як її зменшувати, як не перенавчитись і як зрозуміти, чи можна вірити результату.

ПостановкаМодель у три символи

Формально ми припускаємо, що цільова величина y складається зі зваженої суми ознак плюс щось, чого ми не знаємо:

y = β0 + β1x1 + β2x2 + … + βpxp + ε

Розберімо кожен символ окремо:

Чому «лінійна». Модель лінійна за параметрами β, а не обовʼязково за ознаками. Ми ще побачимо, що додавши ознаку x², отримаємо криву — і це все ще буде лінійна регресія, бо β входять у формулу лінійно.

Далі для наочності залишимо одну ознаку. Тоді модель — звичайна пряма на площині, і вся задача зводиться до питання: які саме β₀ і β₁ вважати найкращими?

ПомилкаЩо означає «найкраща» пряма

Для кожного будинку різниця між справжньою ціною і нашим прогнозом називається залишком (residual):

ei = yi − ŷi

На графіку це вертикальний відрізок від точки до прямої. Ідеальної прямої не існує — завжди хтось продався дорожче чи дешевше за очікуване. Тому питання не «як прибрати залишки», а «як зробити їх сумарно найменшими».

Покрути повзунки. Увімкни «показати квадрати» — і побачиш ті самі квадрати, що дали методу імʼя: мінімізувати помилку означає буквально зменшити їхню сумарну площу.

Підбери пряму

Тягни β₀ і β₁. Бурштинові відрізки — залишки. Пунктир — оптимум за формулою МНК.

MSE—
RMSE—
R²—
мінімум—
Що читати: сірий пунктир — прогноз середнім, найпримітивніша можлива модель. R² якраз і показує, наскільки ти обіграв це середнє: R² = 0 — не краще за нього, R² = 1 — ідеально, R² < 0 — гірше, ніж просто вгадувати середнє.

Вибір метрикиЧому саме квадрат

Здавалося б, навіщо квадрат? Можна ж просто додати модулі залишків. Обидва варіанти використовують, і різниця між ними — не формальність, а різна поведінка:

MSE = ⅟n Σ (yi − ŷi)2      MAE = ⅟n Σ |yi − ŷi|
Значки у формулі. Велика грецька «сигма» Σ — це наказ «склади все, що написано праворуч, по всіх обʼєктах». Індекс i пробігає номери обʼєктів від 1 до n, а n — скільки їх усього. Тобто Σ(yᵢ − ŷᵢ)² читається так: «візьми кожен обʼєкт, відніми від справжньої ціни прогноз, піднеси різницю до квадрата — і додай усі ці числа». Множник 1/n перетворює суму на середнє, щоб результат не залежав від того, скільки рядків у таблиці. Вертикальні риски |…| — модуль: він викидає знак, лишаючи саму величину промаху.

Як метрики звіту MSE, RMSE і MAE розібрано в темі 04 · Метрики регресії. Тут нас цікавить інше питання — не «як звітувати», а як вибір метрики змінює саму пряму, яку ми проведемо. І тут у квадрата дві властивості, кожна з наслідками.

Перша: квадрат гладкий. Уяви графік штрафу залежно від величини промаху. У квадрата це чаша з плавним дном: біля нуля вона стає дедалі пологішою, і в кожній точці видно, куди веде схил. У модуля це «V» — дві прямі, що сходяться в гострий кут. У самому куті нахилу немає: ліворуч він −1, праворуч +1, а в нулі не існує жодного. Наслідок для нас прямий: для квадрата існує замкнена формула — готовий вираз, у який підставляєш дані й одразу отримуєш найкращу пряму. Ми виведемо її в розділі 05. Для модуля такої формули немає взагалі: MAE-пряму доводиться шукати ітераціями, наближенням.

Друга: квадрат непропорційно карає великі промахи. Помилка 10 коштує 100, помилка 20 — вже 400. Учетверо більше за вдвічі більшу помилку. Модуль карає рівно пропорційно: 10 коштує 10, 20 коштує 20.

У другої властивості є точний наслідок, і його видно вже на пʼятьох числах. Візьмімо найпростішу можливу модель — без жодної ознаки. Вона зобовʼязана назвати одне число c для всіх обʼєктів одразу. Ціни такі (тис. грн): 100, 110, 120, 130, 500 — чотири звичайні квартири й одна вілла. Яке c обере кожна метрика?

прогноз cMSEMAEзвідки взялось це c
19223 816123.2середнє арифметичне пʼяти цін
12029 00084.0медіана — середнє за порядком число

Порахуймо перший рядок руками, щоб не вірити на слово. Середнє: (100 + 110 + 120 + 130 + 500) ÷ 5 = 960 ÷ 5 = 192. Промахи від нього: −92, −82, −72, −62, +308. Квадрати: 8 464, 6 724, 5 184, 3 844, 94 864; сума 119 080, поділити на 5 → 23 816. Модулі тих самих промахів: 92, 82, 72, 62, 308; сума 616, поділити на 5 → 123.2. Для c = 120 арифметика така сама й дає 29 000 та 84.0.

Кожна метрика виграла у своєму стовпці, і це не збіг цих пʼятьох чисел, а загальне правило: MSE обирає середнє, MAE обирає медіану. Тепер подивись на число 192 — воно вище за чотири ціни з пʼятьох. Одна вілла зсунула прогноз для всіх звичайних квартир, бо квадрат промаху 308 такий великий, що вигідніше зіпсувати чотири прогнози, аби трохи зменшити його. Медіана 120 на віллу не зважає взагалі: їй байдуже, коштує найдорожчий обʼєкт 500 чи 5 000, поки він лишається найдорожчим.

Пряма поводиться так само, тільки в кожній точці осі x. МНК-пряма — це «середнє, протягнуте вздовж x», і тому одна аномальна точка тягне її на себе. MAE-пряма — це «медіана, протягнута вздовж x», і одна точка її майже не рухає. Посунь викид в інтерактиві нижче й порівняй, як реагують дві прямі.

MSE проти MAE: хто стійкіший до викидів

Тягни повзунок — він піднімає одну-єдину точку. Дивись, яка пряма за нею побіжить.

нахил MSE—
нахил MAE—
Висновок: якщо в даних є справжні викиди (помилки введення, аномалії) — MAE чесніша. Якщо великі промахи справді дорого коштують у житті (недооцінили навантаження на міст) — тоді MSE карає їх недарма. Метрику обирають під задачу, а не за звичкою.
метрикащо цеколи брати
MSEсередній квадрат залишкудля навчання: гладка, є похідна
RMSEкорінь із MSEдля звіту: в одиницях ціни
MAEсередній модуль залишкуколи в даних є викиди
R²частка поясненої дисперсіїщоб порівняти з «нічого не роблю»

Далі в темі ми всюди мінімізуємо MSE. Спосіб «провести пряму так, щоб сума квадратів залишків була найменшою» має власне імʼя, яке ти зустрінеш у кожному підручнику: метод найменших квадратів, скорочено МНК (англійською ordinary least squares, звідси OLS в іменах функцій). Кнопка «Знайти оптимум МНК» у першому інтерактиві ставить пряму саме туди, куди її поставила б формула з розділу 05.

R²З чим ми взагалі порівнюємо

MSE = 500 — це добре чи погано? Без контексту сказати неможливо: усе залежить від масштабу цін. Тому потрібна метрика без одиниць, яка порівнює нашу модель із чимось осмисленим. Таким «чимось» беруть найдурнішу можливу модель: завжди прогнозувати середнє.

R2 = 1 − SSres / SStot

Тут SS — це скорочення від sum of squares, «сума квадратів». SS_res (residual) — сума квадратів залишків нашої моделі: Σ(y − ŷ)². SS_tot (total) — сума квадратів відхилень від середнього Σ(y − ȳ)², тобто помилка тієї самої дурної моделі; риска над y позначає середнє. Обидві величини — це буквально сумарна площа квадратів, тільки відкладених від різних ліній. Перемикай режим і порівняй їх наочно:

З чого складається R²

Ліворуч — квадрати від середнього (SStot). Праворуч — від нашої прямої (SSres).

SStot—
SSres—
R² = 1 − SSres/SStot—
Ключ до розуміння: ліва картинка не змінюється — вона не залежить від моделі. Уся робота моделі в тому, щоб зменшити праву суму. R² — це просто частка, на яку вдалося її зменшити.

Порахуймо R² руками, щоб він перестав бути значком. Три будинки: площі 50, 100 і 150 м², ціни 100, 150 і 230 тис. Пряму візьмімо готову — ŷ = 30 + 1.3·площа; у розділі 05 буде видно, звідки беруться саме ці два числа.

площаціна yпрогноз ŷзалишокйого квадратy − 160його квадрат
5010095+525−603 600
100150160−10100−10100
150230225+525+704 900

Середня ціна: (100 + 150 + 230) ÷ 3 = 160 — саме від неї відкладають дві останні колонки. Складаємо: SSres = 25 + 100 + 25 = 150, SStot = 3 600 + 100 + 4 900 = 8 600. Отже R² = 1 − 150 ÷ 8 600 = 1 − 0.017 = 0.983. Читається так: пряма прибрала 98.3% тієї мінливості цін, яку модель-середнє лишала непоясненою.

Чому це працює саме так. Мінливість цін розкладається на дві частини рівно навпіл, без залишку: SStot = SSreg + SSres, де перший доданок — розкид самих прогнозів навколо середнього (у нас 8 450), другий — те, що лишилось непоясненим (150). Разом 8 600, тобто рівно SStot. Це не властивість даних, а властивість МНК: розклад сходиться точно лише тоді, коли пряму підібрано методом найменших квадратів і в моделі є вільний член β₀. Звідси випливає факт, який рятує від паніки: на тих самих даних, на яких МНК навчався, R² відʼємним не буває ніколи — найгірше, що модель може зробити, це поставити β₁ = 0 і повторити середнє, тобто R² = 0.

Тоді звідки береться відʼємний R². З двох місць, і обидва трапляються постійно. Перше — пряму поставив не МНК: у першому інтерактиві її тягнеш ти повзунками, і R² легко йде в мінус. Друге, серйозніше — модель навчена на одних даних, а R² поміряно на інших: тестова вибірка має власне середнє, з яким наша пряма не домовлялась. Якщо ціни за півроку зросли, модель дає систематично занижений прогноз, і просте середнє тестової вибірки її обіграє.

Ще один факт, корисний саме для однієї ознаки: R² МНК-прямої дорівнює квадрату коефіцієнта кореляції між ознакою і ціною. На наших трьох будинках кореляція дорівнює 0.991241, її квадрат — 0.982558, тобто той самий R², що ми порахували руками. Це пояснює, чому R² нічого не каже про напрямок: кореляція +0.99 і −0.99 дають однакове R², бо квадрат зʼїдає знак.

Пастка R². Він майже ніколи не спадає, коли додаєш нові ознаки — навіть якщо ознака є чистим шумом. Модель завжди знайде спосіб трохи підігнатися під випадковість. Тому моделі з різною кількістю ознак чесно порівнювати лише за скоригованим (adjusted) R², який бере плату за кожен зайвий параметр; його формулу з розбором символів дає тема 04 · Метрики регресії.

РозвʼязокНормальне рівняння крок за кроком

Досі ми ставили пряму на око — повзунками. Тепер знайдемо її точно, однією формулою, без жодного перебору. Виглядає вона так:

β = (XTX)−1 XTy

Це те місце, де більшість читачів здається: три незнайомі значки поспіль. Тому підемо трьома заходами. Спершу розберемо кожен значок окремо, потім побачимо, чому формула саме така, а наприкінці порахуємо її руками на трьох будинках — до останньої цифри.

Три речі з лінійної алгебри, і всі три прості

Матриця — це просто таблиця чисел. Наша матриця X: один рядок на кожен будинок, один стовпець на кожну ознаку. Плюс перший стовпець із самих одиниць — він потрібен, щоб у формулу потрапив вільний член β₀ (одиниця, помножена на β₀, дає β₀). Вектор y — стовпець справжніх цін. Запис Xβ означає: для кожного рядка перемнож його числа з відповідними коефіцієнтами й склади. Це і є прогноз, тільки записаний для всіх будинків одним символом.

Транспонування (значок ᵀ угорі) — це поворот таблиці на бік: рядки стають стовпцями, стовпці рядками. З таблиці 3×2 виходить таблиця 2×3. Навіщо воно тут: перемножити дві таблиці можна лише тоді, коли ширина першої дорівнює висоті другої. X на X — це 3×2 на 3×2, не сходиться. А Xᵀ на X — це 2×3 на 3×2, сходиться, і результат має розмір 2×2.

Обернена матриця (значок ⁻¹) — це аналог ділення. Для звичайного числа обернене — це 1/a: помножив a на 1/a, дістав одиницю. Для таблиці так само: A⁻¹ — така таблиця, що добуток A·A⁻¹ дає одиничну матрицю (одиниці по діагоналі, нулі скрізь). Ділити на матрицю не можна, тому множать на обернену — це той самий рух, яким із рівняння 3x = 12 дістають x = 12 ÷ 3. І так само, як не можна ділити на нуль, обернена є не в кожної матриці: якщо один стовпець — копія іншого (з точністю до множника), оберненої немає взагалі.

Чому формула саме така

Найкоротше пояснення не потребує похідних узагалі — лише геометрії.

Коли ми крутимо β, прогнози Xβ пробігають не всі можливі набори з n чисел, а тільки вузьку множину: усе, що можна скласти зі стовпців X. Уяви це так. Стовпець справжніх цін y — точка десь у просторі. Множина досяжних прогнозів — площина в цьому просторі, і точка y на ній майже напевно не лежить (інакше пряма пройшла б крізь усі будинки без жодного залишку). Задача «мінімізувати суму квадратів залишків» дослівно означає: знайти на площині точку, найближчу до y. А найближча точка площини до точки поза нею — це основа перпендикуляра, тінь від y, що падає прямо вниз. Будь-яка інша точка площини далі: щоб дійти до неї, довелось би пройти ще й убік.

Звідси випливає все інше. Якщо відрізок від прогнозу до y перпендикулярний до площини, то він перпендикулярний і до кожного стовпця X окремо. А «перпендикулярні» для двох стовпців чисел означає просту річ: перемнож їх поелементно, склади результати — вийде нуль. Записати цю умову для всіх стовпців одразу — це і є Xᵀ(y − Xβ) = 0. Розкрий дужки — матимеш нормальне рівняння.

Звідки назва. «Нормаль» у геометрії — це перпендикуляр до поверхні, а не «звичайний» чи «нормальний» у побутовому сенсі. Рівняння зветься нормальним саме тому, що виражає одну-єдину вимогу: стовпець залишків стоїть перпендикулярно до простору можливих прогнозів.

Той самий висновок дістають і формально, через похідну. Функція втрат MSE — квадратична, отже опукла: її поверхня — чаша з єдиним дном, без пасток у вигляді локальних ям. Це рідкісний подарунок, і саме він робить наступні чотири кроки законними.

крок 1 · записуємо в матричному вигляді

Складаємо всі обʼєкти в матрицю X (рядок = обʼєкт, стовпець = ознака, перший стовпець — одиниці для β₀). Тоді всі прогнози одразу:

ŷ = X β
крок 2 · записуємо помилку

Сума квадратів залишків — це квадрат довжини стовпця помилок. Подвійні риски ‖…‖ позначають довжину: за теоремою Піфагора це корінь із суми квадратів координат, тож квадрат довжини — просто сума квадратів залишків, наша SSres:

L(β) = ‖y − Xβ‖2 = (y − Xβ)T(y − Xβ)
крок 3 · шукаємо мінімум

Значок ∇ («набла») позначає градієнт — список нахилів функції L окремо по кожному з коефіцієнтів β. На дні гладкої чаші поверхня горизонтальна в усіх напрямках, тобто всі ці нахили дорівнюють нулю. Прирівнюємо:

∇L = −2 XT(y − Xβ) = 0

Ділимо на −2 і розкриваємо дужки — отримуємо так зване нормальне рівняння:

XTX β = XTy
крок 4 · виражаємо β

Якщо матриця XᵀX оборотна — множимо обидві частини на обернену:

β = (XTX)−1 XTy

Зверни увагу, що крок 3 дав рівно ту саму умову, яку ми щойно вивели з геометрії: Xᵀ(y − Xβ) = 0, тільки помножену на −2. Похідна й перпендикуляр — це те саме твердження двома мовами.

Рахуємо руками

Беремо три будинки з розділу 04: площі 50, 100, 150 м², ціни 100, 150, 230 тис. Матриця X має два стовпці — одиниці та площу.

Схема · Що формула робить із розмірами

Ті самі три будинки. Стеж не за числами, а за формою таблиць.

X

150
1100
1150

3 × 2

→

Xᵀ

111
50100150

2 × 3

→

XᵀX

3300
30035000

2 × 2

→

β

30
1.3

2 × 1

Висота 3 — це будинки. Ширина 2 — це коефіцієнти. Після XᵀX будинків більше немає.

Головне, що тут видно: формула стискає таблицю будь-якої висоти у квадратну, сторона якої дорівнює кількості ознак. Хоч три будинки, хоч мільйон — XᵀX лишиться 2×2. Саме тому обертати доводиться маленьку матрицю, і саме тому вартість залежить від кількості ознак, а не від кількості рядків.

Далі — самі числа. XᵀX складається з чотирьох сум: скільки всього будинків (3), сума площ (50 + 100 + 150 = 300, і вона стоїть двічі) та сума квадратів площ (2 500 + 10 000 + 22 500 = 35 000). Права частина Xᵀy — дві суми: сума цін (100 + 150 + 230 = 480) і сума добутків «площа × ціна» (50·100 + 100·150 + 150·230 = 5 000 + 15 000 + 34 500 = 54 500).

Тепер обернемо матрицю 2×2. Для такого розміру є коротке правило: поміняй місцями числа на головній діагоналі, зміни знак у двох інших і поділи все на визначник ad − bc. У нас визначник дорівнює 3·35 000 − 300·300 = 105 000 − 90 000 = 15 000. Він не нуль — отже обернена існує, і розвʼязок єдиний.

β₀ = (35 000·480 − 300·54 500) ÷ 15 000 = 30
β₁ = (3·54 500 − 300·480) ÷ 15 000 = 1.3

У чисельниках тут стоять 16 800 000 − 16 350 000 = 450 000 і 163 500 − 144 000 = 19 500; поділи кожен на 15 000 — і матимеш 30 та 1.3.

Ось звідки взялася пряма ŷ = 30 + 1.3·площа з розділу 04. Перевірмо її: прогнози 95, 160 і 225, залишки +5, −10 і +5. Тепер два контрольні числа. Сума залишків: 5 − 10 + 5 = 0. Сума добутків «площа × залишок»: 50·5 + 100·(−10) + 150·5 = 250 − 1 000 + 750 = 0. Це не випадковість і не аркуш зійшовся — це рівно ті дві умови перпендикулярності, які ми виписали вище: перша для стовпця одиниць, друга для стовпця площ. МНК-пряма завжди лишає залишки, що в сумі дають нуль і не корелюють з ознакою; будь-яке інше значення β цієї умови не виконає.

Формула дає точну відповідь за один крок, без жодних гіперпараметрів. Але в ній ховаються дві проблеми. Перша: обернути матрицю p×p коштує приблизно як куб числа p — на десятку ознак це миттєво, на десятках тисяч неприйнятно (куб від 10 000 — це трильйон операцій). Друга, підступніша: якщо дві ознаки майже дублюють одна одну, стовпці X стають майже паралельними, визначник підповзає до нуля, і ділення на нього роздуває найменший шум у даних до величезних коливань β. Формально обернена ще існує, практично — числа з неї не варті довіри.

На практиці. Навіть коли формулу застосовують, матрицю ніколи не обертають явно. np.linalg.solve або QR-розклад розвʼязують систему напряму — це і швидше, і чисельно стійкіше. np.linalg.inv у робочому коді — майже завжди ознака помилки.

ІтераціїГрадієнтний спуск

Другий шлях — не розвʼязувати рівняння, а просто котитися вниз схилом функції втрат:

β := β − η · ∇L(β)

Обчислюємо градієнт (напрямок найшвидшого зростання помилки), робимо крок у протилежний бік, повторюємо. Розмір кроку η задаємо самі — і саме він вирішує все. Замалий: збіжність триватиме вічність. Завеликий: кожне оновлення перестрибуватиме мінімум і відлітатиме далі, ніж було.

Градієнтний спуск

Ліворуч — карта функції втрат, світле в центрі = мінімум. Праворуч — як падає помилка.

MSE—
мінімум—
Спробуй: постав η близько до 0.001 — крапки ледь повзуть. Постав більше 1.5 — траєкторія вистрілює за межі карти, а помилка злітає до астрономічних чисел. Робоче вікно виявиться напрочуд вузьким.
Навіщо це, якщо є формула. Для прямої на площині градієнтний спуск — надлишок. Але він масштабується туди, куди формула не дістає: мільйони параметрів, дані, що не влазять у памʼять, моделі без замкненого розвʼязку взагалі. Нейромережі, трансформери, мовні моделі — усе вчиться цим самим циклом «порахуй градієнт, зроби крок». Тут ми взяли з нього рівно стільки, скільки треба для порівняння з формулою; сам метод — його варіанти, підбір η, зупинка, пастки — розібрано в темі 13 · Градієнтний спуск.

МасштабЧому потрібна стандартизація

Ось пастка, на якій спотикаються майже всі. Якщо ознаки мають різні масштаби — площа в сотнях, кількість кімнат в одиницях — поверхня втрат перестає бути круглою чашею і витягується у довгий вузький яр.

Проблема в тому, що крок η один на всі напрямки. Той крок, що нормальний уздовж пологої осі, виявляється завеликим упоперек крутої — і спуск починає зигзагом відбиватися від стінок яру замість того, щоб іти до дна. Перемкни тумблер і подивись на різницю траєкторій:

Яр проти чаші

Та сама задача, той самий крок η. Різниця лише в тому, чи стандартизовано ознаку.

MSE після 40 кроків—
Правило: перед будь-яким градієнтним методом ознаки стандартизують — віднімають середнє й ділять на стандартне відхилення. Для нормального рівняння це не потрібно: воно розвʼязує систему точно й на масштаб не зважає.

Для теми 12 з цього важливі рівно два наслідки. Перший: вибір способу розвʼязку змінює вимоги до даних — та сама задача через формулу байдужа до масштабу, а через спуск від нього залежить критично. Другий: стандартизація робить коефіцієнти порівнянними між собою, і саме тому в розділі 11 вона знадобиться ще раз. Як саме масштабують ознаки, які ще бувають способи й де вони ламаються — тема 09 · Передобробка даних.

РозмірністьКілька ознак: від прямої до площини

Досі в нас була одна ознака. У житті їх десятки. Геометрія при цьому змінюється так: одна ознака дає пряму на площині, дві ознаки — площину в просторі, три і більше — гіперплощину, яку вже не намалюєш.

Але математика не змінюється взагалі. Та сама формула β = (XᵀX)⁻¹Xᵀy працює для будь-якої кількості ознак — треба лише додати стовпців у матрицю X. Покрути сцену, щоб побачити, що площина робить те саме, що робила пряма:

Дві ознаки — площина

Прогноз ціни за площею та віком будинку. Тягни повзунок повороту.

β₁ площа—
β₂ вік—
Що видно: залишки, як і раніше, вертикальні — від точки до площини. Знак β₂ відʼємний: старший будинок дешевший. Саме так читається кожен коефіцієнт у багатовимірній моделі.

ГнучкістьНелінійність і перенавчання

А якщо залежність насправді крива? Тут стається несподіване: лінійна регресія вміє описувати криві. Достатньо додати як ознаки степені x:

ŷ = β0 + β1x + β2x2 + β3x3 + …

Модель лишається лінійною за параметрами — а отже, працює та сама формула. Ми просто підсунули їй нові стовпці. Але ось де починається головна драма всього машинного навчання: чим вищий степінь, тим гнучкіша крива — і тим точніше вона підганяється під шум замість справжньої закономірності.

Рухай повзунок степеня й дивись на дві криві помилки. Вони поводяться зовсім по-різному:

Степінь полінома та перенавчання

Рожеві точки — навчальні, сині — тестові (модель їх ніколи не бачила).

помилка train—
помилка test—
Дві криві розходяться: навчальна помилка падає завжди — складніша модель завжди краще запамʼятовує те, що бачила. Тестова спочатку падає, потім росте. Поки що просто запамʼятай цю картинку: чому вона саме така, звідки береться підйом і що з ним робити — розібрано в темі 17 · Перенавчання, недонавчання і розклад помилки.
Звідси головне правило. Якість моделі вимірюють тільки на даних, яких вона не бачила. Помилка на навчальній вибірці нічого не каже про те, чи буде модель працювати завтра — вона каже лише, наскільки добре модель запамʼятала вчорашнє.

ПриборканняРегуляризація

Подивись на перенавчену модель із розділу 09 ще раз: крива проходить крізь навчальні точки, а між ними й особливо на краях робить дикі кидки. Механізм у неї один — великі ваги, які взаємно гасяться. Кожен доданок тягне криву у свій бік, і суми сходяться рівно в навчальних точках; трохи вбік — і баланс розсипається. Наскільки великими виходять самі числа, залежить від того, у якому вигляді записані ознаки: на сирих степенях x, x², …, x¹² коефіцієнти легко доростають до десятків тисяч, а на стійкішому записі, який використано в інтерактиві нижче, лишаються в межах кількох одиниць. Поводяться вони однаково: без штрафу максимальні, зі штрафом осідають.

Ідея регуляризації проста: додати штраф за величину ваг прямо у функцію втрат. Тепер моделі невигідно роздувати коефіцієнти без вагомої причини:

L = Σ(y − ŷ)2 + λ · Σ βj2   ← Ridge (L2)
L = Σ(y − ŷ)2 + λ · Σ |βj|   ← Lasso (L1)

Параметр λ керує балансом: нуль — звичайна регресія, велике значення — всі ваги притиснуті до нуля й модель стає майже прямою. Різниця між L2 і L1: Ridge плавно стискає всі ваги, а Lasso занулює неважливі повністю — тобто заодно робить відбір ознак.

Для теми 12 важливий один побічний ефект, який рідко називають уголос. Штраф λ·Σβ² додає λ до діагоналі матриці XᵀX — а це рівно те, чого їй бракувало в розділі 05, коли дві ознаки майже дублювали одна одну й визначник підповзав до нуля. Ridge робить матрицю оборотною завжди, за будь-якого λ > 0. Історично його для цього й придумали: не проти перенавчання, а проти майже виродженої матриці, яку неможливо надійно обернути. Повний розбір — вибір λ, різниця L1 і L2, геометрія обмежень — у темі 19 · Регуляризація.

Як λ приборкує криву

Степінь фіксовано на 12 — свідомо забагато. Дивись, що робить регуляризація.

помилка test—
‖β‖ норма ваг—
Що видно: знизу — стовпчики коефіцієнтів. При λ=0 вони найбільші (макс |β| = 3.2), зі зростанням λ дружно осідають до нуля, і при λ = 100 від них лишається 0.2. Тестова помилка має мінімум десь посередині — саме там λ підбирають крос-валідацією.

СенсЯк читати коефіцієнти

Коефіцієнт β₁ читається так: якщо площа зростає на одиницю, прогноз ціни змінюється в середньому на β₁ — за умови, що решта ознак не змінилася. Ця остання обмовка робить лінійну регресію прозорою: можна подивитись на число і сказати, що модель насправді думає. Градієнтний бустинг чи нейромережа такої розкоші не дають.

У коефіцієнта є одиниці виміру, і без них він не значить нічого. Наш β₁ = 1.3 — це не «1.3», а 1.3 тисячі гривень на квадратний метр: одиниця ціни, поділена на одиницю ознаки. Звідси одразу два наслідки. Перший: переведи площу з метрів у сантиметри — і коефіцієнт стане 0.00013, хоча модель не змінилася ні на йоту. Другий, важливіший: більший коефіцієнт не означає важливішу ознаку. Ознака «вік у роках» і ознака «вік у днях» описують те саме, а їхні коефіцієнти відрізняються в 365 разів. Щоб коефіцієнти стало можна порівнювати між собою, ознаки спершу стандартизують (розділ 07) — тоді кожен коефіцієнт читається як «на скільки зміниться ціна, якщо ознака зросте на одне своє стандартне відхилення», і одиниця в усіх одна.

Вільний член β₀ читається окремо і найчастіше не читається взагалі. У нашому прикладі β₀ = 30 формально означає «ціна будинку площею 0 м²». Такого будинку не буває, і 30 тисяч тут не мають фізичного змісту — це просто висота, на якій пряма перетинає вертикальну вісь, щоб найкраще лягти на дані в тому діапазоні, де вони є. Осмисленим β₀ стає лише після центрування ознак: якщо від площі відняти її середнє, β₀ перетворюється на «ціну будинку середньої площі», і це вже число, яке можна назвати вголос.

Коефіцієнт діє лише там, де були дані. Наші три будинки мали від 50 до 150 м². Формула охоче порахує ціну для 900 м² — 30 + 1.3·900 = 1 200 тис., — але це екстраполяція: припущення, що та сама пряма тягнеться далеко за межі побаченого. Модель цього припущення не перевіряла й перевірити не може. У даних, де ознака ніколи не виходила за 150, немає жодної інформації про те, що діється при 900.

А головне — прозорість зникає, щойно ознаки починають дублювати одна одну. Це мультиколінеарність (multicollinearity), і найчистіший її випадок такий: у таблиці є і «площа в м²», і «площа у футах», бо анкету заповнювали різні люди. Заміряно на 60 згенерованих будинках, де ціна залежить від площі як 1.3 тис. за м², а другий стовпець — та сама площа у футах із похибкою округлення:

модельβ площа, м²β площа, фут²R²
обидві ознаки−19.5425+1.93680.9783
лише м²+1.3074—0.9781

Прочитай перший рядок буквально: модель каже, що більша площа знижує ціну на 19.5 тисячі за метр. Це відверта нісенітниця — і водночас прогнози цієї моделі точні рівно так само, як у чесної (R² відрізняється в четвертому знаку). Річ у тім, що два коефіцієнти працюють у парі: у квадратному метрі 10.7639 квадратних фута, тож сумарний вплив зайвого метра дорівнює −19.5425 + 1.9368·10.7639 = 1.3048 — практично те саме, що дає чесна модель. Числа правильні разом і сміттєві поодинці.

Друга біда мультиколінеарності — нестабільність. У тому самому замірі досить прибрати один рядок із шістдесяти, і коефіцієнт при площі в м² гуляє від −39.78 до −9.65: розмах 30.13 при самому коефіцієнті близько −19.5. У чесної моделі з однією ознакою та сама процедура дає розмах 0.0195 — у півтори тисячі разів менший. Практичний висновок: якщо коефіцієнти стрибають від дрібної зміни даних, не шукай сенсу в їхніх значеннях — шукай дубльовані ознаки.

І найголовніше. Коефіцієнт показує звʼязок, а не причину. Якщо модель знайшла, що будинки з великою кухнею дорожчі, це не означає, що збільшення кухні підніме ціну — можливо, великі кухні просто трапляються в дорогих районах. Регресія міряє кореляцію; причинність доводять експериментом, а не формулою.

МежіЧотири припущення, які легко порушити

Код виконається на будь-яких даних і видасть числа. Проблема в тому, що ці числа мають сенс лише коли виконуються чотири умови. Їх зручно запамʼятати абревіатурою LINE — за першими літерами англійських назв. Перемикай сценарії: кожен ламає рівно одне припущення, і на нижньому графіку видно, як саме.

Одразу застереження, без якого розділ читається неправильно. Порушення припущення не робить прогнози автоматично хибними. Воно ламає щось конкретне — і для кожної літери своє. Тому нижче після кожного припущення стоїть окремий рядок «що саме зламається».

Коли пряма бреше

Угорі — дані та підгонка. Унизу — графік залишків: головний діагностичний інструмент.

R²—
нахил β₁—
Головне правило: у здоровій моделі залишки — безструктурна хмара навколо нуля. Будь-який видимий візерунок на нижньому графіку означає, що в даних лишилася закономірність, якої модель не побачила.
літераприпущенняяк ламаєтьсящо робити
LLinearity — звʼязок лінійнийзалишки лягають дугоюполіноміальні ознаки, інша модель
IIndependence — спостереження незалежнічасові ряди, повтори обʼєктамоделі часових рядів, групова валідація
NNormality — залишки нормальніламає довірчі інтервалитрансформація y (напр. log)
EEqual variance — розкид сталийзалишки воронкоюзважена регресія, log-таргет

Чому кожне з них ламається на реальних даних

L · лінійність. Ламається завжди, коли величина має насичення або поріг. Ціна за метр не росте вічно: після певної площі ринок покупців звужується, і крива згинається. Дохід від реклами росте, поки аудиторію не вичерпано. Вік автомобіля зʼїдає ціну круто в перші три роки й майже не зʼїдає після десятого. Як побачити: верхній графік бреше — на хмарі точок дуга непомітна. Дивитись треба на нижній: коли залишки лягли дугою, це означає, що пряма систематично недооцінює середину й переоцінює краї (або навпаки). Що зламається: прогноз стає систематично зміщеним на цілих ділянках діапазону, і жодне збільшення вибірки цього не лікує.

I · незалежність. Найчастіше порушене припущення й найважче помітне. Дані про будинки збирали кварталами: сусідні обʼєкти ділять район, школу й вигляд із вікна, тож їхні залишки схожі. Дані з часом: сьогоднішня ціна знає про вчорашню. Дані з повторами: одна й та сама квартира виставлялась тричі й дала три рядки. Як побачити: побудуй залишки в тому порядку, у якому дані збирались — якщо сусідні точки тримаються за руки й довго йдуть по один бік нуля, незалежності немає. Що зламається: сам коефіцієнт лишається приблизно правильним, бреше оцінка його точності. Заміряно на 4 000 згенерованих вибірок по 80 точок, де кожна помилка на 85% повторює попередню: справжній розкид β₁ дорівнює 0.1438, а стандартна формула похибки, яку виведе будь-яка бібліотека, дає в середньому 0.0408 — занижено в 3.5 раза. Довірчий інтервал виходить рівно в стільки ж разів вужчий за чесний, і звʼязок виглядає «статистично значущим» там, де його немає.

N · нормальність залишків. «Нормальний розподіл» — це форма дзвона: дрібні відхилення часті, великі рідкісні, симетрично в обидва боки. Ціни так не поводяться майже ніколи: знизу вони впираються в нуль, а зверху хвіст тягнеться далеко — розподіл скошений. Як побачити: гістограма залишків має один горб і довгий хвіст в один бік. Що зламається: найменше з усього списку. Самі коефіцієнти лишаються найкращими лінійними оцінками навіть без нормальності; ламаються тільки довірчі інтервали й p-значення, та й ті на великій вибірці вирівнюються самі. Тому N — єдина літера, через яку не варто панікувати: якщо ти будуєш прогноз, а не звіт із p-значеннями, вона тебе майже не стосується. Звичайні ліки — узяти логарифм ціни й моделювати його.

E · сталий розкид (наукова назва — гомоскедастичність, а її порушення — гетероскедастичність). Ламається щоразу, коли похибка пропорційна величині: дешеву однокімнатну квартиру ринок оцінює з точністю до пари тисяч, особняк — до пари сотень тисяч. Як побачити: залишки розходяться воронкою — вузько ліворуч, широко праворуч. Що зламається: два наслідки. Перший — довірчі інтервали знову брешуть. Другий, менш очевидний: МНК зважує всі точки однаково, тобто дозволяє найгаласливішим обʼєктам тягнути пряму нарівні з найточнішими. Заміряно на 4 000 вибірок із розкидом, що росте вздовж x: звичайний МНК дає розкид оцінки β₁ у 0.1066, а зважена регресія (де кожна точка входить із вагою, оберненою до її дисперсії) — 0.0773, тобто у 1.38 раза точніше на тих самих даних.

А четвертий сценарій в інтерактиві — викид — стоїть осторонь списку, бо це не порушення припущення, а порушення даних. Але наслідок найгрубіший. Заміряно на 30 точках: одна точка, піднята на 200 одиниць, зсуває нахил з 1.184 до 1.023, а R² обвалюється з 0.960 до 0.400. Одна точка з тридцяти. Причина вже відома з розділу 03 — квадрат карає великий промах непропорційно.

Порядок дій, який економить години. Спершу подивись на графік залишків, і тільки потім на R². Високий R² з дугою в залишках означає «модель схопила загальний напрямок і систематично бреше в деталях» — і це гірше, ніж скромний R² з чистою хмарою, бо в першому випадку помилка передбачувана, а ти про неї не знаєш.

ПідсумокНавіщо це знати

Лінійна регресія рідко виграє змагання. Її цінність в іншому — це базова лінія, з якою порівнюють усе решта. Вона вчиться за секунди, чесно каже, що думає, і працює на крихітних вибірках. Якщо важкий бустинг ледве обігнав пряму — це сигнал, що в даних просто немає нелінійної структури, і складна модель лише додає ризику без користі.

А ще вона — найдешевший спосіб зрозуміти механіку, яку далі побачиш скрізь:

Змінюватиметься форма моделі. Цикл лишиться тим самим.