Взгляд статистиков на то, как (не делать) это, чтобы ваш рабочий процесс машинного обучения оставался безупречным.

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

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

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



А вот еще один: обработка недостающих данных. Внимание: пожалуйста, не подразумевайте и не опускайте неполные наблюдения!

Не удаляйте неполные строки

Поскольку большинство алгоритмов машинного обучения не принимают входные данные NaN, во многих текстах предлагается просто удалить из данных строки, содержащие пропущенные значения. Так сказать, пока у вас много данных. Если это так, удаление пары строк решит проблему и не окажет большого влияния, верно? Неправильный! Смею сказать, что это неправда вдвойне.

Во-первых, безобидная причина. Строки, которые не являются полностью заполненными, также обычно не являются полностью NaN. Их удаление - это ярлык, позволяющий избавиться от плохих NaN, но попутно также удаляются некоторые очень действительные точки данных. С какой стати специалисту по данным выбрасывать полезные данные?

Во-вторых, злокачественная причина. Это связано с так называемыми механизмами отсутствия данных . В статистической теории они являются возможными причинами отсутствия данных. Их три: данные могут отсутствовать полностью случайным образом (MCAR), отсутствовать случайным образом (MAR) и отсутствовать не случайно (MNAR). Если вам интересно узнать о последствиях наличия каждого из них в данных и о том, как их различать, взгляните на курс обработки недостающих данных, который я преподаю на DataCamp. Здесь важно то, что можно удалить неполные строки, только если данные являются MCAR, а это означает, что нет абсолютно ничего, что могло бы повлиять на то, какие точки данных отсутствуют. Если данные не являются MCAR (что происходит, среди прочего, когда отсутствие в переменной можно предсказать с помощью других переменных), удаление неполных строк приводит к смещению данных, которые будут перенесены в любую модель машинного обучения, построенную на этих данных.

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

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

Не значит-вменять

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

Посредством вменения среднего мы создаем две проблемы: мы уменьшаем дисперсию вмененных переменных и разрушаем корреляции между такими переменными и остальными данными.

Рассмотрим диаграмму разброса ниже. Он показывает рост людей в сантиметрах и их вес в килограммах на основе данных обследования состояния здоровья. Две переменные явно положительно коррелированы, но в обеих есть некоторые недостающие значения. Приписываем все недостающие высоты среднему росту (166 см), а все недостающие веса - среднему весу (67 кг). Вмененные точки данных показаны оранжевым цветом.

Что здесь произошло? Вмененные значения часто являются выбросами. Любая модель машинного обучения, обученная на этих данных, будет ими обманута и даст предвзятые результаты. Машинное обучение - это поиск закономерностей в данных. Среднее вменение часто связано с введением в данные искусственных, ложных паттернов. Как они должны идти рука об руку?

Машинное обучение - это поиск закономерностей в данных. Среднее вменение часто связано с введением в данные искусственных, ложных паттернов. Они не идут рука об руку.

Что делать вместо этого? Это зависит от того, сколько у вас времени и вычислительных ресурсов.

Что делать вместо этого, когда у вас есть время

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

Сначала мы создаем много (скажем, тысячу) копий данных путем выборки из их строк с заменой. Это называется начальной загрузкой. Затем мы применяем алгоритм вменения к каждой копии. Обычно используемые алгоритмы импутации - это kNN, случайный лес или импутация на основе итеративной модели. Таким образом, у нас есть тысячи копий различных полностью полных наборов данных. Затем мы делаем все, что хотели, с исходными данными с каждой из копий: обучаем модель, вычисляем некоторую сводную статистику и т. Д. Наконец, каким бы ни был наш окончательный результат (прогноз модели, описательная статистика?), Мы усредняем значения по всем бутстрапированным и вмененным наборам данных, чтобы получить распределение результатов.

Это может показаться немного сложным, но на самом деле это довольно легко реализовать, и как в Python, так и в R есть пакеты, которые могут это сделать. Загляните в мой курс, чтобы узнать, как это сделать самому.

Среди многих преимуществ множественного вменения, наиболее важным является то, что вы получаете вероятностное распределение результатов, которое позволяет количественно оценить неопределенность вашей модели или анализа, включая неопределенность от вменения (что, в конце концов, является просто обоснованным предположением. и предположения приходят с неопределенностью). Я написал об этом подробнее здесь:



Недостатком множественного вменения является то, что он может быть очень медленным. Что делать, если у вас мало времени?

Что делать, если у вас нет времени

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

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

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

Если вам понравился этот пост, почему бы вам не подписаться на обновления по электронной почте на мои новые статьи? И, став участником Medium, вы можете поддержать мое письмо и получить неограниченный доступ ко всем рассказам других авторов и меня.

Нужна консультация? Вы можете спросить меня о чем угодно или заказать меня со счетом 1: 1 здесь.

Вы также можете попробовать одну из других моих статей. Не можете выбрать? Выберите один из них: