Outlier Detection

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Moin,

hier passiert ja nix und manchmal hilft es ja einfach Sachen runterzuschreiben und/oder jemand hat ähnliche Probleme schon mal gehabt.

Ich hab einen Datensatz von (jährlichen) Fragebogen von Unternehmen, so ca 1.000 Unternehmen mit ganz vielen Fragen. Problem ist, dass einige aus Dumheit oder Absicht Bullshit eintragen. Da ich nicht jede Firme einzeln prüfen kann, würde ich gerne automatisiert (vorzugsweise in R) prüfen, welche Beobachtungen nicht passen.

Auf der einen Seite könnte ich über die Jahre prüfen, aber da ist das bei uns mit der Datenbank noch nicht so einfach und außerdem ist die Zeitreihe nicht so lange. Daher würde ich gerne innerhalb der cross section des Datensatzes nach Outliern suchen. Ein Problem dabei ist, dass ich kein Modell im Hinterkopf habe, sondern nur den Datensatz als solches. Daher fallen einige Methoden weg, weil ich imho keine tree based models oder einflussreiche Beobachtungen machen kann.

Bisher ist mir hauptsächlich die Idee mit kmeans Clustern gekommen. Ich nehme 5-6 Variablen aus dem Datensatz von denen ich denke, dass sie zusammenpassen (z.B. Umsatz, Anzahl Mitarbeiter, ect.) und meanclustere den Datensatz. Dann schaue ich mir an wie jede Beobachtung vom Clustermean abweicht und summiere die Absolutwerte der Abweichungen. Die Beobachtungen mit den höchsten Abweichungen würde ich mir genauer anschauen und "manuell" prüfen.

Überlege gerade noch, ob ich so etwas ähnliches mit Kernelanalysen mache. Einfach die 5-6 Variablen reinwerfen und gucken welche Beobachtungen die niedrigste Density haben. Irgendwie sollte ich wohl dabei auch noch Clustern. Scheinbar würde sich sowas wie Local Outlier Factor Analyse oder ähnliches anbieten.

Jemand sonst noch gute Ideen?
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Ich werde es fürs erste mit dem Local Outlier Factor probieren, der recht easy in R implementiert ist. Bei Beobachtungen mit hohem Outlier Factor schaue ich mir noch die 4-6 nächsten Nachbarn im Vergleich an. Dann hat man ein Gefühl, ob die Abweichung sinnvoll ist oder eher ein falscher Eintrag.

Die ganzen anderen Clustergeschichten machen bei der Heterogenität meiner Daten afaik nicht so viel Sinn, daher auch die nearest neighbour Variante, die wesentlich lokaler ist.
 
Mitglied seit
19.03.2002
Beiträge
2.539
Reaktionen
11
Also kein Beispieldaten etc., aber wieso kannst du die nicht einzeln prüfen?

Würde es nicht tendenziell Sinn machen für jedes Unternehmen die Antworten zu checken und die, die mehr als x% vom Median abweichen bei y% der Fragen wegzuwerfen?
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Also ich hab ca 500 Unternehmen die bis zu 5 Fragebögen ausfüllen und da so jeweils 200 Fragen beantworten. Mein Ziel ist eine gewissen Automatisierung. Die Unternehmen sind btw verdammt unterschiedlich groß etc. Einfach nur den Median aller Unternehmen führt mich nicht weit.

Ich fang jetzt die Tage mit der Alternative über den Jahrlangen Querschnitt an. Hab mir aber noch nicht viele Gedanken gemacht. Eventuell erst mal univariat Zeitreihenmodelle, wobei das bei 4-8 Jahren auch etwas albern ist. muss ich mir noch Gedanken machen
 

FORYOUITERRA

TROLL
Mitglied seit
22.07.2002
Beiträge
4.504
Reaktionen
371
Website
www.frauentag.de
komplizierte aufgabe. die daten werden unterschiedliche skalenniveaus haben, und fragebögen sind eh eine wissenschaft für sich und es ist absolut nicht klar, was ein outlier überhaupt ist.

