Вы должны разбить данные как можно раньше.
Проще говоря, ваш конвейер проектирования данных тоже строит модели .
Рассмотрим простую идею заполнения в пропущенных значениях. Для этого вам нужно «обучить» мини-модель генерировать среднее значение, режим или другое среднее значение для использования. Затем вы используете эту модель для «прогнозирования» пропущенных значений.
Если вы включите тестовые данные в учебный процесс для этих мини-моделей, то вы позволите учебному процессу взглянуть на эти данные и немного обмануть из-за этого. Когда он заполняет отсутствующие данные значениями, построенными с использованием тестовых данных, он оставляет мало подсказок о том, на что похож тестовый набор. Вот что означает «утечка данных» на практике. В идеальном мире вы могли бы игнорировать это, и вместо этого просто использовать все данные для обучения, используйте счет обучения, чтобы решить, какая модель лучше.
Но это не сработает, потому что на практике модель полезна только один раз. он может предсказать любые новые данные, а не только данные, доступные во время обучения. Google Translate должен работать над тем, что вы и я набираем сегодня , а не только над тем, с чем его обучали ранее.
Итак, чтобы гарантировать, что модель продолжит работать хорошо, когда это происходит, вы должны проверить его на некоторых новых данных более контролируемым образом. Использование набора тестов, который был разделен как можно раньше, а затем скрыт, является стандартным способом сделать это.
Да, это означает некоторые неудобства, чтобы разделить разработку данных для обучения по сравнению с тестированием. Но многие инструменты, такие как scikit , которые разделяют этапы fit
и transform
, делают его удобным для создания сквозного конвейера проектирования и моделирования данных с правильным разделением поезд / тест.