Vorhersagen von Mathematikern. Wir analysieren die wichtigsten Methoden zur Erkennung von Anomalien

Der Einsatz künstlicher Intelligenz in der Industrie zur vorausschauenden Wartung verschiedener Systeme gewinnt im Ausland immer mehr an Beliebtheit. Der Zweck dieser Technik besteht darin, Fehlfunktionen im Betrieb des Systems während der Betriebsphase zu identifizieren, bevor es für eine rechtzeitige Reaktion ausfällt.

Wie relevant ist dieser Ansatz in unserem Land und im Westen? Die Schlussfolgerung kann beispielsweise zu Artikeln über Habré und in Medium gezogen werden. Es gibt fast keine Artikel über Habré zur Lösung von Problemen bei der vorausschauenden Wartung. Auf Medium gibt es einen ganzen Satz. Hier, hier und hier wird gut beschrieben, was die Ziele und Vorteile dieses Ansatzes sind.

Aus diesem Artikel lernen Sie:

  • Warum wird diese Technik benötigt?
  • Welche Ansätze des maschinellen Lernens werden häufiger für die vorausschauende Wartung verwendet?
  • wie ich einen der Tricks mit einem einfachen Beispiel ausprobiert habe.

Quelle

Welche Funktionen bietet Predictive Service?

  • ein kontrollierter Reparaturprozess, der nach Bedarf durchgeführt wird, wodurch Geld gespart wird und ohne Eile die Qualität dieser Arbeiten verbessert wird;
  • Identifizierung einer bestimmten Fehlfunktion im Betrieb des Geräts (die Möglichkeit, ein bestimmtes Teil zum Austausch zu kaufen, wenn das Gerät in Betrieb ist, bietet enorme Vorteile);
  • Optimierung des Gerätebetriebs, der Lasten usw.;
  • Reduzierung der Kosten für die regelmäßige Abschaltung von Geräten.

Der nächste Artikel über Medium beschreibt gut die Fragen, die beantwortet werden müssen, um zu verstehen, wie man dieses Problem in einem bestimmten Fall angeht.

Bei der Datenerfassung oder bei der Auswahl von Daten zum Erstellen eines Modells ist es wichtig, drei Gruppen von Fragen zu beantworten:

  1. Können alle Systemprobleme vorhergesagt werden? Welche Vorhersage ist besonders wichtig?
  2. Was ist ein Fehlerprozess? Funktioniert das gesamte System nicht mehr oder ändert sich nur die Betriebsart? Ist es ein schneller Prozess, eine sofortige oder allmähliche Verschlechterung?
  3. Entspricht die Systemleistung angemessen der Leistung? Beziehen sie sich auf einzelne Teile des Systems oder auf das gesamte System?

Es ist auch wichtig, im Voraus zu verstehen, was Sie vorhersagen möchten und was vorhergesagt werden kann und was nicht.

Der Artikel auf Medium listet auch Fragen auf, mit denen Sie Ihr spezifisches Ziel bestimmen können:

  • Was muss vorhergesagt werden? Die verbleibende Lebensdauer, abnormales Verhalten oder nicht, die Wahrscheinlichkeit eines Ausfalls in den nächsten N Stunden / Tagen / Wochen?
  • Gibt es genügend historische Daten?
  • Ist bekannt, wann das System anomale Messwerte lieferte und wann nicht? Ist es möglich, solche Angaben zu markieren?
  • Wie weit sollte das Modell sehen? Wie unabhängig sind die Messwerte, die den Betrieb des Systems im Intervall von einer Stunde / Tag / Woche widerspiegeln?
  • Was müssen Sie optimieren? Ob das Modell so viele Verstöße wie möglich erfassen soll, während ein Fehlalarm ausgegeben wird, oder ob es ausreicht, mehrere Ereignisse ohne Fehlalarme zu erfassen.

Es ist zu hoffen, dass sich die Situation in Zukunft verbessern wird. Bisher gibt es Schwierigkeiten im Bereich der vorausschauenden Wartung: Nur wenige Beispiele für Fehlfunktionen des Systems oder Momente für Fehlfunktionen des Systems sind ausreichend, aber sie sind nicht gekennzeichnet. Der Fehlerprozess ist unbekannt.

