TL; DR

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

Эта статья представляет собой технический обзор распространенных приложений машинного обучения (ML) в области современных промышленных продуктов. Он не слишком углубляется в детали кодирования, а скорее фокусируется на архитектурных аспектах и ​​освещает несколько качественных дискуссий.

Повестка дня

  1. Постановка проблемы
  2. Исследовательский анализ данных (EDA)
  3. Особенности Инжиниринг
  4. Кластерный анализ
  5. Обнаружение аномалий
  6. Прогнозирование времени
  7. Прогноз качества (QA)

1. Формулировка проблемы

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

BI ETL взаимодействует с ядром ИИ или искусственного интеллекта, которое выполняет весь анализ, связанный с наукой о данных. BI предоставляет входные данные, а ИИ в конечном итоге возвращает соответствующие данные машинного обучения. Связь между AI и BI обычно применяется через протокол SQL.

Общая базовая терминология:

  • Пакет: уникальный объект, который развивается в рамках линейки продуктов.
  • Образец: набор выходных данных всех датчиков за определенное время. Каждая партия содержит несколько образцов, то есть результаты нескольких датчиков.
  • Состояние: уникальный этап жизненного цикла пакетов. Линии продуктов могут поддерживать несколько состояний
  • Датчик: физическое устройство, которое отслеживает статус партий в процессе производства. Современные линейки продуктов обычно содержат несколько датчиков, каждый из которых отслеживает разные показатели с разным масштабом.
  • Виртуальный датчик: разделение физического датчика по разным состояниям. Например, если sensor0 производит выборку данных из state0 и state1, то соответствующими виртуальными датчиками будут sensor0_state0 и sensor0_state1
  • Глобальное время: ось времени представляет весь жизненный цикл для каждого пакета.
  • Время состояния: ось времени представляет жизненный цикл состояния для каждой партии.

В следующих разделах подробно рассматривается сторона приложения ИИ на приведенном выше рисунке.

2. Исследовательский анализ данных («мини-EDA»)

В науке о данных термин EDA обычно относится к начальному анализу спроектированных функций и их корреляции с зависимой переменной (и с самими собой). Таким образом, основная цель «мини-EDA» состоит в том, чтобы прочувствовать данные, получить некоторое предварительное представление о их статистическом разбросе и о различных переменных (зависимых и независимых). Такое понимание может помочь специалистам по данным в оценке осуществимости и потенциала подхода ИИ к данной проблеме. Следует отметить, что «мини-EDA» выполняется на необработанных сенсорных данных до извлечения каких-либо признаков.

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

  • Образцы на партии (вверху слева)
  • Выборки на датчик (посередине слева)
  • Выборки по штатам (внизу слева)
  • Датчик и глобальное время (вверху справа)
  • Датчик и время состояния (в центре справа)
  • Обеспечение качества (QA) / Лабораторные результаты на партию (внизу справа)

Мини-EDA дает быстрый взгляд на разброс данных и отвечает на следующие вопросы:

  • Сколько образцов содержат партии (статистически)?
  • Сколько образцов содержат датчики (статистически)?
  • Сколько выборок содержит каждое состояние?
  • Как меняются датчики со временем (для какой-то произвольной партии)?
  • Как результаты контроля качества/лаборатории распределяются между различными партиями?

3. Особенности проектирования

Сенсорные данные включают в себя несколько пакетов, каждый из которых действует как многомерный временной ряд (каждый отдельный датчик представляет собой одномерный временной ряд). На этапе Features-Engineering проблема переносится из временной области в область характеристик, при этом временная информация используется с помощью статистических показателей. Это позволяет проводить дальнейшую обработку обычными методами ИИ за пределами области временных рядов.

