В документации к Amplitude
сказано, что они используют NMF для кластеризации пользователей. Я как-то никогда о таком методе не слышал. Оказалось, что это похоже на SVD: мы аппроксимируем матрицу (пользовательских фичей) произведением не трёх, а двух матриц (но положительных). Типа X ≈ WH, где W — это координаты траекторий в новом сжатом пространстве фичей пользователей, а H — это координаты точек в старом пространстве, задающие поведенческие паттерны.
И у такого подхода есть много практических бонусов.
• Траектории представляются как линейные комбинации паттернов. Это очень круто, потому что в жизни так не бывает, что пользователь жёстко относится к какому-то поведенческому кластеру. Скорее всего его траектория представляет смесь некоторых базовых паттернов.
• В новом пространстве W мы можем провести любую кластеризацию: хоть K-Means, хоть что угодно ещё. И из-за того, что это новое пространство подготовлено, кластеризация в нём, как мне показалось, получается более толковой.
• Поведенческие паттерны (матрица H) интерпретируемы, хотя интерпретируемы они примерно в той же степени, как центры кластеров в K-Means.
• Можем управлять снижением размерности исходного пространства сильно коррелирующих фичей (если фичи — это счётчики событий, то они часто сильно коррелируют друг с другом).
• Можно следить за дрифтом паттернов во времени. Разбиваем траектории на два куска во времени "до" и "после", строим для каждого NMF-расложение, мапим строки матриц
H_before и
H_after друг в друга, а дальше смотрим через
W_before и
W_after, в какой степени каждый паттерн представлен в каждом из датасетов.
Ещё в этой документации дана ссылка на статью
Türkmen - A Review of Nonnegative Matrix Factorization Methods for Clustering, в которой рассказывается про матчасть NMF-разложения, про приложения метода для кластеризации, про сравнение с K-means. Хорошая статья.
В общем, мне метод понравился, и я пробую теперь его затащить в Hopscotch. На скриншоте матрица H показывает, что есть три поведенческие компоненты:
1. пользователи, пытающиеся зарегистрироваться,
2. "обычные пользователи", у которых фокус на "базовые" события.
3. случайные прохожие, которые не уходят дальше
main.
Если интересно потестировать это, дайте знать.