Wie kann ich dynamisch zwischen kategorialen und numerischen Daten unterscheiden?

12

Ich kenne jemanden, der an einem Projekt arbeitet, bei dem Datendateien unabhängig von den Spalten oder Datentypen aufgenommen werden. Die Aufgabe besteht darin, eine Datei mit einer beliebigen Anzahl von Spalten und verschiedenen Datentypen zu erstellen und zusammenfassende Statistiken zu den numerischen Daten auszugeben.

Er ist sich jedoch nicht sicher, wie er Datentypen für bestimmte zahlenbasierte Daten dynamisch zuweisen soll. Beispielsweise:

    CITY
    Albuquerque
    Boston
    Chicago

Dies sind offensichtlich keine numerischen Daten und werden als Text gespeichert. Jedoch,

    ZIP
    80221
    60653
    25525

sind nicht eindeutig als kategorisch gekennzeichnet. Seine Software würde die Postleitzahl als numerische und zusammenfassende Ausgabestatistik dafür zuweisen, was für diese Art von Daten nicht sinnvoll ist.


Ein paar Ideen, die wir hatten, waren:

  1. Wenn eine Spalte nur aus Ganzzahlen besteht, kennzeichnen Sie sie als kategorisch. Das würde natürlich nicht funktionieren, aber es war eine Idee.
  2. Wenn eine Spalte weniger als n hat eindeutige Werte hat und numerisch ist, kennzeichnen Sie sie als kategorisch. Dies könnte näher sein, aber es könnte immer noch Probleme mit durchfallenden numerischen Daten geben.
  3. Pflegen Sie eine Liste allgemeiner numerischer Daten, die eigentlich kategorisch sein sollten, und vergleichen Sie die Spaltenüberschriften mit dieser Liste, um Übereinstimmungen zu erhalten. Zum Beispiel wäre alles, was "ZIP" enthält, kategorisch.

Mein Bauch sagt mir, dass es keine Möglichkeit gibt, numerische Daten genau als kategorial oder numerisch zuzuweisen, aber ich hoffte auf einen Vorschlag. Jeder Einblick, den Sie haben, wird sehr geschätzt.

Poisson Fisch
quelle
Kein vollständiger Beweis, aber wenn es mit einer 0 beginnt, ist es normalerweise nicht numerisch
Paparazzo
Sie sollten sich wahrscheinlich auch fragen, was die Folge ist, wenn Sie etwas falsch machen? Das sollte bestimmen, wie viel Aufwand Sie in den Prozess investieren müssen. Möchten Sie 90% genau oder 99% genau oder 99,9999% genau?
Spacedman
Ich würde alle in den Antworten vorgeschlagenen Heuristiken als Merkmale verwenden und einen binären Klassifikator trainieren.
Emre
Siehe stats.stackexchange.com/a/106400/17230 . Hier gibt es nicht wirklich eine Grundwahrheit.
Scortchi - Wiedereinstellung Monica
Siehe auch stats.stackexchange.com/q/336261/17230 .
Scortchi - Wiedereinsetzung Monica

Antworten:

7

Mir ist kein narrensicherer Weg dazu bekannt. Hier ist eine Idee aus meinem Kopf:

  1. Behandeln Sie Werte standardmäßig als kategorisch.
  2. Suchen Sie nach verschiedenen Attributen der Daten, die implizieren würden, dass sie tatsächlich kontinuierlich sind. Gewichten Sie diese Attribute basierend darauf, wie wahrscheinlich es ist, dass sie mit kontinuierlichen Daten korrelieren. Hier einige mögliche Beispiele:
    • Werte sind ganze Zahlen: +.7
    • Werte sind Gleitkommazahlen: +.8
    • Werte sind normal verteilt: +.3
    • Werte enthalten eine relativ kleine Anzahl eindeutiger Werte: +.3
    • Werte sind nicht alle gleich viele Zeichen: +.1
    • Werte enthalten keine führenden Nullen: +.1
  3. Behandeln Sie alle Spalten, deren Summe größer als 1 ist, als numerisch. Passen Sie die Faktoren und Gewichte basierend auf Tests anhand verschiedener Datensätze an Ihre Bedürfnisse an. Sie können sogar einen separaten Algorithmus für maschinelles Lernen erstellen und trainieren, um dies zu tun.
jncraton
quelle
Diese Antwort ist interessant. Anstatt eine andere Antwort zu geben, möchte ich eine Änderung dieser vorschlagen. Was ist mit der Behandlung dieses Problems als reguläres Klassifizierungsproblem? Sie können für jede Spalte eine Reihe von Features definieren, basierend auf den Attributen in dieser Antwort (Ganzzahl, Gleitkomma, Normalverteilung, relative Anzahl eindeutiger Werte usw.). Danach müssen Sie lediglich einen Klassifizierungsalgorithmus verwenden.
Pablo Suau
@PabloSuau, ich mag diese Idee. Klassifizierungsalgorithmen könnten hier eine großartige Methode sein. Vielen Dank an jncraton für einige Eigenschaften.
Poisson Fish
4

