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

Предварительная обработка

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

Как правило, это очень быстрый шаг в PoC, поскольку мы получаем данные в автономном формате, например, в файлах csv. Для демонстратора мы обычно вводим поддержку инженерии данных, если данные доступны в формате базы данных, и мы увеличиваем поддержку инженерии данных для прототипа и MVP.

Очистка данных

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

Однако для PoC и демонстратора мы используем быстрые и итерационные подходы. Действительно, на этих ранних стадиях мы начинаем с легкой очистки, чтобы быстро перейти к следующим шагам. Если или когда проблема с данными мешает разработке функций или построению модели машинного обучения, мы возвращаемся к этапу очистки и устраняем проблему. Это связано с тем, что нашей целью на этих ранних этапах является создание не идеальной модели, а такой, которая достаточно хороша для того, чтобы донести информацию до бизнеса. Поэтому, если обычно соотношение очистка данных/построение модели составляет около 80/20, для PoC и демонстратора мы стремимся к соотношению 20/80.

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

Исследовательский анализ необработанных данных

Чтобы начать с очистки данных, мы проводим исследовательский анализ необработанных данных. Это дает нам возможность взглянуть на каждую переменную и понять, что она содержит, что представляет, насколько она полна и значима. Для каждой переменной мы рассматриваем (при необходимости):

  • Тип данных
  • Количество пропущенных значений, нули, бесконечность
  • Диапазон значений
  • Количество уникальных значений
  • Распределение (с использованием гистограмм для визуализации)
  • Выбросы

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

Наши фавориты:

  • funModelling: создает простую, но полезную таблицу с указанием доли нулей, бесконечных и отсутствующих значений в каждой переменной.
  • autoEDA: генерирует таблицу, показывающую характеристики каждой переменной. Нам особенно нравятся категории ConstantFeature и ZeroSpreadFeature, показывающие, является ли переменная константой (очень полезно для категориальных переменных) или имеет очень низкую дисперсию (для числовых переменных).
  • dataexplorer: создает отчет в формате html. Очень наглядный, он дает графическое представление количества пропущенных значений в каждой переменной и в целом. Он также строит гистограмму и график QQ для каждой числовой переменной и матрицу корреляции.
  • DataMaid: автоматически создает словарь данных, полезный для рассмотрения каждой переменной по отдельности. Он также представляет распределение категориальных переменных и делает прогноз возможных выбросов.

Работа с пропущенными значениями

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

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

Если отсутствующих данных менее 10%, и кажется, что они отсутствуют случайным образом, мы используем методы вменения для заполнения отсутствующих точек данных:

  • Ближайшие соседи для быстрого доступа
  • Множественное вменение с помощью цепных уравнений (MICE) для более полного и элегантного подхода

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

Разработка функций

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

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

После построения функций мы запускаем для них быстрый исследовательский анализ данных (EDA), в ходе которого мы:

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

Построение и обучение модели машинного обучения

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

  1. Масштабируйте и центрируйте данные
  2. Разделить на обучающие и тестовые наборы
  3. Рассмотрим тип проблемы Классификация/Регрессия/Кластеризация
  4. Выберите метрику оценки, подходящую для проблемы (см. таблицу 2)
  5. Запустите основные алгоритмы*, используя k-кратную перекрестную проверку
  6. Обратите внимание, что при работе с временными рядами мы обычно следим за тем, чтобы наблюдения, формирующие обучающую выборку, происходили в хронологическом порядке до наблюдений, используемых для проверочной выборки.
  7. Проверьте предположения алгоритмов, которые мы запустили*
  8. Настройка гиперпараметров
  9. Извлечение важности признаков
  10. Чтобы выбрать важные функции, мы либо используем встроенные методы, если они доступны из регуляризации моделей (например, методы LASSO и RIDGE в регрессии, регуляризованные случайные леса). Если нет, мы используем метод-оболочку Recursive Feature Extraction.
  11. Для кластеризации мы используем уменьшение размерности, такое как PCA, чтобы выбрать наиболее полезные функции.
  12. Оценивайте модели на обучающих, перекрестных и тестовых наборах.
  13. Сравните модели и выберите самую эффективную

* см. таблицу 3 ниже для описания шагов PoC и демонстратора

Таблица 2: Показатели оценки

Таблица 3: Общие алгоритмы

В таблице 3 показаны алгоритмы, которые мы обычно тестируем в PoC/Demonstrator. Для прототипа и MVP мы могли бы использовать менее распространенные алгоритмы и больше работать в каждом конкретном случае.