Ужасное значение NaN, когда я начинал свой путь в науке о данных, я ненавидел иметь дело с пропущенными значениями. Но как только вы начнете интуитивно понимать различные методы работы с NaN, вы начнете понимать важность выбора правильного метода *. В этом сообщении блога я расскажу о различных способах, которые мы можем использовать для работы с недостающими значениями в данных. Я расскажу о следующих методах:
1. Отбросьте столбец или строку
2. Расчет среднего / медианного значения
3. Наиболее частое вменение
4. Вменение неизвестного значения
5. Прогнозирование недостающих значений
6. Использование алгоритмов, устойчивых к отсутствующим значениям
7. Разные способы
Во-первых, давайте попробуем простыми словами понять причину указанных пропущенных значений, используя реальную ситуацию. Предположим, вы проводите опрос для сбора данных о своих клиентах. Вы задали четыре вопроса: имя, фамилия, зарплата и возраст. У некоторых клиентов может не быть фамилии, другим может быть неудобно сообщать конфиденциальную информацию, такую как зарплата, а некоторые не хотели бы сообщать свой возраст.
Я не буду обсуждать код для реализации этих методов в этом блоге, если вы хотите понять реализацию этих методов, загляните в мой репозиторий здесь.
1. Отбросьте столбец или строку
data.dropna (axis = 1, inplace = True) # drop columns
data.dropna (axis = 0, inplace = True) # drop row
Ах!! простота этого подхода, я имею в виду, вам это должно понравиться !! Жизнь была бы такой простой, если бы мы могли просто использовать этот подход для всех наборов данных. Такой подход приводит к созданию точной и надежной модели, потому что мы не использовали никаких методов вменения, чтобы «угадать» пропущенное значение. Я бы не рекомендовал использовать этот подход в ваших проектах, так как они приводят к потере «ценных» данных. Ниже описаны несколько ситуаций, в которых вы даже можете подумать об использовании этого подхода:
а. Когда у вас есть столбец или строка без соответствующей информации.
б. Когда у вас есть миллиарды строк, и удаление нескольких строк не имеет большого значения.
c. Когда у вас есть столбец, в котором отсутствует большая часть данных.
2. Расчет среднего / медианного значения
Этот метод очень легко вычислить, и он широко используется для замены отсутствующих значений в наборе данных. Этот метод лучше всего использовать, когда данные отсутствуют полностью случайно (MCAR), т. Е. Существует равная вероятность того, что какое-либо наблюдение отсутствует. Среднее условное исчисление устойчиво к выбросам, однако среднее условное исчисление - нет. На следующем изображении вы можете увидеть разницу в графиках KDE, когда мы заменяем отсутствующее значение на среднее или медиану.
Преимущества: проста в реализации и хорошо работает с небольшим набором данных.
Недостатки: изменение исходной дисперсии, этот метод добавляет смещение и дисперсию и работает только для числовых данных.
3. Наиболее частое вменение
Этот подход используется для заполнения пропущенных значений в категориальных столбцах. На самом деле это довольно просто, просто замените отсутствующие значения наиболее частым значением в столбце. Этот подход имеет те же преимущества и недостатки, что и вменение среднего / медианного значения.
В соответствии с приведенным выше графиком подсчета любые пропущенные значения в столбце Embarked могут быть заменены категорией «S».
4. Вменение неизвестного значения
В этом подходе мы заполняем отсутствующее значение уникальной категорией, возьмем «U» вместо неизвестного. Этот подход хорошо работает в ограниченных случаях. Предположим, вы собираете данные о разных жертвах на борту «Титаника» после того, как он затонул, и хотите проанализировать - была ли какая-то конкретная причина того, почему этот пассажир выжил. В вашем наборе данных есть столбец, в котором указано местоположение пассажира на корабле в момент столкновения с айсбергом. К сожалению, вы не можете собрать эти данные для всех пассажиров, которые не пережили инцидент. В этом случае создание уникальной категории может быть полезно для анализа данных. Возможно, у пассажиров в локации «U» было очень меньше шансов выжить.
Однако в большинстве случаев после выполнения однократного кодирования в нашем наборе данных появляется новая функция, которая может привести к снижению точности нашей модели. Это тот случай, когда данные отсутствуют в наборе данных по совершенно случайным причинам.
На фотографии выше вы можете видеть, что столбец Cabin имеет много уникальных значений, а также nan. Из первоначального анализа мы знаем, что в столбце Cabin отсутствуют значения 687.
После замены известных значений на «K» и неизвестных значений на «U» мы видим, что у большего количества людей, которые не выжили, были неизвестные типы кают.
5. Прогнозирование недостающих значений
Примечание. В случае регрессии убедитесь, что нет мультиколлинеарности, проверьте VIF (коэффициент инфляции дисперсии) и допуск, прежде чем продолжить этот подход.
В этом подходе мы прогнозируем недостающие значения. Это объясняется следующими шагами:
a) X Данные обучения = все столбцы, кроме независимой переменной (мы хотим избежать утечки данных), имеют строки с nan
б) y Данные обучения = столбец, недостающие значения которого вы хотите предсказать, имея только строки без nan
c) X Prediction data = столбец, недостающие значения которого вы хотите предсказать, имея только строки с nan
г) обучить модель на X_train и y_train
д) делать прогнозы на X_pred
f) заменить все строки на nan в исходном наборе данных с шагом- (e) (только для столбца, недостающие значения которого вы вменяете)
Это график KDE столбца Age для исходных данных и данных после того, как мы заменили пропущенные значения прогнозами.
6. Использование алгоритмов, устойчивых к отсутствующим значениям
Существует множество алгоритмов, которые могут самостоятельно обрабатывать отсутствующие значения, некоторые из них, такие как RandomForest и K Nearest Neighbours, широко известны, а другие, такие как CatBoost, не очень широко известны. Я рекомендую один раз просмотреть документацию по CatBoost: https://catboost.ai/.
7. Разные способы
- Библиотека Datawig
Это документация для DataWig, основы для обучения моделей для вменения пропущенных значений в таблицы.
- Последнее наблюдение перенесено вперед (LOCF)
В этом методе последнее известное значение переносится в пропущенное значение и может быть легко реализовано с помощью pandas.
data.fillna (method = ’ffill’)
Доступны и другие методы: «backfill», «bfill», «pad», «ffill».
pad / ffill: распространить последнее действительное наблюдение вперед на следующее действительное и backfill / bfill: использовать следующее действительное наблюдение, чтобы заполнить пробел.
- Интерполяция
Интерполяция - это математический метод, который подстраивает функцию под ваши данные и использует эту функцию для экстраполяции недостающих данных. Простейшим типом интерполяции является линейная интерполяция, которая вычисляет среднее значение между значениями перед отсутствующими данными и значением после них.
Вывод
Вы не можете заранее знать, как правильно работать с отсутствующими данными, вам необходимо реализовать некоторые из этих методов, если не все, и сравнить их результаты. Некоторое представление о данных и постановке проблемы может дать вам своего рода подсказку относительно того, какой метод может быть более подходящим. Я надеюсь, что этот блог был полезен, и я бы порекомендовал попрактиковаться в этих методах на титаническом наборе данных, доступном здесь.