Podstawowy problem
Oto mój podstawowy problem: próbuję zgrupować zestaw danych zawierający niektóre bardzo wypaczone zmienne z licznikami. Zmienne zawierają wiele zer i dlatego nie są zbyt pouczające dla mojej procedury klastrowania - która prawdopodobnie jest algorytmem k-średnich.
Dobra, mówisz, po prostu przekształć zmienne za pomocą pierwiastka kwadratowego, pola Coxa lub logarytmu. Ale ponieważ moje zmienne są oparte na zmiennych kategorialnych, obawiam się, że mógłbym wprowadzić błąd systematyczny, posługując się zmienną (opartą na jednej wartości zmiennej kategorialnej), pozostawiając inne (oparte na innych wartościach zmiennej kategorialnej) takie, jakie są .
Przejdźmy do bardziej szczegółowych informacji.
Zestaw danych
Mój zestaw danych reprezentuje zakupy przedmiotów. Przedmioty mają różne kategorie, na przykład kolor: niebieski, czerwony i zielony. Zakupy są następnie grupowane, np. Według klientów. Każdy z tych klientów jest reprezentowany przez jeden wiersz mojego zestawu danych, więc w jakiś sposób muszę agregować zakupy w stosunku do klientów.
Sposób, w jaki to robię, polega na liczeniu zakupów, w których przedmiot ma określony kolor. Więc zamiast pojedynczej zmiennej color
, I skończyć z trzech zmiennych count_red
, count_blue
oraz count_green
.
Oto przykład ilustracji:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
Właściwie ostatecznie nie używam liczb bezwzględnych, używam współczynników (ułamek zielonych elementów wszystkich zakupionych przedmiotów na klienta).
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 0.71 | 0.29 | 0.00 |
-----------------------------------------------------------
c1 | 0.43 | 0.57 | 0.00 |
-----------------------------------------------------------
c2 | 0.09 | 0.91 | 0.00 |
-----------------------------------------------------------
c3 | 0.31 | 0.62 | 0.08 |
-----------------------------------------------------------
Wynik jest taki sam: dla jednego z moich kolorów, np. Zielonego (nikt nie lubi zielonego), otrzymuję zmienną skośną w lewo zmienną zawierającą wiele zer. W związku z tym k-średnich nie znajduje dobrego podziału dla tej zmiennej.
Z drugiej strony, jeśli znormalizuję moje zmienne (odejmij średnią, podziel przez odchylenie standardowe), zielona zmienna „wysadzi się” z powodu swojej małej wariancji i przyjmuje wartości z dużo większego zakresu niż inne zmienne, co sprawia, że wygląda bardziej ważne dla k-średnich, niż jest w rzeczywistości.
Kolejnym pomysłem jest przekształcenie zielonej zmiennej sk (r) ewed.
Przekształcanie skośnej zmiennej
Jeśli zmienię zieloną zmienną przez zastosowanie pierwiastka kwadratowego, będzie ona wyglądać nieco mniej przekrzywiona. (Tutaj zielona zmienna jest wykreślona na czerwono i zielono, aby zapewnić zamieszanie.)
Czerwony: oryginalna zmienna; niebieski: przekształcony przez pierwiastek kwadratowy.
Powiedzmy, że jestem zadowolony z wyniku tej transformacji (której nie jestem, ponieważ zera wciąż mocno wypaczają rozkład). Czy powinienem teraz skalować zmienne czerwone i niebieskie, chociaż ich rozkłady wyglądają dobrze?
Dolna linia
Innymi słowy, czy zniekształcam wyniki grupowania, obsługując kolor zielony w jedną stronę, ale w ogóle nie obsługując czerwonego i niebieskiego? Ostatecznie wszystkie trzy zmienne należą do siebie, więc czy nie powinny być traktowane w ten sam sposób?
EDYTOWAĆ
Wyjaśnij: Zdaję sobie sprawę, że k-średnich prawdopodobnie nie jest sposobem na uzyskanie danych opartych na zliczaniu . Moje pytanie naprawdę dotyczy jednak traktowania zmiennych zależnych. Wybór właściwej metody to osobna sprawa.
Nieodłącznym ograniczeniem moich zmiennych jest to
count_red(i) + count_blue(i) + count_green(i) = n(i)
, gdzie n(i)
jest łączna liczba zakupów klienta i
.
(Lub, równoważnie, count_red(i) + count_blue(i) + count_green(i) = 1
przy użyciu liczby względnej.)
Jeśli zmienię moje zmienne w inny sposób, odpowiada to nadaniu różnej wagi trzem warunkom ograniczenia. Jeśli moim celem jest optymalne rozdzielenie grup klientów, czy muszę dbać o naruszenie tego ograniczenia? Czy też „cel uzasadnia środki”?
count_red
,count_blue
acount_green
dane są zliczane. Dobrze? Jakie są zatem wiersze - przedmioty? I zamierzasz grupować przedmioty?Odpowiedzi:
@ttnphns podał dobrą odpowiedź.
Właściwe tworzenie klastrów często wymaga bardzo intensywnego myślenia o danych, więc zróbmy to trochę. Moim zdaniem najbardziej podstawowym aspektem twoich danych jest to, że są one złożone .
Z drugiej strony, twoim głównym zmartwieniem wydaje się być to, że masz dużo zer dla zielonych produktów i szczególnie zastanawiasz się, czy możesz przekształcić tylko zielone wartości, aby uczynić je bardziej podobnymi do pozostałych. Ponieważ jednak są to dane kompozycyjne, nie można myśleć o jednym zestawie liczb niezależnie od pozostałych. Co więcej, wydaje się, że najbardziej interesują Cię prawdopodobieństwo zakupu różnych kolorowych produktów, ale ponieważ wielu nie kupiło żadnych zielonych, martwisz się, że nie możesz oszacować tych prawdopodobieństw. Jednym ze sposobów rozwiązania tego problemu jest zastosowanie nieco bayesowskiego podejścia, w którym popychamy szacunkowe proporcje klientów w kierunku średniej proporcji, przy czym wielkość przesunięcia zależy od tego, jak daleko są od średniej i ile danych trzeba oszacować, aby byli prawdziwi prawdopodobieństwa.
Poniżej wykorzystuję twój przykładowy zestaw danych, aby zilustrować (w R) jeden ze sposobów podejścia do twojej sytuacji. Czytam dane i przekształcam je w proporcje rzędowe, a następnie obliczam średnie proporcje według kolumn. Dodam środki z powrotem do każdej liczby, aby uzyskać skorygowane liczby i nowe proporcje wierszy. To popycha szacunkową proporcję każdego klienta do średniej proporcji dla każdego produktu. Jeśli chcesz silniejszego szturchnięcia, możesz
15*mean.props
zamiast tego użyć wielu środków (takich jak, ).Istnieje kilka wyników tego. Jednym z nich jest to, że masz teraz niezerowe oszacowania leżące u podstaw prawdopodobieństw zakupu zielonych produktów, nawet jeśli klient tak naprawdę nie ma żadnych danych na temat zakupu jakichkolwiek zielonych produktów. Inną konsekwencją jest to, że masz teraz nieco ciągłe wartości, podczas gdy oryginalne proporcje były bardziej dyskretne; oznacza to, że zestaw możliwych oszacowań jest mniej zawężony, więc miara odległości, taka jak kwadratowa odległość euklidesowa, może mieć teraz większy sens.
Możemy wizualizować dane, aby zobaczyć, co się stało. Ponieważ są to dane kompozycyjne, w rzeczywistości mamy tylko dwie informacje i możemy je wykreślić w jednym wykresie rozrzutu. W przypadku większości informacji w kategoriach czerwonej i niebieskiej sensowne jest użycie ich jako osi. Widać, że skorygowane proporcje (czerwone liczby) są nieco przesunięte w stosunku do pierwotnych pozycji.
W tym momencie masz dane i wiele osób zaczynałoby od ich standaryzacji. Ponownie, ponieważ są to dane kompozycyjne, uruchomiłbym analizy skupień bez żadnej standaryzacji - te wartości są już współmierne, a standaryzacja zniszczyłaby niektóre informacje relacyjne. W rzeczywistości, patrząc na fabułę, myślę, że naprawdę masz tutaj tylko jeden wymiar informacji. (Przynajmniej w przykładowym zestawie danych; twój prawdziwy zestaw danych może się różnić). Chyba że z biznesowego punktu widzenia uważasz, że ważne jest, aby rozpoznać osoby, które mają duże prawdopodobieństwo zakupu zielonych produktów, jako odrębną grupę klientów, ja wyodrębni wyniki dla pierwszego głównego składnika (który stanowi 99,5% wariancji w tym zbiorze danych) i po prostu to zgrupuje.
źródło
Nie jest rozsądne przekształcanie zmiennych indywidualnie, ponieważ należą one do siebie (jak zauważyłeś) i wykonywanie k-średnich, ponieważ dane się liczą (możesz, ale k-średnich lepiej jest robić na ciągłych atrybutach, takich jak na przykład długość) .
Zamiast tego obliczyłem odległość chi-kwadrat (idealną do zliczeń) między każdą parą klientów, na podstawie zmiennych zawierających liczby. Następnie wykonaj hierarchiczne grupowanie (na przykład średnią metodę łączenia lub pełną metodę łączenia - nie obliczają one centroidów i dlatego nie wymagają odległości euklidesowej) lub inne klastrowanie pracujące z dowolnymi macierzami odległości.
Kopiowanie przykładowych danych z pytania:
Rozważ parę
c0
ic1
oblicz statystyki Chi-kwadrat dla ich2x3
tabeli częstotliwości. Weź pierwiastek kwadratowy z niego (tak jak robisz to podczas obliczania zwykłej odległości euklidesowej). To jest twój dystans. Jeśli odległość jest bliska 0, dwóch klientów jest podobnych.Może ci przeszkadzać, że sumy w rzędach w tabeli różnią się, a więc wpływa na odległość chi-kwadrat, gdy porównujesz
c0
zc1
vsc0
zc2
. Następnie oblicz (pierwiastek) odległości Phi-kwadrat :Phi-sq = Chi-sq/N
gdzieN
jest łączną całkowitą liczbą w dwóch aktualnie rozważanych wierszach (klientach). Jest to zatem znormalizowana odległość wrt do ogólnej liczby.Tak więc, odległość pomiędzy dowolnymi dwoma rzędami danych jest (kw. Korzeń) na chi-kwadrat lub phi-kwadrat statystyki w
2 x p
tabeli częstotliwości (p
jest liczba kolumn w danych). Jeśli którakolwiek kolumna w bieżącej2 x p
tabeli ma wartość zero, odetnij tę kolumnę i oblicz odległość na podstawie pozostałych niezerowych kolumn (jest to w porządku i tak robi na przykład SPSS, gdy oblicza odległość). Odległość chi-kwadrat jest faktycznie ważoną odległością euklidesową.źródło