Problema básico
Aquí está mi problema básico: estoy tratando de agrupar un conjunto de datos que contiene algunas variables muy sesgadas con recuentos. Las variables contienen muchos ceros y, por lo tanto, no son muy informativas para mi procedimiento de agrupación, que probablemente sea el algoritmo k-means.
Bien, dices, simplemente transforma las variables usando raíz cuadrada, caja cox o logaritmo. Pero dado que mis variables se basan en variables categóricas, me temo que podría introducir un sesgo al manejar una variable (basada en un valor de la variable categórica), mientras dejo otras (basadas en otros valores de la variable categórica) como están. .
Vamos a entrar en más detalles.
El conjunto de datos
Mi conjunto de datos representa compras de artículos. Los artículos tienen diferentes categorías, por ejemplo, color: azul, rojo y verde. Las compras se agrupan, por ejemplo, por clientes. Cada uno de estos clientes está representado por una fila de mi conjunto de datos, por lo que de alguna manera tengo que agregar las compras a los clientes.
La forma en que hago esto es contando el número de compras, donde el artículo es de un color determinado. Así que en lugar de una sola variable color
, termino con tres variables count_red
, count_blue
y count_green
.
Aquí hay un ejemplo de ilustración:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
En realidad, al final no uso recuentos absolutos, uso proporciones (fracción de artículos verdes de todos los artículos 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 |
-----------------------------------------------------------
El resultado es el mismo: para uno de mis colores, por ejemplo, verde (a nadie le gusta el verde), obtengo una variable sesgada a la izquierda que contiene muchos ceros. En consecuencia, k-means no puede encontrar una buena partición para esta variable.
Por otro lado, si estandarizo mis variables (restar media, dividir por desviación estándar), la variable verde "explota" debido a su pequeña varianza y toma valores de un rango mucho mayor que las otras variables, lo que hace que se vea más importante para k-means de lo que realmente es
La siguiente idea es transformar la variable verde sk (r) ewed.
Transformando la variable sesgada
Si transformo la variable verde aplicando la raíz cuadrada, se ve un poco menos sesgada. (Aquí la variable verde se traza en rojo y verde para garantizar la confusión).
Rojo: variable original; azul: transformado por raíz cuadrada.
Digamos que estoy satisfecho con el resultado de esta transformación (que no lo estoy, ya que los ceros todavía sesgan fuertemente la distribución). ¿Debería ahora también escalar las variables rojo y azul, aunque sus distribuciones se ven bien?
Línea de fondo
En otras palabras, ¿distorsiono los resultados de la agrupación al manejar el color verde de una manera, pero sin manejar el rojo y el azul? Al final, las tres variables pertenecen juntas, entonces, ¿no deberían tratarse de la misma manera?
EDITAR
Para aclarar: soy consciente de que k-means probablemente no sea el camino a seguir para los datos basados en conteo . Sin embargo, mi pregunta es realmente sobre el tratamiento de variables dependientes. Elegir el método correcto es una cuestión aparte.
La restricción inherente en mis variables es que
count_red(i) + count_blue(i) + count_green(i) = n(i)
, donde n(i)
está el número total de compras del cliente i
.
(O, de manera equivalente, count_red(i) + count_blue(i) + count_green(i) = 1
cuando se utilizan recuentos relativos).
Si transformo mis variables de manera diferente, esto corresponde a dar diferentes pesos a los tres términos en la restricción. Si mi objetivo es separar de manera óptima grupos de clientes, ¿debo preocuparme por violar esta restricción? ¿O "el fin justifica los medios"?
count_red
, count_blue
y count_green
y los datos son conteos. ¿Derecho? ¿Cuáles son las filas entonces - artículos? ¿Y vas a agrupar los artículos?