Машинне навчання · Блок 4 · Тема 17

Крива, що вирішує

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

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

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

01 / ПостановкаКоли відповідь — «так» або «ні»

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

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

P(y = 1 | x) = σ(z),   де   z = β0 + β1x1 + … + βpxp

Усередині сидить та сама лінійна комбінація ознак, що й у лінійній регресії, — її називають лінійним предиктором. Новизна лише в тому, що результат пропускають крізь функцію σ, яка стискає будь-яке число в проміжок [0, 1]. Звідси й дивна назва «регресія» для алгоритму класифікації.

02 / Провал прямоїЧому лінійна регресія тут ламається

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

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

Інтерактив 1 · Пряма проти сигмоїди на мітках 0/1

Повзунок додає студентів із дуже великою підготовкою (усі склали). Дивись, яка крива зрушить.

пряма ŷ(0 год)
пряма ŷ(30 год)
межа прямої
межа сигмоїди
Що читати: рожева пряма — метод найменших квадратів, бірюзова крива — логістична регресія. Вертикальні пунктири — межі, де кожна модель перемикається з «не складе» на «складе». Логістична межа стоїть як укопана: сигмоїда майже не реагує на точки, у класифікації яких вона й так упевнена.
Головне з цього інтерактиву. Проблема не в тому, що пряма «негарна», а в тому, що вона витрачає гнучкість на дотягування до далеких точок замість точної межі. Сигмоїда для далеких точок насичена — її похідна там близька до нуля, і вони перестають впливати на розвʼязок.

03 / ШансиІмовірність, шанси, логіт

Щоб зрозуміти, звідки береться сигмоїда, зайдемо не з формули, а з логіки. Треба звʼязати необмежене число z з обмеженою ймовірністю p. Зробимо це в три кроки, кожен із яких розширює діапазон.

крок 1 · імовірність — від 0 до 1

Це те, що ми хочемо отримати, але діапазон надто тісний: лінійний предиктор у нього не влізе.

p ∈ [0, 1]
крок 2 · шанси — від 0 до нескінченності

Шанси (odds) — це відношення ймовірності події до ймовірності її відсутності. Мова азартних ігор: «шанси три до одного».

odds = p / (1 − p)

Якщо p = 0.75, то odds = 3: подія втричі ймовірніша за свою відсутність. Якщо p = 0.5, шанси дорівнюють 1. Верхньої межі вже немає, але нижня лишилась: шанси не бувають відʼємними.

крок 3 · логіт — від −∞ до +∞

Логарифм добиває останнє обмеження. Логарифм шансів називають логітом:

logit(p) = ln( p / (1 − p) )

Тепер діапазон збігається з діапазоном лінійного предиктора. Отже, можна просто прирівняти їх.

Це і є справжнє означення логістичної регресії — вона лінійна не за ймовірністю, а за логітом:

ln( p / (1 − p) ) = β0 + β1x1 + … + βpxp = z

04 / СигмоїдаРозвʼязуємо тотожність назад

Модель записана в термінах логіта, але прогнозувати треба ймовірність. Виразимо p через z — три рядки шкільної алгебри, і в кінці саме собою зʼявиться сигмоїда.

крок 1 · знімаємо логарифм
p / (1 − p) = ez
крок 2 · множимо на (1 − p) і збираємо p
p = ez − p·ez  ⟹  p(1 + ez) = ez
крок 3 · ділимо й скорочуємо на ez
p = ez / (1 + ez) = 1 / (1 + e−z) = σ(z)

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

Три властивості сигмоїди варто памʼятати напамʼять:

Тепер подивись, що роблять із кривою два її параметри. β₁ керує крутістю переходу, β₀ — його положенням.

Інтерактив 2 · Що роблять β₀ і β₁

Крапки внизу — ті, хто не склав; угорі — ті, хто склав. Пунктир — межа рішення при порозі 0.5.

межа, год
точність
log-loss
мінімум
Спробуй: постав β₁ = 0 — крива стає горизонтальною, модель видає ту саму ймовірність усім і межі не існує взагалі. Постав β₁ відʼємним — крива перевертається, і модель починає стверджувати, що більше готуватися шкідливо.

05 / МежаДе модель міняє думку

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

