Машинное обучение: обучение с учителем и метрики качества
Виды обучения, подготовка данных, переобучение и валидация, метрики для классификации и регрессии, порядок работы над учебной моделью.
Машинное обучение строит модель по примерам вместо явно прописанных правил. В учебных работах почти всегда встречается обучение с учителем: есть таблица признаков и известный правильный ответ.
Виды обучения
| Вид | Что дано | Задачи |
|---|---|---|
| С учителем | Признаки и правильные ответы | Классификация, регрессия |
| Без учителя | Только признаки | Кластеризация, снижение размерности, поиск аномалий |
| С подкреплением | Среда и награда за действия | Управление, игры, робототехника |
Порядок работы
- Постановка: что предсказываем и что считать успехом.
- Сбор и очистка данных: пропуски, выбросы, дубликаты.
- Формирование признаков: кодирование категорий, масштабирование, новые производные признаки.
- Разделение выборки: обучающая, валидационная, тестовая (обычно 60/20/20).
- Обучение нескольких моделей от простой к сложной.
- Оценка по метрикам на тестовой выборке, которую модель не видела.
- Интерпретация: какие признаки оказались значимыми.
Метрики классификации
Матрица ошибок:
Предсказано 1 Предсказано 0
Факт 1 TP FN
Факт 0 FP TN
Accuracy = (TP + TN) / (TP + TN + FP + FN)
Precision = TP / (TP + FP) — из предсказанных положительных верны какие
Recall = TP / (TP + FN) — из реальных положительных найдены какие
F1 = 2·P·R / (P + R) — гармоническое среднее
Accuracy обманчива на несбалансированных данных: если больных 1%, модель «все здоровы» даст 99% точности и нулевую пользу. Поэтому в медицине и антифроде смотрят на recall и precision, а не на accuracy.
| Задача | Что важнее | Почему |
|---|---|---|
| Диагностика заболевания | Recall | Пропустить больного опаснее, чем перепроверить здорового |
| Спам-фильтр | Precision | Потерять важное письмо хуже, чем пропустить спам |
| Кредитный скоринг | Баланс, ROC-AUC | Обе ошибки стоят денег |
Метрики регрессии
MAE = (1/n)·Σ|y − ŷ| — средняя абсолютная ошибка, в единицах величины MSE = (1/n)·Σ(y − ŷ)² — сильнее штрафует крупные промахи RMSE = √MSE — в тех же единицах, что и y R² = 1 − Σ(y−ŷ)² / Σ(y−ȳ)² — доля объяснённой дисперсии, до 1
Переобучение и недообучение
| Симптом | Диагноз | Лечение |
|---|---|---|
| Ошибка мала на обучении, велика на тесте | Переобучение | Больше данных, регуляризация, упростить модель, ранняя остановка |
| Ошибка велика везде | Недообучение | Усложнить модель, добавить признаки, обучать дольше |
| Ошибки близки и приемлемы | Норма | Можно фиксировать результат |
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y)
model = RandomForestClassifier(n_estimators=200, max_depth=8, random_state=42)
model.fit(X_train, y_train)
print(confusion_matrix(y_test, model.predict(X_test)))
print(classification_report(y_test, model.predict(X_test)))
print('Кросс-валидация:', cross_val_score(model, X, y, cv=5).mean())
# какие признаки оказались важными — сильный пункт в выводах работы
for name, imp in sorted(zip(X.columns, model.feature_importances_),
key=lambda t: -t[1])[:10]:
print(f'{imp:.3f} {name}')
Параметр stratify сохраняет пропорции классов при разбиении — на несбалансированных данных без него результаты скачут от запуска к запуску.
Частые вопросы
С какой модели начинать?
С самой простой: логистическая регрессия для классификации, линейная для регрессии. Она даёт базовый уровень, с которым сравнивают сложные модели. Если сложная не обходит простую — она не нужна.
Сколько данных нужно?
Ориентир — не менее нескольких десятков наблюдений на каждый признак. Если признаков больше, чем наблюдений, переобучение почти неизбежно.