Навчання з учителем: задачі регресії та класифікації
Теоретична лекція
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 у продукті: від даних до прийняття рішень
Етапи:
- Фреймінг задачі. Чітко визначте: регресія чи класифікація, ціль, бізнес-метрика, обмеження.
- Дані та ознаки. Джерела, якість, етичні обмеження; дизайн ознак, що відбиває причинні механізми (менше leakage).
- Розбиття/валідація. Протокол експериментів, k-fold / nested CV.
- Навчання і тюнінг. Порівнюйте кілька моделей; фіксуйте конфігурації/сід; ведіть журнал експериментів.
- Оцінка. Метрики за сценаріями використання (ROC AUC / PR AUC, RMSE/MAE, cost-sensitive).
- Калібрування і пороги. Для класифікаторів — калібруйте ймовірності; підбирайте робочий поріг із урахуванням вартостей FP/FN.
- Моніторинг у проді. Слідкуйте за дріфтом/зсувом; ставте алерти на деградацію якості; плануйте перевчання.
Приклади повного циклу:
- Антифрод: збір транзакцій + ознаки користувача/пристрою → стратифікований спліт → 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» (модуль курсу): огляд типів навчання і базових алгоритмів.

