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

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

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

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

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

Вы можете найти полную записную книжку на моем GitHub здесь.

Вступление

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

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

В этой статье мы рассмотрим 3 различных метода вменения со ссылкой на набор данных Kaggle Titanic:

  1. Простой импутер
  2. Итерационный импьютер
  3. КНН Импутер

Подготовка данных

Для целей этого руководства я удалил столбцы PassengerId, Name, Ticket и Cabin из исходного набора данных.

После удаления этих 4 столбцов у нас остается следующий фрейм данных.

Недостающие данные

Поскольку есть только 2 строки с отсутствующими значениями Embarked, я решил удалить их из набора данных, оставив 177 строк с отсутствующими значениями в столбце Age.

Изучите функцию "Возраст"

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

Мы можем заметить, что стоимость проезда слегка положительно коррелирует с возрастом. Другими словами, пассажиры постарше платили за билет дороже.

А как насчет распределения пассажиров по возрасту?

Вменение отсутствующих значений

Теперь о главной цели этой статьи. В этом разделе мы рассмотрим 3 различных метода вменения с использованием библиотеки Scikit-learn в Python.

  1. Простой импьютер
  2. Итерационный импьютер
  3. KNN imputer

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

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

Простой импьютер

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

Некоторые из наиболее распространенных применений простого импутера включают:

  • Иметь в виду
  • Медиана
  • Наиболее частый (режим)

Здесь наш простой импьютер заполнил отсутствующее значение в столбце Возраст средним возрастом первых 5 строк, который равен 31,2.

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

Здесь на помощь приходит многомерное вменение, когда мы принимаем во внимание несколько функций в наборе данных во время вменения.

Итерационный импьютер

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

В нашем примере фрейма данных столбец «Возраст» имеет одно пропущенное значение в строке 6 и поэтому назначен в качестве целевой переменной в этом сценарии. Это оставляет столбцы SibSp и Fare в качестве наших переменных-предикторов.

Итеративный импьютер будет использовать первые 5 строк кадра данных для обучения прогнозной модели. Когда модель будет готова, она будет использовать значения в столбцах SibSp и Fare в строке 6 в качестве входных данных и прогнозировать значение Age для этой строки.

Вот как выглядит результат нашего итеративного импьютера.

KNN imputer

KNN - это сокращение от k-ближайших соседей, которое представляет собой алгоритм машинного обучения и еще один метод многомерного вменения. KNN imputer просматривает набор данных на предмет k ближайших строк к строке с пропущенными значениями. Затем он приступает к заполнению этих недостающих значений средним значением этих ближайших строк.

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

В результате импортер KNN решил, что строка 3 и строка 5 являются ближайшими к строке 6. Следовательно, средний возраст между этими двумя строками составляет (26 + 35) / 2 = 30,5.

Точность модели при использовании простого итеративного импутера

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

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

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

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

Наконец, мы выполним 10-кратную перекрестную проверку, чтобы сравнить результаты прогнозов при одномерном вменении с многомерным вменением.

Одномерное вменение (простое вменение)

Многомерное вменение (итеративный импьютер)

Средний балл перекрестной проверки выше при многомерном вменении, чем при одномерном вменении.

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

Заключение

Подводя итог, в этой статье мы обсудили различия между одномерным вменением и многомерным вменением. Кроме того, мы рассмотрели 3 различных метода вменения в Scikit-learn, которые включают простой импьютер, итеративный импьютер и импьютер KNN.

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

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

Удачного обучения!





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

Следуй за мной на других платформах