Вы скачали датасет на 50 000 строк, залили его в Pandas, обучили Random Forest и получили accuracy 0.92 на тесте. Через неделю модель в проде выдаёт 0.65. Знакомо? Причина не в модели, а в данных: пропуски, выбросы, утечка целевой переменной и неправильная валидация. В этой статье разберём, почему объём выборки в машинном обучении — не главное, и как очистка данных, кросс-валидация и контроль переобучения меняют результат.
Почему «больше данных» — не всегда лучше
В Data Science есть устойчивый миф: чем больше данных, тем точнее модель. На практике всё наоборот. Если в данных есть шум, пропуски и выбросы, увеличение объёма лишь усиливает ошибку. Модель запоминает мусор и переобучается.
Представьте: вы анализируете отток клиентов банка. У вас 100 000 записей, но в 30% случаев пропущен возраст, а в 5% — доход указан в тысячах вместо рублей. Если просто удалить пропуски, останется 70 000 строк, но среди них — выбросы, которые сдвинут среднее. Модель обучится на искажённых данных и будет ошибаться на новых клиентах.
Ключевая мысль: качество данных важнее их количества. 500 чистых, хорошо подготовленных строк часто дают лучшую модель, чем 50 000 грязных.
df.info(), df.describe() и df.duplicated().sum() в Pandas.
Разбор реальной задачи: прогноз оттока клиентов
Рассмотрим типичный кейс: телеком-компания хочет предсказать, уйдёт ли клиент. Есть исторические данные за год: 10 000 строк, 20 признаков (возраст, тариф, количество звонков, жалобы и т.д.). Целевая переменная — ушёл клиент (1) или остался (0).
Шаг 1. Очистка данных
Сначала проверяем пропуски. В колонке «средний чек» 15% пропусков. Если просто удалить эти строки, потеряем 1500 записей. Лучше заполнить пропуски медианой или предсказать моделью. Но есть нюанс: пропуски могут быть не случайны. Например, клиенты с высоким чеком чаще не указывают доход. Тогда заполнение медианой исказит картину.
Очистка данных — это не только удаление пропусков. Это анализ причин их появления. Если пропуск связан с целевой переменной, его нельзя игнорировать.
Выбросы: в признаке «количество звонков» есть значения 10 000 при среднем 200. Это явные ошибки ввода. Их нужно либо удалить, либо заменить на 99-й перцентиль. Оставлять нельзя — модель может придать им избыточный вес.
Шаг 2. Устранение утечки данных (target leakage)
Одна из самых коварных ошибок. В датасет попал признак «количество обращений в поддержку за последний месяц». Казалось бы, полезно. Но если клиент уже ушёл, он не звонит. Признак косвенно содержит информацию о целевой переменной. Модель покажет отличные метрики на тесте, но в реальности будет бесполезна, потому что для новых клиентов мы не знаем, уйдут они или нет, а значит, не знаем и число обращений после ухода.
Как обнаружить утечку: проверьте, не коррелирует ли какой-то признак с целевой переменной слишком сильно (корреляция > 0.9). Или подумайте, доступен ли признак в момент прогноза. Если нет — удаляйте.
Шаг 3. Кросс-валидация вместо одного train/test split
Многие делят данные на обучающую и тестовую выборки в пропорции 80/20 и успокаиваются. Но при малом объёме данных (например, 1000 строк) такая оценка нестабильна: тестовая выборка может случайно оказаться лёгкой или сложной.
Кросс-валидация решает эту проблему: данные делятся на k блоков (обычно 5 или 10), модель обучается k раз, каждый раз одна часть служит тестом. Итоговая метрика — среднее по всем фолдам. Это даёт более надёжную оценку и помогает заметить переобучение.
Пример: при 5-фолдовой кросс-валидации accuracy может быть 0.85, 0.87, 0.84, 0.86, 0.88. Среднее — 0.86, разброс небольшой. Если же разброс большой (0.7–0.95), значит, модель нестабильна и данные неоднородны.
cross_val_score из scikit-learn. Для классификации применяйте StratifiedKFold, чтобы сохранить баланс классов в каждом фолде.
Шаг 4. Контроль переобучения
Переобучение — это когда модель показывает отличные результаты на обучающей выборке, но плохие на новых данных. Причины: слишком сложная модель, мало данных, много шума.
Как бороться:
- Регуляризация (L1, L2) для линейных моделей.
- Ограничение глубины деревьев и минимального числа объектов в листе.
- Ранняя остановка (early stopping) для градиентного бустинга.
- Кривые обучения (learning curves): постройте график зависимости метрики от объёма обучающей выборки. Если кривая выходит на плато, добавление данных не поможет — нужно менять модель или признаки.
Шаг 5. Feature engineering
Создание новых признаков может дать больше, чем увеличение датасета. Например, из даты подключения можно извлечь стаж клиента, из суммы пополнений — средний чек в месяц. Хорошо продуманные признаки повышают точность даже на небольших данных.
Неочевидный вывод: иногда удаление одного-двух признаков улучшает модель. Если признак шумный или сильно коррелирует с другим, он только мешает.
Сколько данных реально нужно?
Ответ зависит от задачи и сложности модели. Для простой линейной регрессии может хватить 100–200 строк на каждый признак. Для глубокого обучения нужны тысячи. Но ключевой фактор — не количество, а репрезентативность и чистота.
Проверьте дисбаланс классов. Если в задаче оттока 95% клиентов остались и 5% ушли, модель может просто предсказывать «остался» и иметь accuracy 0.95, но не находить уходящих. В таких случаях используют метрики precision, recall, F1 и методы балансировки (oversampling, undersampling, SMOTE).
Правило: сначала очистите данные, устраните утечки, настройте кросс-валидацию. И только потом думайте о расширении выборки.
Режимы отказа: где ломается механизм
Даже опытные специалисты допускают ошибки. Вот три типичных сценария, когда модель ведёт себя непредсказуемо.
1. Утечка целевой переменной
Что идёт не так: модель показывает accuracy 0.99 на кросс-валидации, но в проде — 0.6. Причина: в признаки попал столбец, который является следствием целевой переменной. Например, «дата закрытия договора» для задачи предсказания оттока.
Как заметить заранее: проверьте корреляцию каждого признака с целевой переменной. Если она близка к 1 или -1, это подозрительно. Также полезно обучить модель только на одном подозрительном признаке — если метрика высокая, признак содержит утечку.
Что делать: удалить такой признак или заменить его на исторические данные, доступные на момент прогноза.
2. Переобучение на шуме
Что идёт не так: модель с 1000 деревьями идеально запоминает обучающую выборку (accuracy 1.0), но на тесте — 0.7. Это классическое переобучение.
Как заметить заранее: стройте кривые обучения и валидации. Если тренировочная метрика растёт, а валидационная падает — модель переобучается.
Что делать: упростить модель, добавить регуляризацию, увеличить объём данных (если возможно) или уменьшить число признаков.
3. Смещение выборки
Что идёт не так: модель обучалась на данных за прошлый год, а в новом году изменились тарифы. Признаки распределены иначе, и модель ошибается.
Как заметить заранее: сравните распределения признаков в обучающей и тестовой выборках (например, с помощью теста Колмогорова-Смирнова). Если они различаются, модель может работать некорректно.
Что делать: обновить обучающую выборку, использовать адаптацию домена или переобучить модель на новых данных.
Пути освоения Data Science: самостоятельный vs структурированный
Если вы хотите разобраться в теме, есть несколько путей.
Самостоятельно: бесплатные курсы, документация, Kaggle. Плюс — дёшево, минус — нет обратной связи, легко упустить важные детали (например, утечку данных). Время — от 6 месяцев до бесконечности.
Курсы с ментором: структурированная программа, проверка домашних заданий, разбор ошибок. Стоит денег, но экономит время и нервы. Например, Data Science с нуля включает практические проекты и обратную связь по вашему коду.
Практика на реальных задачах: самый эффективный способ, но требует базовых знаний. Можно начать с Kaggle-соревнований.
Trade-off: самостоятельное обучение дешевле, но выше риск застрять на ошибках, которые никто не исправит. Курсы дают структуру и фидбек, но стоят денег и времени.
Кому подходит Data Science, а кому нет
Data Science — не для всех. Если вы не любите анализировать данные, искать закономерности и постоянно учиться, будет тяжело. Также не стоит идти в DS, если вы ожидаете быстрых результатов без усилий.
Но если вам нравится копаться в цифрах, вы готовы мириться с неопределённостью и хотите влиять на решения бизнеса — это ваш путь.
Неочевидный вывод: часто в DS приходят не математики, а люди с опытом в предметной области (финансы, медицина, маркетинг). Они лучше понимают данные и могут заметить утечку или смещение раньше, чем чистый программист.
Чек-лист перед обучением модели
- Проверьте пропуски и выбросы. Заполните или удалите осознанно.
- Убедитесь, что нет утечки целевой переменной. Признаки должны быть доступны в момент прогноза.
- Используйте кросс-валидацию, а не один train/test split.
- Проверьте дисбаланс классов. Выберите правильные метрики.
- Постройте кривые обучения для контроля переобучения.
- Занимайтесь feature engineering: создавайте осмысленные признаки.
Если вы хотите системно пройти этот путь и получить обратную связь по каждому шагу, обратите внимание на курс Data Science с нуля. Там разбираются реальные проекты — от очистки данных до построения воспроизводимых pipeline.