Мы все знаем, что такое боль, когда набор данных, который мы хотим использовать для машинного обучения, содержит недостающие данные. Быстрый и простой обходной путь - заменить числовые функции средним и использовать режим для категориальных. Более того, кто-то может просто вставить 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/
[5] https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3074241/
[7] https://academic.oup.com/bioinformatics/article/28/1/112/219101