Хроники качества данных

Демистификация недостающих данных: абсолютный учебник для специалистов по обработке и анализу данных

Отсутствующие данные, недостающие механизмы и недостающее профилирование данных

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

Одним из них, что неудивительно, были «Отсутствующие данные».

Я изучаю эту тему уже много лет (Я знаю, правда?!), но в некоторых проектах, в которых я участвую в Data-Centric Community, я понял, что многие специалисты по данным до сих пор не знают Я не полностью осознал всю сложность проблемы, что вдохновило меня на создание этого подробного руководства.

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

Проблема отсутствия данных

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

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

Давайте рассмотрим пример. Предположим, мы проводим исследование на группе пациентов, например, по поводу диабета.

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

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

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

С другой стороны, данные могут отсутствовать и по причинам, никак не связанным с исследованием.

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

Независимо от причины отсутствия данных, перед построением модели важно выяснить, содержат ли наборы данных недостающие данные, поскольку эта проблема может иметь серьезные последствия для классификаторов:

  • Некоторые классификаторы не могут обрабатывать пропущенные значения внутри себя: Это делает их неприменимыми при обработке наборов данных с отсутствующими данными. В некоторых сценариях эти значения кодируются заранее определенным значением, например, «0», чтобы алгоритмы машинного обучения могли с ними справиться, хотя это не лучшая практика, особенно для более высокого процента пропущенных данных (или более сложные недостающие механизмы);
  • Прогнозы, основанные на отсутствующих данных, могут быть предвзятыми и ненадежными. Хотя некоторые классификаторы могут обрабатывать недостающие данные самостоятельно, их прогнозы могут быть скомпрометированы, поскольку важная часть информации может отсутствовать в обучающих данных.

Более того, хотя пропущенные значения могут «выглядеть одинаково», правда в том, что их основные механизмы (по этой причине они отсутствуют) могут следовать трем основным шаблонам: Отсутствие полностью случайным образом (MCAR). ), Пропало случайно (MAR) и Пропало не случайно (MNAR).

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

Давайте быстро рассмотрим каждый механизм!

Отсутствующие механизмы передачи данных

Если вы разбираетесь в математике, я бы посоветовал просмотреть эту статью (cof cof), а именно разделы II и III, в которых содержатся все обозначения и математические формулировки, которые могут вам понадобиться. (На самом деле меня вдохновила эта книга, которая также является очень интересным учебником, см. разделы 2.2.3. и 2.2.4.).

Если вы, как и я, хорошо обучаетесь визуальному изображению, вам бы хотелось «увидеть» это, верно?

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

Следует иметь в виду следующее:механизмы отсутствия определяют, можно ли объяснить закономерность отсутствия наблюдаемыми данными и/или недостающими данными и каким образом. Я знаю, что это сложно. Но на примере станет понятнее!

В нашем исследовании табакокурения мы уделяем особое внимание употреблению табака подростками. Имеется 20 наблюдений по отношению к 20 участникам, и признак Age наблюдается полностью, тогда как Number of Cigarettes (выкуривание в день) будет отсутствовать по разным механизмам.

Промахнулся совершенно случайно (MCAR): Никакого вреда, никакого нарушения!

В механизме «Полное отсутствие случайных данных» (MCAR) процесс отсутствия совершенно не связан ни с наблюдаемыми, ни с отсутствующими данными. Это означает, что вероятность того, что у объекта пропущены значения,полностью случайна.

В нашем примере я просто случайно удалил некоторые значения. Обратите внимание, что пропущенные значения не находятся в определенном диапазоне значений Age или Number of Cigaretters. Таким образом, этот механизм может возникнуть из-за неожиданных событий, произошедших во время исследования: скажем, человек, ответственный за регистрацию ответов участников, случайно пропустил вопрос опроса.

Пропал случайно (МАРТ): Ищите контрольные знаки!

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

Рассмотрим следующий пример, где я удалил значения Number of Cigarettes только для более молодых участников (от 15 до 16 лет). Обратите внимание, что, несмотря на то, что процесс пропуска явно связан с наблюдаемыми значениями в Age, он совершенно не связан с количеством сигарет, выкуренных этими подростками, если бы об этом сообщалось (обратите внимание на столбец «Завершено», где среди отсутствующих значений было бы обнаружено малое и большое количество сигарет, если бы они были соблюдены).

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

Пропало не случайно (MNAR): Этот момент ах-ха!

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

Взгляните на следующий пример: значения отсутствуют для более высоких сумм Number of Cigarettes, что означает, что вероятность отсутствия значений в Number of Cigarettes связана с самими отсутствующими значениями, если бы они были обнаружены (обратите внимание на столбец «Завершено»).

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

Влияние отсутствия механизмов обработки данных

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

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

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

Кроме того, что касается идентифицируемости, проблема не становится проще.

Хотя существуют некоторые тесты, позволяющие отличить MCAR от MAR, они не пользуются широкой популярностью и содержат ограничительные допущения, которые неприменимы к сложным наборам реальных данных. Также невозможно отличить MNAR от MAR, поскольку необходимая информация отсутствует.

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

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