Der Hauptweg, um die Schwierigkeiten bei der vorausschauenden Wartung zu überwinden, ist die Verwendung von Anomaliesuchmethoden . Solche Algorithmen erfordern kein Markup für das Training. Zum Testen und Debuggen von Algorithmen ist ein Markup in der einen oder anderen Form erforderlich. Solche Methoden sind insofern begrenzt, als sie keinen bestimmten Fehler vorhersagen, sondern nur eine Abnormalität der Indikatoren signalisieren.

Das ist aber schon nicht schlecht.

Quelle

Methoden


Jetzt möchte ich über einige Merkmale von Anomalieerkennungsansätzen sprechen, und dann werden wir gemeinsam die Fähigkeiten einiger einfacher Algorithmen in der Praxis testen.

Obwohl in einer bestimmten Situation mehrere Algorithmen getestet werden müssen, um nach Anomalien zu suchen und den besten auszuwählen, können einige Vor- und Nachteile der in diesem Bereich verwendeten Haupttechniken ermittelt werden.

Zunächst ist es wichtig, im Voraus zu verstehen, wie viel Prozent der Anomalien in den Daten enthalten sind.

Wenn es sich um eine Variation des halbüberwachten Ansatzes handelt (wir untersuchen nur „normale“ Daten und arbeiten (testen) und dann Daten mit Anomalien), ist die Support-Vektor-Methode mit einer Klasse ( One-Class SVM ) die optimalste Wahl. Wenn radiale Basisfunktionen als Kernel verwendet werden, erstellt dieser Algorithmus eine nichtlineare Oberfläche um den Ursprung. Je sauberer die Trainingsdaten sind, desto besser funktioniert es.

In anderen Fällen bleibt auch die Notwendigkeit bestehen, das Verhältnis von anomalen und "normalen" Punkten zu kennen - um die Grenzschwelle zu bestimmen.

Wenn die Anzahl der Anomalien in den Daten mehr als 5% beträgt und sie sich recht gut von der Hauptstichprobe trennen lassen, können Standard-Anomaliesuchmethoden verwendet werden.

In diesem Fall ist die Isolationswaldmethode hinsichtlich der Qualität am stabilsten: Isolationswald besteht aus randomisierten Daten. Eine charakteristischere Indikation geht eher tiefer, während sich ungewöhnliche Indikatoren in den ersten Iterationen vom Rest der Stichprobe trennen.

Andere Algorithmen funktionieren besser, wenn sie unter die Besonderheiten der Daten "passen".

Wenn die Daten eine Normalverteilung haben, ist die elliptische Hüllkurvenmethode geeignet, bei der die Daten mit einer mehrdimensionalen Normalverteilung angenähert werden. Je weniger wahrscheinlich es ist, dass der Punkt zur Verteilung gehört, desto größer ist die Wahrscheinlichkeit, dass er anomal ist.

Wenn die Daten so dargestellt werden, dass die relative Position verschiedener Punkte ihre Unterschiede gut widerspiegelt, scheinen metrische Methoden eine gute Wahl zu sein: z. B. k nächste Nachbarn, k-te nächster Nachbar, ABOD (winkelbasierte Ausreißererkennung) oder LOF (lokaler Ausreißerfaktor) )

Alle diese Methoden legen nahe, dass sich die „richtigen“ Indikatoren auf einen Bereich des mehrdimensionalen Raums konzentrieren. Wenn unter den k (oder k-ten) nächsten Nachbarn alles weit vom Ziel entfernt ist, ist der Punkt eine Anomalie. Für ABOD ist die Argumentation ähnlich: Wenn sich alle k nächstgelegenen Punkte im Verhältnis zum betrachteten im selben Raumsektor befinden, ist der Punkt eine Anomalie. Für LOF: Wenn die lokale Dichte (für jeden Punkt durch k nächste Nachbarn vorgegeben) niedriger ist als die von k nächsten Nachbarn, ist der Punkt eine Anomalie.

Wenn die Daten gut geclustert sind, sind Methoden, die auf der Clusteranalyse basieren, eine gute Wahl. Wenn der Punkt von den Zentren mehrerer Cluster gleich weit entfernt ist, ist er anomal.

