[Основа анализа данных Python]: обработка пропущенных значений данных

искусственный интеллект Python анализ данных алгоритм

Добавить Автора

Публичный аккаунт WeChat:PythonНаука о данных

Знаю почти:аналитик данных Python


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

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

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

1 Причины отсутствия данных

Сначала мы должны знать: почему данные отсутствуют? Недостаток данных неизбежен. Возможных причин много. Блогер резюмирует следующие три категории:

  • Непреднамеренный: Информация опущена, например, из-за небрежности или забывчивости персонала; или из-за отказа сборщика данных и других причин, например, когда система имеет высокие требования к реальному времени, машина слишком поздно для судить и принимать решения.
  • Преднамеренный: некоторые наборы данных будут предусматривать, что пропущенные значения также используются в качестве собственных значений в описании функции, В настоящее время пропущенные значения можно рассматривать как специальное собственное значение;
  • не существует: некоторые характеристические признаки просто отсутствуют, например, нельзя заполнить имя супруга/супруги лица, не состоящего в браке, или нельзя заполнить статус дохода ребенка;

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

2 Типы отсутствующих данных

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

  • Отсутствует совершенно случайно (MCAR): означает, что отсутствие данных является полностью случайным, не зависит от каких-либо неполных или полных переменных и не влияет на объективность выборки, например отсутствие домашних адресов;
  • Отсутствует случайным образом (MAR): Это означает, что отсутствие данных не является полностью случайным, то есть отсутствие данных этого типа зависит от других полных переменных, например, отсутствие финансовых данных связано с размером предприятия;
  • Пропал не случайно (МНАР): относится к отсутствию данных, связанных со значением самой неполной переменной, например, группы с высоким доходом не намерены обеспечивать доход домохозяйства;

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

3 Как быть с пропущенными данными

Дело в том, как мы справляемся с отсутствием различных типов данных? Вот четыре способа обработки пропущенных значений:Удалить записи, заполнение данных и отсутствие обработки.

1. Удалить записи

преимущество:

  • самый простой и грубый;

недостаток:

  • Приносится в жертву большой объем данных, и много скрытой важной информации может быть потеряно за счет сокращения исторических данных в обмен на полную информацию;
  • Когда доля отсутствующих данных велика, особенно когда отсутствующие данные не распределены случайным образом, прямое удаление может привести к отклонению данных, например, исходное нормальное распределение становится ненормальным;

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

Использование в Питоне:можно использоватьpandasизdropnaдля прямого удаления объектов с отсутствующими значениями.

#删除数据表中含有空值的行
df.dropna(how='any')

2. Заполнение данных

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

заменить отсутствующие значения

  • Средняя интерполяция:

对于定类数据:использоватьРежим(режим) заполнения, например количество мальчиков и девочек в школе, 500 мальчиков и 50 девочек, то для оставшихся пропущенных значений мы будем использовать больше мальчиков для заполнения.

对于定量(定比)数据:использоватьсредний(среднее) илимедиана(медианное) заполнение, такое как ростовые характеристики учащихся в классе, для некоторых отсутствующих значений роста учащихся для заполнения может использоваться средний или медианный рост всего класса. В общем, если распределение признаков является нормальным, средний эффект лучше, а когда распределение не является нормальным из-за наличия выбросов, медианный эффект лучше.

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

Python中的使用:
#使用price均值对NA进行填充
df['price'].fillna(df['price'].mean())
df['price'].fillna(df['price'].median())
  • Вменение горячей колоды:

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

  • Метод K-ближайших соседей (кластеризация K-средних)

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

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

Подгонка отсутствующих значений

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

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

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

  • Прогноз регрессии:

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

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

  • Оценка максимального правдоподобия (Максимальное правдоподобие):

При условии, что отсутствующий тип отсутствует случайным образом, предполагая, что модель верна для полной выборки, неизвестные параметры могут быть оценены по максимальному правдоподобию (Литтл и Рубин), наблюдая за маргинальным распределением данных. Этот метод также называется оценкой максимального правдоподобия с игнорированием пропущенных значений Метод расчета, часто используемый на практике для оценки параметра максимального правдоподобия,Максимизация ожиданий (EM). Этот метод более привлекателен, чем удаление случаев и вменение единичного значения, и у него есть важная предпосылка:Подходит для больших образцов. Количество действительных выборок достаточно, чтобы гарантировать, что оценки ML являются асимптотически несмещенными и нормально распределенными. Однако этот метод может застревать в локальных экстремумах, скорость сходимости не очень высока, расчет сложен и ограничен линейными моделями.

  • Множественное вменение:

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

Мы можем видеть, что предложенные выше методы подгонки и замены - это все методы одиночного вменения, а множественное вменение восполняет дефекты одиночного вменения, Он не пытается оценить каждое пропущенное значение с помощью смоделированных значений, а предлагает случайную выборку отсутствующих данных значения (эти выборки могут быть комбинацией разных моделей). Реализация таких процедур надлежащим образом отражает неопределенность из-за пропущенных значений, что делает статистические выводы достоверными. Вывод множественного вменения можно разделить на следующие 3 этапа:

  • произвести набор возможных значений вменения для каждого пропущенного значения, которые отражают неопределенность неотвечающей модели;
  • Каждый набор данных вменения подвергается статистическому анализу с использованием статистических методов для полного набора данных;
  • Результаты каждого набора данных импутации выбираются в соответствии с функцией оценки для получения окончательного значения импутации;

