Пошаговое руководство по машинному обучению на примере эксплуатации оборудования

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

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

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

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

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

Обзор проекта машинного обучения

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

  1. Учитесь на исторических данных рабочего задания
  2. Использовать характеристики рабочего задания в качестве входных данных
  3. Предсказать, будет ли опоздание с будущим заказом на работу
  4. Предоставьте подробные объяснения того, как входные данные повлияли на прогноз.

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

В этом подробном обзоре я покажу и объясню только соответствующие разделы кода, поскольку весь код можно просмотреть и запустить в Google Colab здесь.

Данные

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

Объяснение каждой функции / столбца:

Подразделение = название отдела, относящегося к типу работ, выполняемых для данного рабочего задания / задания на обслуживание. (например, электрические, механические и т. д.)

Имя = Имя техника, выполнившего работу. (Произвольно сгенерированные вымышленные имена для этого образца данных)

Расчетное рабочее время = приблизительное количество рабочих часов, которое, как ожидается, займет данное рабочее задание / задание.

Частота = периодичность, в течение которой эти рабочие задания / задачи необходимо будет выполнить снова. (например, 90-дневная задача будет означать, что задача будет выполняться ~ 4 раза в год (365 дней / 90 дней)).

Просрочено = ярлык, указывающий на то, что конкретный заказ на работу просрочен. (например, 1 = Задание на выполнение работ просрочено, а 0 = Заказ выполнено вовремя.)

Чтобы получить полные данные в Jupyter Notebook:

# Set the url of where the csv data can be downloaded from
url = 'https://raw.githubusercontent.com/coryroyce/Facilities_ML_Project/main/Data/Maintenace_Past_Due_Sample_Data.csv'
# Load the csv data into a Pandas DataFrame to easily work with the data in python
df = pd.read_csv(url)

Затем мы обрабатываем данные, чтобы их можно было использовать в модели машинного обучения, отделяя функции / входы (обозначенные «X») от меток / выходов (обозначенные «y»). Затем сохраните 20% данных в качестве тестовых данных, которые будут использоваться для проверки того, действительно ли модель машинного обучения изучает шаблоны, а не просто запоминает данные обучения.

# Separate the features/inputs from the labels/outputs
X = df.copy()
y = X.pop('Past_Due')
# Split the data into train and test data with 20% of the data to test the model
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

Модель машинного обучения

Теперь, когда данные загружены и готовы к обработке, мы можем приступить к созданию модели машинного обучения. Если вы только начинаете работать с машинным обучением, стоит отметить, что наша модель - это модель контролируемой классификации с числовыми и категориальными характеристиками. Catboost - это фреймворк машинного обучения, который отлично подходит с точки зрения простоты и хорошей производительности без особой настройки гиперпараметров. Чтобы лучше понять, как работают эти модели машинного обучения, лучше начать с Ускоренного курса машинного обучения от Google.

Поскольку мы используем библиотеку CatBoost, мы можем создать и построить хорошо работающую модель всего за 2 строчки кода: Во-первых, установите модель как классификатор CatBoost. Затем подгоните / обучите его на данных, которые мы установили ранее.

# Select the ML Model type
model = CatBoostClassifier()
# Fit the model to the training data
model.fit(X_train, y_train, cat_features=['Department', 'Name', 'Frequency'], eval_set=(X_test, y_test))

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

Метрики

Теперь, когда у нас есть подготовленная модель машинного обучения, готовая к работе, нам нужно проверить, насколько хороша наша модель, и понять, может ли она дать полезные прогнозы о том, будет ли рабочее задание опаздывать или нет. И хотя существует большое количество метрик или способов оценить, насколько хороша модель, наиболее полезной и простой для понимания метрикой является Точность (для более глубокого погружения в Точность ознакомьтесь со статьей Джереми Джордана Оценка режима машинного обучения l ). Проще говоря, точность - это процент правильных прогнозов, которые делает модель. Таким образом, оценка точности 50% будет такой же, как и при случайном угадывании или подбрасывании монеты при принятии решения о том, будет ли заказ на работу опаздывать или нет.

Использование общей библиотеки машинного обучения под названием SKlearn упрощает получение точности нашей модели.

# Store the predicted scores from the test dataset
preds_test = model.predict(X_test)
# Print the accuracy of the test predictions
print(f'Model Accuracy on test data: {metrics.accuracy_score(y_test, preds_test)*100}%')

Хотя общая точность может незначительно отличаться в зависимости от разделения данных и обучения модели, последняя точность, которую я получил, составила 89%. Это означает, что у нас есть модель, которая правильно предсказывает, будет ли наряд на работу опаздывать примерно в 9 из 10 раз.

Предсказания

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

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

# Manually input any combination of features to get a prediction (Note: Order of data has to match the column orders)
sample = ['Electrical', 'Chris', 4,'90 Days']
# Send the sample to the model for prediction
sample_prediction = model.predict(sample)
# Display prediction
print(f'Current Sample is predicted as {sample_prediction} \n(Note: 1 = Past Due, 0 = On Time)')

Объяснения (бонус)

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

Инструмент, который становится все популярнее и помогает с этими объяснениями, называется SHAP. Чтобы следующую часть статьи было легче читать, я опущу подробный код и покажу только визуальные элементы и пояснения (полный код можно найти здесь).

Первый уровень объяснения приходит на уровне сводки модели, и здесь возникает важный вопрос: «Какие функции / входные данные являются наиболее важными и насколько они важны?» Есть несколько разных способов визуально увидеть это с помощью SHAP, и для простоты мы будем использовать сводный график гистограммы.

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

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

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

  • Расчетная продолжительность рабочего времени в 16 часов увеличивает вероятность опоздания с этим заказом на работу.
  • Назначение Натана техническим специалистом для выполнения задания также увеличивает вероятность того, что будет поздно.
  • Наличие 360 дней в году также увеличивает вероятность опоздания.
  • Наличие сантехники в качестве отдела значительно снижает вероятность того, что заказ на работу будет задержан.

В целом, поскольку конечный f (x) находится справа от места старта E [f (x)], это рабочее задание можно было бы спрогнозировать как запоздавшее, но теперь у нас есть подробное объяснение того, почему был сделан этот вывод.

Последний вопрос, который следует задать: Какие детализированные группы данных вызывают задержку выполнения заказов на выполнение работ? В SHAP инструмент, помогающий ответить на этот вопрос, называется Графики зависимостей. Эти графики помогают нам глубоко погрузиться в фактические значения входных данных (как категориальных, так и числовых) и увидеть, как они влияют на прогнозы модели. Хотя файл полного кода показывает эти графики для каждой функции / входа, давайте просто взглянем на график зависимости для отдела.

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

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

Резюме

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

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

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

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

Краткие справочники