Wenn die Richtungen der größten Varianzänderung in den Daten gut unterschieden sind, scheint es eine gute Wahl zu sein, auf der Grundlage der Hauptkomponentenmethode nach Anomalien zu suchen . In diesem Fall werden Abweichungen vom Durchschnittswert für n1 (die meisten „Hauptkomponenten“) und n2 (die am wenigsten „Hauptkomponenten“) als Anomaliemaß betrachtet.

Beispielsweise wird empfohlen, sich den Datensatz der Prognostics and Health Management Society (PHM Society) anzusehen. Diese gemeinnützige Organisation veranstaltet jedes Jahr einen Wettbewerb. Im Jahr 2018 war es beispielsweise erforderlich, Betriebsfehler und die Zeit vor dem Ausfall der Ionenstrahlätzanlage vorherzusagen . Wir werden den Datensatz für 2015 nehmen . Es enthält die Messwerte mehrerer Sensoren für 30 Installationen (Trainingsbeispiel) und muss vorhersagen, wann und welcher Fehler auftreten wird.

Ich habe im Netzwerk keine Antworten für das Testbeispiel gefunden, daher werden wir nur mit dem Training spielen.

Im Allgemeinen sind alle Einstellungen ähnlich, unterscheiden sich jedoch beispielsweise in der Anzahl der Komponenten, in der Anzahl der Anomalien usw. Daher macht es wenig Sinn, in den ersten 20 zu lernen und in anderen zu testen.

Also werden wir eine der Installationen auswählen, sie laden und uns diese Daten ansehen. In dem Artikel geht es nicht um Feature-Engineering , daher werden wir nicht viel miteinander vergleichen.

import pandas as pd import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns from sklearn.covariance import EllipticEnvelope from sklearn.neighbors import LocalOutlierFactor from sklearn.ensemble import IsolationForest from sklearn.svm import OneClassSVM dfa=pd.read_csv('plant_12a.csv',names=['Component number','Time','S1','S2','S3','S4','S1ref','S2ref','S3ref','S4ref']) dfa.head(10) 


Wie Sie sehen können, gibt es sieben Komponenten, für die jeweils vier Sensoren abgelesen werden, die alle 15 Minuten gemessen werden. S1ref-S4ref in der Beschreibung des Wettbewerbs erscheinen als Referenzwerte, aber die Werte unterscheiden sich stark von den Messwerten der Sensoren. Um keine Zeit damit zu verschwenden, darüber nachzudenken, was sie bedeuten, entfernen wir sie. Wenn Sie sich die Verteilung der Werte für jedes Merkmal (S1-S4) ansehen, stellt sich heraus, dass die Verteilungen für S1, S2 und S4 kontinuierlich und für S3 diskret sind. Betrachtet man außerdem die gemeinsame Verteilung von S2 und S4, so stellt sich heraus, dass sie umgekehrt proportional sind.


Obwohl eine Abweichung von einer direkten Abhängigkeit auf einen Fehler hinweisen kann, werden wir dies nicht überprüfen, sondern einfach S4 entfernen.

Wir verarbeiten den Datensatz erneut. Verlassen Sie S1, S2 und S3. Wir skalieren S1 und S2 mit StandardScaler (wir subtrahieren den Durchschnitt und dividieren durch die Standardabweichung), übersetzen S3 in OHE (One Hot Encoding). Wir nähen Messwerte von allen Installationskomponenten in einer Zeile. Insgesamt 89 Funktionen. 2 * 7 = 14 - Messwerte S1 und S2 für 7 Komponenten und 75 eindeutige Werte von R3. Nur 56 Tausend solcher Zeilen.

Laden Sie die Datei mit Fehlern hoch.

 dfc=pd.read_csv('plant_12c.csv',names=['Start Time', 'End Time','Type']) dfc.head() 


