Masalah dasar
Inilah masalah dasar saya: Saya mencoba mengelompokkan dataset yang berisi beberapa variabel yang sangat miring dengan jumlah. Variabel mengandung banyak nol dan karenanya tidak terlalu informatif untuk prosedur pengelompokan saya - yang kemungkinan merupakan algoritma k-means.
Baik, Anda berkata, hanya mengubah variabel menggunakan akar kuadrat, kotak cox, atau logaritma. Tetapi karena variabel saya didasarkan pada variabel kategorikal, saya khawatir bahwa saya mungkin memperkenalkan bias dengan menangani variabel (berdasarkan satu nilai dari variabel kategorikal), sambil meninggalkan yang lain (berdasarkan nilai lain dari variabel kategorik) seperti apa adanya .
Mari kita bahas lebih detail.
Dataset
Dataset saya mewakili pembelian barang. Item memiliki kategori yang berbeda, misalnya warna: biru, merah, dan hijau. Pembelian kemudian dikelompokkan bersama, misalnya oleh pelanggan. Masing-masing pelanggan diwakili oleh satu deretan dataset saya, jadi saya entah bagaimana harus mengagregasi pembelian atas pelanggan.
Cara saya melakukan ini adalah dengan menghitung jumlah pembelian, di mana barang tersebut berwarna tertentu. Jadi, bukannya variabel tunggal color
, saya berakhir dengan tiga variabel count_red
, count_blue
dan count_green
.
Berikut ini adalah contoh untuk ilustrasi:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
Sebenarnya, saya tidak menggunakan jumlah absolut pada akhirnya, saya menggunakan rasio (fraksi item hijau dari semua item yang dibeli per pelanggan).
-----------------------------------------------------------
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 |
-----------------------------------------------------------
Hasilnya sama: Untuk salah satu warna saya, misalnya hijau (tidak ada yang suka hijau), saya mendapatkan variabel miring kiri yang mengandung banyak nol. Akibatnya, k-means gagal menemukan partisi yang baik untuk variabel ini.
Di sisi lain, jika saya menstandarkan variabel saya (kurangi mean, bagi dengan deviasi standar), variabel hijau "meledak" karena variansnya yang kecil dan mengambil nilai dari rentang yang jauh lebih besar daripada variabel lain, yang membuatnya terlihat lebih penting untuk k-berarti daripada yang sebenarnya.
Gagasan berikutnya adalah mengubah sk (r) variabel hijau yang baru.
Mengubah variabel yang miring
Jika saya mengubah variabel hijau dengan menerapkan akar kuadrat itu terlihat sedikit kurang miring. (Di sini variabel hijau diplot dalam warna merah dan hijau untuk memastikan kebingungan.)
Merah: variabel asli; biru: ditransformasikan oleh root kuadrat.
Katakanlah saya puas dengan hasil transformasi ini (yang tidak saya lakukan, karena nol masih sangat condong pada distribusi). Haruskah saya sekarang juga skala variabel merah dan biru, meskipun distribusinya terlihat baik?
Intinya
Dengan kata lain, apakah saya mengubah hasil pengelompokan dengan menangani warna hijau di satu sisi, tetapi tidak menangani merah dan biru sama sekali? Pada akhirnya, ketiga variabel milik bersama, jadi bukankah mereka harus ditangani dengan cara yang sama?
EDIT
Untuk memperjelas: Saya sadar bahwa k-means mungkin bukan cara untuk mencari data berbasis hitungan . Namun pertanyaan saya sebenarnya adalah tentang perawatan variabel dependen. Memilih metode yang benar adalah masalah tersendiri.
Batasan yang melekat dalam variabel saya adalah itu
count_red(i) + count_blue(i) + count_green(i) = n(i)
, di mana n(i)
jumlah total pembelian pelanggan i
.
(Atau, setara, count_red(i) + count_blue(i) + count_green(i) = 1
saat menggunakan jumlah relatif.)
Jika saya mengubah variabel saya secara berbeda, ini sesuai dengan memberikan bobot yang berbeda untuk tiga istilah dalam kendala. Jika tujuan saya adalah untuk memisahkan kelompok pelanggan secara optimal, apakah saya harus peduli melanggar batasan ini? Atau apakah "akhirnya membenarkan cara"?
count_red
, count_blue
dan count_green
dan data dihitung. Baik? Lalu apa barisnya - item? Dan Anda akan mengelompokkan item?