β0 + β1x1 + … + βpxp = 0

А це — рівняння прямої, площини або гіперплощини, залежно від кількості ознак. Для однієї ознаки межа вироджується в точку x* = −β₀/β₁. Звідси й термін лінійний класифікатор: розділювальна поверхня завжди пласка, хоч крива ймовірності й вигинається.

Практичний наслідок. Якщо класи розділені кільцем або спіраллю, логістична регресія їх не розділить — жодна пряма цього не зробить. Вихід той самий, що й у лінійній регресії: додати похідні ознаки. Наприклад, x₁² + x₂² перетворює коло на пряму, і задача стає лінійною.

06 / ПорігВажіль, який не належить моделі

Ось найважливіша думка лекції, і її регулярно пропускають. Модель віддає число від 0 до 1. Перетворення цього числа на рішення — окремий крок, якого модель не робить і не може зробити, бо не знає ціни помилок. Порівнювати ймовірність із 0.5 — не закон природи, а домовленість за замовчуванням.

Зменшуючи поріг, ти ловиш більше справжніх позитивів і водночас набираєш більше хибних тривог; збільшуючи — навпаки. Цю торгівлю описують двома метриками:

precision = TP / (TP + FP)      recall = TP / (TP + FN)

Precision (точність): «серед тих, кого модель позначила позитивними, скільки насправді такі?». Recall (повнота): «серед усіх справжніх позитивних, скількох модель знайшла?». Перша захищає від хибних тривог, друга — від пропусків. Максимізувати обидві одночасно неможливо, і поріг — саме той важіль, яким ти обираєш, чим жертвувати.

Інтерактив 3 · Поріг і матриця плутанини

Модель зафіксована, змінюється тільки поріг. 240 студентів, гістограми прогнозованих імовірностей.

accuracy
F1
precision
recall
Крайні випадки варто побачити самому: зсунь поріг у самий низ — модель оголошує позитивними геть усіх, recall стає 1.00, а precision падає до частки позитивних у вибірці. Зсунь у самий верх — precision дорівнює 1.00, бо модель ризикує лише там, де абсолютно впевнена, зате recall майже нульовий.
Як обирають поріг у житті. Не за accuracy. Спершу формулюють вимогу — «ловити щонайменше 80% шахрайських транзакцій» або «не більше 5% хибних тривог» — а потім беруть найбільший поріг, який її задовольняє. Модель тренують один раз, поріг переглядають щоразу, коли змінюється ціна помилки.

07 / ВтратаLog-loss і чому не MSE

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

L = −⅟n Σ [ yi·ln(pi) + (1 − yi)·ln(1 − pi) ]

Формула виглядає громіздко, але це два випадки, склеєні множниками. Коли y = 1, лишається −ln(p); коли y = 0−ln(1 − p). Логіка однакова: чим меншу ймовірність модель дала правильній відповіді, тим більший штраф. Дав правильному класу 0.99 — заплатив 0.01. Дав 0.5 — 0.69. Дав 0.01 — 4.6. А впевнено помилитися коштує нескінченність.

Асиметрія, яка й робить log-loss корисною. Квадратична помилка карає впевнену помилку лише вчетверо сильніше за невпевнену. Логарифм карає її необмежено. Саме тому модель, навчена на log-loss, стає обережною: краще сказати «не знаю, 0.5», ніж упевнено збрехати.

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

Перевірити випуклість можна прямо очима. Функція випукла, коли для будь-яких двох точок відрізок між ними (хорда) лежить не нижче за саму функцію. Якщо знайдеться хоч один напрямок, де крива вилазить над хордою, функція невипукла.

Інтерактив 4 · Тест хорди: log-loss проти MSE

Ліворуч — карта втрат за параметрами. Праворуч — профіль уздовж хорди; суцільна лінія — функція, пунктир — хорда.

MSE над хордою
log-loss над хордою
Чому це не формальність: достатньо одного напрямку з порушенням, щоб функція перестала бути випуклою. Покрути повзунок — знайдуться напрямки, де MSE поводиться пристойно, і напрямки, де вона явно вигинається над хордою. Log-loss не порушує умову ніде, і це доведено аналітично, а не підбором.

08 / ПравдоподібністьЗвідки взялася ця формула

