Записки из промышленности

Анализ производственных данных с помощью Python: практический пример

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

Аналитика данных для решения производственных проблем

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

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

И, конечно, это просто не я. Об этом говорят и многие умные люди.



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

Проблема смещения машины / тестера

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

Обнаружение этого дрейфа важно по многим причинам,

  • определить, какая машина (из их набора) может потребовать ремонта и обслуживания
  • для исправления / сброса дрейфа программным или аппаратным вмешательством
  • соотносить качество продукции с дрейфом машины
  • для исследования проблем урожайности или отказов надежности, которые могли быть вызваны дрейфом машины и повышенной дисперсией

Индивидуальное обнаружение дрейфа

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

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

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

Какие машины выпадают больше всего?

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

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

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

Нетривиальная проблема с данными

Учитывая всю шумиху вокруг Индустрии 4.0, Цифровой трансформации и Умного производства, вы будете удивлены, узнав, что самым значительным препятствием на пути таких трансформационных изменений по-прежнему остается сбор и усвоение основных данных.

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

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

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

Скажем так,

  • мы собираем 200 замеров образцов на машину
  • есть 10 технологических измерений (или датчиков) - A, B, C и т. д.
  • есть 10 машин - M 1, M 2, M 3 и т. д.
  • есть, конечно, золотая машина, с помощью которой мы хотим протестировать все эти 10 машин и обнаружить дрейф

Итак, у нас есть хорошая таблица из 20000 точек данных (плюс данные золотой машины). Но каждое измерение отличается по своей природе и не коррелирует друг с другом. Измерение датчика «A» на машине «M 1» коррелирует с измерением датчика «A» на машине «M. 2 'или с машины' M 3 '. Следующий рисунок иллюстрирует эту идею.

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

Нетривиальная познавательная нагрузка.

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

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

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

А представьте, что произойдет, если на вашу фабрику въедут еще 10 машин? Или добавляются еще 10 датчиков.

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

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

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

Чтобы оправдать присвоение этой статье названия практическому руководству, позвольте мне показать вам очень простой метод извлечения оценок парной корреляции (т. Е. Сопоставление данных датчика «A» золотой машины с данными датчика «A» M 1, M 2, M 3 и т. Д., Затем сопоставление данных датчика "B" золотой машины с данными датчика "B" M 1, M 2, M 3 и т. д.).

Простая демонстрация

Стандартный код можно найти здесь, в моем репозитории на Github.

Есть один золотой DataFrame machine_golden и словарь еще из 10 DataFrame, представляющих 10 машин, называемых machines. Каждый DataFrame имеет 200 (выборок) строк и 10 столбцов (измерения датчиков).

Мы конструируем эти DataFrames с синтетическими данными, представляющими наборы данных, собранные с различных машин. По сути, мы добавляем переменный гауссовский шум в золотой набор данных и генерируем наборы данных для различных машин. Некоторые машины будут отклоняться от золотых данных больше, чем другие, из-за изменчивой природы шума (среднее по Гауссу и дисперсия различаются для разных машин).

Вот пример кода для этого,

machines = {'machine'+str(i):[] for i in range(1,11)}
for i in range(1,11):
    loc = np.random.uniform(0,2)
    scale = np.random.uniform(0,2)
    df1 = machine_golden + pd.DataFrame(np.random.normal(loc=loc,scale=scale,size=(200,10)))
    machines['machine'+str(i)] = df1

Теперь перейдем к корреляционному анализу.

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

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



Почему и как вы должны изучать« науку о продуктивных данных ?
Что такое наука о продуктивных данных и каковы некоторые из ее компонентов? medium.com»



Однострочный код, который также распечатывает взаимную корреляцию, выглядит так:

for machine in machines:
    print(f"Correlation of {machine} with the golden tester:", round(machine_golden.corrwith(machines[machine],axis=1).sum(),2))

Здесь мы выполняем корреляцию по столбцам (axis=1), а затем суммируем оценки (.sum()) по строке (мы также могли взять среднее значение, но поскольку количество выборок одинаково, это не имеет значения).

Результат примерно такой:

Correlation of machine1 with the golden tester: 130.67
Correlation of machine2 with the golden tester: 91.78
Correlation of machine3 with the golden tester: 116.57
Correlation of machine4 with the golden tester: 178.85
Correlation of machine5 with the golden tester: 147.76
Correlation of machine6 with the golden tester: 150.91
Correlation of machine7 with the golden tester: 199.94
Correlation of machine8 with the golden tester: 192.48
Correlation of machine9 with the golden tester: 199.73
Correlation of machine10 with the golden tester: 97.73

Очевидно, что машина 2 меньше всего коррелировала с золотой машиной, а машины 7, 8 и 9 - наиболее коррелированными.

Наглядное доказательство? Если мы нанесем некоторые данные датчиков между золотыми машинами и machine2 / machine7.

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

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

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

Резюме

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

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

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