Problema di base
Ecco il mio problema di base: sto cercando di raggruppare un set di dati contenente alcune variabili molto distorte con conteggi. Le variabili contengono molti zeri e pertanto non sono molto istruttive per la mia procedura di clustering, che è probabilmente un algoritmo k-mean.
Bene, dici, trasforma semplicemente le variabili usando radice quadrata, box cox o logaritmo. Ma poiché le mie variabili si basano su variabili categoriali, temo di poter introdurre una distorsione gestendo una variabile (basata su un valore della variabile categoriale), lasciando gli altri (basati su altri valori della variabile categoriale) così come sono .
Andiamo in qualche dettaglio in più.
Il set di dati
Il mio set di dati rappresenta gli acquisti di articoli. Gli articoli hanno categorie diverse, ad esempio colore: blu, rosso e verde. Gli acquisti vengono quindi raggruppati insieme, ad esempio dai clienti. Ognuno di questi clienti è rappresentato da una riga del mio set di dati, quindi devo in qualche modo aggregare gli acquisti sui clienti.
Il modo in cui lo faccio è contando il numero di acquisti, in cui l'articolo ha un certo colore. Così, invece di una sola variabile color
, io alla fine con tre variabili count_red
, count_blue
e count_green
.
Ecco un esempio per l'illustrazione:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
In realtà, non utilizzo i conteggi assoluti alla fine, utilizzo i rapporti (frazione di articoli verdi di tutti gli articoli acquistati per cliente).
-----------------------------------------------------------
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 |
-----------------------------------------------------------
Il risultato è lo stesso: per uno dei miei colori, ad esempio il verde (a nessuno piace il verde), ottengo una variabile inclinata a sinistra contenente molti zeri. Di conseguenza, k-mean non riesce a trovare un buon partizionamento per questa variabile.
D'altra parte, se standardizzo le mie variabili (sottrai media, dividi per deviazione standard), la variabile verde "esplode" a causa della sua piccola varianza e prende valori da un intervallo molto più ampio rispetto alle altre variabili, il che la fa sembrare più importante per k-mean di quanto non sia in realtà.
L'idea successiva è quella di trasformare la variabile verde di sk (r).
Trasformando la variabile obliqua
Se trasformo la variabile verde applicando la radice quadrata, appare un po 'meno inclinata. (Qui la variabile verde è tracciata in rosso e verde per garantire confusione.)
Rosso: variabile originale; blu: trasformato da radice quadrata.
Diciamo che sono soddisfatto del risultato di questa trasformazione (che non lo sono, poiché gli zeri distorcono ancora fortemente la distribuzione). Ora dovrei ridimensionare anche le variabili rosse e blu, anche se le loro distribuzioni sembrano a posto?
Linea di fondo
In altre parole, posso distorcere i risultati del cluster gestendo il colore verde in un modo, ma non gestendo affatto il rosso e il blu? Alla fine, tutte e tre le variabili appartengono insieme, quindi non dovrebbero essere gestite allo stesso modo?
MODIFICARE
Per chiarire: sono consapevole che k-mean non è probabilmente la strada da percorrere per i dati basati sul conteggio . La mia domanda però riguarda davvero il trattamento delle variabili dipendenti. La scelta del metodo corretto è una questione separata.
Il vincolo intrinseco nelle mie variabili è quello
count_red(i) + count_blue(i) + count_green(i) = n(i)
, dove n(i)
è il numero totale di acquisti del cliente i
.
(O, equivalentemente, count_red(i) + count_blue(i) + count_green(i) = 1
quando si usano i conteggi relativi.)
Se trasformo le mie variabili in modo diverso, ciò corrisponde a dare pesi diversi ai tre termini del vincolo. Se il mio obiettivo è separare in modo ottimale gruppi di clienti, devo preoccuparmi di violare questo vincolo? O "il fine giustifica i mezzi"?
count_red
, count_blue
e count_green
ei dati sono conteggi. Giusto? Quali sono le righe quindi - elementi? E hai intenzione di raggruppare gli articoli?