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

Train, val и test

Проверять на том, чему учил, нельзя

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

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

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


Три части

Обобщение - способность модели работать на данных, которых она не видела. Ради него всё и затевается; на обучающих данных высокая точность не стоит ничего.

  • train - на ней модель учится.
  • val - на ней выбирают: сколько слоёв, какой шаг обучения, когда остановиться.
  • test - открывается один раз, когда всё уже решено.

Если подбирать параметры по test, он превращается во второй train, и честной оценки не остаётся ни одной. Каждый взгляд на тест - это чуть-чуть подгонки под него, даже если ты ничего специально не делал.

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



Вывод
3500
750
750
0
5000

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


В датасете 5000 примеров, разбиение 70 / 15 / 15. Сколько примеров попадёт в val?

Утечка

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

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



Вывод
24.5
20.0
False

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

Печать