predict_time_to_failure
V6Die Funktion predict_time_to_failure
ist ein integraler Bestandteil eines Predictive-Maintenance-Systems, das die Zeit und den Kilometerstand bis zum nächsten Defekt basierend auf Anomalien in Sensordaten vorhersagt. Sie liefert Vorhersagen sowohl für einzelne Sensortypen als auch über alle Sensortypen hinweg, wobei die Gesamtvorhersage als verschachteltes Element in der Ergebnisstruktur enthalten ist.
Die Funktion hat zwei Hauptziele:
sensor_df
(Pandas DataFrame):
sensorType
: Typ des Sensors (z. B. Temperatur, Druck).timestamp
: Zeitpunkt der Messung.anomaly
: Markierung, ob die Messung eine Anomalie darstellt (1
für Anomalie, 0
für normal).mileage
: Kilometerstand zum Zeitpunkt der Messung.Ein Dictionary, das folgende Schlüssel enthält:
time_to_failure
(list of dicts):
sensor_type
: Der Sensortyp (z. B. Temperatur, Druck). Für die Gesamtvorhersage wird der Wert "overall_prediction"
verwendet.vehicle_id
: Die ID des Fahrzeugs.prediction
(dict): Die Vorhersage mit zwei Schlüsseln:
time_to_next_failure
: Die geschätzte Zeit bis zur nächsten Anomalie (in Sekunden).mileage_to_next_failure
: Der geschätzte Kilometerstand bis zur nächsten Anomalie.Die Funktion überprüft, ob alle erforderlichen Spalten im DataFrame vorhanden sind:
required_columns = ["sensorType", "timestamp", "anomaly", "mileage"]
for col in required_columns:
if col not in sensor_df.columns:
raise ValueError(f"Die Spalte '{col}' fehlt im DataFrame.")
Die timestamp
-Spalte wird in numerische Werte (Sekunden seit der Unix-Epoche) umgewandelt, um Zeitdifferenzen berechnen zu können:
sensor_df['timestamp_numeric'] = pd.to_datetime(sensor_df['timestamp']).astype(int) // 10**9
Für jeden sensorType
im DataFrame:
anomaly == 1
berücksichtigt.timestamp_numeric
- und mileage
-Werten werden berechnet:
anomalies["time_diff"] = anomalies["timestamp_numeric"].diff().fillna(0)
anomalies["mileage_diff"] = anomalies["mileage"].diff().fillna(0)
time_model = LinearRegression()
mileage_model = LinearRegression()
time_model.fit(X, time_y)
mileage_model.fit(X, mileage_y)
time_prediction = time_model.predict([[len(anomalies)]])[0]
mileage_prediction = mileage_model.predict([[len(anomalies)]])[0]
results["time_to_failure"].append({
"sensor_type": sensor_type,
"vehicle_id": self.vehicle_id,
"prediction": {
"time_to_next_failure": f"{time_prediction:.2f} Sekunden bis zur nächsten Anomalie",
"mileage_to_next_failure": f"{mileage_prediction:.2f} km bis zur nächsten Anomalie"
}
})
Für alle Anomalien über alle Sensortypen hinweg:
time_differences = np.diff(all_anomaly_timestamps)
mileage_differences = np.diff(all_anomaly_mileages)
results["time_to_failure"].append({
"sensor_type": "overall_prediction",
"vehicle_id": self.vehicle_id,
"prediction": {
"time_to_next_failure": f"{overall_time_prediction:.2f} Sekunden bis zur nächsten Anomalie",
"mileage_to_next_failure": f"{overall_mileage_prediction:.2f} km bis zur nächsten Anomalie"
}
})
| sensorType | timestamp | value | mileage | anomaly | |————-|———————|——-|———|———| | temperature | 2024-01-01 12:00:00 | 150 | 12000 | 1 | | temperature | 2024-01-01 12:10:00 | 160 | 12050 | 1 | | pressure | 2024-01-01 12:05:00 | 300 | 12030 | 1 | | temperature | 2024-01-01 12:20:00 | 170 | 12100 | 1 |
{
"time_to_failure": [
{
"sensor_type": "temperature",
"vehicle_id": "V001",
"prediction": {
"time_to_next_failure": "600.00 Sekunden bis zur nächsten Anomalie",
"mileage_to_next_failure": "50.00 km bis zur nächsten Anomalie"
}
},
{
"sensor_type": "pressure",
"vehicle_id": "V001",
"prediction": {
"time_to_next_failure": "Nicht genug Daten, um die Zeit bis zum nächsten Defekt vorherzusagen.",
"mileage_to_next_failure": "Nicht genug Daten, um den Kilometerstand bis zum nächsten Defekt vorherzusagen."
}
},
{
"sensor_type": "overall_prediction",
"vehicle_id": "V001",
"prediction": {
"time_to_next_failure": "450.00 Sekunden bis zur nächsten Anomalie (über alle Sensortypen)",
"mileage_to_next_failure": "40.00 km bis zur nächsten Anomalie (über alle Sensortypen)"
}
}
]
}
Autor: Jörg Harzmann
Dieser Inhalt ist unter einer CC BY-NC Lizenz veröffentlicht. Jeglicher Quellcode ist urheberrechtlich geschützt!