Прогнозирование отказов оборудования
Вопрос
У меня есть система, которая управляет оборудованием.В случае неисправности оборудования его обслуживают.Представьте, что мой набор данных выглядит так:
ID
Type
# of times serviced
Пример данных:
|ID| Type | #serviced |
|1 | iphone | 1 |
|2 | iphone | 0 |
|3 | android | 1 |
|4 | android | 0 |
|5 | blackberry | 0 |
Что я хочу сделать, так это спрогнозировать «из всего оборудования, которое не обслуживалось, какое, скорее всего, будет обслуживаться»?(т.е.) выявить оборудование, находящееся в зоне риска.
Проблема в том, что мои данные обучения будут #serviced > 0.Любой #serviced=0 не будет заморожен и не будет подходящим кандидатом для включения в обучение.(т. е.) в случае сбоя он будет обслужен, поэтому счет увеличится.
Это контролируемая или неконтролируемая проблема?(контролируемый, потому что у меня есть обслуживаемые и необслуживаемые метки, неконтролируемый, потому что я хочу кластеризовать необслуживаемые с обслуживаемыми и там идентифицировать оборудование, подверженное риску)
Какие данные я должен включить в обучение?
Примечание:
Пример явно упрощен.На самом деле у меня больше характеристик, описывающих оборудование.
Решение
Вам следует включить данные о том, когда телефон обслуживался, чтобы создать модель выживания.Эти модели обычно используются в области обеспечения надежности, а также эффективности лечения.Для проектирования надежности очень часто данные подгоняются под распределение Вейбулла.Даже производители самолетов считают модель надежной после калибровки по трем-пяти точкам данных.Я очень рекомендую пакет R «flexsurv».
Вы не можете использовать типичные линейные или логистические регрессии, поскольку некоторые телефоны в вашей популяции выйдут из периода вашего наблюдения, даже не обслуживаясь.Модели выживания допускают такую недостающую информацию (это называется цензурой).
Обычно у вас будут следующие данные
|ID| Type | serviced | # months_since_purchase
|1 | iphone | 1 | 12
|2 | iphone | 0 | 15
|3 | android | 1 | 2
|4 | android | 0 | 10
|5 | blackberry | 0 | 5.5
С помощью этих данных вы можете создать следующую модель в R
require(survival)
model <- survfit(Surv(months_since_purchase, serviced) ~ strata(Type) +
cluster(ID), data = phone_repairs)
А survfit.formula
Surv(months_since_purchase, serviced) ~ strata(Type) + cluster(ID)
указывает на то, что months_since_purchase
это время, когда было сделано наблюдение, serviced
равно 1, если телефон обслуживался, и 0 в противном случае, strata(Type)
позаботится о том, чтобы вы создали отдельную модель выживания для каждого телефона,cluster(ID)
Убедитесь, что события, относящиеся к тому же идентификатору, рассматриваются как кластер.
Вы можете расширить эту модель с помощью совместных моделей, таких как JM
.
Другие советы
Это проблема обучения. Type
является предиктором. #serviced
Классификатор является целевой переменной. Модель обучена настройке образцов, которые у вас уже есть. Лучше всего предположить, что любая модель не будет иметь существенной прогностической способности. Type
недостаточно.
Попробуйте включить больше факторов (предикторов) в модель. Нравиться years_being_in_usage
, equipment_model
, have_been_in_service_before
и так далее. Чем больше вы получаете, тем лучше вы можете тренировать.