Predictive maintenance (PdM) використовує сенсорні дані та ML для прогнозування коли обладнання вийде з ладу, дозволяючи проводити обслуговування до відмови. На відміну від reactive maintenance (ремонт після поломки) або preventive maintenance (ремонт за графіком), predictive maintenance оптимізує баланс між витратами на обслуговування та витратами від простою.
Де використовується
Predictive maintenance забезпечує industrial операції:
- Виробництво: CNC верстати, насоси, мотори, конвеєри
- Енергетика: Вітрові турбіни, трансформатори, генератори
- Транспорт: Авіадвигуни, залізничне обладнання, fleet
- Нафта і газ: Бурове обладнання, трубопроводи, компресори
- Data центри: HVAC системи, сервери, енергообладнання
- Медицина: Imaging обладнання, лабораторні прилади
Бізнес-вплив: Скорочення незапланованих простоїв на 30-50%, витрат на обслуговування на 10-40%.
Типи задач у Predictive Maintenance
| Задача | Питання | Output |
|---|---|---|
| Failure prediction | Чи вийде з ладу за N днів? | Binary classification |
| Time-to-failure | Коли вийде з ладу? | Regression або survival |
| Remaining Useful Life (RUL) | Скільки залишилось ресурсу? | Regression |
| Anomaly detection | Чи поводиться анормально? | Anomaly score |
| Failure mode classification | Який тип відмови? | Multi-class |
Типові дані
| Аспект | Типові значення |
|---|---|
| Сенсорів на машину | 10 до 100+ |
| Частота семплювання | 1 Hz до 100 kHz |
| Машин під моніторингом | 10 до 10,000+ |
| Частота відмов | 0.1% до 5% на рік |
| Історія | 1 до 10+ років |
Типи даних: - Сенсорні показники: Температура, вібрація, тиск, струм, швидкість - Операційні дані: Навантаження, цикли, години роботи - Журнали обслуговування: Історія ремонтів, заміни запчастин - Environmental: Температура оточення, вологість - Метадані: Вік машини, модель, локація
Виклики даних: - Class imbalance (відмови рідкісні) - Censored дані (машини ще працюють) - Різні operating conditions - Sensor noise та drift - Missing дані та gaps
Що робимо на практиці
- Зрозуміти asset - Failure modes, criticality, maintenance history
- Зібрати та інтегрувати дані - Sensors, logs, work orders
- Визначити target - Failure within window, RUL, anomaly
- Engineer фічі - Rolling statistics, frequency features, degradation
- Обробити imbalance - Sampling, weighting, або survival approach
- Навчити моделі - Classification, regression, або survival models
- Встановити alert thresholds - Balance false alarms vs missed failures
- Валідація з SMEs - Domain experts review predictions
- Deploy з integration - Підключення до maintenance systems
- Monitor та iterate - Track predictions vs outcomes
Baseline
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
# Feature engineering: rolling statistics
def create_features(sensor_df, window='7D'):
features = pd.DataFrame()
for col in sensor_columns:
rolling = sensor_df[col].rolling(window)
features[f'{col}_mean'] = rolling.mean()
features[f'{col}_std'] = rolling.std()
features[f'{col}_max'] = rolling.max()
features[f'{col}_trend'] = rolling.apply(
lambda x: np.polyfit(range(len(x)), x, 1)[0]
)
return features
# Create labels: failure within 30 days
def create_labels(df, failure_dates, horizon_days=30):
labels = []
for date in df['timestamp']:
next_failure = failure_dates[failure_dates > date].min()
days_to_failure = (next_failure - date).days
labels.append(1 if days_to_failure <= horizon_days else 0)
return labels
# Train model
model = RandomForestClassifier(class_weight='balanced')
model.fit(X, y)
Підходи по типах задач
Binary classification (failure in N days):
from sklearn.ensemble import GradientBoostingClassifier
model = GradientBoostingClassifier()
model.fit(X_train, y_train_binary)
prob_failure = model.predict_proba(X_test)[:, 1]
Survival analysis (з censoring):
from lifelines import CoxPHFitter
cph = CoxPHFitter()
cph.fit(df, duration_col='time_to_event', event_col='failed')
survival_prob = cph.predict_survival_function(X_test)
Feature Engineering патерни
Time-domain features: - Rolling mean, std, max, min - Rate of change, trend slope - Peak counts, threshold crossings
Frequency-domain features (для вібрації):
from scipy.fft import fft
def frequency_features(signal, sampling_rate):
freqs = fft(signal)
# Peak frequency, spectral centroid, band energy
return features
Degradation indicators: - Deviation from baseline - Health index (composite metric) - Anomaly scores over time
Метрики оцінки
| Метрика | Опис | Застосування |
|---|---|---|
| Precision | Correct failure predictions | Cost of false alarms |
| Recall | Failures caught | Cost of missed failures |
| AUC-PR | Precision-recall curve | Imbalanced data |
| Lead time | How early failures predicted | Maintenance planning |
| MAE/RMSE | RUL prediction error | Regression tasks |
Cost-sensitive evaluation:
cost_false_alarm = 100 # Unnecessary inspection
cost_missed_failure = 10000 # Unplanned downtime
# Find optimal threshold
for threshold in np.arange(0.1, 0.9, 0.01):
predictions = (probabilities > threshold).astype(int)
fp = ((predictions == 1) & (y_true == 0)).sum()
fn = ((predictions == 0) & (y_true == 1)).sum()
total_cost = fp * cost_false_alarm + fn * cost_missed_failure
Типові проблеми
- [ ] Data leakage: Future information in features
- [ ] Label definition issues: Incorrect failure timestamps
- [ ] Sensor drift: Calibration changes over time
- [ ] Operating regime changes: Model doesn't generalize
- [ ] Class imbalance: Model predicts all negative
- [ ] Temporal validation: Random split замість time-based
Чекліст продакшену
Перед деплоєм: - [ ] Model validated на time-based holdout - [ ] Alert thresholds встановлені по cost analysis - [ ] Integration з maintenance system спроєктовано - [ ] Domain expert validation predictions - [ ] Latency requirements met
Після деплою: - [ ] Prediction accuracy tracked - [ ] False alarm rate моніториться - [ ] Lead time distribution analyzed - [ ] Feedback loop from actual failures - [ ] Periodic retraining scheduled
Інструменти
| Категорія | Інструменти |
|---|---|
| Data collection | IoT platforms, historians, SCADA |
| Feature engineering | tsfresh, Featuretools, pandas |
| ML models | scikit-learn, XGBoost, LightGBM |
| Survival analysis | lifelines, scikit-survival |
| Deep learning | TensorFlow, PyTorch |
| Streaming | Apache Kafka, Spark Streaming |
Приклад міні-кейсу
Сценарій: Оператор вітрової ферми потребує прогнозування відмов gearbox на 100 турбінах.
Дані: - 50 сенсорів на турбіну (вібрація, температура, потужність) - 5 років історії - 45 історичних відмов gearbox
Результати:
| Метрика | Значення |
|---|---|
| Precision | 0.72 |
| Recall | 0.85 |
| Average lead time | 18 днів |
| False alarm rate | 3 на турбіну/рік |
Бізнес-вплив: - Попереджено 8 з 10 відмов (80% catch rate) - Скорочення незапланованих простоїв на 65% - Економія на обслуговуванні: $2.1M/рік - ROI: 4.2x в перший рік
Пов'язані сторінки
- Індекс: ML Field Guide
- Anomaly Detection
- Fraud Detection
- Demand Forecasting
Додаткове читання
Спробуйте наживо
Дослідіть пов'язану модель на практиці: відкрийте Predictive Maintenance Lab — A Single-Sensor Anomaly Case Study і змінюйте параметри під час роботи. Усе лишається у вашому браузері.
▶ Відкрити симуляцію Predictive Maintenance Lab — A Single-Sensor Anomaly Case Study