Bevor ich diese Algorithmen in unserem Datensatz ausprobiere, werde ich mir einen weiteren kleinen Exkurs erlauben. Sie müssen getestet werden. Hierzu wird vorgeschlagen, die Startzeit des Fehlers und die Endzeit zu nehmen. Alle Indikationen innerhalb dieses Intervalls gelten als abnormal und außerhalb als normal. Dieser Ansatz hat viele Nachteile. Vor allem aber tritt ein ungewöhnliches Verhalten auf, bevor der Fehler behoben wird. Lassen Sie uns aus Gründen der Wiedergabetreue das Fenster der Anomalien vor einer halben Stunde verschieben. Wir werden das F1-Maß, die Präzision und den Rückruf bewerten.

Der Code zur Unterscheidung von Merkmalen und zur Bestimmung der Qualität des Modells:

 def load_and_preprocess(plant_num):   #      ,       dfa=pd.read_csv('plant_{}a.csv'.format(plant_num),names=['Component number','Time','S1','S2','S3','S4','S1ref','S2ref','S3ref','S4ref'])   dfc=pd.read_csv('plant_{}c.csv'.format(plant_num),names=['Start Time','End Time','Type']).drop(0,axis=0)   N_comp=len(dfa['Component number'].unique())   #  15    dfa['Time']=pd.to_datetime(dfa['Time']).dt.round('15min')   #  6    (  ,    )   dfc=dfc[dfc['Type']!=6]   dfc['Start Time']=pd.to_datetime(dfc['Start Time'])   dfc['End Time']=pd.to_datetime(dfc['End Time'])   #      ,       OHE  3-    dfa=pd.concat([dfa.groupby('Time').nth(i)[['S1','S2','S3']].rename(columns={"S1":"S1_{}".format(i),"S2":"S2_{}".format(i),"S3":"S3_{}".format(i)}) for i in range(N_comp)],axis=1).dropna().reset_index()   for k in range(N_comp):       dfa=pd.concat([dfa.drop('S3_'+str(k),axis=1),pd.get_dummies(dfa['S3_'+str(k)],prefix='S3_'+str(k))],axis=1).reset_index(drop=True)   #          df_train,df_test=train_test_split(dfa,test_size=0.25,shuffle=False)   cols_to_scale=df_train.filter(regex='S[1,2]').columns   scaler=preprocessing.StandardScaler().fit(df_train[cols_to_scale])   df_train[cols_to_scale]=scaler.transform(df_train[cols_to_scale])   df_test[cols_to_scale]=scaler.transform(df_test[cols_to_scale])   return df_train,df_test,dfc #       def get_true_labels(measure_times,dfc,shift_delta):   idxSet=set()   dfc['Start Time']-=pd.Timedelta(minutes=shift_delta)   dfc['End Time']-=pd.Timedelta(minutes=shift_delta)   for idx,mes_time in tqdm_notebook(enumerate(measure_times),total=measure_times.shape[0]):       intersect=np.array(dfc['Start Time']<mes_time).astype(int)*np.array(dfc['End Time']>mes_time).astype(int)       idxs=np.where(intersect)[0]       if idxs.shape[0]:           idxSet.add(idx)   dfc['Start Time']+=pd.Timedelta(minutes=shift_delta)   dfc['End Time']+=pd.Timedelta(minutes=shift_delta)   true_labels=pd.Series(index=measure_times.index)   true_labels.iloc[list(idxSet)]=1   true_labels.fillna(0,inplace=True)   return true_labels #          def check_model(model,df_train,df_test,filt='S[123]'):   model.fit(df_train.drop('Time',axis=1).filter(regex=(filt)))   y_preds = pd.Series(model.predict(df_test.drop(['Time','Label'],axis=1).filter(regex=(filt)))).map({-1:1,1:0})   print('F1 score: {:.3f}'.format(f1_score(df_test['Label'],y_preds)))   print('Precision score: {:.3f}'.format(precision_score(df_test['Label'],y_preds)))   print('Recall score: {:.3f}'.format(recall_score(df_test['Label'],y_preds)))   score = model.decision_function(df_test.drop(['Time','Label'],axis=1).filter(regex=(filt)))   sns.distplot(score[df_test['Label']==0])   sns.distplot(score[df_test['Label']==1]) df_train,df_test,anomaly_times=load_and_preprocess(12) df_test['Label']=get_true_labels(df_test['Time'],dfc,30) 

Testergebnisse für einfache Anomaliesuchalgorithmen im PHM 2015 Data Challenge-Datensatz

