Статья Автор: Деникина Н.В., Деникин А.В.

Как проверять модель честно

Чем плоха проверка на тех же данных

Допустим, подобранные веса предсказывают время на всех вчерашних заказах с точностью до минуты. Значит ли это, что завтра модель сработает?

Не значит ничего. Вчерашние ответы можно просто запомнить, особенно если параметров у модели много, а заказов мало.

Так работает подготовка к экзамену по решебнику: на знакомых задачах сто процентов, на новой ноль. Только цена ошибки здесь другая: приложение обещает пользователю двадцать минут, а курьер приезжает через пятьдесят.

Чтобы отличить «нашли правило» от «запомнили ответы», часть данных откладывают и модели не показывают вовсе.

Три части выборки

Обобщение — способность модели работать на данных, которых она не видела. Ради него всё и делается: высокая точность на данных, по которым подбирались веса, сама по себе не стоит ничего.

Данные делят на три части:

  • обучающая выборка, train — по ней подбираются веса;
  • проверочная выборка, validation — по ней выбирают, сколько слоёв взять, какой сделать шаг обучения, когда остановиться;
  • тестовая выборка, test — открывается один раз, когда все решения уже приняты.

Зачем нужна отдельная проверочная часть. Если выбирать число слоёв по тестовой выборке, то тест превращается во вторую обучающую: каждый взгляд на него и каждое решение, принятое по его результату, — это подгонка под него. Честной оценки после этого не остаётся ни одной.

Тест открывают один раз.

Как делят

Типичные доли — 70, 15 и 15 процентов. Для 5000 заказов это 3500, 750 и 750.

Перед делением номера заказов перемешивают. Без перемешивания в тест попадут только заказы последнего дня, и модель будет оценена по одной погоде и одному дню недели.

Генератор случайных чисел при этом запускают с явно заданным начальным значением. Иначе каждый запуск даёт другое разбиение, и два своих же эксперимента становится не с чем сравнивать.

Сразу после деления полезно проверить две вещи: что сумма размеров трёх частей равна исходному числу заказов и что пересечения между частями пусты. Обе проверки пишутся в две строки, и писать их стоит заранее, а не когда результат покажется подозрительным.

Утечка данных

Утечка — попадание в подбор весов информации из тестовой выборки. Модель при этом показывает хороший результат на тесте и проваливается в работе, а причину найти трудно, потому что формально всё выглядело правильно.

Самая частая утечка — посчитать среднее и разброс по всем данным, а разделить их потом. Выглядит безобидно, но среднее теперь знает про тестовые заказы.

Проверим на десяти заказах с временем доставки 12, 15, 18, 20, 22, 25, 28, 30, 35 и 40 минут.

Таблица 14. Среднее по всем данным и по обучающей части

по чему считаемсреднее время, минут
по всем десяти заказам24.5
по первым семи (обучающая часть)20

Сравниваем две строки: числа разные, разница четыре с половиной минуты. Значит, нормируя по всем данным, вы сообщаете модели кое-что о заказах, которых она видеть не должна.

Другие частые утечки: не убрать полные дубликаты строк до деления, из-за чего один и тот же заказ оказывается и в обучающей, и в тестовой части; и подбирать настройки по тесту, потому что проверочная часть показалась маленькой.


Модель ошибается на минуту на заказах, по которым подбирались веса, и на двенадцать минут на новых. О чём это говорит?


Реши практическую задачу

Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать