Ужасное значение 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: использовать следующее действительное наблюдение, чтобы заполнить пробел.

- Интерполяция

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

Вывод

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