Jak mogę dynamicznie odróżnić dane kategoryczne od danych liczbowych?


12

Znam kogoś, kto pracuje nad projektem, który obejmuje przyjmowanie plików danych bez względu na kolumny lub typy danych. Zadanie polega na pobraniu pliku z dowolną liczbą kolumn i różnych typów danych oraz wyjściowych statystyk podsumowujących dane liczbowe.

Nie ma jednak pewności, jak dynamicznie przypisywać typy danych do niektórych danych liczbowych. Na przykład:

    CITY
    Albuquerque
    Boston
    Chicago

To oczywiście nie są dane liczbowe i będą przechowywane jako tekst. Jednak,

    ZIP
    80221
    60653
    25525

nie są wyraźnie oznaczone jako kategoryczne. Jego oprogramowanie przypisuje kod pocztowy jako statystyki numeryczne i podsumowujące dane wyjściowe, co nie ma sensu dla tego rodzaju danych.


Kilka pomysłów, które mieliśmy:

  1. Jeśli kolumna zawiera wszystkie liczby całkowite, oznacz ją jako kategoryczną. To oczywiście nie zadziałałoby, ale to był pomysł.
  2. Jeśli kolumna ma mniej niż n unikalnych wartości i jest liczbowa, oznacz ją kategorycznie. Może to być bliżej, ale nadal mogą występować problemy z przepływaniem danych liczbowych.
  3. Utrzymaj listę typowych danych liczbowych, które powinny faktycznie być jakościowe, i porównaj nagłówki kolumn z tą listą w celu dopasowania. Na przykład wszystko, co zawiera „ZIP”, byłoby kategoryczne.

Mój żołądek mówi mi, że nie ma sposobu, aby dokładnie przypisać dane liczbowe jako kategoryczne lub liczbowe, ale liczyłem na sugestię. Wszelkie informacje, które posiadasz, są bardzo mile widziane.


Nie jest to pełny dowód, ale jeśli zaczyna się od 0, zwykle nie jest to numeryczny
paparazzo

Prawdopodobnie powinieneś również zadać sobie pytanie, jakie są konsekwencje popełnienia błędu? To powinno określić, ile wysiłku musisz włożyć w ten proces. Czy chcesz 90% dokładności, 99% dokładności czy 99,9999% dokładności?
Spacedman

Wziąłbym wszystkie heurystyki sugerowane w odpowiedziach jako cechy i wytrenował binarny klasyfikator.
Emre

Zobacz stats.stackexchange.com/a/106400/17230 . Tak naprawdę nie ma tutaj prawdziwej prawdy.
Scortchi - Przywróć Monikę

Odpowiedzi:


8

Nie znam niezawodnego sposobu na zrobienie tego. Oto jeden pomysł z mojej głowy:

  1. Domyślnie traktuj wartości jako jakościowe.
  2. Sprawdź różne atrybuty danych, które sugerowałyby, że są one rzeczywiście ciągłe. Wagi tych atrybutów na podstawie prawdopodobieństwa korelacji z ciągłymi danymi. Oto kilka możliwych przykładów:
    • Wartościami są liczby całkowite: +.7
    • Wartości są zmiennoprzecinkowe: +.8
    • Wartości są zwykle dystrybuowane: +.3
    • Wartości zawierają stosunkowo niewielką liczbę unikalnych wartości: +.3
    • Nie wszystkie wartości mają tę samą liczbę znaków: +.1
    • Wartości nie zawierają zer wiodących: +.1
  3. Traktuj dowolne kolumny, których suma jest większa niż 1, jako liczbowe. Dostosuj współczynniki i wagi w oparciu o testowanie różnych zestawów danych do swoich potrzeb. Aby to zrobić, możesz nawet zbudować i wyszkolić osobny algorytm uczenia maszynowego.

Ta odpowiedź jest interesująca. Zamiast dać inną odpowiedź, chciałbym zasugerować modyfikację tego. A co z traktowaniem tego problemu jako zwykłego problemu z klasyfikacją? Możesz zdefiniować zestaw funkcji dla każdej kolumny, w oparciu o atrybuty w tej odpowiedzi (liczba całkowita, liczba zmiennoprzecinkowa, normalnie dystrybuowana, względna liczba unikalnych wartości itp.). Następnie jest tylko kwestia zastosowania algorytmu klasyfikacji.
Pablo Suau

