Как предотвратить проблемы, которые снижают качество ваших моделей и / или приводят к противоречивым результатам

Вступление

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

Однако сталкивались ли вы когда-нибудь с ситуацией, когда модель хорошо работает во время тестирования, но не может достичь того же уровня производительности во время реального использования? Например, достигла ли ваша модель 99% точности во время тестирования, но как только она будет производиться и работать с реальными данными, она не сможет даже приблизиться к этому уровню производительности?

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

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

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

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

Причины утечки данных

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

Предварительная обработка

Очень распространенная ошибка, которую допускают люди, - это утечка информации на этапе предварительной обработки данных машинного обучения. Важно, чтобы эти преобразования имели сведения только об обучающем наборе, даже если они также применяются к набору тестов. Например, если вы решили, что хотите запустить PCA в качестве шага предварительной обработки, вам следует подогнать свою модель PCA только на обучающем наборе. Затем, чтобы применить его к вашему набору тестов, вы должны вызвать только его метод transform (в случае модели scikit-learn) в наборе тестов. Если вместо этого вы поместите свой препроцессор на весь набор данных, у вас будет утечка информации из набора тестов, поскольку параметры модели предварительной обработки будут соответствовать знаниям набора тестов.

Дубликаты

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

Временные данные (неявная утечка)

Даже если вы явно не используете утечку информации, вы все равно можете столкнуться с утечкой данных, если между вашим тестом и обучающим набором есть зависимости. Типичный пример этого происходит с временными данными, которые представляют собой данные, в которых время является важным фактором, например, данные временных рядов. Рассмотрим следующий игрушечный пример: ваш обучающий набор состоит из двух точек данных A и C, а ваш обучающий набор состоит из одной точки данных, B . Теперь предположим, что временной порядок этих точек данных следующий: ABC. Здесь мы, скорее всего, создали утечку данных просто из-за того, как мы создавали наши обучающие и тестовые наборы. Путем обучения по пункту C и тестирования по пункту B мы создали нереалистичную ситуацию, в которой мы обучаем нашу модель будущим знаниям относительно точки во времени набора тестов. Таким образом, у нас произошла утечка информации, так как в реальном сценарии наша модель явно не будет иметь никаких сведений о будущем. Чтобы решить эту проблему, убедитесь, что разделение тестового поезда также разделено по времени. Итак, все в вашем тренировочном наборе должно происходить раньше всего в вашем тестовом наборе. Это создает гораздо более реалистичную ситуацию обучения и позволяет правильно оценить вашу модель, как если бы она действовала на поступающие реальные данные.