Наборы данных: разделение исходного набора данных

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

Наборы для обучения, проверки и тестирования

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

Рисунок 8. Горизонтальная полоса, разделенная на две части: ~80% из которых             — обучающий набор и ~20% — тестовый набор.
Рисунок 8. Неоптимальное разделение.

Упражнение: проверьте свою интуицию

Предположим, вы тренируетесь на тренировочном наборе и оцениваете тестовый набор в течение нескольких раундов. В каждом раунде вы используете результаты набора тестов, чтобы указать, как обновлять гиперпараметры и набор функций. Видите ли вы что-нибудь неправильное в этом подходе? Выберите только один ответ.
Этот подход хорош. В конце концов, вы тренируетесь на обучающем наборе и оцениваете на отдельном тестовом наборе.
Выполнение многих раундов этой процедуры может привести к тому, что модель будет неявно соответствовать особенностям тестового набора.
Этот подход вычислительно неэффективен. Не меняйте гиперпараметры или наборы функций после каждого раунда тестирования.

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

  • Набор проверки выполняет первоначальное тестирование модели во время ее обучения.
Рисунок 9. Горизонтальная полоса, разделенная на три части: 70% из которых             — обучающий набор, 15 % — проверочный набор и 15 %             тестовый набор
Рисунок 9. Гораздо лучшее разделение.

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

На следующем рисунке показан этот рабочий процесс. На рисунке «Настройка модели» означает корректировку чего-либо в модели — от изменения скорости обучения до добавления или удаления функций до разработки совершенно новой модели с нуля.

Рисунок 10. Схема рабочего процесса, состоящая из следующих этапов:             1. Обучить модель на обучающем наборе.             2. Оцените модель на проверочном наборе.             3. Настройте модель в соответствии с результатами проверочного набора.             4. Повторите шаги 1, 2 и 3, в конечном итоге выбрав модель, которая подходит                лучший в наборе проверки.             5. Подтвердите результаты на тестовом наборе.
Рисунок 10. Хороший рабочий процесс разработки и тестирования.

Рабочий процесс, показанный на рисунке 10, является оптимальным, но даже при таком рабочем процессе наборы тестов и наборы проверки все равно «изнашиваются» при многократном использовании. То есть, чем больше вы используете одни и те же данные для принятия решений о настройках гиперпараметров или других улучшениях модели, тем меньше уверенности в том, что модель сделает хорошие прогнозы на новых данных. По этой причине рекомендуется собрать больше данных, чтобы «обновить» набор тестов и набор проверки. Начать заново – это отличная перезагрузка.

Упражнение: проверьте свою интуицию

Вы перетасовали все примеры в наборе данных и разделили перетасованные примеры на обучающие, проверочные и тестовые наборы. Однако значение потерь на вашем тестовом наборе настолько ошеломляюще мало, что вы подозреваете ошибку. Что могло пойти не так?
По чистой случайности в наборе тестов оказались примеры, на которых модель показала себя хорошо.
Обучение и тестирование недетерминированы. Иногда случайно ваши потери при тестировании оказываются невероятно низкими. Повторите тест, чтобы подтвердить результат.
Многие примеры в тестовом наборе являются дубликатами примеров в обучающем наборе.

Дополнительные проблемы с наборами тестов

Как показывает предыдущий вопрос, повторяющиеся примеры могут повлиять на оценку модели. После разделения набора данных на обучающий, проверочный и тестовый наборы удалите все примеры в проверочном наборе или тестовом наборе, которые являются дубликатами примеров в обучающем наборе. Единственная честная проверка модели — это проверка новых примеров, а не дубликатов.

Например, рассмотрим модель, которая прогнозирует, является ли электронное письмо спамом, используя в качестве признаков строку темы, тело письма и адрес электронной почты отправителя. Предположим, вы разделите данные на обучающий и тестовый наборы в соотношении 80-20. После обучения модель достигает точности 99% как на обучающем, так и на тестовом наборе. Вероятно, вы ожидаете более низкой точности тестового набора, поэтому вы еще раз посмотрите на данные и обнаружите, что многие примеры в тестовом наборе являются дубликатами примеров в обучающем наборе. Проблема в том, что вы не очистили повторяющиеся записи одного и того же спам-сообщения из входной базы данных перед разделением данных. Вы случайно тренировались на некоторых тестовых данных.

Таким образом, хороший набор тестов или набор проверки соответствует всем следующим критериям:

  • Достаточно большой, чтобы дать статистически значимые результаты тестирования.
  • Представитель набора данных в целом. Другими словами, не выбирайте тестовый набор с характеристиками, отличными от тренировочного.
  • Представитель реальных данных, с которыми модель столкнется в рамках своей бизнес-цели.
  • В обучающем наборе дублируется ноль примеров.

Упражнения: проверьте свое понимание

Учитывая один набор данных с фиксированным количеством примеров, какое из следующих утверждений верно?
Количество примеров в тестовом наборе должно быть больше, чем количество примеров в проверочном или обучающем наборе.
Каждый пример, использованный при тестировании модели, — это на один пример меньше, использованный при обучении модели.
Количество примеров в тестовом наборе должно быть больше, чем количество примеров в проверочном наборе.
Предположим, что ваш набор тестов содержит достаточно примеров для выполнения статистически значимого теста. Более того, тестирование на тестовом наборе дает низкие потери. Однако в реальной жизни модель показала себя плохо. Что вам следует делать?
Определите, чем исходный набор данных отличается от реальных данных.
Повторите тестирование на том же наборе тестов. Результаты испытаний могли оказаться аномалией.
Сколько примеров должен содержать тестовый набор?
Не менее 15 % исходного набора данных.
Достаточно примеров, чтобы получить статистически значимый тест.