Набор инструментов ИИ содержит несколько мощных методов, которые можно применить для решения текущей проблемы. Эти методы можно разделить на 2 основные категории, а именно классические методы и методы нейронных сетей. Первая категория — это методы поверхностного обучения, а последняя категория — методы глубокого обучения. Когда дело доходит до разработки функций, классические методы требуют явной реализации, в то время как методы нейронных сетей неявно изучают/разрабатывают функции, поэтому явная реализация не требуется. Таким образом, этот раздел относится к классическим методам. Очень популярный пакет Python для разработки функций — tsfresh. Он автоматически вычисляет большое количество характеристик временных рядов, так называемых признаков. Кроме того, пакет содержит методы для оценки объяснительной способности и важности таких характеристик для задач регрессии или классификации.

Пакет tsfresh обеспечивает 4 уровня разработки функций:

  • Комплексные параметры FC – извлечение всех функций.
  • EfficientFCParameters — пропускать функции с высокими вычислительными затратами.
  • Минимальные параметры FC – только небольшой набор функций (быстрая настройка).
  • TimeBasedFCParameters — только функции, для которых требуется DateTimeIndex

После того, как функции извлечены, интересно изучить их корреляцию с зависимой переменной, в данном случае с результатами QA / Lab. Общими показателями корреляции для этой цели являются коэффициенты Пирсона и Спирмена, которые находятся в диапазоне от -1 до +1 и оценивают линейные отношения и монотонные отношения соответственно.

На приведенном ниже рисунке показано значение коэффициентов Пирсона (вверху) и Спирмена (внизу) для каждой функции (ось x) и для конкретного результата QA/Lab.

Коэффициенты Пирсона и Спирмена обычно обрабатываются с помощью настройки Correlation-Matrix в виде тепловой карты. Это позволяет более глубоко проанализировать не только корреляцию между признаками и зависимой переменной, но и корреляцию между признаками и самими собой.

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

4. Кластерный анализ

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

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

Алгоритм K-Means группирует данные, пытаясь разделить выборки на n групп с одинаковыми отклонениями, сводя к минимуму критерий, известный как инерция или сумма квадратов внутри кластера. Этот алгоритм требует указания количества кластеров. Он хорошо масштабируется для большого количества образцов и используется в широком диапазоне областей применения во многих различных областях. Алгоритм k-средних делит набор из N выборок X на K непересекающихся кластеров C, каждый из которых описывается средним значением µj отсчетов в кластере. Средние обычно называют кластерными «центроидами».

Средняя сложность определяется как O(k n T), где n — количество выборок, а T — количество итераций. На практике алгоритм k-средних очень быстр (один из самых быстрых доступных алгоритмов кластеризации), но он попадает в локальные минимумы. Вот почему может быть полезно перезапустить его несколько раз. Однако для многих практических приложений локальные минимумы являются достаточно хорошим решением.

Прежде чем применять алгоритм кластеризации K-средних, важно нормализовать функции, также известные как стандартизация (напомним, что каждая функция может жить в совершенно другом масштабе). Двумя распространенными реализациями нормализации являются scipy.cluster.vq.whiten и sklearn.preprocessing.StandardScaler (библиотеки Python). В конце этой фазы каждая партия представлена ​​в нормализованной области многомерных признаков и готова к кластерному анализу.

Обычная реализация K-Means на Python — это sklearn.cluster.KMeans, которая следует либо алгоритму Ллойда, либо алгоритму Элкана.

Общее кодирование может выглядеть следующим образом:

from sklearn.cluster import KMeans
from scipy.cluster.vq import whiten
features_df_whiten = features_df.copy()
km = KMeans(n_clusters=clusters_num, 
            init=’random’, 
            n_init=10, 
            max_iter=300, 
            tol=1e-04, 
            random_state=0,
            algorithm=”auto”)
y_km = km.fit_predict(features_df_whiten)
cluster_centers_df = pd.DataFrame(km.cluster_centers_)

где features_df содержит фрейм данных объектов (N пакетов x M объектов), а cluster_num — параметр, определяющий количество кластеров для K-средних. Результирующий кадр данных с именем cluster_centers_df имеет размер C x M, где C равно cluster_num. Другими словами, приведенный выше фрагмент кода заканчивается C кластерами, каждый из которых представлен вектором из M признаков. Дополнительным результатом является вектор y_km, который сопоставляет каждую из заданных партий с соответствующим индексом кластера от 0 до C-1.