Zurück zu den Algorithmen. Probieren wir One Class SVM (OCSVM), IsolationForest (IF), EllipticEnvelope (EE) und LocalOutlierFactor (LOF) für unsere Daten aus. Zunächst werden wir keine Parameter einstellen. Ich stelle fest, dass LOF in zwei Modi arbeiten kann. Wenn novelty = False nur im Trainingssatz nach Anomalien suchen kann (es gibt nur fit_predict), wenn True, dann soll nach Anomalien außerhalb des Trainingssatzes gesucht werden (kann separat passen und vorhersagen). IF hat einen Verhaltensmodus von alt und neu. Wir verwenden neu. Er gibt bessere Ergebnisse.

OCSVM erkennt Anomalien gut, aber es gibt zu viele Fehlalarme. Bei anderen Methoden ist das Ergebnis noch schlechter.

Angenommen, wir kennen den Prozentsatz der Anomalien in den Daten. In unserem Fall 27%. OCSVM hat nu - die obere Schätzung für den Prozentsatz der Fehler und die untere für den Prozentsatz der Unterstützungsvektoren. Andere Kontaminationsmethoden weisen einen Prozentsatz von Datenfehlern auf. Bei den IF- und LOF-Methoden wird dies automatisch ermittelt, während es für OCSVM und EE standardmäßig auf 0,1 eingestellt ist. Versuchen wir, die Kontamination (nu) auf 0,27 zu setzen. Jetzt das Top-Ergebnis für EE.

Code zur Überprüfung von Modellen:

 def check_model(model,df_train,df_test,filt='S[123]'):   model_type,model = model   model.fit(df_train.drop('Time',axis=1).filter(regex=(filt)))   y_preds = pd.Series(model.predict(df_test.drop(['Time','Label'],axis=1).filter(regex=(filt)))).map({-1:1,1:0})   print('F1 score for {}: {:.3f}'.format(model_type,f1_score(df_test['Label'],y_preds)))   print('Precision score for {}: {:.3f}'.format(model_type,precision_score(df_test['Label'],y_preds)))   print('Recall score for {}: {:.3f}'.format(model_type,recall_score(df_test['Label'],y_preds)))   score = model.decision_function(df_test.drop(['Time','Label'],axis=1).filter(regex=(filt)))   sns.distplot(score[df_test['Label']==0])   sns.distplot(score[df_test['Label']==1])   plt.title('Decision score distribution for {}'.format(model_type))   plt.show() 

Es ist interessant, die Verteilung der Anomalieindikatoren für verschiedene Methoden zu untersuchen. Es ist ersichtlich, dass LOF für diese Daten nicht gut funktioniert. EE hat Punkte, die der Algorithmus als extrem abnormal betrachtet. Dort fallen jedoch normale Punkte. IsoFor und OCSVM zeigen, dass die Wahl der Grenzschwelle (Kontamination / Nu) wichtig ist, was den Kompromiss zwischen Genauigkeit und Vollständigkeit verändert.


Es ist logisch, dass die Messwerte der Sensoren nahezu normalverteilt sind und nahezu stationäre Werte aufweisen. Wenn wir wirklich eine gekennzeichnete Testprobe haben, vorzugsweise auch eine validierte, kann der Kontaminationswert getönt werden. Die nächste Frage ist, welche Fehler stärker orientiert sind: falsch positiv oder falsch negativ?

Das LOF-Ergebnis ist sehr niedrig. Nicht sehr beeindruckend. Denken Sie jedoch daran, dass OHE-Variablen zusammen mit den von StandardScaler transformierten Variablen zur Eingabe gehen. Und die Standardabstände sind euklidisch. Wenn Sie jedoch nur die Variablen gemäß S1 und S2 zählen, wird die Situation korrigiert und das Ergebnis ist mit anderen Methoden vergleichbar. Es ist jedoch wichtig zu verstehen, dass einer der Schlüsselparameter der aufgelisteten Metrikklassifizierer die Anzahl der Nachbarn ist. Dies wirkt sich erheblich auf die Qualität aus und muss abgestimmt werden. Die Entfernungsmetrik selbst wäre auch schön zu erfassen.

