Veröffentlicht am: 29 Januar 2020
Teilen

In meinen letzten Kolumnen habe ich meine Meinung über die Qualität der Daten geäußert, die viele Unternehmen in ihren Data Warehouses, Seen oder Sümpfen haben. Meiner Erfahrung nach sind die meisten der Daten, die Unternehmen so sorgfältig aufbewahren, nutzlos und werden nie einen Wert für das Unternehmen generieren. Die Daten, die tatsächlich potenziell nützlich sind, müssen in der Regel in großem Umfang vorverarbeitet werden, bevor sie z.B. für maschinelles Lernen verwendet werden können. Daher verbringen die meisten Data Science-Teams mehr als 90 Prozent ihrer Zeit mit der Vorverarbeitung der Daten, bevor diese überhaupt für Analysen oder maschinelles Lernen verwendet werden können.

In einer Arbeit, die wir kürzlich eingereicht haben, haben wir dieses Problem für Systemprotokolle untersucht. Praktisch jedes softwareintensive System erzeugt Daten, die den Zustand und wichtige Ereignisse im System zu wichtigen Zeitpunkten festhalten. Die Herausforderung besteht darin, dass die in den Protokollen erfassten Daten einerseits für den menschlichen Gebrauch bestimmt sind und daher eine hohe Variabilität in Struktur, Inhalt und Art der Informationen für jeden Protokolleintrag aufweisen. Andererseits ist die Menge der in den Protokollen gespeicherten Daten oft phänomenal groß. Es ist nicht untypisch, dass Systeme selbst für einen einzigen Betriebstag Gigabytes an Daten erzeugen.

Die offensichtliche Antwort auf dieses Rätsel ist die Verwendung von maschinellem Lernen, um die relevanten Informationen aus den Systemprotokollen abzuleiten. Dieser Ansatz ist aufgrund der Art und Weise, wie Protokolle erstellt werden, mit einer Reihe von Herausforderungen verbunden. Auf der Grundlage unserer Recherchen in der Literatur und von Unternehmensbeispielen haben wir mehrere Herausforderungen identifiziert.

Aufgrund der Art der Datenerzeugung erfordern die Protokolle eine umfangreiche Vorverarbeitung, was ihren Wert mindert. Außerdem schreiben häufig mehrere Systemprozesse in dieselbe Protokolldatei, was die Zeitreihenanalyse und andere Techniken des maschinellen Lernens erschwert, die von sequentiellen Daten ausgehen. Umgekehrt erzeugen viele Systeme mehrere Arten von Protokolldateien und die Ermittlung einer zuverlässigen Basiswahrheit erfordert die Kombination von Daten aus mehreren Protokolldateien. Diese Protokolldateien enthalten in der Regel Daten auf grundlegend verschiedenen Abstraktionsebenen, was das Training von Modellen für maschinelles Lernen erschwert. Sobald wir in der Lage sind, maschinelle Lernmodelle auf die vorverarbeiteten Daten anzuwenden, erfordert die Interpretation der Ergebnisse oft umfangreiches Fachwissen. Es steht den Entwicklern frei, dem System neuen Code hinzuzufügen, der Protokolleinträge in Ad-hoc-Formaten erzeugt. Das wechselnde Format der Protokolldateien erschwert die Verwendung mehrerer Protokolle für das Training von Modellen für maschinelles Lernen, da die Protokolle nicht unbedingt vergleichbar sind. Schließlich versagen alle Tools, die zur Verarbeitung von Protokolldateien entwickelt wurden, wie z.B. automatische Parser, unvorhersehbar und sind sehr spröde, so dass sie ständig gewartet werden müssen.

Wir haben das Problem speziell für Systemprotokolle untersucht, aber meiner Erfahrung nach sind unsere Ergebnisse ziemlich typisch für praktisch jede Art von automatisierter Datengenerierung. Obwohl dies für fast alle Unternehmen, mit denen ich zusammenarbeite, ein großes Problem darstellt und enorme Mengen an Ressourcen für die Vorverarbeitung von Daten aufgewendet werden, um einen Nutzen daraus zu ziehen, ist dies ein aussichtsloser Kampf. Die Menge an Daten, die in jedem Produkt, von Kunden, im gesamten Unternehmen usw. erzeugt wird, wird immer weiter ansteigen. Wenn wir dieses Problem nicht angehen, wird jeder Datenwissenschaftler, Ingenieur und Mathematiker bald nichts anderes mehr tun, als Daten vorzubearbeiten.

'Data should be generated in such a way that preprocessing isn’t required at all'

Die Lösung, die wir in dem Papier vorschlagen, ist ganz einfach: Anstatt die Daten erst zu generieren und dann vorzuverarbeiten, müssen wir eine Software entwickeln, die Daten in einem solchen Format generiert, dass eine Vorverarbeitung überhaupt nicht erforderlich ist. Alle Daten sollten so generiert werden, dass sie sofort und automatisch für maschinelles Lernen verwendet werden können. Vorzugsweise ohne jegliches menschliches Zutun.

Das Erreichen dieses Ziels ist etwas komplizierter, als ich in diesem Beitrag skizzieren kann, aber es gibt eine Reihe von Schlüsselelementen, die meiner Meinung nach für jeden Ansatz gelten, der dieses Ziel erreichen will. Erstens: Alle Daten sollten numerisch sein. Zweitens sollten alle Daten des nominalen Typs (verschiedene Elemente haben weder eine Reihenfolge noch eine Beziehung zueinander) einhändig kodiert werden, d.h. die Elemente werden auf eine binäre Zeichenfolge abgebildet, die so lang ist wie die Anzahl der Elementtypen. Drittens können Daten des ordinalen Typs den gleichen Ansatz verwenden oder, im Falle von nicht-dichotomen Daten, eine Vielzahl von Kodierungen verwenden. Viertens müssen Intervall- und Verhältnisdaten normalisiert (auf einen Wert zwischen 0 und 1 abgebildet) werden, damit sie von maschinellen und Deep-Learning-Algorithmen optimal genutzt werden können. Fünftens muss die statistische Verteilung der Daten bei Bedarf auf eine Gaußsche Standardverteilung abgebildet werden, um bessere Trainingsergebnisse zu erzielen.

Um dies bereits bei der Datengenerierung zu erreichen, müssen Ingenieure und Entwickler möglicherweise mit Datenwissenschaftlern zusammenarbeiten. Außerdem erfordert es eine Abstimmung im gesamten Unternehmen, was bisher nicht notwendig war. Auf diese Weise können Unternehmen jedoch Systeme entwickeln, die völlig autonom maschinelle Lernmodelle sammeln, trainieren und neu trainieren und diese ohne menschliches Zutun einsetzen können (siehe Abbildung).

Systemprotokollierung für maschinelles Lernen

Zusammenfassend lässt sich sagen, dass die meisten Daten in den meisten Unternehmen unbrauchbar sind, weil sie auf die falsche Art und Weise und ohne angemessene Struktur, Kodierung und Standardisierung erzeugt wurden. Vor allem für die Verwendung dieser Daten beim Training von Modellen für maschinelles Lernen ist dies problematisch, da sie eine umfangreiche Datenvorverarbeitung erfordern. Anstatt unsere Datenvorverarbeitung zu verbessern, müssen wir Daten so generieren, dass eine Vorverarbeitung überhaupt nicht mehr nötig ist. Datenwissenschaftler und Ingenieure würden davon profitieren, sich darauf zu konzentrieren, wie Daten generiert werden sollten. Anstatt zu versuchen, das Chaos im Nachhinein zu beseitigen, sollten wir versuchen, das Chaos erst gar nicht entstehen zu lassen.