Wenn Sie beispielsweise die Anzahl der Kinder einer Familie haben (die beispielsweise zwischen 0 und 5 liegen kann), handelt es sich um eine kategoriale oder numerische Variable? Eigentlich hängt es von Ihrem Problem ab und davon, wie Sie es lösen wollen. In diesem Sinne können Sie Folgendes tun:

  • Berechnen Sie die Anzahl der eindeutigen Werte dieser Spalte
  • Teilen Sie diese Zahl durch die Gesamtzahl der Zeilen
  • Wenn dieses Verhältnis unter einem bestimmten Schwellenwert liegt (z. B. 20%), betrachten Sie es als kategorisch.

Bei diskreten Werten könnte ein zusätzlicher Test sein: Verwenden Sie ein Regressionsmodell, um einige der Parameter zu schätzen und zu überprüfen, ob die geschätzten Werte im ursprünglichen Wertesatz enthalten sind. Wenn dies nicht der Fall ist, handelt es sich wahrscheinlich um kategoriale Daten (wie dies bei ZIP der Fall ist).

Es hat in der Vergangenheit relativ gut für mich funktioniert ...

Bernardo Aflalo
quelle
2

Da diese Frage gekreuzt wurde, sind die ersten Kommentare von @nickcox zu Cross Validated von hoher Relevanz und zutreffend. Meine Ansichten sind etwas anders. Zum Beispiel würde ich die Frage umformulieren und in zwei Teile zerlegen: Erstens gibt es die Frage, wie man einen Strom unbekannter Informationen nach Datentyp klassifizieren würde und zweitens, welche Art von Fehlklassifizierungsrate zu erwarten ist. Beide Fragen sind sofort beantwortbar, wenn sich jemand die Zeit dafür nehmen möchte.

Die erste Ausgabe besteht darin, ein regelbasiertes Expertensystem zu entwickeln, das den vorläufigen Vorschlägen in den Kommentaren und Antworten zu diesen Themen unter Verwendung von Beispielen realer Daten entspricht, die leicht verfügbar sind.

Zweitens, da diese realen Daten bekannte Datentypen enthalten, wird der Klassifizierungsfehler bewertet.

Ein dritter Schritt würde darin bestehen, die Regeln iterativ zu aktualisieren, um die Informationen, die durchlaufen werden, genauer wiederzugeben - soweit dies möglich ist.

Meiner Meinung nach würde ein solches Projekt, obwohl es langwierig ist, keinen unerschwinglichen Arbeitsaufwand bedeuten.

---- Zusätzlicher Kommentar ----

Eine gute Diskussion der Merkmalsextraktion in Bezug auf den Datengenerierungsprozess, der im Lebenslauf auftaucht, ist hier:

/stats/191935/what-does-the-process-that-generates-the-data-mean-and-how-does-feature-selec

Die Merkmalsextraktion, -auswahl und das DGP sind ein hervorragender Ausgangspunkt für die Entwicklung eines Expertensystems.

DJohnson
quelle
Ich habe die Frage zu Cross Validated gelöscht. Als Referenz erklärte @NickCox: "Es ist schlimmer als Sie denken, auch wenn Sie denken, dass es schlimmer ist als Sie denken. Dezimalstellen könnten innerhalb kategorialer Variablen als Teil codierter Klassifikationen, z. B. von Branchen oder Krankheiten, lauern. Kleine ganze Zahlen könnten eher Zählungen bedeuten." als Kategorien: 3, was 3 Autos oder Katzen bedeutet, ist nicht dasselbe wie 3, was bedeutet, dass "Person ein Auto besitzt" oder "Person gehört einer Katze". Maße können gemäß Konvention nur ganze Zahlen sein, z angegeben als Ganzzahl cm oder Zoll, Blutdruck als Ganzzahl mm Hg. "
Poisson Fish
@NickCox zweiter Kommentar: "Die Anzahl der unterschiedlichen Werte (ein besserer Begriff als" eindeutig ", der immer noch die primäre Bedeutung hat, nur einmal vorzukommen) ist ebenfalls kein guter Anhaltspunkt. Die Anzahl der unterschiedlichen Personengrößen, die in moderaten Stichproben möglich sind, beträgt wahrscheinlich viel weniger als die Anzahl der verschiedenen religiösen Zugehörigkeiten oder ethnischen Herkunft. "
Poisson Fish