Навчання з учителем: задачі регресії та класифікації

Теоретична лекція

Лекції
Аналітика даних
Author

Юрій Клебан

Published

20 жовтня 2025 р.

1 Презентація


2 🎯 Про що ця лекція

У лекції розбираємо фундамент навчання з учителем (supervised learning): постановку задач регресії та класифікації, дані й ознаки, метрики якості, крос-валідацію, типові помилки (data leakage), дріфт/зсув даних, а також практичні сценарії застосування в інженерних продуктах. Ключова ідея: ми маємо пари «ознаки → правильна відповідь» і вчимо модель прогнозувати для нових прикладів. Класифікація оперує скінченною множиною класів (бінарно або мультиклас), регресія — неперервними значеннями-мішенями.


3 🧭 Вступ: що таке навчання з учителем

Навчання з учителем — це підхід, у якому ми маємо набір прикладів із відомими мітками (labels) і тренуємо алгоритм, що зіставляє вхідні ознаки зі спрогнозованою міткою. У типових курсах і виробничих пайплайнах ви зустрінете три канонічні родини задач:

  • Регресія — прогноз реального (неперервного) значення, наприклад, вартість будинку, час доставки, очікуваний ARPU.
  • Бінарна класифікація — вибір між двома класами, наприклад, спам/не спам, шахрайство/норма.
  • Мультикласова класифікація — вибір одного класу з декількох, наприклад, тип звернення в сапорті або категорія товару.

Ці категорії стисло подані і в навчальних слайдах курсу (бінарна/мультикласова класифікація, регресія, ансамблювання), а також у вступній презентації до модуля ML. Формальною мовою підручників: у класифікації мітка належить скінченній множині класів; у регресії ціль — дійсне число; багато алгоритмів є модельно-орієнтованими (після навчання зберігаємо лише параметри), але існують і «інстанс-орієнтовані» (kNN), що тримають увесь датасет.

Практика де доречно:

  • Класифікація: фрод-моніторинг платежів, детекція спаму, пріоритизація тікетів.
  • Регресія: прогноз попиту, time-to-delivery, динамічне ціноутворення, ETA для навігації.

4 📈 Регресія: постановка, моделі, метрики, кейси

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

Нехай маємо ознаковий вектор і прогноз \(\hat{y}\). У лінійній моделі \(\hat{y} = \beta_0 + \sum_{j} \beta_j x_j\). Навчання зазвичай зводиться до мінімізації середньоквадратичної помилки

\(\mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2,\)

що інтерпретується як середня квадратична «ціна» похибки. У виробничих завданнях метрики добирають за природою бізнес-втрат: RMSE підсилює великі промахи, MAE стабільніший до викидів; \(R^2\) показує частку поясненої варіації (деталі — див. стандартні підручники з регресії).

Припущення і якісна перевірка:

  • Лінійність відгуку від ознак (інколи достатньо інженерії ознак або поліномів).
  • Незалежність і приблизна стаціонарність шуму.
  • Гомоскедастичність (сталий розкид похибок).
  • Відсутність data leakage (див. розділ 4): не можна «дивитися» у валідейшн/тест під час препроцесінгу.

Коли цього мало: дерева рішень/ансамблі знімають частину обмежень лінійності, вміють моделювати взаємодії та нелінійності «з коробки». У плані курсу регресія з деревами та ансамблями згадується поруч із лінійною/логістичною регресією та нейромережами як базові інструменти supervised-практики.

Де застосувати прямо зараз:

  • Прогноз конверсії у виручку на користувача (LTV) — планування маркетингових бюджетів.
  • Оцінка ризику часу доставки кур’єром — SLA в логістиці.
  • Прогноз навантаження мікросервісів — планування інфраструктурних витрат.

5 🟦 Класифікація: постановка, рішення, оцінювання

У класифікації модель повертає клас або скор (ймовірність), який можна порогувати. Стандартні алгоритми: логістична регресія, дерева/ансамблі (Random Forest, Gradient Boosting), SVM, прості нейромережі. Різниця з регресією — у типі цілі та метриках. Визначення та розрізнення класифікації й регресії подані в стислому вигляді в конспекті Буркова.

