Wie kann ich betrügerische Variablen in großen Datenmengen schnell erkennen?


7

Angenommen, wir haben einen Datensatz mit Millionen Zeilen und Tausenden Spalten und die Aufgabe ist die binäre Klassifizierung. Wenn wir ein logistisches Regressionsmodell ausführen, ist die Leistung viel besser als erwartet, z. B. eine nahezu perfekte Klassifizierung.

Wir vermuten, dass die Daten einige betrügerische Variablen enthalten. Wie kann ich sie schnell erkennen?

Betrugsvariablen bedeuten hier eine Variable, die für die Antwort sehr bezeichnend ist und die wir nicht verwenden sollten. Zum Beispiel verwenden wir, wenn eine Person einen Kundendienstanruf tätigt, um vorherzusagen, ob eine Person ein Produkt gekauft hat oder nicht.


2
Ihre Vorstellung von einer "betrügerischen Variablen" scheint hier dem Irrtum "Korrelation = Kausalität" (oder vielleicht " Postdiction ") ähnlich zu sein . Ihr Vorschlag scheint jedoch eher wie "Wie kann festgestellt werden, ob ein Prädiktor die Ergebnisse dominiert?". Dies könnte nützlich sein, um Variablen für weitere QA / QC zu kennzeichnen , ist jedoch nicht bestimmend. In Ihrem Endbeispiel wäre ein Zeitstempel für die Daten maßgeblich (dh der Anruf folgt dem Kauf, also "betrügen", weil der Kausalpfeil rückwärts ist).
GeoMatt22

@ GeoMatt22 danke für deinen Kommentar, ich gebe zu, der Defekt ist nicht klar. Ich denke auch darüber nach, ob die Definition eine lineare Kombination von Variablen anstelle einer Variablen enthalten und definieren soll, wie stark es ist, als "Betrug" zu behandeln.
Haitao Du

Ich denke, dass "starke Assoziation" nicht verwendet werden kann, um "Kausal vs. Betrug" auf rein logische Weise abzuleiten. Im Bayes'schen Sinne erscheint der Prior "zu gut um wahr zu sein" jedoch nicht wertlos. Aber ich bin mir nicht sicher, wie ich das formalisieren soll :) (In einem bestimmten Bereich könnte man wohl eine "vorherige Kausalität" ansammelnR2PDF "?)
GeoMatt22

Prozesshinweis: Möglicherweise möchten Sie die Veröffentlichung einer Antwort verzögern, um Feedback zu erhalten. (Oder
schreiben Sie

1
@ hxd1011: Wenn Sie daran interessiert sind, eine andere Instanz mit Datenverlust zu sehen, lesen Sie diesen aktuellen Thread . Einige weitere Referenzen und Links könnten ebenfalls hilfreich sein.
usεr11852

Antworten:


11

Dies wird manchmal als "Datenverlust" bezeichnet. Hier gibt es ein schönes Papier dazu:

Leckage im Data Mining: Formulierung, Erkennung und Vermeidung

Das obige Papier enthält viele amüsante (und schreckliche) Beispiele für Datenlecks, zum Beispiel einen Wettbewerb zur Krebsvorhersage, bei dem sich herausstellte, dass Patienten-ID-Nummern eine nahezu perfekte Vorhersage für zukünftigen Krebs hatten, unbeabsichtigt aufgrund der Art und Weise, wie Gruppen während der Studie gebildet wurden .

Ich glaube nicht, dass es einen eindeutigen Weg gibt, Datenlecks zu identifizieren. Das obige Papier enthält einige Vorschläge, ist jedoch im Allgemeinen sehr problemspezifisch. Als Beispiel könnten Sie definitiv nur die Korrelationen zwischen Ihren Funktionen und Ihrem Ziel betrachten. Manchmal werden Sie jedoch Dinge vermissen. Stellen Sie sich beispielsweise vor, Sie erstellen einen Spam-Bot-Detektor für eine Website wie stackexchange, bei dem Sie zusätzlich zu Erfassungsfunktionen wie Nachrichtenlänge, Inhalt usw. möglicherweise Informationen darüber erfassen können, ob eine Nachricht von einem anderen Benutzer markiert wurde. Wenn Sie jedoch möchten, dass Ihr Bot-Detektor so schnell wie möglich ist, sollten Sie sich nicht auf benutzergenerierte Nachrichtenflags verlassen müssen. Natürlich würden Spam-Bots eine Menge benutzergenerierter Nachrichtenflags ansammeln, sodass sich Ihr Klassifizierer möglicherweise auf diese Flags verlässt. und weniger auf den Inhalt der Nachrichten. Auf diese Weise sollten Sie in Betracht ziehen, Flags als Funktion zu entfernen, damit Sie Bots schneller markieren können als die Crowd-Sourcing-Benutzer, dh bevor ein breites Publikum ihren Nachrichten ausgesetzt wurde.

In anderen Fällen haben Sie eine sehr dumme Funktion, die Ihre Erkennung verursacht. Es gibt hier eine schöne Anekdote über eine Geschichte darüber, wie die Armee versuchte, einen Panzerdetektor herzustellen, der nahezu perfekte Genauigkeit aufwies, aber stattdessen bewölkte Tage entdeckte, weil alle Trainingsbilder mit Panzern an einem wolkigen Tag aufgenommen wurden, und jedes Trainingsbild ohne Panzer wurde an einem klaren Tag genommen. Ein sehr relevantes Papier dazu ist: "Warum sollte ich Ihnen vertrauen?": Erklären von Vorhersagen eines Klassifikators - Ribeiro, et. al.


1
+1 danke für die Beantwortung meiner nicht genau definierten Fragen! und jetzt kenne ich den Begriff und werde ihre Formulierung lesen!
Haitao Du

Zum letzten Absatz: Die Armee hat sich diese Lektion anscheinend zu Herzen genommen !
GeoMatt22

2
+1 Das häufigste Leck, auf das ich stoße, ist ein Leck aus der Zukunft. Aus diesem Grund mache ich mir keine allzu großen Sorgen um die neue Flut von "Führen Sie einfach Ihre Daten durch unseren Algorithmus und es wird ein Modell wie ein Data Scientist!" Produkte. Maschinelles Lernen folgt dem Signal, auch wenn das Signal ein Leck ist.
Wayne

2

Eine Möglichkeit, betrügerische Variablen zu erkennen, besteht darin, ein Baummodell zu erstellen und die ersten Teilungen zu betrachten. Hier ist ein simuliertes Beispiel.

cheating_variable=runif(1e3)
x=matrix(runif(1e5),nrow = 1e3)
y=rbinom(1e3,1,cheating_variable)

d=data.frame(x=cbind(x,cheating_variable),y=y)

library(rpart)
library(partykit)
tree_fit=rpart(y~.,d)
plot(as.party(tree_fit))

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.