ich würde glaube ich erstmal versuchen mit den originaldaten zu arbeiten und, wenn ich tatsächlich outlier vermute, erstmal zu robusten methoden greifen.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Das trifft es gut. Leider wird werden die Daten hauptsächlich deskriptiv ausgewertet. Es gibt keine weiterführenden Analysen die robuste Methoden verwenden könnten.

Items und andere nicht rein quantitative Variablen lass ich fürs erste (oder wahrscheinlich für immer) raus. Bei den qualitativen Items, macht eventuell der Vergleich über die Zeit noch Sinn.

Bei den quantitativen Variablen innerhalb der cross section mache ich das wie oben beschreiben oder etwas in die Richtung wie hier
https://tsmatz.wordpress.com/2017/0...ector-machine-with-microsoftml-rxoneclasssvm/

Über die Jahre fange ich erst an nachzudenken.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Wusste gar nicht, dass ich schon mal dazu gepostet hatte. Ich hatte mal wieder Zeit mich damit zu beschäftigen.

ATM versuche ich folgendes:
Startend von einem Fragebogen mit > 300 obs und 200 Variablen, predicte ich eine Variable mit dem Rest des Fragebogens.

1. Behalte alle numerischen Variablen.
2. Filter near Zero Variablen ( ~ 100) raus ( https://topepo.github.io/caret/pre-processing.html#zero--and-near-zero-variance-predictors)
3. Filter zu hoch korrelierte Variablen (~30 )raus ( https://topepo.github.io/caret/pre-processing.html#identifying-correlated-predictors)
4. Filter noch paar manuell raus (~1-3), die sinnlos sind aber überlebt haben ( z.B. Uhrzeit Erfassung weder near Zero noch hoch korreliert mit irgendwas.)
5. Center und Scaling der Daten
6. Random Forest Modell drauf mit >1000 trees und jeweils 10 random variables der restlichen Daten

Dann vergleiche ich die Prediction mit dem Original Wert. Kann dann aber natürlich nicht sagen, warum die Prediction groß abweicht.
 
Mitglied seit
21.08.2010
Beiträge
7.572
Reaktionen
828
Hab da grad mal draufgeschaut. Need moar Info.
Warum ein Random Forest? Warum keine Linearisierung? Gibt es die Möglichkeit das alles irgendwie zu Interpretieren bzw. gibt es logische Zusammenhänge? Warum nicht einfach zumindest teilweise dimensionsreduzierende Verfahren draufschmeißen? linearisieren und dann PCA wäre ja eine Möglichkeit. DIe Machine-Learning-Sachen sind halt (größtenteils) doof wenn man gerade keine Black Box will.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Hab da grad mal draufgeschaut. Need moar Info.
Warum ein Random Forest?

Weil ich mir dann keine wirklichen Gedanken über die Zusammenhänge machen und Modell Selction machen muss. Ich schließe ja nur paar "schlechte" Variablen wie oben beschrieben aus und dann wählt er Random das Sample und erklärenden Variablen.

Warum keine Linearisierung?
Im Sinne einer klassischen Regression?

Gibt es die Möglichkeit das alles irgendwie zu Interpretieren bzw. gibt es logische Zusammenhänge?

Mag es geben aber ich kenne sie nicht gut genug und wahrscheinlich sind meine Daten zu schlecht und hab zu wenige Beobachtungen. Mich interessiert die Interpretation oder einzelne Zusammenhänge auch eher weniger, sondern nur die bestmöglich Vorhersage um Outlier zu flaggen. Klar wärs cool zu begründen warum es ein Outlier ist, aber selbst wenn ich ne interpretierbares Modell dahinter hätte, müsste ich das erst irgendwie anderen Leute erklären, warum sie deshalb nachfragen sollen. Das ist mir zu aufwändig.
Test das ganze eventuell auch auf Daten aus dem Energiebereich, da hab ich wohl mehr Beobachtungen für ein besseres Modell, aber die Argumentation bleibt die gleiche.

Warum nicht einfach zumindest teilweise dimensionsreduzierende Verfahren draufschmeißen? linearisieren und dann PCA wäre ja eine Möglichkeit. DIe Machine-Learning-Sachen sind halt (größtenteils) doof wenn man gerade keine Black Box will.

PCA hatte ich auch überlegt, bzw könnte ich das ja beim Pre Processing auch noch einbauen (siehe Link). Ddie Compenents sind meinem Verständnis auch etwas blackboxig, bzw müsste ich die einzelnen Dimensionen ja erstmal anschauen.

Um mich zu wiederholen ich mag hier gerade die Black Box, solange sie gute Ergebnisse liefert und mir wirkliche Outlier anzeigt, wo dann nachher eh ein Mensch sich anschaut, ob das vielleicht einfach doch passt, weil Grund XYZ oder der Fehler vom Datenlieferant korrigiert wird.
 
Mitglied seit
21.08.2010
Beiträge
7.572
Reaktionen
828
Ich denke ich bin mir nicht ganz sicher was Du hier mit Outlier meinst. Nur zur Präzisierung: Das sind dann obs die von deinem RF nicht ordentlich vorhergesagt/klassifiziert werden können weil sie strukturell irgendwie anders sind (was uns nur binär ja/nein interessiert), ja?

Statt PCA ginge auch FA, da könntest Du dann über die Rotation noch schön interpretierbare Faktoren bekommen. Wenn man das ein paar Mal macht und es funktioniert gut, dann bleiben vielleicht nur noch eine Handvoll gut interpretierbarer Vars übrig und man tut sich direkt leichter. Wenn die Interpretation/Blackboxiness eher egal ist, dann kann man es aber auch lassen. Wobei ich ja PCA/FA nicht sonderlich blackboxig finde, da man ja sehr genau nachvollziehen kann was zusammengeworfen wurde.

Linearisierung im Sinne von ln() einzelner Variablen die offensichtlich nichtlinear sind. Das sieht man ja im Scatterplot der Variablen gegeneinander und könnte es dann ggf. auch automatisieren: OLS mit quadrat von allen Variablen einzeln gegen alle anderen -> die extrahieren wo das quadrat signifikant mit relevant großem beta auftaucht, die dann loggen und danach weitermachen.
Ist natürlich ein eher zielorientierter Hack, könnte aber die qualität des RF verbessern.
 
Zuletzt bearbeitet:

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Ich denke ich bin mir nicht ganz sicher was Du hier mit Outlier meinst. Nur zur Präzisierung: Das sind dann obs die von deinem RF nicht ordentlich vorhergesagt/klassifiziert werden können weil sie strukturell irgendwie anders sind (was uns nur binär ja/nein interessiert), ja?

Ja so in etwa definiere ich gerade Outlier. Das kann dann z.B. einfach nur eine Falscheingabe mit ner 0 Zuviel sein oder irgendwas anderes.

Ich hänge da nicht zwingend am Random Forest. Der gefiel mir gerade, weil ich viel zu viele Variablen in meinen Daten habe und zu wenig Zeit und Domainwissen, um gute Variablen auszuwählen. Außerdem hab ich nur die Cross Section und noch keine Zeitreihen. Mit Zeitreihen würde ich glaub ich eher VAR oder AR Modelle versuchen mit den lagged values.

Statt PCA ginge auch FA, da könntest Du dann über die Rotation noch schön interpretierbare Faktoren bekommen. Wenn man das ein paar Mal macht und es funktioniert gut, dann bleiben vielleicht nur noch eine Handvoll gut interpretierbarer Vars übrig und man tut sich direkt leichter. Wenn die Interpretation/Blackboxiness eher egal ist, dann kann man es aber auch lassen. Wobei ich ja PCA/FA nicht sonderlich blackboxig finde, da man ja sehr genau nachvollziehen kann was zusammengeworfen wurde.
Muss ich mal überlegen. Zugegeben ist mein Wissen zu PCA rudimentär

Linearisierung im Sinne von ln() einzelner Variablen die offensichtlich nichtlinear sind. Das sieht man ja im Scatterplot der Variablen gegeneinander und könnte es dann ggf. auch automatisieren: OLS mit quadrat von allen Variablen einzeln gegen alle anderen -> die extrahieren wo das quadrat signifikant mit relevant großem beta auftaucht, die dann loggen und danach weitermachen.
Ist natürlich ein eher zielorientierter Hack, könnte aber die qualität des RF verbessern.

Klar das könnte ich machen. Das Preprocessing bietet auch Box-Cox Transformation an.

Zur Zeit bin ich auch gerade verwundert wie schlecht der RF in den Energiedaten läuft. Hab da tausende Beobachtungen, aber nur ein paar gute Predictors. Beim Rest ist die Qualität mau. Ne einfache Regression hat R squared ~ 45% . der RF nur ~ 30 %. Wahrscheinlich nimmt er halt nur ab und zu die guten mit und sonst die schlechten.
 
Mitglied seit
21.08.2010
Beiträge
7.572
Reaktionen
828
Jo, das klingt danach als ob ein bisschen ln() oder Transformationen generell durchaus was bringen könnten. Bei echten Daten findet man ja häufig eine Paretoverteilung mit allem Drum und Dran. … Apropos, man könnte auch überlegen das ganze verteilungsbasiert anzugehen. Alles was keine Varianz hat rausschmeißen (hast Du schon) und dann durch monotone Transformationen es in richtig unimodal und einigermaßen symmetrisch biegen --> Muskete.

Dafür muss man halt einen Automaten coden der zumindest ungefähr die Verteilung bestimmt, danach dann die passende Transformation vornimmt und dann die Verbesserung misst.

Zu PCA/FA könnte ich Dir einiges erzählen. Kurzfassung: PCA ist zum Zusammenfassen und basiert auf Varianz, (explorative) FA ist um unbeobachtbare Konstrukte zu erfassen für die man einen Haufen (mittelgute) Instrumente hat und basiert auf Kovarianz. Manche Menschen behaupten, dass PCA und FA näherungsweise das Selbe sind.
 

Benrath

Community-Forum
Mitglied seit
19.05.2003
Beiträge
19.485
Reaktionen
664
Jo, das klingt danach als ob ein bisschen ln() oder Transformationen generell durchaus was bringen könnten. Bei echten Daten findet man ja häufig eine Paretoverteilung mit allem Drum und Dran. … Apropos, man könnte auch überlegen das ganze verteilungsbasiert anzugehen. Alles was keine Varianz hat rausschmeißen (hast Du schon) und dann durch monotone Transformationen es in richtig unimodal und einigermaßen symmetrisch biegen --> Muskete.

Dafür muss man halt einen Automaten coden der zumindest ungefähr die Verteilung bestimmt, danach dann die passende Transformation vornimmt und dann die Verbesserung misst.

Ja muss erst mal schauen, ob die Datenqualität noch besser werden kann. Bin auch etwas enttäuscht, dass die Berechnung so lange dauert und das Ergebnis doch eher mau ist. Die normale Regression macht sich ja besser.

Eventuell ist da auch eher das Problem für den RF. Wenn das Modell tatsächlich einen linearen Zusammenhang enthält wie Brutto = 1.2 * Netto ist das eher doof mit Cutoffs und unterschiedlichen Trees oder?




Zu PCA/FA könnte ich Dir einiges erzählen. Kurzfassung: PCA ist zum Zusammenfassen und basiert auf Varianz, (explorative) FA ist um unbeobachtbare Konstrukte zu erfassen für die man einen Haufen (mittelgute) Instrumente hat und basiert auf Kovarianz. Manche Menschen behaupten, dass PCA und FA näherungsweise das Selbe sind.

Darauf komme ich gerne zurück, wenn ich entsprechende Marktdaten habe und wir etwas über die Segmentierung des Marktes lernen wollen. Da macht das imho mehr Sinn als hier.
 
Oben