{ "model": "RandomForest", "weights": "rf.joblib", "sensors": [ "temperature", "humidity", "vibration_rms", "vibration_peak", "motor_current", "motor_rpm", "door_cycles", "load_kg", "acoustic_db", "oil_level", "power_kw" ], "window": 60, "label_lag": 10, "fft_top_k": 5, "feature_names": [ "temperature_mean", "humidity_mean", "vibration_rms_mean", "vibration_peak_mean", "motor_current_mean", "motor_rpm_mean", "door_cycles_mean", "load_kg_mean", "acoustic_db_mean", "oil_level_mean", "power_kw_mean", "temperature_std", "humidity_std", "vibration_rms_std", "vibration_peak_std", "motor_current_std", "motor_rpm_std", "door_cycles_std", "load_kg_std", "acoustic_db_std", "oil_level_std", "power_kw_std", "temperature_min", "humidity_min", "vibration_rms_min", "vibration_peak_min", "motor_current_min", "motor_rpm_min", "door_cycles_min", "load_kg_min", "acoustic_db_min", "oil_level_min", "power_kw_min", "temperature_max", "humidity_max", "vibration_rms_max", "vibration_peak_max", "motor_current_max", "motor_rpm_max", "door_cycles_max", "load_kg_max", "acoustic_db_max", "oil_level_max", "power_kw_max", "temperature_slope", "humidity_slope", "vibration_rms_slope", "vibration_peak_slope", "motor_current_slope", "motor_rpm_slope", "door_cycles_slope", "load_kg_slope", "acoustic_db_slope", "oil_level_slope", "power_kw_slope", "vib_fft_top1", "vib_fft_top2", "vib_fft_top3", "vib_fft_top4", "vib_fft_top5", "vib_fft_dominant_bin", "hour", "day_of_week" ], "threshold": 0.37666666666666665, "classes": [ "failure", "healthy" ], "estimator": { "type": "RandomForestClassifier", "n_estimators": 300, "class_weight": "balanced", "random_state": 42 }, "data": "SYNTHETIC (seeded generator in training/src/data_setup.py)", "selection": "highest validation F1 (ties: validation PR-AUC); threshold = max F1 on validation", "versions": { "sklearn": "1.9.1", "numpy": "2.5.3", "pandas": "3.0.6", "joblib": "1.6.0" } }