Метрики якості (бінарна класифікація):

  • Accuracy — частка правильних рішень (чутлива до дисбалансу).
  • Precision/Recall/F1 — баланс для задач із цінними позитивами (фрод, хвороба).
  • ROC AUC — площа під ROC-кривою, інваріантна до порогу та зручна для порівняння моделей; працює зі скоринговими класифікаторами (логістична, дерева, тощо).
  • Вартісно-чутлива accuracy — коли FP і FN коштують по-різному: задаємо ваги помилок і перераховуємо точність відповідно.

Логістична регресія як робочий кінь: імовірність позитивного класу моделюється через сигмоїду \(\sigma ( z ) = \frac{1}{1 + e^{ -z }}\), де \(z = \beta_0 + \sum_j \beta_j x_j\). Переваги — стійкість, інтерпретованість коефіцієнтів через лог-орієнти (log-odds), простота калібрування. Для мультикласу — one-vs-rest або softmax.

Коли яка метрика: у фроді чи пошуку рідкісних подій — оптимізуйте recall під обмеження на precision; у рекомендаціях — precision@k/ROC AUC; у медичній діагностиці — специфічність/чутливість і крива операційних характеристик (ROC) для вибору робочого порога на етапі розгортання. Детальне введення в ROC — у конспекті Буркова.

Приклади застосувань:

  • Антифрод у фінансах: мінімізуємо очікувані втрати, використовуючи вартісно-чутливі метрики.
  • Контент-модерація: бінарна чи мультикласова класифікація категорій порушення.
  • Розпізнавання тем звернень у сапорті: мультиклас (теми), далі — маршрутизація.

6 🧪 Надійна оцінка: розбиття, крос-валідація, leakage та дріфт

Розбиття даних. Типовий підхід — поділ на train/validation/test зі стратифікацією (у класифікації), відтворюваним random_state і фіксацією протоколу.

Крос-валідація. Коли даних обмаль, k-fold дозволяє краще оцінити узагальнюваність. Поширений варіант — 5-fold (5CV). Обережно: усереднювати RMSE варто правильно (через корінь із середнього квадрата), і пам’ятати про можливу витік інформації в «простих» реалізаціях.
Для налаштування гіперпараметрів без overfitting застосовують nested CV — внутрішня петля для підбору, зовнішня — для чесної оцінки.

Data leakage (критично!). Витік даних буває двох типів: цільовий (інформація про таргет «просочується» в ознаки) та між наборами (train/val/test обробляють «разом» — наприклад, масштабують перед сплітом), що фатально спотворює метрики. Ліки — будувати усі трансформації виключно на train і застосовувати їх до val/test, не «заглядаючи» в майбутнє.

Зсув і дріфт даних.
- Covariate shift \(P ( X )\): розподіл ознак у проді відрізняється від тренувального (наприклад, тренувалися на будинках 70–120 м², а прогнозуємо для 120–170 м²).
- Concept drift \(P ( y \mid X )\): змінюється сама залежність (ціни 1980 року проти сьогодення).
Найпростіша практична стратегія — регулярне перевчання й моніторинг деградації.

Порада з інструментами. У навчальних слайдах демонструється робочий стек на caret (R): розбиття, препроцесінг, тренування та оцінка важливості ознак — корисна відправна точка для лабораторних.


7 🧱 Вибір моделі, узагальнюваність та регуляризація

Бейзлайни і простота. Починайте з простих інтерпретованих моделей: лінійна/логістична регресія (з нормалізацією, регуляризацією), дерева рішень. Вони часто дають 70–90% «стелі» якості за лічені хвилини. Коли даних більше — додавайте ансамблі (Random Forest, Gradient Boosting) і прості нейромережі — їх присутність у навчальних матеріалах курсу недаремна.

Узагальнюваність. Мета не «виграти» на train, а стабільно працювати на нових прикладах. Тому:
- дотримуйтесь чистого розбиття (жорстко ізолюйте test-set),
- використовуйте крос-валідацію для оцінки дисперсії якості,
- ставте експерименти зі зміною seed/сплітів, щоб виявити крихкі моделі.

Регуляризація без формалізму. L1/L2 у регресії, обрізання глибини дерев, мінімальна кількість об’єктів у листі, dropout у нейромережах — це все способи контролю складності моделі та боротьби з перенавчанням (bias–variance trade-off). Пам’ятайте: краща проста модель, яка легко супроводжується в проді, ніж «тендітна» складна.

