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

Ключевой факт, на который следует обратить внимание, заключается в том, что недостатки использования среднего значения применяются, когда отсутствующие данные - это MAR (Missing At Random). Прекрасное объяснение того, что такое MAR, MCAR, MNAR, можно найти здесь.

Среднее значение и режим игнорируют корреляции признаков

Давайте посмотрим на очень простой пример, чтобы визуализировать проблему. В следующей таблице представлены 3 переменные: возраст, пол и оценка физической подготовки. Он показывает результаты оценки физической подготовки (0–10), выполненные людьми разного возраста и пола.

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

Вмененные значения на самом деле не имеют смысла - на самом деле они могут отрицательно повлиять на точность при обучении нашей модели машинного обучения. Например, 78-летняя женщина теперь имеет показатель пригодности 5,1, что типично для людей в возрасте от 42 до 60 лет. Среднее вменение не учитывает тот факт, что показатель пригодности коррелирует с возрастом и полом функции. Он вставляет только 5.1, среднее значение показателя пригодности, игнорируя потенциальную корреляцию функций.

Среднее уменьшает разброс данных

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

Как мы видим, дисперсия была уменьшена (это большое изменение связано с очень маленьким набором данных) после использования среднего вменения. Если углубиться в математику, меньшая дисперсия приводит к более узкому доверительному интервалу в распределении вероятностей [3]. Это не приводит ни к чему другому, кроме внесения смещения в нашу модель.

Альтернативные алгоритмы вменения

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

MICE

Согласно [4], это второй по популярности метод вменения сразу после среднего. Первоначально выполняется простое вменение (например, среднее) для замены отсутствующих данных для каждой переменной, и мы также отмечаем их позиции в наборе данных. Затем мы берем каждую функцию и прогнозируем недостающие данные с помощью модели регрессии. Остальные функции используются в качестве зависимых переменных для нашей модели регрессии. Процесс повторяется несколько раз, что приводит к обновлению значений условного исчисления. Общее количество итераций обычно составляет 10, но это зависит от набора данных. Более подробное объяснение алгоритма можно найти здесь [5].

KNN

Этот популярный метод вменения основан на алгоритме K-ближайших соседей. Для данного экземпляра с отсутствующими данными KNN Impute возвращает n наиболее похожих соседей и заменяет отсутствующий элемент средним значением или режимом соседей. Выбор между режимом и средним зависит от того, является ли функция непрерывной или категориальной. Отличная статья для более глубокого понимания находится здесь [6].

MissForest

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

Нечеткая кластеризация K-средних

Это менее известный метод импутации, но он оказывается более точным и быстрым, чем базовые алгоритмы кластеризации согласно [8]. Он вычисляет кластеры экземпляров и заполняет отсутствующие значения, которые зависят от того, к какому кластеру принадлежит экземпляр с отсутствующими данными.

Библиотеки импутации Python

К сожалению, на момент написания ни один из этих методов вменения недоступен в библиотеке Scikit-Learn. В любом случае существует довольно много библиотек Python, доступных для вменения, но у них не так много участников, и документация может быть скудной.

фантазия

Самый популярный пакет Python с прибл. 700 звезд на Github. Их доступные алгоритмы вменения: SimpleFill, KNN, SoftImput, IterativeSVD, MatrixFactorization, NuclearNormMinimiation, Biscaler. Ссылка находится здесь.

вменять

Имея примерно 100 звезд на Github, он может обрабатывать алгоритмы KNN, MICE, Expectation Maximization, Last Observation Carried Forward, Moving Window и WIP.

Missingpy

Хотя это не самый часто используемый пакет для вменения (30 звезд), он реализует вменения MissForest и KNN.

Спасибо, что прочитали статью. Если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать. Вы также можете найти меня в Linkedin или перейти на мой личный сайт.

использованная литература

[1] http://www.stat.columbia.edu/~gelman/arm/missing.pdf

[2] https://blogs.sas.com/content/iml/2017/12/06/problems-mean-imputation.html

[3] https://statistical-programming.com/mean-imputation-for-missing-data/

[4] https://www.omicsonline.org/open-access/a-comparison-of-six-methods-for-missing-data-imputation-2155-6180-1000224.php?aid=54590

[5] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3074241/

[6] https://www.semanticscholar.org/paper/A-Study-of-K-Nearest-Neighbour-as-an-Imputation-Batista-Monard/6db308779954a4006d87ce68148ff2aaa176dfb2

[7] https://academic.oup.com/bioinformatics/article/28/1/112/219101

[8] https://www.semanticscholar.org/paper/Towards-Missing-Data-Imputation%3A-A-Study-of-Fuzzy-Li-Deogun/ede4ae4e86e1f88efda17ed84bbc07a5d692033f