Для целей визуализации важно уменьшить многомерную (M) область признаков до меньшего количества координат (2 или 3). Распространенной стратегией для достижения этой цели является алгоритм Principle-Component-Analysis (PCA).

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

Здесь PCA применяется для целей визуализации и позволяет проверить результат кластеризации K-средних. Обычная реализация PCA на Python — sklearn.decomposition.PCA. На самом деле это дает дополнительный важный результат, помимо визуализации, который является вкладом кластеров. Например, на следующем рисунке показано, что 14 кластеров могут быть правильным выбором для параметра K-Means cluster_num, поскольку 14 кластеров покрывают около 90 % объясненной дисперсии.

Наконец, можно визуализировать результаты кластеризации K-средних в области PCA, выбрав 2 (для 2D-графика) или 3 (для 3D-графика) наиболее значимые координаты.

Таким образом, каждая точка представляет собой одну партию, а каждая звездочка представляет собой один кластер.

Подводя итог, мы начали с Feature-Engineering, который перенес проблему из сенсорной области (временных рядов) в многомерную область функций. Функции были переведены на стадию стандартизации, а затем прошли через алгоритм K-Means для кластеризации. Наконец, полученные кластеры были визуализированы в домене 2D PCA.

И последнее замечание: еще одна распространенная стратегия анализа временных рядов называется Динамическая деформация времени (DTW), которую можно применять в сочетании с Иерархически-кластерным анализом (HCA). Распространенной реализацией DTW/HCA на Python является dtaidistance.clustering. Эта стратегия не будет подробно обсуждаться здесь, и любознательный читатель может найти хорошую отправную точку в этой статье.

5. Обнаружение аномалий

Изоляция Лес

Изолирующий лес — это алгоритм обучения без учителя для обнаружения аномалий, работающий по принципу изоляции аномалий» (википедия). Суть алгоритма состоит в том, чтобы изолировать аномалии путем создания деревьев решений по случайным атрибутам. Случайное разбиение дает заметно более короткие пути для аномалий, поскольку меньшее количество экземпляров (аномалий) приводит к меньшим разбиениям и поскольку различимые значения атрибутов с большей вероятностью будут разделены при раннем разбиении. Следовательно, когда лес случайных деревьев вместе создает более короткие пути для некоторых конкретных точек, то они, скорее всего, будут аномалиями. На приведенном ниже рисунке показано (в 2D-области), что для изоляции аномалий обычно требуется меньшее количество разбиений.

Рисунок 12 — Концепция изолированного леса — аномалии требуют меньшего количества разбиений

Обычная реализация Isolation-Forest на Python — это sklearn.ensemble.IsolationForest, для которой требуется всего несколько строк кода:

from sklearn.ensemble import IsolationForest
X = np.array(features_pca_df)
model = IsolationForest(behaviour=’new’, # Decision_function
                        contamination=0.01, # outliers_fraction
                        random_state=42) # seed
                        model.fit(X)
 
y_pred = model.predict(X)

Входные данные для приведенного выше фрагмента кода обозначаются как X и содержат функции в домене PCA. В этом смысле это прямое продолжение предыдущего раздела «Кластеризация». Это означает, что необработанные сенсорные данные (временные ряды) проходят этапы проектирования функций, стандартизации и PCA, прежде чем попадают на этап «Изоляция-лес». В результате получается вектор с именем y_pred, который предсказывает, следует ли считать каждый пример выбросом (+1) или выбросом (-1). Еще раз, подход PCA может быть применен для 2D (или 3D) визуализации.

Каждая точка на приведенном выше рисунке представляет собой отдельную партию, а цвет указывает на решение об аномалии. Можно заметить, что существует единственная партия выбросов, которая «изолирована» в правой нижней области. Затем, как правило, интересно изучить причины аномалий, и распространенный метод заключается в сравнении партии выбросов со средними значениями для каждой функции.