Log-loss не витягнули з капелюха — вона випливає з методу максимальної правдоподібності (MLE). Логіка така: серед усіх наборів параметрів обираємо той, за якого спостережені дані найімовірніші.

крок 1 · імовірність одного спостереження

Модель каже, що студент складе з імовірністю pᵢ. Тоді ймовірність побачити те, що ми справді побачили, записується одним виразом:

P(yi) = piyi · (1 − pi)1−yi

Перевір: при y = 1 залишиться p, при y = 01 − p. Показник просто вмикає потрібний множник.

крок 2 · імовірність усієї вибірки

Спостереження вважаємо незалежними, тому ймовірності перемножуються:

ℒ(β) = Πi piyi (1 − pi)1−yi
крок 3 · логарифмуємо

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

ln ℒ(β) = Σ [ yi ln pi + (1 − yi) ln(1 − pi) ]
крок 4 · міняємо знак

Оптимізатори за традицією мінімізують. Ставимо мінус, ділимо на n — і отримуємо рівно ту log-loss, що була вище:

L(β) = −⅟n ln ℒ(β)

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

09 / ГрадієнтЯк це насправді рахують

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

Візьмемо похідну log-loss по вектору параметрів. У викладках множник σ(1−σ) зі знаменника логарифма скорочується з тим самим множником із похідної сигмоїди (σ′ = σ(1−σ)). Лишається:

∇L(β) = XT ( σ(Xβ) − y )

Порівняй із градієнтом лінійної регресії: ∇L = Xᵀ(Xβ − y). Різниця лише в тому, що прогноз пропущено крізь сигмоїду. Структура ідентична: матриця ознак, транспонована, помножена на вектор помилок. Це не збіг: обидві моделі належать до узагальнених лінійних моделей, і для всього сімейства градієнт має цю форму. Далі — звичайний градієнтний спуск:

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

Інтерактив 5 · Градієнтний спуск на log-loss

Ліворуч — карта log-loss за параметрами (світле = менше). Праворуч — падіння помилки за ітераціями.

log-loss
мінімум
Зверни увагу на форму карти: у log-loss немає локальних ям — поверхня єдиною чашею спадає до мінімуму. Ознаку тут стандартизовано; без цього чаша витягнулась би у вузький яр і той самий крок η уже не працював би.
Що використовують на практиці. scikit-learn за замовчуванням бере lbfgs — квазіньютонів метод, який наближає й другу похідну і тому збігається за десятки ітерацій замість тисяч. Для великих вибірок — стохастичні варіанти. Ідея скрізь та сама: порахуй градієнт, зроби крок.

10 / ДисбалансКоли поріг 0.5 стає катастрофою

Уяви задачу з рідкісним позитивним класом: шахрайські транзакції, відмова обладнання, рідкісна хвороба. Позитивів 2%. Модель чесно вивчить, що апріорі подія малоймовірна, і майже ніколи не видаватиме ймовірність вище 0.5. Формально вона права — практично на порозі 0.5 вона мовчить. А accuracy при цьому виглядатиме чудово: тривіальний класифікатор «завжди негативний» дає 98% правильних відповідей, не роблячи нічого. Тому accuracy на незбалансованих даних — беззмістовна метрика: вона вимірює не якість моделі, а рідкість класу.

Інтерактив 6 · Дисбаланс тягне поріг униз

Повзунок змінює частку позитивного класу. Модель перенавчається щоразу; гістограми показують, куди зʼїхали ймовірності.

accuracy @0.5
«завжди 0»
recall @0.5
поріг на 70%
Що показує бурштинова лінія: це поріг, за якого модель ловить 70% позитивів. При збалансованих класах він вище 0.5, при сильному дисбалансі падає в район десятих і сотих. Модель не стала гіршою — просто шкала її впевненості зсунулась разом з апріорною ймовірністю.
Що з цим роблять. Зсунути поріг, як в інтерактиві — найдешевше й майже завжди достатньо. Або class_weight='balanced': помилки на рідкому класі рахують дорожче, і межа повертається до 0.5. Або змінити склад вибірки (undersampling, SMOTE). Але метрику треба міняти обовʼязково: замість accuracy — precision, recall, F1 або PR-AUC.

