Predictive Maintenance (예측 정비)¶
장비 고장을 사전에 예측하여 다운타임을 최소화하는 분석 기법.
개요¶
예측 정비(PdM)는 센서 데이터와 머신러닝을 활용해 장비 고장 시점을 예측한다. 기존의 사후 정비(Reactive)나 주기적 정비(Preventive)보다 비용 효율적이다.
정비 전략 비교¶
| 전략 | 설명 | 비용 | 다운타임 |
|---|---|---|---|
| Reactive | 고장 후 수리 | 높음 (긴급) | 예측 불가 |
| Preventive | 주기적 교체 | 중간 (과잉 정비) | 계획된 |
| Predictive | 상태 기반 예측 | 낮음 (최적화) | 최소화 |
| Prescriptive | 예측 + 처방 | 가장 낮음 | 거의 없음 |
핵심 분석 프레임워크¶
1. RUL (Remaining Useful Life) 예측¶
잔여 수명을 예측하는 회귀 문제.
# 특성 예시
features = [
'operating_hours', # 가동 시간
'vibration_rms', # 진동 RMS
'temperature_avg', # 평균 온도
'temperature_max', # 최고 온도
'pressure_variance', # 압력 분산
'power_consumption', # 전력 소비량
'maintenance_count', # 정비 이력
'age_days' # 장비 수명
]
# 타겟
target = 'days_until_failure' # 고장까지 남은 일수
모델 선택: | 상황 | 추천 모델 | |------|----------| | 데이터 풍부 | LSTM, Transformer | | 데이터 제한 | XGBoost, LightGBM | | 해석 필요 | Survival Analysis |
2. Anomaly Detection (이상 탐지)¶
정상 패턴에서 벗어난 이상 신호 탐지.
# Isolation Forest
from sklearn.ensemble import IsolationForest
model = IsolationForest(
contamination=0.01, # 예상 이상치 비율
random_state=42
)
predictions = model.fit_predict(sensor_data)
anomalies = sensor_data[predictions == -1]
기법 비교: | 기법 | 장점 | 단점 | |------|------|------| | Isolation Forest | 빠름, 고차원 | 점진적 변화 어려움 | | Autoencoder | 복잡한 패턴 | 학습 데이터 필요 | | DBSCAN | 파라미터 적음 | 밀도 가정 | | One-Class SVM | 견고함 | 대규모 데이터 느림 |
3. Failure Classification (고장 분류)¶
고장 유형을 분류하는 다중 클래스 문제.
# 고장 유형 예시
failure_types = {
0: 'normal',
1: 'bearing_failure',
2: 'overheating',
3: 'power_supply',
4: 'sensor_drift'
}
데이터 요구사항¶
필수 데이터¶
| 데이터 유형 | 예시 | 수집 주기 |
|---|---|---|
| 센서 데이터 | 온도, 진동, 압력 | 초~분 단위 |
| 운영 데이터 | 가동 시간, 부하 | 시간 단위 |
| 정비 이력 | 수리 기록, 부품 교체 | 이벤트 기반 |
| 고장 이력 | 고장 유형, 시점 | 이벤트 기반 |
데이터 품질 체크리스트¶
- [ ] 고장 라벨이 정확한가?
- [ ] 센서 드리프트 보정했는가?
- [ ] 결측치 처리 전략이 있는가?
- [ ] 클래스 불균형 대응했는가?
분석 파이프라인¶
Phase 1: 데이터 수집/저장¶
Phase 2: 특성 엔지니어링¶
def create_features(df, window='1H'):
features = pd.DataFrame()
# 통계적 특성
features['mean'] = df.rolling(window).mean()
features['std'] = df.rolling(window).std()
features['max'] = df.rolling(window).max()
features['min'] = df.rolling(window).min()
# 추세 특성
features['trend'] = df.diff()
features['acceleration'] = df.diff().diff()
# 빈도 특성 (FFT)
features['dominant_freq'] = extract_fft_features(df)
return features
Phase 3: 모델 학습¶
# 불균형 대응
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
# 모델 학습
model = LGBMClassifier(
class_weight='balanced',
n_estimators=500
)
model.fit(X_resampled, y_resampled)
Phase 4: 배포/모니터링¶
# 예측 파이프라인
schedule: "*/5 * * * *" # 5분마다
steps:
- extract_features
- predict
- alert_if_critical
- log_predictions
평가 지표¶
비즈니스 관점¶
| 지표 | 설명 | 목표 |
|---|---|---|
| False Alarm Rate | 잘못된 경고 비율 | <5% |
| Miss Rate | 놓친 고장 비율 | <1% |
| Lead Time | 예측-고장 간격 | >7일 |
| MTBF 개선율 | 평균 고장 간격 증가 | >20% |
모델 관점¶
from sklearn.metrics import classification_report, roc_auc_score
# 불균형 데이터에서 중요한 지표
print(classification_report(y_true, y_pred))
print(f"ROC-AUC: {roc_auc_score(y_true, y_prob)}")
산업별 적용¶
제조업¶
- 대상: CNC 기계, 컨베이어 벨트
- 주요 센서: 진동, 온도, 전류
- ROI: 다운타임 30-50% 감소
에너지¶
- 대상: 풍력 터빈, 변압기
- 주요 센서: 진동, 오일 품질
- ROI: 정비 비용 25% 절감
운송¶
- 대상: 항공기 엔진, 철도
- 주요 센서: 진동, 압력, 온도
- ROI: 안전사고 90% 예방
구현 로드맵¶
Month 1-2: 파일럿
- 단일 장비/라인 선정
- 데이터 수집 인프라 구축
- 베이스라인 모델 개발
Month 3-4: 검증
- A/B 테스트 (예측 vs 기존)
- ROI 측정
- 피드백 반영
Month 5-6: 확장
- 전체 장비 적용
- 자동화 파이프라인
- 대시보드/알림 시스템
주의사항¶
흔한 실패 원인¶
- 데이터 품질: 고장 라벨 부정확
- Cold Start: 신규 장비 데이터 부족
- Class Imbalance: 고장 데이터 희소
- Concept Drift: 장비 노화로 패턴 변화
- Alarm Fatigue: 과도한 경고로 신뢰 하락
대응 전략¶
# Concept Drift 대응
from river import drift
drift_detector = drift.ADWIN()
for x, y in stream:
drift_detector.update(error)
if drift_detector.drift_detected:
retrain_model()
참고 자료¶
- NASA C-MAPSS Dataset (터보팬 엔진)
- PHM Society Data Challenge
- Azure Predictive Maintenance Template