Основна проблема
Ось моя основна проблема: я намагаюся згрупувати набір даних, що містить кілька дуже перекошених змінних з підрахунками. Змінні містять багато нулів і тому не дуже інформативні для моєї процедури кластеризації - що, швидше за все, буде алгоритмом k-значень.
Тонко, скажете ви, просто перетворіть змінні за допомогою квадратного корінця, вікна кокса чи логарифму. Але оскільки мої змінні базуються на категоричних змінних, я побоююся, що я можу ввести зміщення, обробляючи змінну (на основі одного значення категоріальної змінної), а залишаючи інші (на основі інших значень категоріальної змінної) такими, якими вони є .
Розглянемо детальніше.
Набір даних
Мій набір даних представляє покупки елементів. Елементи мають різні категорії, наприклад колір: синій, червоний та зелений. Потім покупки групуються, наприклад, за замовниками. Кожен із цих клієнтів представлений одним рядком мого набору даних, тож мені якось доводиться об'єднувати покупки над клієнтами.
Я це роблю, підраховуючи кількість покупок, де товар певного кольору. Таким чином , замість однієї змінної color
, я в кінцевому підсумку з трьома змінними count_red
, count_blue
і count_green
.
Ось приклад для ілюстрації:
-----------------------------------------------------------
customer | count_red | count_blue | count_green |
-----------------------------------------------------------
c0 | 12 | 5 | 0 |
-----------------------------------------------------------
c1 | 3 | 4 | 0 |
-----------------------------------------------------------
c2 | 2 | 21 | 0 |
-----------------------------------------------------------
c3 | 4 | 8 | 1 |
-----------------------------------------------------------
Насправді я не використовую абсолютних підрахунків у підсумку, я використовую коефіцієнти (частка зелених позицій усіх придбаних товарів на кожного клієнта).
-----------------------------------------------------------
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 |
-----------------------------------------------------------
Результат той самий: для одного з моїх кольорів, наприклад, зеленого (зелений нікому не подобається), я отримую змінну з нахилом ліворуч, що містить багато нулів. Отже, k-означає не вдається знайти хороший розділ для цієї змінної.
З іншого боку, якщо я стандартизую свої змінні (віднімаю середнє значення, ділимо на стандартне відхилення), зелена змінна "вибухає" через малу дисперсію і приймає значення з набагато більшого діапазону, ніж інші змінні, завдяки чому вона виглядає більше k-означає важливіше, ніж є насправді.
Наступна ідея полягає в перетворенні зеленої змінної sk (r) ewed.
Перетворення перекосової змінної
Якщо я перетворять зелену змінну, застосовуючи квадратний корінь, вона виглядає трохи менш перекошеною. (Тут зелена змінна нанесена на червоний та зелений колір, щоб забезпечити плутанину.)
Червоний: оригінальна змінна; синій: перетворений квадратним коренем.
Скажімо, я задоволений результатом цієї трансформації (якою я не є, оскільки нулі все ще сильно перекручують розподіл). Чи повинен я зараз також масштабувати червоні та сині змінні, хоча їх розподіл виглядає нормально?
Нижня лінія
Іншими словами, чи я спотворюю результати кластеризації, обробляючи зелений колір одним способом, але взагалі не обробляючи червоний і синій? Зрештою, всі три змінні належать разом, тож чи не слід ними обробляти однаково?
EDIT
Для уточнення: я знаю, що k-означає, мабуть, не спосіб шукати дані, що базуються на підрахунку . Але моє питання дійсно стосується лікування залежних змінних. Вибір правильного методу - окрема справа.
Притаманне обмеження в моїх змінних полягає в тому
count_red(i) + count_blue(i) + count_green(i) = n(i)
, де n(i)
загальна кількість покупок замовника i
.
(Або, що еквівалентно, count_red(i) + count_blue(i) + count_green(i) = 1
при використанні відносних підрахунків.)
Якщо я зміню свої змінні по-різному, це відповідає наданню різної ваги трьом умовам обмеження. Якщо моя мета - оптимально розділити групи клієнтів, чи потрібно мені піклуватися про порушення цього обмеження? Або "кінець виправдовує засоби"?
count_red
, count_blue
і count_green
дані є підрахунками. Правильно? Які рядки тоді - предмети? А ви збираєтеся кластеризувати елементи?