Ти зібрав таблицю оголошень про вживані телефони. У кожному рядку — модель, рік випуску, стан, обсяг пам'яті й ціна, за якою телефон урешті продали. Ціна — це те, що ми хочемо передбачати; решта колонок — те, за чим ми це робимо. Ти навчив модель, розділив дані на навчальну й тестову частини — так, як розібрано в темі Train / Validation / Test — і тепер маєш перед собою два стовпчики чисел: факт і прогноз.
Питання, яке здається простим: наскільки добре спрацювала модель? Відповісти на нього одним числом — і є вся ця тема. Виявиться, що чесних способів кілька, вони дають різні відповіді, і на тому самому наборі прогнозів одна метрика скаже «модель непогана», а інша — «модель провалилась». Обидві не брешуть. Вони міряють різне.
01 / ПостановкаНавіщо взагалі одне число
Почнемо з одного рядка таблиці. Redmi Note 10, 2021 рік, стан добрий, 128 ГБ пам'яті. Продався за 5 200 грн. Модель сказала 5 600 грн. Помилка на цьому оголошенні:
Розберімо позначення, вони будуть скрізь до кінця теми:
yi— факт для i-го оголошення. Справжня ціна, за якою телефон продали.ŷi(«ігрек з дашком») — прогноз моделі для того самого оголошення.ei— помилка, або залишок (residual). Різниця між фактом і прогнозом. Знак має сенс: мінус означає, що модель переоцінила телефон, плюс — що недооцінила.n— скільки всього оголошень у вибірці, на якій ми міряємо.
Помилка одного оголошення — це просте віднімання, тут нічого вигадувати. Уся складність починається далі: помилок n штук, а рішення треба ухвалити одне. Викласти модель у застосунок чи ні. Взяти модель А чи модель Б. Продовжувати навчання чи зупинитись. Тому потрібна метрика — правило, що згортає весь стовпчик помилок в одне число, яке можна порівняти з іншим числом.
02 / Перша спробаЧому не можна просто скласти
Найочевидніша ідея: скласти всі помилки. Візьмімо шість оголошень і подивімось, що з цього вийде.
| оголошення | рік | стан | пам'ять | факт, грн | прогноз, грн | помилка |
|---|---|---|---|---|---|---|
| Redmi Note 10 | 2021 | добрий | 128 ГБ | 5 200 | 5 600 | −400 |
| Samsung A52 | 2021 | добрий | 128 ГБ | 7 300 | 6 700 | +600 |
| Poco X3 | 2020 | задовільний | 64 ГБ | 3 900 | 4 800 | −900 |
| iPhone SE 2020 | 2020 | добрий | 128 ГБ | 8 100 | 8 500 | −400 |
| Realme 8 | 2021 | відмінний | 128 ГБ | 6 100 | 6 200 | −100 |
| iPhone 11 | 2019 | відмінний | 64 ГБ | 12 000 | 10 800 | +1 200 |
Складаємо: −400 + 600 − 900 − 400 − 100 + 1200 = 0. Сума помилок дорівнює нулю. За цією логікою модель ідеальна.
А тепер подивись на кожен рядок окремо. Poco X3 переоцінено на 900 грн — це чверть його ціни. iPhone 11 недооцінено на 1 200 грн. Жоден прогноз не влучив. Модель, яку ми щойно оголосили ідеальною, помиляється на кожному оголошенні без винятку.
Причина в тому, що плюси й мінуси взаємно знищуються. Сума помилок міряє не точність, а перекіс: чи схильна модель систематично завищувати або занижувати. Це теж корисно знати, але це інша величина. Модель, яка половину телефонів оцінює вдвічі дорожче, а другу половину вдвічі дешевше, матиме нульову суму помилок і буде цілковито непридатною.
Покрути повзунок нижче. Він розводить прогнози від фактів усе далі — а сума помилок стоїть як укопана на нулі.
Інтерактив 1 · Сума помилок нічого не міряє
Стовпчики складаються один за одним, як сходи. Останній крок завжди повертає на нуль.
Виходів із цієї пастки рівно два, і обидва прибирають знак. Перший — взяти модуль помилки: −400 і +400 стають однаково поганими по 400. Другий — взяти квадрат: обидва стають 160 000. З цих двох рішень і виростають усі метрики регресії.
03 / МодульMAE: середня абсолютна помилка
MAE (mean absolute error, середня абсолютна помилка) — найпрямолінійніша метрика, яку тільки можна вигадати:
Словами: візьми помилку кожного оголошення, забудь про знак, порахуй середнє.
Символ Σ означає «склади по всіх i від 1 до n»,
вертикальні риски | | — модуль, тобто «відкинь мінус».
Ділення на n перетворює суму на середнє, щоб число не залежало від
того, 6 у нас оголошень чи 6 000.
Порахуймо руками на наших шести телефонах — крок за кроком, без пропусків.
Віднімаємо прогноз від факту. Це той самий стовпчик, що вже є в таблиці вище:
Модуль перетворює «переоцінив» і «недооцінив» на однаково погане:
Тепер нічого не скорочується, бо всі доданки додатні:
Ділимо на кількість оголошень:
Головна перевага MAE — її можна прочитати вголос людині, яка ніколи не чула про машинне навчання: «модель помиляється в середньому на 600 гривень». Число живе в тих самих одиницях, що й ціна. Якщо середня ціна телефона 7 100 грн, то помилка в 600 грн одразу відчувається як «прийнятно, але не блискуче».
Схема · Як народжується MAE
Той самий розрахунок стовпчиком. Довжина смужки — внесок оголошення в суму.
| оголошення | факт | прогноз | помилка | модуль | внесок |
|---|---|---|---|---|---|
| Redmi Note 10 | 5 200 | 5 600 | −400 | 400 | |
| Samsung A52 | 7 300 | 6 700 | +600 | 600 | |
| Poco X3 | 3 900 | 4 800 | −900 | 900 | |
| iPhone SE 2020 | 8 100 | 8 500 | −400 | 400 | |
| Realme 8 | 6 100 | 6 200 | −100 | 100 | |
| iPhone 11 | 12 000 | 10 800 | +1 200 | 1 200 | |
| сума модулів | 3 600 | ||||
| поділити на 6 оголошень | 600 грн |
04 / КвадратMSE і RMSE: сила квадрата
Другий спосіб позбутися знака — піднести помилку до квадрата. Так народжується MSE (mean squared error, середня квадратична помилка):
Формула читається так само, як MAE, тільки замість модуля стоїть друга степінь. На наших шести телефонах:
І тут ми впираємось у проблему: 490 000 чого? Помилка була в гривнях, отже її квадрат — у «гривнях у квадраті». Такої одиниці не існує. Число 490 000 неможливо співвіднести ні з ціною телефона, ні з чим завгодно в реальному світі. Воно годиться лише для порівняння двох моделей між собою.
Ліки прості: витягти корінь і повернутись у гривні. Так виходить RMSE (root mean squared error, корінь із середньої квадратичної помилки):
Тепер число знову читається: «типовий промах моделі — близько 700 гривень». Зверни увагу, що RMSE (700) вийшла більшою за MAE (600) на тих самих даних. Це не випадковість: RMSE ніколи не буває меншою за MAE. Вони збігаються лише в одному випадку — коли всі помилки однакові за модулем. Що більший розкид помилок, то більший розрив.
Тепер про головну властивість квадрата. Помилка 100 грн коштує 10 000. Помилка 1 200 грн коштує 1 440 000 — у 144 рази більше, хоча сама помилка більша всього в 12 разів. Квадрат карає великі промахи непропорційно сильно. У нашій таблиці один iPhone 11 дає 1 440 000 із 2 940 000 — тобто майже половину всієї MSE, хоча це лише одне оголошення з шести.
05 / ПротистоянняMAE проти RMSE
Ось найважливіше протиставлення всієї теми. MAE й RMSE — не «точніша» й «менш точна» версії одного. Вони ставлять різні питання:
- MAE питає: наскільки модель помиляється зазвичай?
- RMSE питає: наскільки страшно модель помиляється іноді?
Щоб побачити різницю не на словах, візьмімо ті самі шість телефонів і дві різні моделі. Перша, назвімо її Обережною, помиляється на кожному оголошенні рівно на 650 грн. Друга, Ризикова, влучає майже точно на п'яти телефонах — промах лише 200 грн, — але на iPhone 11 промахується на 2 000 грн.
Схема · Дві моделі, два протилежні вердикти
Ті самі шість оголошень. Угорі — рівні помилки, унизу — одна велика замість багатьох дрібних.
Розрахунок для Обережної: усі шість помилок по 650, отже MAE = 650 і RMSE = 650 — вони збіглися, бо помилки однакові. Для Ризикової: MAE = (200·5 + 2000) / 6 = 3000 / 6 = 500 грн, а MSE = (40 000·5 + 4 000 000) / 6 = 4 200 000 / 6 = 700 000, звідки RMSE = √700 000 ≈ 836,7 грн.
Яку модель брати — питання не математики, а наслідків. Якщо ти показуєш продавцеві орієнтовну ціну, промах у 2 000 грн на дорогому телефоні — це втрачена довіра й скарга; тоді бери RMSE. Якщо ти оцінюєш тисячі оголошень для внутрішньої аналітики, де важлива сумарна точність, а окремий викид нікого не вб'є, — бери MAE.
06 / ПорівнянняR²: з чим ми взагалі порівнюємо
MAE = 600 грн. Це добре чи погано? Чесна відповідь: невідомо. Якщо ми оцінюємо флагманські айфони за 40 000 грн, 600 грн — блискучий результат. Якщо кнопкові телефони за 800 грн — це катастрофа. Метрика в гривнях нічого не каже, поки ти не знаєш масштабу задачі.
Потрібне число без одиниць, яке саме несе в собі контекст. Ідея така: порівняймо нашу модель із найдурнішою моделлю, яку взагалі можна побудувати — з такою, що завжди називає середню ціну, не дивлячись ні на рік, ні на пам'ять, ні на стан. Для наших шести оголошень середнє дорівнює 42 600 / 6 = 7 100 грн. Ця «модель» каже 7 100 і для Poco X3, і для iPhone 11.
Розшифровуємо обидві суми:
SSres(residual sum of squares) — сума квадратів помилок нашої моделі: Σ(y − ŷ)². Це та сама величина, з якої ми рахували MSE, тільки без ділення на n. У нас вона дорівнює 2 940 000.SStot(total sum of squares) — сума квадратів відхилень від середнього: Σ(y − ȳ)². Це помилка тієї самої дурної моделі. Порахуємо: (5200−7100)² + (7300−7100)² + (3900−7100)² + (8100−7100)² + (6100−7100)² + (12000−7100)² = 3 610 000 + 40 000 + 10 240 000 + 1 000 000 + 1 000 000 + 24 010 000 = 39 900 000.
Читається так: наша модель прибрала 92,6 % тієї мінливості цін, яку не пояснювало просте середнє. Або коротше — «модель пояснює 92,6 % розкиду».
Схема · Геометрія R²
Ліворуч — розкид навколо середнього. Праворуч — розкид навколо прогнозів. Площа квадратів і є сумою.
Шкала R² має три опорні точки, і кожну варто запам'ятати окремо:
- R² = 1 — SSres = 0, модель влучила в кожну ціну до копійки. На реальних даних не буває; якщо побачив одиницю — шукай витік цільової змінної в ознаки.
- R² = 0 — SSres = SStot. Модель рівно така сама, як «завжди називати середнє». Уся робота була марною.
- R² < 0 — SSres більша за SStot. Модель гірша за середнє.
Останній пункт багатьох дивує, тому порахуємо його явно. Уяви модель, яка завжди каже 10 000 грн. Її SSres = (5200−10000)² + (7300−10000)² + (3900−10000)² + (8100−10000)² + (6100−10000)² + (12000−10000)² = 90 360 000. Тоді R² = 1 − 90 360 000 / 39 900 000 = −1,26. Ніякої помилки тут немає: «R квадрат» лише зветься квадратом, від'ємним він буває легко. І трапляється це не в екзотиці, а щоразу, коли модель, навчена на одних даних, застосована до інших — наприклад, ціни за півроку зросли, а модель цього не знає.
07 / ВідсоткиMAPE, SMAPE і де вони брешуть
Є ще одна річ, якої не бачить жодна метрика в гривнях. Промах у 600 грн на телефоні за 12 000 — це 5 %, дрібниця. Той самий промах на телефоні за 1 500 грн — це 40 %, повний провал. MAE вважає ці два випадки однаковими. MAPE (mean absolute percentage error, середня абсолютна відсоткова помилка) — ні:
Тобто: помилку кожного оголошення ділимо на його власну ціну, і аж потім усереднюємо. Порахуймо на наших шести:
| оголошення | модуль помилки | факт | частка |
|---|---|---|---|
| Redmi Note 10 | 400 | 5 200 | 7,69 % |
| Samsung A52 | 600 | 7 300 | 8,22 % |
| Poco X3 | 900 | 3 900 | 23,08 % |
| iPhone SE 2020 | 400 | 8 100 | 4,94 % |
| Realme 8 | 100 | 6 100 | 1,64 % |
| iPhone 11 | 1 200 | 12 000 | 10,00 % |
Порівняй із тим, що казала MAE. За MAE найгіршим був iPhone 11 (1 200 грн). За MAPE — Poco X3 (23 %), хоча його помилка на 300 грн менша. Це не суперечність, а різні питання: скільки гривень ми втратили проти того, наскільки сильно ми промазали відносно ціни товару.
Тепер про те, де MAPE бреше — а бреше вона систематично.
Перше: маленький знаменник. Ділення на ціну означає, що дешеві товари важать непропорційно багато. Помилка в 500 грн на телефоні за 600 грн дає 83 %, і одне таке оголошення здатне перекрити двадцять акуратних прогнозів на дорогих моделях. У задачах, де цільова величина буває близькою до нуля, MAPE стає некерованою.
Друге: нуль ламає її повністю. Якщо в даних є хоч один рядок із
y = 0, MAPE не існує — там ділення на нуль. Не «дорівнює нулю», не
«велика», а не існує.
Третє: вона несиметрична. Це найпідступніше. Нехай справжня ціна 5 000 грн. Якщо модель скаже 0 — помилка 5 000, MAPE = 100 %. Це максимум, гірше при заниженні бути не може. А якщо модель скаже 15 000 — MAPE = 200 %, і зверху немає межі взагалі. Отже, MAPE карає завищення сильніше за заниження, а модель, яку вчать під MAPE, тихо навчається занижувати ціни.
Спроба це полагодити називається SMAPE (symmetric MAPE): помилку ділять не на факт, а на середнє між фактом і прогнозом:
На наших шести оголошеннях SMAPE = 8,94 % — трохи менше за MAPE, бо в знаменнику тепер стоїть середнє між фактом і прогнозом. Ділення на нуль тут стається лише коли і факт, і прогноз дорівнюють нулю, а значення обмежене зверху 200 %. Проте «симетрична» в назві — перебільшення. Візьмімо ту саму ціну 5 000 грн і однакову за модулем помилку в 2 500 грн:
- прогноз 2 500 (заниження): SMAPE = 2500 / 3750 = 66,7 %
- прогноз 7 500 (завищення): SMAPE = 2500 / 6250 = 40,0 %
Тобто SMAPE перекосило в інший бік: вона карає заниження сильніше за завищення.
Проблему не розв'язано, її лише перевернуто. Тому в задачах, де відсотки принципові,
частіше беруть третій шлях — навчають модель на логарифмі ціни, і тоді звичайна
квадратична помилка на log(y) сама собою стає мірою відносного промаху.
08 / ТаблоУсі метрики на одній моделі
Дотепер ми міряли готові прогнози. Тепер подивімось, що буде, якщо метрику використати як ціль — тобто підбирати модель так, щоб конкретне число стало найменшим. Візьмемо ширшу вибірку — 16 оголошень — і найпростішу модель: ціна залежить лише від року випуску, прямою лінією.
Один повзунок керує нахилом прямої, тобто тим, на скільки гривень дорожчає телефон за кожен рік новизни. П'ять метрик перераховуються наживо. Кнопки внизу ставлять повзунок у власний оптимум кожної метрики — і ось тут стає видно, що оптимуми різні.
Інтерактив 2 · Та сама модель під різними метриками
Пряма завжди проходить через центр хмари, тож повзунок керує лише нахилом. Бурштинові відрізки — помилки. Три кнопки ставлять повзунок в оптимум відповідної метрики.
Прожени повзунок від краю до краю й простеж за вердиктом. У широкому діапазоні всі три табори хочуть одного — це нормальна ситуація «модель просто погана». Але у вузькій смузі між оптимумами вони починають тягнути в різні боки: MAPE вимагає крутішого нахилу, бо так зменшуються відносні помилки на дешевих старих телефонах, а квадратичний табір цьому опирається, бо крутіший нахил псує прогноз для дорогих новіших.
09 / ВикидОдне шахрайське оголошення
Тепер найважливіше практичне питання теми. У будь-якому реальному наборі оголошень є сміття: помилки набору, тестові записи, шахрайські оголошення «iPhone за 1 грн, пишіть у месенджер». Що робить один такий рядок із нашими метриками?
Додаймо до шести телефонів сьомий: оголошення з ціною 1 грн, яке модель, дивлячись на характеристики, оцінила у 6 000 грн. Помилка на цьому рядку: 1 − 6 000 = −5 999 грн. Ось що стає з метриками:
| метрика | шість чесних | плюс оголошення за 1 грн | у скільки разів гірше |
|---|---|---|---|
| MAE | 600 грн | 1 371 грн | ×2,3 |
| RMSE | 700 грн | 2 358 грн | ×3,4 |
| R² | 0,926 | 0,532 | −0,394 |
| MAPE | 9,26 % | 85 708 % | ×9 255 |
| SMAPE | 8,94 % | 36,2 % | ×4,1 |
Один рядок із семи. MAE подорожчала більш ніж удвічі — вона просто чесно врахувала ще одну велику помилку. RMSE злетіла втричі — квадрат зробив своє. А MAPE перетворилась на 85 708 %, бо в її формулі стоїть 5 999 / 1 = 599 900 %, і цей єдиний доданок дає 99,99 % усього результату. SMAPE вціліла краще саме тому, що її знаменник — середнє між фактом і прогнозом, а не сам факт.
Порухай повзунок і подивись, як кожна метрика реагує на ціну однієї-єдиної точки. Модель при цьому не змінюється — рухається лише один факт.
Інтерактив 3 · Вплив однієї точки на п'ять метрик
Пряма зафіксована. Повзунок рухає справжню ціну одного оголошення від 0 до 30 000 грн.
Практичний висновок звідси один: перш ніж вибирати метрику, подивись на дані очима. Метрика не знає, що оголошення за 1 грн — сміття. Вона сумлінно порахує його як справжній продаж. Якщо ти не прибрав викиди, ти міряєш не якість моделі, а кількість сміття у вибірці.
10 / ВибірЯк обирати метрику
Універсально найкращої метрики немає — і це не ухиляння від відповіді, а точний опис ситуації. Вибір метрики означає вибір того, яку помилку ти вважаєш дорожчою. Тому починати треба не з формул, а з питання «що болить».
Таблиця рішень · Що болить → яку метрику брати
Читай зліва направо: спершу знайди свій випадок, і аж потім бери формулу.
| що болить | метрика | чому саме вона |
|---|---|---|
| Треба назвати помилку людині простими словами | MAE | у гривнях, читається вголос, кожен промах важить однаково |
| Велика помилка коштує дорого | RMSE | квадрат карає провали непропорційно, тримає модель від катастроф |
| Треба навчати модель | MSE | гладка, має похідну, є замкнена формула розв'язку |
| Незрозуміло, добре це число чи погано | R² | без одиниць, порівнює з «завжди називаю середнє» |
| Важать відсотки, а не гривні | MAPE | ділить на факт — але тільки якщо ціни далекі від нуля |
| MAPE зривається на дешевих товарах | SMAPE | ділить на середнє факту й прогнозу, обмежена 200 % |
| У даних гарантовано є сміття | медіанна | медіана не помічає окремих викидів узагалі |
І ще одна порада, яку легко перевірити на власних даних: подивись на різницю між MAE й RMSE. Якщо RMSE лише трохи більша за MAE, помилки рівномірні й модель поводиться передбачувано. Якщо RMSE у два-три рази більша — у вибірці є жменька катастрофічних промахів, і саме їх треба піти й розглянути поіменно.
11 / ДаліКуди це веде
Усе, про що йшлося, стосується регресії — задачі, де модель називає число. Якщо модель називає не число, а клас («шахрайське оголошення чи ні»), жодна з цих метрик не працює: віднімати «шахрайство» від «не шахрайства» немає сенсу. Там своя система координат — матриця плутанини, precision, recall, F1. Це наступна тема: Precision і Recall.
Другий напрямок — те, що метрика буває не лише мірилом, а й двигуном навчання. Коли ми поставили MSE функцією втрат, з'явилась замкнена формула, яка одразу дає найкращу пряму. Як вона виводиться і чому квадрат тут не випадковий — у темі Лінійна регресія.
Три речі, які варто винести з цієї теми, навіть якщо формули забудуться:
- Метрика — це визначення успіху, а не вимірювальний прилад збоку. Змінивши метрику, ти змінюєш, яку модель вважатимеш кращою.
- Одного числа замало. MAE й R² поруч кажуть більше, ніж будь-яке з них окремо, а гістограма залишків — більше, ніж обидва разом.
- Метрика бачить лише те, що є в даних. Викид, який ти не прибрав, вона порахує як справжнє спостереження — і чесно збреше тобі в обличчя.
practice.ipynb ти напишеш кожну
метрику вручну на NumPy, звіриш свої числа зі sklearn.metrics до останнього
знака, зіпсуєш дані одним викидом і побачиш реакцію кожної метрики, а наприкінці
збудуєш дві моделі, на яких MAE і RMSE дадуть протилежні вердикти.Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.