Ich bin auf folgendes Problem gestoßen, das ich eher typisch finde.
Ich habe einige große Datenmengen, beispielsweise einige Millionen Zeilen. Ich führe eine nicht triviale Analyse durch, z. B. eine SQL-Abfrage, die aus mehreren Unterabfragen besteht. Ich erhalte ein Ergebnis, das zum Beispiel besagt, dass die Eigenschaft X mit der Zeit zunimmt.
Nun gibt es zwei mögliche Dinge, die dazu führen könnten:
- X nimmt tatsächlich mit der Zeit zu
- Ich habe einen Fehler in meiner Analyse
Wie kann ich testen, ob das erste passiert ist und nicht das zweite? Ein schrittweiser Debugger, selbst wenn einer vorhanden ist, hilft nicht weiter, da Zwischenergebnisse immer noch aus Millionen von Zeilen bestehen können.
Das einzige, was ich mir vorstellen konnte, war, irgendwie einen kleinen synthetischen Datensatz mit der Eigenschaft zu generieren, die ich testen und die Analyse als Komponententest ausführen möchte. Gibt es Werkzeuge dafür? Insbesondere, aber nicht beschränkt auf SQL.
quelle
Antworten:
Hier ist ein Vorschlag:
quelle
Dies ist, was ich normalerweise mache - nimm die wichtigsten Variablen auf (basierend auf deinem Geschäftsverständnis und deiner Hypothese - du kannst sie später jederzeit überarbeiten), gruppiere sie nach diesen Attributen, um die Anzahl der Zeilen zu reduzieren, die dann in einen Pivot importiert werden können. Sie sollten die Summe und Anzahl der relevanten Metriken in jede Zeile aufnehmen.
Stellen Sie sicher, dass Sie im vorherigen Schritt keine Filter eingesetzt haben. Sobald Sie die gesamten Daten auf einer zusammengefassten Ebene haben, können Sie in Pivot-Tabellen herumspielen und sehen, welche Dinge sich ändern / erhöhen oder verringern.
Wenn die Daten zu groß sind, um selbst bei wichtigen Parametern zusammengefasst zu werden, müssen Sie sie in 3 bis 4 Teilmengen aufteilen und dann erneut ausführen.
Ich hoffe es hilft.
quelle
Zuerst müssen Sie überprüfen, ob Ihre Implementierung des Algorithmus korrekt ist. Verwenden Sie dazu eine kleine Datenprobe und prüfen Sie, ob das Ergebnis korrekt ist. Zu diesem Zeitpunkt muss die Stichprobe nicht repräsentativ für die Bevölkerung sein.
Sobald die Implementierung überprüft wurde, müssen Sie überprüfen, ob zwischen den Variablen, die Sie vorhersagen möchten, eine signifikante Beziehung besteht. Definieren Sie dazu die Nullhypothese und versuchen Sie, die Nullhypothese mit einem signifikanten Konfidenzniveau abzulehnen. ( Hypothesentest für lineare Regression )
Möglicherweise gibt es Unit-Test-Frameworks für Ihre SQL-Distribution. Die Verwendung einer Programmiersprache wie R ist jedoch einfacher zu implementieren.
quelle
Ich mag eine mehrstufige Strategie:
Schreiben Sie sauberen, leicht verständlichen Code im Gegensatz zu kurz kniffligem Code. Ich weiß, dass Statistiker kniffligen Code mögen, aber das Erkennen von Problemen in kniffligem Code ist gefährlich. (Ich erwähne dies, weil ein Supervisor von mir undokumentierte Python-Skripte mit 500 Zeilen mochte - viel Spaß beim Debuggen dieses Chaos und ich habe dieses Muster oft gesehen, insbesondere von Leuten, die keinen IT-Hintergrund haben.)
Teilen Sie Ihren Code in kleinere Funktionen auf, die in kleineren Funktionen getestet und ausgewertet werden können.
Suchen Sie nach verbundenen Elementen, z. B. ist die Anzahl der Fälle mit der Bedingung X Y - daher MUSS diese Abfrage Y zurückgeben. Meistens ist dies komplexer, aber machbar.
Wenn Sie Ihr Skript zum ersten Mal ausführen, testen Sie es mit einem kleinen Teilbeispiel und prüfen Sie sorgfältig, ob alles in Ordnung ist. Während ich Unit-Tests in der IT mag, sind Fehler in Statistikskripten oft so ausgeprägt, dass sie bei einer sorgfältigen Prüfung leicht sichtbar sind. Oder es handelt sich um methodische Fehler, die bei Unit-Tests wahrscheinlich nie aufgefangen werden.
Das sollte ausreichen, um einen sauberen "einmaligen" Job zu gewährleisten. Aber für eine Zeitreihe, wie Sie sie zu haben scheinen, würde ich hinzufügen, dass Sie nach Werten außerhalb des Bereichs, unmöglichen Kombinationen usw. suchen sollten. Für mich sind die meisten Skripte, die Schritt 4 erreicht haben, wahrscheinlich fehlerfrei - und sie werden es auch bleiben, es sei denn etwas ändert sich. Und meistens ändern sich die Daten - und das sollte bei jedem Lauf überprüft werden. Das Schreiben von Code dafür kann zeitaufwändig und ärgerlich sein, aber es schlägt subtile Fehler aufgrund von Dateneingabefehlern.
quelle