Пошаговое руководство по подготовке данных

Таблица содержания

  1. Вступление
  2. Что такое подготовка данных
  3. Исследовательский анализ данных (EDA)
  4. Предварительная обработка данных
  5. Разделение данных

Вступление

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

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

Что такое подготовка данных?

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

В этой статье я рассмотрю три основные части подготовки данных:

  1. Исследовательский анализ данных (EDA)
  2. Предварительная обработка данных
  3. Разделение данных

1. Исследовательский анализ данных (EDA)

Исследовательский анализ данных, или сокращенно EDA, - это именно то, что звучит как исследование ваших данных. На этом этапе вы просто получаете представление о данных, с которыми работаете. В реальном мире наборы данных не такие чистые и интуитивно понятные, как наборы данных Kaggle.

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

Ниже приведен список вещей, которые следует учитывать на этом этапе:

Характеристики и целевые переменные

Определите, что представляют собой переменные функции (входные) и какова целевая переменная. Не беспокойтесь о том, какие входные переменные final, но убедитесь, что вы можете идентифицировать оба типа переменных.

Типы данных

Выясните, с какими данными вы работаете. Они категоричны, числовы или ни то, ни другое? Это особенно важно для целевой переменной, так как тип данных сузит ту модель машинного обучения, которую вы можете использовать. Здесь могут быть полезны такие функции Pandas, как df.describe () и df.dtypes.

Проверить выбросы

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

  1. Z-оценка / стандартные отклонения: если мы знаем, что 99,7% данных в наборе данных лежат в пределах трех стандартных отклонений, мы можем вычислить размер одного стандартного отклонения, умножить его на 3 и определить точки данных, выходящие за пределы этого диапазона. Точно так же мы можем вычислить z-оценку данной точки, и если она равна +/- 3, то это выброс. Примечание: существует несколько непредвиденных обстоятельств, которые необходимо учитывать при использовании этого метода; данные должны быть нормально распределены, это неприменимо для небольших наборов данных, а наличие слишком большого количества выбросов может привести к снижению z-показателя.
  2. Межквартильный размах (IQR): IQR, концепция, используемая для построения коробчатых диаграмм, также может использоваться для выявления выбросов. IQR равен разнице между 3-м квартилем и 1-м квартилем. Затем вы можете определить, является ли точка выбросом, если она меньше Q1–1,5 * IRQ или больше Q3 + 1,5 * IQR. Это составляет примерно 2,698 стандартных отклонений.

Задавать вопросы

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

2. Предварительная обработка данных

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

Вменение признаков

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

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

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

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

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

Кодирование функций

Кодирование функций - это процесс преобразования значений (т. Е. Строк) в числа. Это связано с тем, что модель машинного обучения требует, чтобы все значения были числами.

Есть несколько способов сделать это:

  1. Кодировка метки. Кодировка метки просто преобразует нечисловые значения объекта в числовые значения, независимо от того, является ли объект порядковым или нет. Например, если функция под названием car_colour имеет разные значения красного, зеленого и синего цветов, то кодировка метки преобразует эти значения в 1, 2 и 3 соответственно. Будьте осторожны при использовании этого метода, потому что, хотя некоторые модели машинного обучения смогут понять кодировку, другие - нет.
  2. Одно горячее кодирование (также известное как get_dummies): одно горячее кодирование работает, создавая двоичную функцию (1, 0) для каждого нечислового значения данной функции. Повторно используя приведенный выше пример, если бы у нас была функция с именем car_colour, то одно горячее кодирование создало бы три функции, называемые car_colour_red, car_colour_green, car_colour_blue, и имело бы 1 или 0, указывающее, есть это или нет.

Нормализация функций

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

  • Нормализация функций изменяет масштаб значений так, чтобы они находились в диапазоне [0,1] /
  • Стандартизация функций изменяет масштаб данных, чтобы получить среднее значение 0 и стандартное отклонение, равное единице.

Функциональная инженерия

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

  • Преобразование переменной DateTime для извлечения только дня недели, месяца года и т. Д.
  • Создание ячеек или сегментов для переменной. (например, для переменной высоты может быть 100–149 см, 150–199 см, 200–249 см и т. д.)
  • Объединение нескольких функций и / или значений для создания нового. Например, одна из наиболее точных моделей для титанического испытания создала новую переменную под названием «Is_women_or_child», которая имела значение True, если человек был женщиной или ребенком, и ложным в противном случае.

Выбор функции

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

  • Важность функции: некоторые алгоритмы, такие как случайные леса или XGBoost, позволяют определить, какие функции были наиболее «важными» при прогнозировании значения целевой переменной. Быстро создав одну из этих моделей и определив важность функций, вы поймете, какие переменные более полезны, чем другие.
  • Уменьшение размерности. Один из наиболее распространенных методов уменьшения размерности, анализ главных компонентов (PCA), использует большое количество функций и использует линейную алгебру, чтобы уменьшить их количество до меньшего количества функций.

Работа с дисбалансом данных

Еще одна вещь, которую вам стоит принять во внимание, - это несбалансированность данных. Например, если имеется 5000 примеров одного класса (например, не мошеннического), но только 50 примеров для другого класса (например, мошеннического), то вам следует рассмотреть один из следующих моментов:

  • Сбор дополнительных данных - это всегда работает в вашу пользу, но обычно это невозможно или слишком дорого.
  • Вы можете увеличить или уменьшить выборку данных с помощью пакета Python scikit-learn-contrib.

3. Разделение данных

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

Обычно вам нужно разделить данные на три набора:

  1. Обучающий набор (70–80%): это то, чему модель учится.
  2. Набор проверки (10–15%): гиперпараметры модели настраиваются на этом наборе.
  3. Тестовый набор (10–15%): наконец, на нем оценивается окончательная производительность модели. Если вы подготовили данные правильно, результаты набора тестов должны дать хорошее представление о том, как модель будет работать в реальном мире.

Спасибо за прочтение!

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

Если вы выполните эти шаги и будете помнить об этом, ваши данные определенно будут лучше подготовлены, и в конечном итоге вы сможете разработать более точную модель!

Теренс Шин