Уяви, що ти ведеш курс і хочеш заздалегідь розуміти, хто з групи ризикує не скласти іспит. Єдине, що ти знаєш про кожного студента — скільки годин він реально готувався. Мітка на виході не число, а факт: склав або не склав. Одиниця або нуль.
Задача ніби та сама, що й у лінійній регресії, але вже на першому кроці все ламається. Пряма не вміє зупинятися на нулі й одиниці — у неї немає ні підлоги, ні стелі. А ще тобі потрібне не саме число, а впевненість: «цей складе з імовірністю 0.83». Із такої відповіді можна ухвалювати різні рішення залежно від того, чого ти боїшся більше.
01 / ПостановкаКоли відповідь — «так» або «ні»
Задача класифікації відрізняється від регресії однією деталлю: множина відповідей скінченна. Один клас домовляються називати позитивним і позначати одиницею, другий — негативним і нулем. Слово «позитивний» тут не про добро: у медицині позитивний клас — це якраз хвороба.
Логістична регресія розвʼязує цю задачу так: вона моделює не сам клас, а ймовірність того, що обʼєкт належить позитивному класу:
Усередині сидить та сама лінійна комбінація ознак, що й у лінійній регресії, — її
називають лінійним предиктором. Новизна лише в тому, що результат
пропускають крізь функцію σ, яка стискає будь-яке число в проміжок [0, 1].
Звідси й дивна назва «регресія» для алгоритму класифікації.
02 / Провал прямоїЧому лінійна регресія тут ламається
Найчесніший спосіб зрозуміти, навіщо потрібна сигмоїда, — спробувати обійтися без неї. Проведемо через дані про підготовку звичайну пряму методом найменших квадратів, ніби нулі й одиниці — це числа.
Проблеми виринають одразу. Перша очевидна: пряма необмежена — вона видає відʼємні «ймовірності» ліворуч і більші за одиницю праворуч. Друга підступніша: пряма мінімізує квадрат відхилення від мітки, тому кожна далека точка тягне її на себе, навіть якщо нічого нового не додає. Додай у групу студентів-марафонців, які готувалися по 70 годин і, звісно, склали, — і подивись, що станеться з межею.
Інтерактив 1 · Пряма проти сигмоїди на мітках 0/1
Повзунок додає студентів із дуже великою підготовкою (усі склали). Дивись, яка крива зрушить.
03 / ШансиІмовірність, шанси, логіт
Щоб зрозуміти, звідки береться сигмоїда, зайдемо не з формули, а з логіки. Треба
звʼязати необмежене число z з обмеженою ймовірністю p. Зробимо
це в три кроки, кожен із яких розширює діапазон.
Це те, що ми хочемо отримати, але діапазон надто тісний: лінійний предиктор у нього не влізе.
Шанси (odds) — це відношення ймовірності події до ймовірності її відсутності. Мова азартних ігор: «шанси три до одного».
Якщо p = 0.75, то odds = 3: подія втричі ймовірніша за
свою відсутність. Якщо p = 0.5, шанси дорівнюють 1. Верхньої межі вже
немає, але нижня лишилась: шанси не бувають відʼємними.
Логарифм добиває останнє обмеження. Логарифм шансів називають логітом:
Тепер діапазон збігається з діапазоном лінійного предиктора. Отже, можна просто прирівняти їх.
Це і є справжнє означення логістичної регресії — вона лінійна не за ймовірністю, а за логітом:
04 / СигмоїдаРозвʼязуємо тотожність назад
Модель записана в термінах логіта, але прогнозувати треба ймовірність. Виразимо
p через z — три рядки шкільної алгебри, і в кінці саме собою
зʼявиться сигмоїда.
Отже, сигмоїда не обрана «бо схожа на сходинку» — вона обернена до логіта. Ми домовились, що лінійною є логарифмічна шкала шансів, і сигмоїда просто повертає нас назад в ймовірності.
Три властивості сигмоїди варто памʼятати напамʼять:
σ(0) = 0.5— точка перелому рівно посередині;σ(−z) = 1 − σ(z)— симетрія відносно цієї точки;σ′(z) = σ(z)·(1 − σ(z))— похідна виражається через саму функцію. Максимум похідної — 0.25 приz = 0; на хвостах вона згасає до нуля.
Тепер подивись, що роблять із кривою два її параметри. β₁ керує крутістю
переходу, β₀ — його положенням.
Інтерактив 2 · Що роблять β₀ і β₁
Крапки внизу — ті, хто не склав; угорі — ті, хто склав. Пунктир — межа рішення при порозі 0.5.
05 / МежаДе модель міняє думку
Межа рішення — множина точок, у яких модель вагається рівно навпіл. Знайти її легко: ймовірність дорівнює 0.5 тоді й лише тоді, коли логіт нульовий:
А це — рівняння прямої, площини або гіперплощини, залежно від кількості ознак. Для однієї
ознаки межа вироджується в точку x* = −β₀/β₁. Звідси й термін
лінійний класифікатор: розділювальна поверхня завжди пласка, хоч крива
ймовірності й вигинається.
x₁² + x₂² перетворює
коло на пряму, і задача стає лінійною.06 / ПорігВажіль, який не належить моделі
Ось найважливіша думка лекції, і її регулярно пропускають. Модель віддає число від 0 до 1. Перетворення цього числа на рішення — окремий крок, якого модель не робить і не може зробити, бо не знає ціни помилок. Порівнювати ймовірність із 0.5 — не закон природи, а домовленість за замовчуванням.
Зменшуючи поріг, ти ловиш більше справжніх позитивів і водночас набираєш більше хибних тривог; збільшуючи — навпаки. Цю торгівлю описують двома метриками:
Precision (точність): «серед тих, кого модель позначила позитивними, скільки насправді такі?». Recall (повнота): «серед усіх справжніх позитивних, скількох модель знайшла?». Перша захищає від хибних тривог, друга — від пропусків. Максимізувати обидві одночасно неможливо, і поріг — саме той важіль, яким ти обираєш, чим жертвувати.
Інтерактив 3 · Поріг і матриця плутанини
Модель зафіксована, змінюється тільки поріг. 240 студентів, гістограми прогнозованих імовірностей.
07 / ВтратаLog-loss і чому не MSE
Тепер про навчання. Потрібна функція, яка вимірює, наскільки погані наші ймовірності. Природна ідея — узяти звичний MSE. Це працює, але погано. Правильна втрата тут — log-loss, або бінарна крос-ентропія:
Формула виглядає громіздко, але це два випадки, склеєні множниками. Коли
y = 1, лишається −ln(p); коли y = 0 —
−ln(1 − p). Логіка однакова: чим меншу ймовірність модель дала правильній
відповіді, тим більший штраф. Дав правильному класу 0.99 — заплатив 0.01. Дав 0.5 —
0.69. Дав 0.01 — 4.6. А впевнено помилитися коштує нескінченність.
Але головна причина глибша. MSE поверх сигмоїди — невипукла функція параметрів: на її поверхні бувають плато й ями, у яких спуск застрягає, і немає гарантії, що знайдений мінімум глобальний. Log-loss же випукла завжди — у неї рівно один мінімум.
Перевірити випуклість можна прямо очима. Функція випукла, коли для будь-яких двох точок відрізок між ними (хорда) лежить не нижче за саму функцію. Якщо знайдеться хоч один напрямок, де крива вилазить над хордою, функція невипукла.
Інтерактив 4 · Тест хорди: log-loss проти MSE
Ліворуч — карта втрат за параметрами. Праворуч — профіль уздовж хорди; суцільна лінія — функція, пунктир — хорда.
08 / ПравдоподібністьЗвідки взялася ця формула
Log-loss не витягнули з капелюха — вона випливає з методу максимальної правдоподібності (MLE). Логіка така: серед усіх наборів параметрів обираємо той, за якого спостережені дані найімовірніші.
Модель каже, що студент складе з імовірністю pᵢ. Тоді ймовірність
побачити те, що ми справді побачили, записується одним виразом:
Перевір: при y = 1 залишиться p, при y = 0 —
1 − p. Показник просто вмикає потрібний множник.
Спостереження вважаємо незалежними, тому ймовірності перемножуються:
Добуток сотень чисел, менших за одиницю, миттєво провалюється в машинний нуль. Логарифм перетворює добуток на суму й розвʼязує проблему. Максимум не зсувається, бо логарифм монотонний:
Оптимізатори за традицією мінімізують. Ставимо мінус, ділимо на n —
і отримуємо рівно ту log-loss, що була вище:
Отже, мінімізація log-loss і максимізація правдоподібності — одна й та сама дія з різними знаками. У лінійній регресії працює той самий принцип: якщо припустити нормальний шум, MLE дає точнісінько метод найменших квадратів.
09 / ГрадієнтЯк це насправді рахують
Прирівняти похідну до нуля й розвʼязати, як у лінійній регресії, тут не вийде: рівняння трансцендентне і замкненого розвʼязку не має. Доводиться йти ітераціями — і тут на нас чекає найкрасивіший факт теми.
Візьмемо похідну log-loss по вектору параметрів. У викладках множник
σ(1−σ) зі знаменника логарифма скорочується з тим самим множником із похідної
сигмоїди (σ′ = σ(1−σ)). Лишається:
Порівняй із градієнтом лінійної регресії: ∇L = Xᵀ(Xβ − y). Різниця лише в
тому, що прогноз пропущено крізь сигмоїду. Структура ідентична: матриця ознак,
транспонована, помножена на вектор помилок. Це не збіг: обидві моделі належать до
узагальнених лінійних моделей, і для всього сімейства градієнт має цю форму. Далі —
звичайний градієнтний спуск:
Інтерактив 5 · Градієнтний спуск на log-loss
Ліворуч — карта log-loss за параметрами (світле = менше). Праворуч — падіння помилки за ітераціями.
scikit-learn за
замовчуванням бере lbfgs — квазіньютонів метод, який наближає й другу похідну
і тому збігається за десятки ітерацій замість тисяч. Для великих вибірок — стохастичні
варіанти. Ідея скрізь та сама: порахуй градієнт, зроби крок.10 / ДисбалансКоли поріг 0.5 стає катастрофою
Уяви задачу з рідкісним позитивним класом: шахрайські транзакції, відмова обладнання, рідкісна хвороба. Позитивів 2%. Модель чесно вивчить, що апріорі подія малоймовірна, і майже ніколи не видаватиме ймовірність вище 0.5. Формально вона права — практично на порозі 0.5 вона мовчить. А accuracy при цьому виглядатиме чудово: тривіальний класифікатор «завжди негативний» дає 98% правильних відповідей, не роблячи нічого. Тому accuracy на незбалансованих даних — беззмістовна метрика: вона вимірює не якість моделі, а рідкість класу.
Інтерактив 6 · Дисбаланс тягне поріг униз
Повзунок змінює частку позитивного класу. Модель перенавчається щоразу; гістограми показують, куди зʼїхали ймовірності.
class_weight='balanced': помилки на рідкому класі
рахують дорожче, і межа повертається до 0.5. Або змінити склад вибірки (undersampling,
SMOTE). Але метрику треба міняти обовʼязково: замість accuracy — precision, recall, F1 або
PR-AUC.11 / ІнтерпретаціяКоефіцієнти й відношення шансів
У лінійній регресії коефіцієнт читався просто: «плюс одиниця ознаки — плюс β до
прогнозу». Тут так не можна, бо β живе на шкалі логіта. Але правило є — просто замість
додавання буде множення. Запишемо шанси для x і x + 1 та
поділимо одні на одні:
Величина x скоротилася. Отже, відношення не залежить від того,
з якої точки ми стартували.
Це і є відношення шансів (odds ratio): збільшення ознаки на одиницю
множить шанси позитивного результату на e^β₁. Якщо β₁ = 0.36, то
e^0.36 ≈ 1.43 — кожна додаткова година підвищує шанси скласти приблизно на
43%. Відʼємний β₁ дає множник менший за одиницю, нульовий — рівно 1.
А ось і пастка: множник на шанси сталий, а зміна імовірності — ні. Той самий коефіцієнт дає велику зміну посередині кривої і майже нульову на хвостах.
Інтерактив 7 · Сталий множник шансів
Угорі — ймовірність на шести кроках ознаки. Унизу — ті самі шанси й множник між сусідніми стовпчиками.
12 / Багато класівSoftmax і one-vs-rest
Досі класів було два. Якщо їх K, є два стандартні шляхи.
One-vs-Rest (OvR)
Навчити K окремих бінарних моделей: перша відрізняє клас 1 від усіх решти,
друга — клас 2 від решти, і так далі. На прогнозі запускають усі K і беруть
клас із найбільшою ймовірністю. Мінус: моделі навчаються незалежно, тому їхні
«ймовірності» не узгоджені й не дають у сумі одиницю.
Softmax (мультиноміальна регресія)
Чесніший варіант: одна модель, яка одразу рахує K логітів і нормує їх:
Експонента робить усі числа додатними, ділення на суму нормує до одиниці. При
K = 2 softmax алгебраїчно зводиться до сигмоїди — це її пряме узагальнення.
Втрата теж узагальнюється, до категорійної крос-ентропії −Σ yₖ ln pₖ. Саме ця
пара стоїть на виході майже будь-якої класифікаційної нейромережі.
13 / РегуляризаціяЧому тут вона обовʼязкова
Тут регуляризація потрібна навіть частіше, ніж у лінійній регресії, і причина
специфічна. Якщо класи лінійно роздільні — існує пряма, що ідеально їх
розділяє, — правдоподібність не має максимуму всередині простору параметрів. Модель може
нескінченно збільшувати β₁, роблячи сигмоїду дедалі крутішою, а log-loss
дедалі ближчою до нуля, ніколи його не досягаючи. Оптимізатор розжене коефіцієнти до
нескінченності або впреться в ліміт ітерацій.
Штраф зупиняє цю втечу, бо робить надто великі ваги невигідними:
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.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.