Datenqualität messbar machen
Meine Bachelorarbeit „Kennzahlen zur Messung der Datenqualität“ (Note 1,3), noch einmal durchgerechnet: mit über einer Million echter, unbereinigter Handelsdaten aus einem öffentlichen Datensatz.
Die Idee der Arbeit
Entscheidungen werden auf Basis von Daten getroffen, aber fehlerhafte Daten fallen oft erst ganz am Ende auf: im Data Warehouse, wenn eine Kennzahl nicht stimmt. Meine Arbeit hat untersucht, wie man Datenqualität vorher messbar macht.
Der Weg: Qualitätskriterien aus der Literatur auswählen, sie über Metriken in Prozentwerte übersetzen und die nötigen Fakten per Data Profiling direkt aus der Datenbank ziehen. In der Arbeit habe ich das an den Kundenstammdaten eines Industrieunternehmens durchgeführt. Hier zeige ich dasselbe Vorgehen an öffentlichen Daten.
Woran man Datenqualität erkennt
Glaubwürdigkeit
Nützlichkeit
Interpretierbarkeit
Schlüsselintegrität
Taxonomie nach Hinrichs (2002). Datenqualität ist immer mehrdimensional und hängt vom Zweck ab, für den die Daten genutzt werden.
Data Profiling in vier Schritten
Integration
Daten aus dem Quellsystem in einen eigenen Bereich kopieren, damit die Analyse das System nicht belastet und der Stand eingefroren ist.
Analyse
Attribute, Tupel und Relationen mit Standardverfahren untersuchen: Datentyp, Wertebereich, Muster, Domänen, NULL-Werte, Schlüssel, Beziehungen.
Ergebnisdarstellung
Befunde so aufbereiten, dass die Fachseite sie versteht, und daraus Kennzahlen berechnen.
Bewertung
Mit der Fachseite klären, was wirklich ein Fehler ist, und Ursachen beheben. Danach beginnt der Zyklus von vorn.
Die Metrik: Vollständigkeit auf drei Ebenen
Nach Hinrichs wird Vollständigkeit „bottom up“ aufgebaut. Ein Wert zählt als fehlend, wenn er NULL ist oder etwas, das fachlich dasselbe bedeutet, etwa „UNDEFINED“, „?“ oder eine 0 als Platzhalter.
g ist die Gewichtung eines Attributs zwischen 0 und 1, je nachdem, wie wichtig es für den Anwendungsfall ist.
Übertragen auf einen öffentlichen Datensatz
Online Retail II enthält alle Rechnungspositionen eines britischen Online-Händlers aus zwei Jahren, unbereinigt und mit allen Macken echter Systeme. Das ist der gleiche Datentyp wie in meiner Arbeit: Kunden- und Verkaufsdaten. Die Auswertung folgt Schritt für Schritt dem Vorgehen aus Kapitel 4.
Die Daten zum Anfassen
16 echte Zeilen aus dem Datensatz, bewusst so ausgewählt, dass jeder Befund mindestens einmal vorkommt. Wähle eine Prüfung oder klicke auf eine markierte Zelle, um zu sehen, was dahintersteckt.
| Fall | Invoice Rechnungsnummer | StockCode Artikelnummer | Description Artikelbezeichnung | Quantity Menge | InvoiceDate Rechnungsdatum | Price Stückpreis | Customer ID Kundennummer | Country Land |
|---|---|---|---|---|---|---|---|---|
| Unauffällig | 489434 | 85048 | 15CM CHRISTMAS GLASS BALL 20 LIGHTS | 12 | 01.12.09 07:45 | 6,95 | 13085 | United Kingdom |
| Storno | C489449 | 22087 | PAPER BUNTING WHITE LACE | -12 | 01.12.09 10:33 | 2,95 | 16321 | Australia |
| Ohne Kundennummer | 489525 | 85226C | BLUE PULL BACK RACING CAR | 1 | 01.12.09 11:49 | 0,55 | NULL | United Kingdom |
| Land „EIRE“ | 489520 | 35751C | PURPLE CURRENT CANDLE RING | 12 | 01.12.09 11:41 | 0,75 | 14911 | EIRE |
| Land unbekannt | 494860 | 84832 | ZINC WILLIE WINKIE CANDLE STICK | 5 | 19.01.10 11:01 | 0,85 | 12470 | Unspecified |
| Porto als Artikel | 489439 | POST | POSTAGE | 3 | 01.12.09 09:28 | 18,00 | 12682 | France |
| Notiz statt Name | 489463 | 71477 | short | -240 | 01.12.09 10:52 | 0,00 | NULL | United Kingdom |
| „?“ als Name | 495027 | 21314 | ? | 1.146 | 20.01.10 13:48 | 0,00 | NULL | United Kingdom |
| Geisterzeile | 489521 | 21646 | NULL | -50 | 01.12.09 11:44 | 0,00 | NULL | United Kingdom |
| Ausbuchung | A506401 | B | Adjust bad debt | 1 | 29.04.10 13:36 | -53.594,36 | NULL | United Kingdom |
| Duplikat | 489517 | 21912 | VINTAGE SNAKES & LADDERS | 1 | 01.12.09 11:34 | 3,75 | 16329 | United Kingdom |
| Duplikat | 489517 | 21912 | VINTAGE SNAKES & LADDERS | 1 | 01.12.09 11:34 | 3,75 | 16329 | United Kingdom |
| Gleiche Nr., anderer Name | 495362 | 15058A | BLUE WHITE SPOTS GARDEN PARASOL | 2 | 24.01.10 12:12 | 7,95 | 15727 | United Kingdom |
| Gleiche Nr., anderer Name | 538200 | 15058A | BLUE POLKADOT GARDEN PARASOL | 1 | 10.12.10 11:11 | 7,95 | 17912 | United Kingdom |
| Gleicher Kunde, anderes Land | 497363 | 22055 | MINI CAKE STAND HANGING STRAWBERY | 8 | 09.02.10 09:41 | 1,65 | 12370 | Austria |
| Gleicher Kunde, anderes Land | 538826 | 85123A | WHITE HANGING HEART T-LIGHT HOLDER | 64 | 14.12.10 12:58 | 2,55 | 12370 | Cyprus |
Tipp: Auch die Befund-Karten weiter unten markieren die passenden Zellen.
Attributebene
Tupelebene
Relationsebene
Vollständigkeit je Attribut
Auf Attributebene sieht fast alles sehr gut aus. Mit einer Ausnahme, und genau die ist für Kundenanalysen entscheidend.
Selbst ausprobieren: Gewichtung kann Lücken verdecken
Das war die wichtigste Erkenntnis meiner Arbeit. Je nachdem, wie die Attribute gewichtet werden, ergibt derselbe Datenbestand eine ganz andere Kennzahl. Verschiebe die Regler oder wähle einen Anwendungsfall.
Eine Kennzahl über 95 %, obwohl fast jede vierte Position keinen Kunden hat: Das ist der Effekt, vor dem die Arbeit warnt. Deshalb immer auch auf Attributebene schauen.
So rechnet die Metrik
Dieselben Zeilen, jetzt bewertet: 1 = vorhanden, 0 = fehlt (inklusive Platzhalter). Rechts steht die Vollständigkeit Q(t) jeder Zeile mit den Gewichten von oben. Klicke auf eine Zeile, um den Rechenweg zu sehen.
| Fall | Invoice Rechnungsnummer | StockCode Artikelnummer | Description Artikelbezeichnung | Quantity Menge | InvoiceDate Rechnungsdatum | Price Stückpreis | Customer ID Kundennummer | Country Land | Q(t) |
|---|---|---|---|---|---|---|---|---|---|
| Unauffällig | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Storno | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Ohne Kundennummer | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0,98 |
| Land „EIRE“ | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Land unbekannt | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0,95 |
| Porto als Artikel | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Notiz statt Name | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0,75 |
| „?“ als Name | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0,75 |
| Geisterzeile | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0,75 |
| Ausbuchung | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0,98 |
| Duplikat | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Duplikat | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Gleiche Nr., anderer Name | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Gleiche Nr., anderer Name | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Gleicher Kunde, anderes Land | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Gleicher Kunde, anderes Land | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1,00 |
| Q(T) dieser Stichprobe = Σ Q(t) / 16 | 0,95 | ||||||||
Jede 0 oder 1 wird mit dem Gewicht ihres Attributs multipliziert (Reihenfolge wie in der Tabelle), die Summe durch die Summe der Gewichte geteilt.
Die Stichprobe ist absichtlich voller Problemfälle. Die großen Kennzahlen oben gelten für den gesamten Datensatz.
Was ich daraus mitnehme
- Datenqualität lässt sich nicht allgemein festlegen, sondern nur für einen Zweck. Für eine Umsatzanalyse sind diese Daten gut, für eine Kundenanalyse nicht.
- Eine einzelne Kennzahl reicht nicht. Erst mehrere Kriterien und mehrere Ebenen zusammen ergeben ein ehrliches Bild.
- Data Profiling findet nicht nur Fehler, sondern auch Hinweise auf ihre Ursache, zum Beispiel die Geisterzeilen oder Stornos im Schlüssel.
Was ich heute zusätzlich machen würde
- Die Prüfungen als Regeln automatisieren, damit sie bei jedem Datenimport laufen, wie heute in meinen Migrationsprojekten.
- Weitere Kriterien wie Konsistenz und Zeitnähe messen, nicht nur Vollständigkeit.
- Auffällige Muster mit Machine Learning finden lassen, statt jede Regel vorher selbst zu kennen. Das ist ein Thema meines Masters.
Quellen & Hinweise
Datensatz: Chen, D. (2019). Online Retail II [Dataset]. UCI Machine Learning Repository. https://doi.org/10.24432/C5CG6D (CC BY 4.0).
Bachelorarbeit: Ackermann, P. (2021). Kennzahlen zur Messung der Datenqualität. Europäische Fachhochschule (heute CBS International Business School). Note 1,3.
Die Originalarbeit enthält vertrauliche Unternehmensdaten und ist deshalb nicht öffentlich. Alle Zahlen auf dieser Seite stammen aus dem öffentlichen Datensatz.