На левом рисунке применяется метрика RMSE, а на правом рисунке для сравнения используется метрика MAPE. Красная горизонтальная линия (правый рисунок) представляет параметрический порог. Можно заметить, что 5 признаков были ответственны за определение аномалии.

Автоэнкодер LSTM

Это первое знакомство с глубоким обучением в этой статье, а также с использованием терминологии «виртуальные датчики», которая была введена в разделе «Формулирование проблемы».

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

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

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

Модель нейронной сети AutoEncoder обычно создается с использованием ячеек рекуррентной нейронной сети (RNN) с долгой кратковременной памятью (LSTM), которые поддерживаются в рамках Keras/TensorFlow. Эта тема хорошо раскрыта в статье Брента Ларзалере.

Следующие шаги применяются для каждого штата:

  1. Объединить все пакеты в единую временную шкалу («виртуальные датчики»).
  2. Перекрестная проверка — разделение набора данных обучения/тестирования, например. 80:20
  3. Нормализация, например. мин Макс
  4. Переформируйте нормализованные данные в формат, подходящий для ввода в сеть LSTM. Ячейки LSTM ожидают трехмерный тензор формы [выборки данных, временные шаги, признаки]. Здесь каждый входной образец в сеть LSTM представляет один временной шаг и содержит 4 функции (показания датчика для четырех пеленгов на этом временном шаге).
  5. Создайте модель нейронной сети AutoEncoder в виде функции Python, используя библиотеку Keras. Скомпилируйте его, используя Адама в качестве оптимизатора нейронной сети, и усредните абсолютную ошибку для вычисления функции потерь.
  6. Подогнать модель к обучающим данным и обучить ее, например. на 100 эпох. Обычно интересно просмотреть потери при обучении для оценки производительности модели.
  7. Изучите распределение убытков и соответственно установите порог аномалии.

Приведенный выше рисунок относится к некоторому произвольному состоянию, обозначенному как «0108». График кривой обучения (слева) подразумевает, что обучение прошло хорошо с точки зрения систематической ошибки и дисперсии, поскольку и кривые обучения, и кривые проверки оказались достаточно низкими и относительно узкими. Тем не менее, кажется хорошей идеей применить более низкое эхо (~ 80) для более раннего завершения обучения и избежать переобучения. График распределения потерь (в центре) подразумевает, что пороговое значение аномалии спуска может быть установлено равным ~0,3, поскольку более высокие потери встречаются относительно редко. Наконец, график «Потери-время» (справа) дает интересное представление о потерях объединенных пакетов, разделенных на наборы «Обучение» и «Проверка». Зеленая горизонтальная линия отмечает порог аномалии, и можно заметить, что обнаружена аномалия с его превышением.

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

Приведенный выше рисунок относится к примерному состоянию («0108») и содержит несколько подграфиков для каждого датчика. Каждый подграфик сравнивает выборочные значения с предсказанными значениями и дополнительно выделяет красной меткой временную метку аномалии. Таким образом, эта точка зрения подразумевает конкретную причину аномалии.

6. Прогнозирование времени

Ключевым наблюдением в контексте названной темы является то, что большинство данных временных рядов можно описать тремя компонентами:

  • Тренд → общий систематический линейный или (чаще всего) нелинейный компонент, изменяющийся во времени и не повторяющийся
  • Сезонность → общий систематический линейный или (чаще всего) нелинейный компонент, который изменяется во времени и повторяется.
  • Шум → несистематический компонент, который не является трендом/сезонностью в данных.

Процедура разделения заданного временного ряда на указанные выше компоненты называется сезонной декомпозицией и обычно применяется аддитивным образом.

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

ARIMA, сокращение от «Авторегрессивная интегрированная скользящая средняя», на самом деле представляет собой класс моделей, которые «объясняют» заданный временной ряд на основе его собственных прошлых значений, то есть собственных задержек и ошибок прогноза с запаздыванием. , так что это уравнение можно использовать для прогнозирования будущих значений.