Вартість помилок. У задачах із асиметричними ризиками використовуйте вартісно-чутливі метрики, налаштовуйте поріг рішення під бізнес-обмеження (наприклад, max FPR ≤ α при максимізації TPR). Див. коротке введення у вартісно-чутливу точність у Буркова.


8 🧰 Пайплайн ML у продукті: від даних до прийняття рішень

Етапи:

  1. Фреймінг задачі. Чітко визначте: регресія чи класифікація, ціль, бізнес-метрика, обмеження.
  2. Дані та ознаки. Джерела, якість, етичні обмеження; дизайн ознак, що відбиває причинні механізми (менше leakage).
  3. Розбиття/валідація. Протокол експериментів, k-fold / nested CV.
  4. Навчання і тюнінг. Порівнюйте кілька моделей; фіксуйте конфігурації/сід; ведіть журнал експериментів.
  5. Оцінка. Метрики за сценаріями використання (ROC AUC / PR AUC, RMSE/MAE, cost-sensitive).
  6. Калібрування і пороги. Для класифікаторів — калібруйте ймовірності; підбирайте робочий поріг із урахуванням вартостей FP/FN.
  7. Моніторинг у проді. Слідкуйте за дріфтом/зсувом; ставте алерти на деградацію якості; плануйте перевчання.

Приклади повного циклу:

  • Антифрод: збір транзакцій + ознаки користувача/пристрою → стратифікований спліт → XGBoost як основа, логістична як бейзлайн → ROC AUC і cost-sensitive точність → поріг під бюджет верифікації → моніторинг дріфту за нічними батчами.
  • ETA доставки: регресія градієнтним бустингом → RMSE/MAE → калібрування розподілу помилки для інтервалів прибуття → регулярне перевчання щотижня через сезонність.

9 🔧 Алгоритми supervised learning: від інтуїції до застосування

9.1 Лінійна регресія 🧮

Ідея. Шукаємо лінійну комбінацію ознак, що найкраще наближує ціль. Мінімізуємо середньоквадратичну помилку \(\mathrm{MSE}\). Сильна як бейзлайн, інтерпретована, швидка.

Де застосовувати:

  • Прогноз вартості/попиту/навантаження.
  • Оцінка впливу факторів (інтерпретація коефіцієнтів).

Приклад (Python, sklearn):

#| eval: false
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("MAE:", mean_absolute_error(y_test, y_pred))

Приклад (R):

#| eval: false
set.seed(42)
idx <- sample(seq_len(nrow(df)), size = 0.8 * nrow(df))
train <- df[idx, ]; test <- df[-idx, ]
fit <- lm(y ~ ., data = train)
pred <- predict(fit, newdata = test)
mae <- mean(abs(test$y - pred))
print(mae)

9.2 Логістична регресія ✅

Ідея. Моделюємо \(\mathbb{P} ( y = 1 \mid x )\) через сигмоїду \(\sigma ( z ) = \frac{1}{1 + e^{ -z }}\). Дає квазі-лінійну роздільну межу, інтерпретована (log-odds), добре калібрується.

Де застосовувати:

  • Антифрод, скринінг ризику, модерація (бінарні рішення).
  • Як бейзлайн перед ансамблями/NN.

Приклад (Python):

#| eval: false
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score

clf = LogisticRegression(max_iter=1000)
clf.fit(X_train, y_train)
proba = clf.predict_proba(X_test)[:, 1]
print("ROC AUC:", roc_auc_score(y_test, proba))

Приклад (R):

#| eval: false
fit <- glm(label ~ ., data = train, family = binomial())
proba <- predict(fit, newdata = test, type = "response")
# install.packages("pROC")
library(pROC)
auc <- auc(test$label, proba)
print(auc)

9.3 Дерева рішень 🌳

Ідея. Ієрархія правил «якщо-то»: у вузлах обираємо ознаку і поріг, що дає найбільший виграш (зменшення ентропії/Gini або дисперсії). Інтерпретовані, моделюють нелінійності та взаємодії «з коробки».

Де застосовувати:

  • Пояснювані рішення в регульованих доменах (кредит, охорона здоров’я).
  • Як компонент ансамблів.

Приклад (Python):

#| eval: false
from sklearn.tree import DecisionTreeClassifier, plot_tree
clf = DecisionTreeClassifier(max_depth=5, random_state=42)
clf.fit(X_train, y_train)

Приклад (R):

#| eval: false
library(rpart)
fit <- rpart(label ~ ., data = train, control = rpart.control(maxdepth = 5))

