Problema básico
Aqui está o meu problema básico: estou tentando agrupar um conjunto de dados que contém algumas variáveis muito assimétricas com contagens. As variáveis contêm muitos zeros e, portanto, não são muito informativas para o meu procedimento de agrupamento - o que provavelmente é um algoritmo k-means.
Tudo bem, você diz, apenas transforme as variáveis usando raiz quadrada, box cox ou logaritmo. Porém, como minhas variáveis são baseadas em variáveis categóricas, receio poder introduzir um viés manipulando uma variável (com base em um valor da variável categórica), enquanto deixo outras (com base em outros valores da variável categórica) do jeito que são. .
Vamos entrar em mais alguns detalhes.
O conjunto de dados
Meu conjunto de dados representa compras de itens. Os itens têm categorias diferentes, por exemplo, cor: azul, vermelho e verde. As compras são então agrupadas, por exemplo, pelos clientes. Cada um desses clientes é representado por uma linha do meu conjunto de dados, então, de alguma forma, tenho que agregar compras aos clientes.
A maneira como faço isso é contando o número de compras, onde o item é de uma determinada cor. Então, ao invés de uma única variável color
, eu acabar com três variáveis count_red
, count_blue
e count_green
.
Aqui está um exemplo para ilustração:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
Na verdade, não uso contagens absolutas no final, uso proporções (fração de itens verdes de todos os itens comprados por 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 |
-----------------------------------------------------------
O resultado é o mesmo: para uma das minhas cores, por exemplo, verde (ninguém gosta de verde), recebo uma variável inclinada para a esquerda contendo muitos zeros. Consequentemente, o k-means falha ao encontrar um bom particionamento para essa variável.
Por outro lado, se eu padronizar minhas variáveis (subtrair média, dividir por desvio padrão), a variável verde "explode" devido à sua pequena variação e assume valores de uma faixa muito maior que as outras variáveis, o que faz com que pareça mais importante para k-means do que realmente é.
A próxima idéia é transformar a variável verde sk (r) ewed.
Transformando a variável inclinada
Se eu transformar a variável verde aplicando a raiz quadrada, ela parecerá um pouco menos distorcida. (Aqui a variável verde é plotada em vermelho e verde para garantir confusão.)
Vermelho: variável original; azul: transformado por raiz quadrada.
Digamos que estou satisfeito com o resultado dessa transformação (o que não estou, pois os zeros ainda distorcem fortemente a distribuição). Devo agora também dimensionar as variáveis vermelha e azul, embora suas distribuições pareçam bem?
Bottom line
Em outras palavras, distorço os resultados do agrupamento manipulando a cor verde de uma maneira, mas sem manipular vermelho e azul? No final, todas as três variáveis pertencem uma à outra, então elas não devem ser tratadas da mesma maneira?
EDITAR
Para esclarecer: estou ciente de que o k-means provavelmente não é o caminho a seguir para dados baseados em contagem . Minha pergunta, porém, é realmente sobre o tratamento de variáveis dependentes. A escolha do método correto é uma questão separada.
A restrição inerente em minhas variáveis é que
count_red(i) + count_blue(i) + count_green(i) = n(i)
, onde n(i)
é o número total de compras do cliente i
.
(Ou, equivalentemente, count_red(i) + count_blue(i) + count_green(i) = 1
ao usar contagens relativas.)
Se eu transformar minhas variáveis de maneira diferente, isso corresponderá a atribuir pesos diferentes aos três termos da restrição. Se meu objetivo é separar grupos de clientes da melhor maneira, preciso me preocupar em violar essa restrição? Ou "o fim justifica os meios"?
count_red
, count_blue
e count_green
e os dados são contagens. Direita? Quais são as linhas então - itens? E você vai agrupar os itens?