В общем, это непростая работа.

Идентификация и маркировка недостающих данных

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

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

Для этой цели мы будем использовать набор данных Диабет индейцев Пима, доступный на Kaggle (Лицензия — CC0: Public Domain). Если вы хотите следовать инструкциям, не стесняйтесь загрузить блокнот из репозитория GitHub сообщества Data-Centric AI.

Чтобы быстро профилировать ваши данные, мы также будем использовать ydata-profiling, который даст нам полный обзор нашего набора данных всего за несколько строк кода. Давайте начнем с установки:

Теперь мы можем загрузить данные и создать быстрый профиль:

Глядя на данные, мы можем определить, что этот набор данных состоит из 768 записей/строк/наблюдений (768 пациентов) и 9 атрибутов или функций. Фактически, Outcome — это целевой класс (1/0), поэтому у нас есть 8 предикторов (8 числовых признаков и 1 категориальный).

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

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

Просматривая все функции, мы можем определить, что беременность кажется нормальной (нулевая беременность является разумной), но для остальных функций нулевые значения являются подозрительными:

В большинстве реальных наборов данных недостающие данные кодируются контрольными значениями:

  • Записи вне диапазона, например 999;
  • Отрицательные числа, когда признак имеет только положительные значения, например. -1;
  • Нулевые значения в признаке, который никогда не может быть равен 0.

В нашем случае Glucose, BloodPressure, SkinThickness, Insulin и BMI имеют недостающие данные. Давайте посчитаем количество нулей, которые имеют эти признаки:

Мы видим, что Glucose, BloodPressure и BMI имеют всего несколько нулевых значений, тогда как SkinThickness и Insulin имеют гораздо больше, охватывая почти половину существующих наблюдений. Это означает, что мы можем рассмотреть разные стратегии для обработки этих функций: например, некоторые могут потребовать более сложных методов вменения, чем другие.

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

Это стандартный способ обработки недостающих данных в Python и соглашение, которому следуют популярные пакеты, такие как pandas и scikit-learn. Эти значения игнорируются при некоторых вычислениях, таких как sum или count, и распознаются некоторыми функциями для выполнения других операций (например, удаления пропущенных значений, их вменения, замены фиксированным значением и т. д.).

Мы отметим пропущенные значения с помощью функции replace(), а затем вызовем isnan(), чтобы проверить, правильно ли они закодированы:

Количество значений NaN такое же, как и значений 0, а это означает, что мы правильно отметили недостающие значения! Затем мы могли бы снова использовать отчет о профиле, чтобы убедиться, что теперь недостающие данные распознаны. Вот как выглядят наши «новые» данные:

Мы можем дополнительно проверить некоторые характеристики процесса отсутствия, просматривая раздел «Отсутствующие значения» отчета:

Помимо графика «Количество», который дает нам обзор всех пропущенных значений для каждого объекта, мы можем изучить «Матрицу» и «Тепловую карту». ” более подробно описывает гипотезы об основных недостающих механизмах, из-за которых могут пострадать данные. В частности, корреляция между отсутствующими функциями может быть информативной. В этом случае, по-видимому, существует значительная корреляция между Insulin и SkinThicknes: у некоторых пациентов оба значения одновременно отсутствуют. Является ли это совпадением (маловероятно), или процесс отсутствия может быть объяснен известными факторами, а именно изображение механизмов MAR или MNAR было бы для нас чем-то, во что мы могли бы погрузиться!

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

Если вы попытаетесь запустить этот код, он сразу же выдаст ошибку:

Самый простой способ исправить это (и самый наивный!) — удалить все записи, содержащие пропущенные значения. Мы можем сделать это, создав новый фрейм данных с помощью строки, содержащие пропущенные значения, удалены с помощью функции dropna()

… и пробую еще раз:

И вот оно! Благодаря удалению пропущенных значений алгоритм LDA теперь может работать нормально.

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

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

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

Последние мысли

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

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

В следующих статьях я подробно рассмотрю каждый недостающий механизм, уделив особое внимание генерации, импутации и визуализации стратегий для каждого из них, поэтому следите за новыми публикациями в блоге и не забудьте отметить Репозиторий Data-Centric AI Repository, чтобы никогда не пропустить обновление кода!

Как всегда, отзывы, вопросы и предложения приветствуются! Вы можете оставить мне комментарий, внести свой вклад в репозиторий и даже найти меня в Сообществе Data-Centric AI, чтобы обсудить другие темы, связанные с данными. Увидимся там?

Обо мне

Доктор философии, исследователь машинного обучения, педагог, защитник данных и в целом «мастер на все руки». Здесь, на Medium, я пишу о Data-ориентированном искусственном интеллекте и качестве данных, обучая сообщества специалистов по науке о данных и машинному обучению тому, как перейти от несовершенных данных к интеллектуальным.

Отношения с разработчиками @ YData | Сообщество дата-центричного искусственного интеллекта | ГитХаб | Инстаграм | Google Академика | Линкедин