И у такого подхода есть много практических бонусов.
• Траектории представляются как линейные комбинации паттернов. Это очень круто, потому что в жизни так не бывает, что пользователь жёстко относится к какому-то поведенческому кластеру. Скорее всего его траектория представляет смесь некоторых базовых паттернов.
• В новом пространстве 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.Если интересно потестировать это, дайте знать.