@PabloSuau, podoba mi się ten pomysł. Algorytmy klasyfikacji mogą być tutaj świetną metodą. Dzięki jncraton za niektóre cechy do obejrzenia.
Poisson Fish

4

Jeśli masz na przykład liczbę dzieci w rodzinie (która może wynosić na przykład od 0 do 5), czy jest to zmienna kategoryczna lub liczbowa? W rzeczywistości zależy to od twojego problemu i tego, jak zamierzasz go rozwiązać. W tym sensie możesz wykonać następujące czynności:

  • Oblicz liczbę unikalnych wartości tej kolumny
  • Podziel tę liczbę przez całkowitą liczbę wierszy
  • Jeśli ten stosunek jest poniżej pewnego progu (na przykład 20%), uznajesz go za kategoryczny.

W przypadku wartości dyskretnych jednym dodatkowym testem może być: użycie modelu regresji do oszacowania niektórych parametrów i sprawdzenie, czy oszacowane wartości są zawarte w oryginalnym zestawie wartości. Jeśli nie jest to prawdą, prawdopodobnie masz do czynienia z danymi kategorycznymi (jak w przypadku ZIP).

W przeszłości działało to dla mnie stosunkowo dobrze ...


2

Ponieważ to pytanie zostało zamieszczone w krzyżowych wiadomościach, wstępne komentarze @nickcox na temat Cross Validated są bardzo trafne i prawdziwe. Moje poglądy są nieco inne. Na przykład przeredagowałbym pytanie, rozkładając je na dwie części: po pierwsze, chodzi o to, jak zająłby się klasyfikowanie strumienia nieznanych informacji według typu danych, a po drugie, jakiego rodzaju można spodziewać się błędnej klasyfikacji. Na oba pytania można natychmiast odpowiedzieć, jeśli ktoś chce poświęcić na to trochę czasu.

Pierwszy problem polega na opracowaniu opartego na regułach systemu eksperckiego zgodnie z tym, co zostało wstępnie zaproponowane w komentarzach i odpowiedziach na te wątki, z wykorzystaniem próbek rzeczywistych danych, które są łatwo dostępne.

Po drugie, biorąc pod uwagę, że te rzeczywiste dane zawierają znane typy danych, porównuje błąd klasyfikacji.

Trzeci krok obejmowałby iteracyjną aktualizację reguł, aby dokładniej odzwierciedlały przekazywane informacje - w zakresie, w jakim jest to możliwe.

Moim zdaniem, choć nużący, taki projekt nie wymagałby zbytniej pracy.

---- Dodatkowy komentarz ----

Dobra dyskusja na temat ekstrakcji funkcji związanych z procesem generowania danych pojawiła się tutaj na CV:

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

Wyodrębnianie funkcji, selekcja i MZD to doskonały punkt wyjścia do opracowania systemu eksperckiego.


Usunąłem pytanie dotyczące weryfikacji krzyżowej. Dla porównania @NickCox stwierdził: „Jest gorzej niż myślisz, nawet jeśli uważasz, że jest gorzej niż myślisz. Kropki dziesiętne mogą czaić się w zmiennych kategorialnych, jako część zakodowanych klasyfikacji, np. Branż lub chorób. Małe liczby całkowite mogą oznaczać liczby niż kategorie: 3, co oznacza 3 samochody lub koty, to nie to samo co 3, co oznacza, że ​​„osoba jest właścicielem samochodu” lub „osoba jest własnością kota”. Pomiary mogą być zwyczajnie liczbami całkowitymi zgodnie z konwencją, np. wysokości osób mogą być tylko zgłaszane jako liczba całkowita cm lub cale, ciśnienie krwi jako liczba całkowita mm Hg. ”
Poisson Fish

@ Drugi komentarz @NickCox: „Liczba odrębnych (lepszych niż„ unikatowy ”, które nadal ma podstawowe znaczenie występowania tylko raz) wartości, również nie jest dobrym przewodnikiem. Liczba możliwych wysokości osób możliwych w umiarkowanych próbkach wynosi prawdopodobnie znacznie mniej niż liczba różnych przynależności religijnych lub pochodzenia etnicznego ”.
Poisson Fish
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.