В соответствии с механизмом отсутствия данных, шаблоном и типом переменной, регрессией, прогностическим средним соответствием (PMM), показателем склонности (PS), логистической регрессией, дискриминантным анализом и цепью Маркова Монте-Карло (Markov Chain Monte Carlo, MCMC) и другие различные методы для заполнение.

Предполагая, что набор данных, включающий три переменные Y1, Y2, Y3, их совместное распределение является нормальным распределением, этот набор данных обрабатывается в три группы, группа A сохраняет исходные данные, группа B имеет только пропущенный Y3, группа C отсутствует Y1 и Y2. При многозначной интерполяции группа A не будет обрабатываться, для группы B будет сформирован набор оценочных значений Y3 (регрессия Y3 по Y1 и Y2), а набор парных оценок Y1 и Y2 будет генерируется для значения группы C (регрессия Y1, Y2 на Y3).

Когда используется многозначное вменение, группа A не обрабатывается, а полные выборки групп B и C будут случайным образом выбраны для формирования m групп (m — необязательное значение вменения для m групп).Достаточно эффективной оценки параметров. . Оценивается распределение атрибутов с пропущенными значениями, а затем на основе m групп наблюдений генерируются m групп оценочных значений параметров для m групп выборок и даются соответствующие прогнозы. метод, используемый в настоящее время, является максимальным сходством.Однако конкретный алгоритм реализации в компьютере является методом максимизации ожидания (EM). Набор значений Y3 оценивается для группы B, а набор (Y1, Y2) будет оцениваться для C с использованием предпосылки, что совместное распределение Y1, Y2 и Y3 является нормальным распределением.

В приведенном выше примере предполагается, что совместное распределение Y1, Y2 и Y3 является нормальным распределением. Это предположение является искусственным, но оно было проверено (Graham and Schafer, 1999), и переменные, которые не имеют нормального совместного распределения, все же могут быть оценены очень близко к истинному значению при этом предположении.

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

  • Случайный лес:

Другим часто используемым методом подгонки является случайный лес, который также часто используется крупными шишками в соревнованиях Kaggle.Конкретный метод реализации такой же, как и обычный, за исключением того, что отсутствующее значение используется в качестве целевой переменной. Следующий фрагмент кода в проекте **Планета знаний (1)** приведен только для справки.

def set_missing_ages(df):

    # 把已有的数值型特征取出来丢进Random Forest Regressor中
    age_df = df[['Age','Fare', 'Parch', 'SibSp', 'Pclass']]

    # 乘客分成已知年龄和未知年龄两部分
    known_age = age_df[age_df.Age.notnull()].as_matrix()
    unknown_age = age_df[age_df.Age.isnull()].as_matrix()

    # y即目标年龄
    y = known_age[:, 0]

    # X即特征属性值
    X = known_age[:, 1:]

    # fit到RandomForestRegressor之中
    rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1)
    rfr.fit(X, y)

    # 用得到的模型进行未知年龄结果预测
    predictedAges = rfr.predict(unknown_age[:, 1:])
#     print predictedAges
    # 用得到的预测结果填补原缺失数据
    df.loc[ (df.Age.isnull()), 'Age' ] = predictedAges 

    return df, rfr
  • виртуальная переменная

Фиктивная переменная на самом деле является типом отсутствующего значения.производная переменная. Конкретный метод состоит в том, чтобы определить новую двоичную переменную, оценив, есть ли у собственных значений пропущенные значения. Например, если признак A содержит пропущенные значения, мы получаем новый признак B. Если значение признака в A отсутствует, то соответствующее значение в B будет равно 1. Если значение признака в A не отсутствует, то соответствующий значение в B будет 1. Значение равно 0.

Ниже приводится программа проекта «Планета знаний» (1):

data_train['CabinCat'] = data_train['Cabin'].copy()
data_train.loc[ (data_train.CabinCat.notnull()), 'CabinCat' ] = "No"
data_train.loc[ (data_train.CabinCat.isnull()), 'CabinCat' ] = "Yes"

fig, ax = plt.subplots(figsize=(10,5))
sns.countplot(x='CabinCat', hue='Survived',data=data_train)
plt.show()

Производные фиктивные переменные можно четко увидеть с помощью одной строки кода ниже.

data_train[['Cabin','CabinCat']].head(10)

3. Без обработки

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

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

4 Резюме

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

  • причина отсутствия данных;
  • тип значения отсутствия данных;
  • количество данных в выборке;
  • Случайность пропущенных данных и т. д.;

О недостающих данных, достойных майндмэппинга:

Если у вас есть другие хорошие методы, пожалуйста, добавьте их.

Ссылаться на:

http://www.restore.ac.uk/PEAS/imputation.php

https://blog.csdn.net/lujiandong1/article/details/52654703

http://blog.sina.com.cn/s/blog_4b0f1da60101d8yb.html

https://www.cnblogs.com/Acceptyly/p/3985687.html

Обратите внимание на публичный аккаунт WeChat:PythonНаука о данныхчтобы открыть для себя больше отличного контента.