Versuchen Sie nun, die beiden Modelle zu kombinieren. Zu Beginn entfernen wir die Anomalien aus dem Trainingssatz. Und dann werden wir OCSVM auf einem „saubereren“ Trainingsset trainieren. Nach den vorherigen Ergebnissen haben wir die größte Vollständigkeit in EE beobachtet. Wir löschen die Trainingsprobe durch EE, trainieren OCSVM darauf und erhalten F1 = 0,50, Genauigkeit = 0,34, Vollständigkeit = 0,95. Nicht beeindruckend. Aber wir haben nur nu = 0,27 gefragt. Und die Daten, die wir haben, sind mehr oder weniger "sauber". Wenn wir davon ausgehen, dass die Fülle des EE auf dem Trainingsmuster gleich ist, bleiben 5% der Fehler bestehen. Wir setzen uns eine solche Nu und erhalten F1 = 0,69, Genauigkeit = 0,59, Vollständigkeit = 0,82. Großartig. Es ist wichtig zu beachten, dass bei anderen Methoden eine solche Kombination nicht funktioniert, da sie impliziert, dass die Anzahl der Anomalien im Trainingssatz und die Testnummer gleich sind. Wenn Sie diese Methoden an einem reinen Trainingsdatensatz trainieren, müssen Sie weniger Kontamination als in realen Daten und nicht nahe Null angeben. Es ist jedoch besser, sie für die Kreuzvalidierung auszuwählen.

Es ist interessant, das Suchergebnis in der Reihenfolge der Indikationen zu betrachten:


Die Abbildung zeigt einen Ausschnitt der Messwerte des ersten und zweiten Sensors für 7 Komponenten. In der Legende die Farbe der entsprechenden Fehler (Anfang und Ende werden durch vertikale Linien derselben Farbe angezeigt). Punkte zeigen die Vorhersagen an: grün - wahre Vorhersagen, rot - falsch positiv, lila - falsch negativ. Die Abbildung zeigt, dass es schwierig ist, die Fehlerzeit visuell zu bestimmen, und der Algorithmus diese Aufgabe recht gut bewältigt. Es ist zwar wichtig zu verstehen, dass die Messwerte des dritten Sensors hier nicht angegeben sind. Außerdem gibt es nach dem Ende des Fehlers falsch positive Messwerte. Das heißt, Der Algorithmus erkennt, dass es auch fehlerhafte Werte gibt, und wir haben diesen Bereich als fehlerfrei markiert. Die rechte Seite der Abbildung zeigt den Bereich vor dem Fehler, den wir als fehlerhaft markiert haben (eine halbe Stunde vor dem Fehler), der als fehlerfrei erkannt wurde und zu falsch negativen Modellfehlern führt. In der Mitte der Figur wird ein zusammenhängendes Stück erkannt, das als Fehler erkannt wird. Die Schlussfolgerung kann wie folgt gezogen werden: Wenn Sie das Problem der Suche nach Anomalien lösen, müssen Sie eng mit Ingenieuren zusammenarbeiten, die die Essenz der Systeme verstehen, deren Ausgabe Sie vorhersagen müssen, da die Überprüfung der verwendeten Algorithmen im Markup die Realität nicht vollständig widerspiegelt und die Bedingungen, unter denen solche Algorithmen auftreten könnten, nicht vollständig widerspiegelt verwendet werden.

