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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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