9.4 Random Forest 🌲🌲

Ідея. Бэггінг багатьох дерев на бутстреп-вибірках + випадкове підмноження ознак у вузлах. Зменшує дисперсію, стабільний, часто сильний із коробки на табличних даних.

Де застосовувати:

  • Табличні задачі: кредитний скоринг, propensity-моделі, контроль якості.
  • Коли потрібна стійкість і адекватні важливості ознак.

Приклад (Python):

#| eval: false
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(n_estimators=300, max_depth=None, n_jobs=-1, random_state=42)
rf.fit(X_train, y_train)
importances = rf.feature_importances_

Приклад (R):

#| eval: false
library(randomForest)
rf <- randomForest(label ~ ., data = train, ntree = 300, mtry = floor(sqrt(ncol(train) - 1)))
importance(rf)

9.5 Градієнтний бустинг ⚡

Ідея. Послідовно навчаємо «слабкі» моделі (дерева), кожна з яких виправляє помилки попередніх, рухаючись у напрямку антиградієнта втрати. Дає SOTA на багатьох табличних наборах.

Де застосовувати:

  • Фінанси, маркетинг, виробництво — коли важлива якість і контроль гіперпараметрів.
  • Коли є нелінійності/взаємодії і середній розмір даних.

Приклад (Python, sklearn):

#| eval: false
from sklearn.ensemble import GradientBoostingClassifier
gb = GradientBoostingClassifier(random_state=42)
gb.fit(X_train, y_train)

Приклад (R, gbm):

#| eval: false
library(gbm)
gb <- gbm(label ~ ., data = train, distribution = "bernoulli",
          n.trees = 300, interaction.depth = 4, shrinkage = 0.05)

Альтернатива: XGBoost/LightGBM/CatBoost (аналогічні ідеї, інша реалізація дерев і регуляризації).


9.6 Нейронні мережі 🧠

Ідея. Компонування лінійних перетворень і нелінійностей; MLP — універсальний апроксиматор. Сильні на великих даних і складних нелінійностях; потребують уваги до регуляризації, нормалізації та підбору архітектури.

Де застосовувати:

  • Тексти/зображення/сенсори (у поєднанні з ембеддінгами).
  • Табличні дані — коли є достатньо прикладів і складні взаємодії.

Приклад (Python, Keras):

#| eval: false
import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation="relu", input_shape=(X_train.shape[1],)),
    tf.keras.layers.Dense(1, activation="sigmoid")
])
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["AUC"])
# model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)

Приклад (R, keras):

#| eval: false
library(keras)

model <- keras_model_sequential() |>
  layer_dense(units = 64, activation = "relu", input_shape = ncol(X_train)) |>
  layer_dense(units = 1, activation = "sigmoid")

model |> compile(optimizer = "adam", loss = "binary_crossentropy", metrics = "AUC")
# model |> fit(as.matrix(X_train), y_train, epochs = 10, batch_size = 32, validation_split = 0.2)

10 🧩 Короткий екскурс у теорію оцінювання (інтуїтивно)

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

Для класифікації важливо пам’ятати: алгоритм часто повертає скор, який інтерпретується як ймовірність класу — саме тому ROC AUC застосовний для широкого класу моделей (логістична, дерева/ансамблі тощо).


11 ✅ Підсумок

  • Регресія — коли ціль неперервна; класифікація — коли обираємо клас.
  • Метрики добираємо під ризики й бізнес-обмеження (ROC AUC, F1, RMSE/MAE, cost-sensitive).
  • Валідація без витоків і моніторинг дріфту — обов’язкова умова довготривалої якості.

12 📚 Література та матеріали

  • Andriy Burkov. The Hundred-Page Machine Learning Book (Draft). Розділи про класифікацію vs регресію, ROC AUC, cost-sensitive accuracy.
  • Carl McBride Ellis. The Orange Book of Machine Learning (2024): крос-валідація, data leakage, зсув/дріфт.
  • Слайди курсу «Навчання з учителем: задачі регресії та класифікації» (Ю. Клебан): огляд алгоритмів, ролі caret, базові визначення.
  • Слайди «Вступ до ML» (модуль курсу): огляд типів навчання і базових алгоритмів.

Лого

Лого

Проєкт реалізується за підтримки Європейського Союзу в межах програми Дім Європи.