Code zum Zeichnen des Diagramms:

 def plot_time_course(df_test,dfc,y_preds,start,end,vert_shift=4):   plt.figure(figsize=(15,10))   cols=df_train.filter(regex=('S[12]')).columns   add=0   preds_idx=y_preds.iloc[start:end][y_preds[0]==1].index   true_idx=df_test.iloc[start:end,:][df_test['Label']==1].index   tp_idx=set(true_idx.values).intersection(set(preds_idx.values))   fn_idx=set(true_idx.values).difference(set(preds_idx.values))   fp_idx=set(preds_idx.values).difference(set(true_idx.values))   xtime=df_test['Time'].iloc[start:end]   for col in cols:       plt.plot(xtime,df_test[col].iloc[start:end]+add)       plt.scatter(xtime.loc[tp_idx].values,df_test.loc[tp_idx,col]+add,color='green')       plt.scatter(xtime.loc[fn_idx].values,df_test.loc[fn_idx,col]+add,color='violet')       plt.scatter(xtime.loc[fp_idx].values,df_test.loc[fp_idx,col]+add,color='red')       add+=vert_shift   failures=dfc[(dfc['Start Time']>xtime.iloc[0])&(dfc['Start Time']<xtime.iloc[-1])]   unique_fails=np.sort(failures['Type'].unique())   colors=np.array([np.random.rand(3) for fail in unique_fails])   for fail_idx in failures.index:       c=colors[np.where(unique_fails==failures.loc[fail_idx,'Type'])[0]][0]       plt.axvline(failures.loc[fail_idx,'Start Time'],color=c)       plt.axvline(failures.loc[fail_idx,'End Time'],color=c)   leg=plt.legend(unique_fails)   for i in range(len(unique_fails)):       leg.legendHandles[i].set_color(colors[i]) 

Wenn der Prozentsatz der Anomalien unter 5% liegt und / oder sie schlecht von den „normalen“ Indikatoren getrennt sind, funktionieren die oben genannten Methoden schlecht und es lohnt sich, Algorithmen zu verwenden, die auf neuronalen Netzen basieren. Im einfachsten Fall wären dies:

  • Auto-Encoder (ein hoher Fehler eines trainierten Auto-Encoders signalisiert eine Abnormalität beim Lesen);
  • wiederkehrende Netzwerke (Lernen nach Reihenfolge, um den letzten Messwert vorherzusagen. Wenn der Unterschied groß ist, ist der Punkt abnormal).

Unabhängig davon sind die Besonderheiten der Arbeit mit Zeitreihen zu beachten. Es ist wichtig zu verstehen, dass die meisten der oben genannten Algorithmen (mit Ausnahme von Autoencodern und Isolieren von Wäldern) höchstwahrscheinlich eine schlechtere Qualität ergeben, wenn Verzögerungsfunktionen hinzugefügt werden (Messwerte von früheren Zeitpunkten).

Versuchen wir in unserem Beispiel, Verzögerungsfunktionen hinzuzufügen. Die Beschreibung des Wettbewerbs besagt, dass die Werte 3 Stunden vor dem Fehler in keiner Weise mit dem Fehler verbunden sind. Dann fügen Sie die Zeichen in 3 Stunden hinzu. Insgesamt 259 Zeichen.

Infolgedessen blieben die Ergebnisse für OCSVM und IsolationForest nahezu unverändert, während die für Elliptic Envelope und LOF zurückgingen.

Um Informationen über die Dynamik des Systems zu verwenden, sollten Auto-Encoder mit wiederkehrenden oder gefalteten neuronalen Netzen verwendet werden. Oder zum Beispiel eine Kombination aus Auto-Encodern, Komprimieren von Informationen und herkömmlichen Ansätzen zum Suchen nach Anomalien basierend auf komprimierten Informationen. Der umgekehrte Ansatz scheint ebenfalls vielversprechend. Primäres Screening der uncharakteristischsten Punkte durch Standardalgorithmen und anschließendes Trainieren des Auto-Encoders bereits auf saubereren Daten.

Quelle

Es gibt eine Reihe von Techniken zum Arbeiten mit eindimensionalen Zeitreihen. Alle zielen darauf ab, zukünftige Messwerte vorherzusagen, und Punkte, die von der Vorhersage abweichen, werden als Anomalien betrachtet.

Holt-Winters-Modell


Die dreifache exponentielle Glättung unterteilt die Serie in drei Komponenten: Level, Trend und Saisonalität. Wenn die Reihe in dieser Form präsentiert wird, funktioniert das Verfahren dementsprechend gut. Facebook Prophet arbeitet nach einem ähnlichen Prinzip, bewertet die Komponenten selbst jedoch auf andere Weise. Weitere Details finden Sie beispielsweise hier .

S (ARIMA)


Bei dieser Methode basiert das Vorhersagemodell auf Autoregression und gleitendem Durchschnitt. Wenn wir über die Erweiterung von S (ARIMA) sprechen, können wir die Saisonalität bewerten. Lesen Sie hier , hier und hier mehr über den Ansatz.