Модель ARIMA характеризуется тремя условиями: d, p, q.

  • d — это порядок дифференцирования, т. е. количество дифференцирований, необходимых для того, чтобы временной ряд стал стационарным. Параметр «d» может быть извлечен из графика АКФ как минимальный порядок разности для входа в конус значимости.
  • p — это порядок термина AR, т. е. количество лагов Y, которые будут использоваться в качестве предикторов. Параметр «p» может быть извлечен из графика PACF как количество начальных пиков до входа в конус значимости.
  • q – это порядок термина MA, т. е. количество запаздывающих ошибок прогноза, которые должны войти в модель. Параметр «q» может быть извлечен из графика АКФ как количество начальных пиков до входа в конус значимости.

Модель ARIMA — это модель, в которой временные ряды различаются d раз, чтобы сделать их стационарными, а затем объединяются члены AR и MA.
Таким образом, уравнение принимает вид:

𝑌𝑡=𝛼+𝛽1𝑌𝑡−1+𝛽2𝑌𝑡−2+…+𝛽𝑝𝑌𝑡−𝑝+𝜖𝑡+𝜙1𝜖𝑡−1+𝜙2𝜖𝑡−2+…+𝜙𝑞𝜖𝑡−𝑞

Расширение SARIMAX для ARIMA, которое явно моделирует сезонный элемент в одномерных данных. Помимо параметров ARIMA d,p,q есть четыре сезонных элемента:

  • P: Сезонный авторегрессионный порядок.
  • D: Порядок сезонной разницы.
  • Q: Порядок сезонной скользящей средней.
  • m: количество временных шагов для одного сезонного периода.

Модели линейной регрессии работают лучше всего, когда предикторы не коррелированы и независимы друг от друга. Следовательно, первый шаг к построению модели ARIMA — сделать временной ряд стационарным. Стационарный процесс обладает тем свойством, что среднее значение, дисперсия и структура автокорреляции не меняются во времени. Одним из самых популярных методов проверки стационарности является применение теста Расширенный тест Дики-Фуллера (ADF). Тест ADF получает входной временной ряд и возвращает оценку, называемую p-value. Если значение p превышает уровень значимости 0,05, то входной временной ряд НЕ является стационарным.

Распространенной реализацией Python для ARIMA (и SARIMAX) является pmdarima.arima.auto_arima, которая автоматически определяет оптимальный порядок для модели ARIMA. Процедура повторяется для каждого датчика и для каждого состояния. Все пакеты объединяются, проходят нормализацию и входят в конвейер auto_arima. Результатом являются модели прогнозирования времени для каждого датчика и каждого состояния, которые можно применять для будущего поведения датчика/состояния. Эту модель можно рассматривать как дополнительный механизм обнаружения аномалий, например. вызов Аномалия, если фактические образцы значительно отклоняются от соответствующего прогноза.

На приведенном ниже рисунке показан конкретный датчик с обозначением «s22», где каждый столбец соответствует своему состоянию. Верхний и нижний ряды отображают соответственно уменьшенное и увеличенное изображения по оси времени. Серый конус представляет достоверность прогноза, а узкий конус означает высокую достоверность.

И последнее замечание: еще один распространенный инструмент для прогнозирования временных рядов называется Facebook Prophet. Это аддитивная регрессионная модель с четырьмя основными компонентами:

  • Кусочно-линейный или логистический тренд кривой роста. Prophet автоматически обнаруживает изменения в тенденциях, выбирая точки изменения из данных.
  • Годовая сезонная составляющая, смоделированная с использованием ряда Фурье.
  • Еженедельный сезонный компонент с использованием фиктивных переменных.
  • Пользовательский список важных праздников.

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

7. Прогноз качества (QA)

XGBoost

XGBoost расшифровывается как «Extreme Gradient Boosting», где термин «Gradient Boosting» происходит из статьи Фридмана Приближение жадных функций: машина повышения градиента. XGBoost используется для задач обучения с учителем, когда обучающие данные (с несколькими функциями) используются для прогнозирования целевой переменной.

XGBoost на самом деле является моделью ансамблей деревьев решений. Модель ансамбля деревьев состоит из набора деревьев классификации и регрессии (CART). На следующем рисунке показан простой пример ТЕЛЕГИ, которая классифицирует, понравится ли кому-то гипотетическая компьютерная игра X.

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

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