11 / ІнтерпретаціяКоефіцієнти й відношення шансів

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

крок 1 · шанси в двох точках
odds(x) = eβ₀ + β₁x     odds(x+1) = eβ₀ + β₁(x+1)
крок 2 · ділимо
odds(x+1) / odds(x) = eβ₁

Величина x скоротилася. Отже, відношення не залежить від того, з якої точки ми стартували.

Це і є відношення шансів (odds ratio): збільшення ознаки на одиницю множить шанси позитивного результату на e^β₁. Якщо β₁ = 0.36, то e^0.36 ≈ 1.43 — кожна додаткова година підвищує шанси скласти приблизно на 43%. Відʼємний β₁ дає множник менший за одиницю, нульовий — рівно 1.

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

Інтерактив 7 · Сталий множник шансів

Угорі — ймовірність на шести кроках ознаки. Унизу — ті самі шанси й множник між сусідніми стовпчиками.

e^β₁ множник
шанси при x=5
Δp на 1-му кроці
найбільший Δp
Головне спостереження: підпис між стовпчиками ніколи не змінюється — множник однаковий на кожному кроці. А різниця висот стовпчиків імовірності гуляє. Тому фраза «ознака додає 5% імовірності» для логістичної регресії просто некоректна: правильно казати про шанси.

12 / Багато класівSoftmax і one-vs-rest

Досі класів було два. Якщо їх K, є два стандартні шляхи.

One-vs-Rest (OvR)

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

Softmax (мультиноміальна регресія)

Чесніший варіант: одна модель, яка одразу рахує K логітів і нормує їх:

P(y = k | x) = ezk / Σj ezj

Експонента робить усі числа додатними, ділення на суму нормує до одиниці. При K = 2 softmax алгебраїчно зводиться до сигмоїди — це її пряме узагальнення. Втрата теж узагальнюється, до категорійної крос-ентропії −Σ yₖ ln pₖ. Саме ця пара стоїть на виході майже будь-якої класифікаційної нейромережі.

13 / РегуляризаціяЧому тут вона обовʼязкова

Тут регуляризація потрібна навіть частіше, ніж у лінійній регресії, і причина специфічна. Якщо класи лінійно роздільні — існує пряма, що ідеально їх розділяє, — правдоподібність не має максимуму всередині простору параметрів. Модель може нескінченно збільшувати β₁, роблячи сигмоїду дедалі крутішою, а log-loss дедалі ближчою до нуля, ніколи його не досягаючи. Оптимізатор розжене коефіцієнти до нескінченності або впреться в ліміт ітерацій.

Штраф зупиняє цю втечу, бо робить надто великі ваги невигідними:

Lreg = L(β) + λ · Σ βj2   ← L2      Lreg = L(β) + λ · Σ |βj|   ← L1
Обережно з C у scikit-learn. Там задають не λ, а обернену величину C = 1/λ. Тобто маленьке C означає сильну регуляризацію. І ще: LogisticRegression застосовує L2-штраф за замовчуванням, з C = 1. Якщо ти цього не знаєш, можеш довго дивуватися, чому коефіцієнти не збігаються з розрахованими вручну.

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

14 / ПідсумокЩо варто винести

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

ідеяформулачому важливо
логітln(p/(1−p)) = zсправжнє означення моделі: лінійність на шкалі логіта
сигмоїдаp = 1/(1+e−z)обернена до логіта, повертає в [0,1]
межаz = 0завжди пласка: пряма, площина, гіперплощина
log-loss−Σ[y·ln p + (1−y)·ln(1−p)]випукла; безмежно карає впевнену помилку
градієнтXT(σ(Xβ) − y)та сама форма, що й у лінійної регресії
eβвідношення шансівєдиний коректний спосіб прочитати коефіцієнт
порігp ≥ tне частина моделі — важіль під ціну помилки

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

Далі в практиці. У practice.ipynb ти реалізуєш сигмоїду й log-loss на NumPy, напишеш градієнтний спуск за формулою Xᵀ(σ(Xβ)−y), звіриш результат зі scikit-learn, побудуєш криву precision-recall і підбереш поріг під задане обмеження на recall.

Далі в темі

Теорію прочитано. Тепер закріпи її на практиці.