Andere prädiktive Service-Ansätze


Wenn es um Zeitreihen geht und Informationen über den Zeitpunkt des Auftretens von Fehlern vorliegen, können Sie die Lehrmethoden bei einem Lehrer anwenden. Neben dem Bedarf an markierten Daten ist es in diesem Fall wichtig zu verstehen, dass die Fehlervorhersage von der Art des Fehlers abhängt. Wenn es viele Fehler unterschiedlicher Art gibt, ist es höchstwahrscheinlich erforderlich, diese einzeln vorherzusagen, was noch mehr gekennzeichnete Daten erfordert, aber die Aussichten sind attraktiver.

Es gibt alternative Möglichkeiten, maschinelles Lernen für die vorausschauende Wartung zu verwenden. Zum Beispiel Vorhersage eines Systemfehlers in den nächsten N Tagen (Klassifizierungsaufgabe). Es ist wichtig zu verstehen, dass ein solcher Ansatz erfordert, dass dem Auftreten eines Fehlers im Betrieb des Systems eine Periode der Verschlechterung vorausgeht (nicht notwendigerweise allmählich). In diesem Fall scheint der erfolgreichste Ansatz die Verwendung neuronaler Netze mit Faltungsschichten und / oder wiederkehrenden Schichten zu sein. Unabhängig davon sind Methoden zur Erweiterung von Zeitreihen zu erwähnen. Zwei Ansätze erscheinen mir am interessantesten und zugleich einfachsten:

  • Der durchgehende Teil der Reihe wird ausgewählt (z. B. 70%, und der Rest wird entfernt) und auf die ursprüngliche Größe gedehnt
  • Ein kontinuierlicher Teil der Reihe (z. B. 20%) wird ausgewählt und gedehnt oder komprimiert. Danach wird die gesamte Reihe entsprechend komprimiert oder auf ihre ursprüngliche Größe gedehnt.

Es besteht auch die Möglichkeit, die verbleibende Systemlebensdauer vorherzusagen (Regressionsaufgabe). Hier können wir einen separaten Ansatz unterscheiden: Die Vorhersage bezieht sich nicht auf die Lebensdauer, sondern auf die Weibull-Verteilungsparameter.

Sie können hier über die Distribution selbst und hier über ihre Verwendung in Verbindung mit wiederkehrenden Netzen lesen. Diese Verteilung hat zwei Parameter α und β. α gibt an, wann das Ereignis eintreten wird, und β gibt an, wie sicher der Algorithmus ist. Obwohl die Anwendung dieses Ansatzes vielversprechend ist, treten in diesem Fall Schwierigkeiten beim Training des neuronalen Netzwerks auf, da es einfacher ist, zu Beginn des Algorithmus unsicher zu sein, als eine angemessene Lebensdauer vorherzusagen.

Unabhängig davon ist die Cox-Regression zu erwähnen. Sie können die Fehlertoleranz des Systems für jeden Zeitpunkt nach der Diagnose vorhersagen und es als Produkt zweier Funktionen darstellen. Eine Funktion ist die Verschlechterung des Systems, unabhängig von seinen Parametern, d.h. solchen Systemen gemeinsam. Und die zweite ist eine exponentielle Abhängigkeit von den Parametern eines bestimmten Systems. Für eine Person gibt es also eine gemeinsame Funktion im Zusammenhang mit dem Altern, die für alle mehr oder weniger gleich ist. Die Verschlechterung der Gesundheit ist aber auch mit dem Zustand der inneren Organe verbunden, der für jeden unterschiedlich ist.

Ich hoffe, Sie wissen jetzt etwas mehr über vorausschauende Wartung. Ich bin sicher, Sie werden Fragen zu den Methoden des maschinellen Lernens haben, die für diese Technologie am häufigsten verwendet werden. Ich werde gerne jeden von ihnen in den Kommentaren beantworten. Wenn Sie nicht nur nach dem Geschriebenen fragen möchten, sondern auch etwas Ähnliches tun möchten, freut sich unser CleverDATA- Team immer über talentierte und begeisterte Fachleute.

Gibt es offene Stellen? Natürlich!

Source: https://habr.com/ru/post/de447190/


All Articles