Обсуждали с коллегами из очень мне симпатичной и горячо мной любимой компании их подготовку учебника по ML. Они привлекают кучу крутых людей к ревью программы и содержания глав, и в написании тоже участвуют разные опытные в индустрии и науке коллеги. Сначала я поревьюил вместе с ними программы, потом вписался автором раздела по кластеризации.
По кластеризации и я, и коллеги были настроены слегка скептично: методов и алгоритмов много, а пользы мало. Если, конечно, четко мерять пользу продуктовыми и бизнесовыми метриками, а не «на глазок». В целом выглядело как win-win: и у меня времени мало, и слишком много писать в главу не надо будет. Но начал думать в фоне про содержание и набралось довольно много применений, вот несколько базовых:
1. Конечно, первый пример - это кластеризация точек в гео: гео-меток у вас всегда целый рой, а понять, в каких же местах был пользователь, можно только покластеризовав либо попривязывав их к ближайшим объектам на карте. Из примеров в продуктах - пикап-поинты в приложениях такси.
2. Второй пример - квантизация признаков. Есть классическая история, когда в донейросетевую эпоху фрагменты изображений кластеризовали, каждый кластер называли «визуальным словом», а фичи для изображения готовили, нарезая по кусочкам и считая количество различных визуальных слов (по попаданиям кусочков изображения в кластеры). Может показаться, что вместе с bag of visual words это ушло в историю, но в целом трюк с использованием кластеров вместо фичей вас может спасти всегда, когда разнообразие значений признаков слишком велико для вашего датасета. Другая причина заменять фичи кластерами - если есть потребность не выдавать их as is. В обоих случаях вам конечно подойдут и достаточно компактные эмбеддинги. По сути bag of visual words был ручной попыткой строить понятные интерпретируемые эмбеддинги для картинок, а новый расцвет нейросетей просто увёл нас от ручных поделок к более автоматизированным.
3. Квантизацию можно делать не только по признакам, но и по объектам. Здесь два примера. Во-первых, когда у вас нет возможности использовать или передавать данные по каждому объекту (например по пользователям), но есть - по агрегату, может быть уместно их просто кластеризовать и работать с кластерами. Для решения полезных бизнесу задач порой этого более чем достаточно. Во-вторых, вам может просто не хватать данных по каждому объекту. В частности, когда вам маловато данных по каждому пользователю для построения рекомендаций, можно на первых порах ограничиться рекомендациями для небольших кластеров пользователей. Впрочем, будет ли это лучше, чем рекомендашки там, где данные есть, и их последующее скрещивание с kNN-ом, надо смотреть по ситуации.
4. Ещё один пример - автоматическая поддержка каталогов типа каталога товаров в Яндекс Маркете, когда у каждого агрегируемого магазина своё дерево категорий, а вам нужно иметь в агрегаторе обобщенное, ещё и периодически обновляемое.
И всё это если абстрагироваться от примеров кластеризации в NLP, сегментаций клиентских баз и других классических применений кластеризации, где вызывает вопросы субъективная оценка качества «на глазок» либо по отстранённым от полезности результата метрикам. Ровно такие применения с непонятным измерением ценности обычно и дискредитируют задачу кластеризации в глазах DS’ов из бизнеса. Для меня же было неожиданным наблюдением, что за применениями, вызывающими хейт, мы часто забываем про более понятные кейсы, которые вполне себе адекватны. Так что внезапно кластеризация не полностью бесполезная и унылая хрень, нужная только чтобы заняться каким-то ML, но не брать ответственность за результат.
По кластеризации и я, и коллеги были настроены слегка скептично: методов и алгоритмов много, а пользы мало. Если, конечно, четко мерять пользу продуктовыми и бизнесовыми метриками, а не «на глазок». В целом выглядело как win-win: и у меня времени мало, и слишком много писать в главу не надо будет. Но начал думать в фоне про содержание и набралось довольно много применений, вот несколько базовых:
1. Конечно, первый пример - это кластеризация точек в гео: гео-меток у вас всегда целый рой, а понять, в каких же местах был пользователь, можно только покластеризовав либо попривязывав их к ближайшим объектам на карте. Из примеров в продуктах - пикап-поинты в приложениях такси.
2. Второй пример - квантизация признаков. Есть классическая история, когда в донейросетевую эпоху фрагменты изображений кластеризовали, каждый кластер называли «визуальным словом», а фичи для изображения готовили, нарезая по кусочкам и считая количество различных визуальных слов (по попаданиям кусочков изображения в кластеры). Может показаться, что вместе с bag of visual words это ушло в историю, но в целом трюк с использованием кластеров вместо фичей вас может спасти всегда, когда разнообразие значений признаков слишком велико для вашего датасета. Другая причина заменять фичи кластерами - если есть потребность не выдавать их as is. В обоих случаях вам конечно подойдут и достаточно компактные эмбеддинги. По сути bag of visual words был ручной попыткой строить понятные интерпретируемые эмбеддинги для картинок, а новый расцвет нейросетей просто увёл нас от ручных поделок к более автоматизированным.
3. Квантизацию можно делать не только по признакам, но и по объектам. Здесь два примера. Во-первых, когда у вас нет возможности использовать или передавать данные по каждому объекту (например по пользователям), но есть - по агрегату, может быть уместно их просто кластеризовать и работать с кластерами. Для решения полезных бизнесу задач порой этого более чем достаточно. Во-вторых, вам может просто не хватать данных по каждому объекту. В частности, когда вам маловато данных по каждому пользователю для построения рекомендаций, можно на первых порах ограничиться рекомендациями для небольших кластеров пользователей. Впрочем, будет ли это лучше, чем рекомендашки там, где данные есть, и их последующее скрещивание с kNN-ом, надо смотреть по ситуации.
4. Ещё один пример - автоматическая поддержка каталогов типа каталога товаров в Яндекс Маркете, когда у каждого агрегируемого магазина своё дерево категорий, а вам нужно иметь в агрегаторе обобщенное, ещё и периодически обновляемое.
И всё это если абстрагироваться от примеров кластеризации в NLP, сегментаций клиентских баз и других классических применений кластеризации, где вызывает вопросы субъективная оценка качества «на глазок» либо по отстранённым от полезности результата метрикам. Ровно такие применения с непонятным измерением ценности обычно и дискредитируют задачу кластеризации в глазах DS’ов из бизнеса. Для меня же было неожиданным наблюдением, что за применениями, вызывающими хейт, мы часто забываем про более понятные кейсы, которые вполне себе адекватны. Так что внезапно кластеризация не полностью бесполезная и унылая хрень, нужная только чтобы заняться каким-то ML, но не брать ответственность за результат.