Распространенная реализация Python XGBoost — это Пакет Python XGBoost, представляющий собой библиотеку с открытым исходным кодом, обеспечивающую высокопроизводительную реализацию деревьев решений с градиентным усилением. Базовая кодовая база C++ в сочетании с интерфейсом Python, расположенным сверху, создает чрезвычайно мощный, но простой в реализации пакет. XGBoost поставляется с несколькими гиперпараметрами, и обычно рекомендуется комбинировать GridSearch для поиска оптимальной настройки.

import xgboost as xgb
from sklearn.model_selection import GridSearchCV
model = xgb.XGBRegressor()
parameters = {'nthread':[4],
              'objective':['reg:linear'],
              'learning_rate': [.03, 0.05, .07],
              'max_depth': [5, 6, 7],
              'min_child_weight': [4],
              'silent': [1],
              'subsample': [0.7],
              'colsample_bytree': [0.7],
              'n_estimators': [500]}
xgb_grid = GridSearchCV(model,
                        parameters,
                        cv = 3,
                        n_jobs = 4, 
                        verbose = True)
xgb_grid.fit(X, y)
model_score = xgb_grid.best_score_
model_params = xgb_grid.best_params_

Каждая строка в таблицах X и y соответствует разным пакетам (индекс содержит идентификаторы пакетов). Каждый столбец в X соответствует отдельной функции, а y имеет один столбец, содержащий результаты QA/Lab. Поскольку обычно существует несколько типов QA/Lab, этот процесс повторяется несколько раз для каждого типа.

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

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

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

LSTM-RNN (многие ко многим)

Доказано, что рекуррентные нейронные сети (RNN) эффективно решают задачи последовательности. В частности, сеть долговременной кратковременной памяти (LSTM), которая является разновидностью RNN, в настоящее время используется в различных областях для решения задач последовательности.

Задачи последовательности многие к одному получают последовательность данных в качестве входных данных и должны предсказать один выходной результат. Задачи последовательности многие ко многим имеют последовательность данных в качестве входных данных и должны предсказать многомерный результат.

Сети LSTM многие к одному обычно применяются для сенсорного распознавания действий (например, Chung, Seungeun, et al, 2019), для анализа настроений (например, Wen, Shiping, et al, 2019) и для других задач. Здесь мы хотим обучить сеть LSTM прогнозировать оценку результатов QA / Lab (выходные данные) на основе данных многовариантных датчиков (входные данные).

Как часть формулы Виртуальные датчики, каждый датчик (Sx) разделяется по состоянию (Sx_State) и дополняется нулями в соответствии с самой длинной последовательностью. Дополнительная таблица содержит все результаты QA/Lab для каждой партии. Затем массивы X и y (данные и метки) извлекаются из пересечения между этими двумя таблицами.

Выполняется перекрестная проверка, например. 80/20, для разделения данных и меток на наборы Train и Test. Затем каждый набор проходит нормализацию (также известную как стандартизация). Наконец, каждый набор изменяется в соответствии с форматом LSTM. Наборы данных преобразуются в измерения (Образцы, Временные шаги, Функции), а наборы меток преобразуются в измерения (Выборки, Функции).

На этом этапе данные и соответствующие метки готовы к внедрению в LSTM, поэтому пришло время скомпилировать нейронную сеть. Точная архитектура требует некоторой степени исследования, хотя на практике даже относительно простая сеть, как показано ниже, может дать результаты спуска. Таким образом, самая длинная серия включает 17626 образцов и 23 типа результатов QA/Lab.

Модель LSTM обучается в течение 1000 эпох в мини-пакетном режиме с разделением проверки на 5%:

history = model.fit(X,
                    y, 
                    epochs=1000, 
                    batch_size=512,
                    validation_split=0.05,
                    verbose=2).history

Наконец, производительность модели можно оценить на тестовом наборе, сравнив фактические метки с предсказанными.