Зачем нужны сервисы кластеризации?
В один кластер должны быть объединены только такие запросы, которые имеют хорошие шансы выйти в топ-10 поисковых систем с общей релевантной страницей. То есть, если по двум запросам в выдаче все страницы сайтов разные и нет пересечений, то следует относить их к разным кластерам. Также и наоборот: если два запроса возможно продвинуть на одной статье, то не следует разносить их на разные кластеры, чтобы не писать лишнего – бюджет на контент не резиновый.
Общая схема составления ТЗ на написание SEO-статьи следующая:
Сбор семантики – статистика поисковых систем, базы семантики, внутренняя статистика проекта;
Кластеризация автоматическая – сервис или программа для кластеризации по подобию топов;
«Посткластеризация» ручная – обработка того что не удалось кластеризовать автоматически;
Приоритезация – определение важности полученных запросов в каждом кластере;
Оформление ТЗ для копирайтера – лемматизация, LSI и различные указания для написания статей, по статье на каждый кластер.
Вот именно для второго пункта нужно было выбрать самый подходящий сервис автоматической кластеризации. Для этой цели я провел сравнительный анализ самых известных, на мой взгляд, сервисов.
Внешние меры оценки качества[править]
Данные меры используют дополнительные знания о кластеризуемом множестве: распределение по кластерам, количество кластеров и т.д.
Обозначенияправить
Дано множество из элементов, разделение на классы , и полученное разделение на кластеры , совпадения между и могут быть отражены в таблице сопряженности , где каждое обозначает число объектов, входящих как в , так и в : .
Пусть .
Также рассмотрим пары из элементов кластеризуемого множества . Подсчитаем количество пар, в которых:
- Элементы принадлежат одному кластеру и одному классу —
- Элементы принадлежат одному кластеру, но разным классам —
- Элементы принадлежат разным кластерам, но одному классу —
- Элементы принадлежат разным кластерам и разным классам —
Индекс Randправить
Индекс Rand оценивает, насколько много из тех пар элементов, которые находились в одном классе, и тех пар элементов, которые находились в разных классах, сохранили это состояние после кластеризации алгоритмом.
Имеет область определения от 0 до 1, где 1 — полное совпадение кластеров с заданными классами, а 0 — отсутствие совпадений.
Индекс Adjusted Randправить
где — значения из таблицы сопряженности.
В отличие от обычного , индекс Adjusted Rand может принимать отрицательные значения, если .
Индекс Жаккара (англ. Jaccard Index)править
Индекс Жаккара похож на , только не учитывает пары элементов находящиеся в разные классах и разных кластерах ().
Имеет область определения от 0 до 1, где 1 — полное совпадение кластеров с заданными классами, а 0 — отсутствие совпадений.
Индекс Фоулкса – Мэллова (англ. Fowlkes-Mallows Index)править
Индекс Фоулкса – Мэллова используется для определения сходства между двумя кластерами.
Более высокое значение индекса означает большее сходство между кластерами. Этот индекс также хорошо работает на зашумленных данных.
Hubert Г statisticправить
Данная мера отражает среднее расстояние между объектами разных кластеров:
где , — матрица близости, а
Можно заметить, что два объекта влияют на , только если они находятся в разных кластерах.
Чем больше значение меры — тем лучше.
Entropyправить
Энтропия измеряет “чистоту” меток классов:
Стоит отметить, что если все кластера состоят из объектов одного класса, то энтропия равна 0.
Purityправить
Чистота ставит в соответствие кластеру самый многочисленный в этом кластере класс.
Чистота находится в интервале , причём значение = 1 отвечает оптимальной кластеризации.
Методика сравнения
Суть сравнения сервисов в следующем: выбрать идеально кластеризованный список запросов – эталонное ядро. Сравнить результаты кластеризации каждого сервиса с эталонным.
Важно было хорошо составить такое эталонное ядро. Поскольку у нас контентный проект и большая часть контента – это вопросы и ответы пользователей, то материала для сбора статистики по проекту предостаточно
Было взято ядро на 2500+ ключевых фраз, которое отслеживается уже много месяцев. Из него выбраны только запросы вышедшие в топ-5 Яндекса. И из них взяты только те которые имеют релевантной страницу одного из широких разделов (категория вопроса, тема вопроса, категория документа, страница с формой «задать вопрос»), а не узкую страницу вопроса с ответами. Запросы были сгруппированы по релевантной странице. Оставлены только группы в которых более чем 4 запроса. В итоге получилось 292 запроса разбитых на 22 кластера.
Забегая вперед скажу, что сравнивались результаты кластеризации по Московской выдаче Яндекса и без геопривязки. Региональная московская выдача показала себя лучше, поэтому далее будем говорить про нее.
Наивный алгоритм
Следующий алгоритм является агломерационным схема , которая стирает строки и столбцы в матрице близости , как старые кластеры объединяются в новые. Близости матрица D содержит все расстояния D ( я , J ). В кластеризациях присвоены порядковые номера 0,1, ……, ( п – 1) и L ( K ) является уровнем -й кластеризации. Кластер с номером последовательности т обозначается ( м ) и близость между кластерами ( г ) и ( с ) обозначается d [( г ), ( с )].
N×N{\ N \ displaystyle раз N}
Алгоритм состоит из следующих этапов:
- Начнем с непересекающихся кластеризации , имеющий уровень L (0) = 0 и последовательность чисел т = 0.
- Найти наиболее похожую пару кластеров в текущей кластеризации, скажем , пара (г), (с), в соответствии с д [( г ), ( с )] = мин д [( я ), ( J )] , где минимум по всем парам кластеров в текущей кластеризации.
- Приращение порядкового номера: м = м + 1. Объединить кластеры ( г ) и ( ы ) в один кластер для формирования следующего кластеризации м . Установите уровень этого кластеризации в L ( м ) = д [( г ), ( с )]
- Обновление матрицы близости, D , путем удаления строк и столбцов , соответствующих кластеров ( г ) и ( с ) и добавления строки и столбца , соответствующий вновь образованной кластера. Близость между новым кластером, обозначенный ( г , х ) и старый кластером ( к ) определяются как г [( K ), ( г , s )] = мин д [( к ), ( г )], г [( к ), ( с )] .
- Если все объекты находятся в одном кластере, остановка. В противном случае, перейдите к шагу 2.
Сравнение сервисов
В поиске самых популярных сервисов очень помог доклад Александра Ожгибесова на BDD-2017, к тем, что у него было добавлено еще несколько сервисов, получился такой список:
- Топвизор
- Pixelplus
- Serpstat
- Rush Analytics
- Just Magic
- Key Collector
- MindSerp
- Semparser
- KeyAssort
- coolakov.ru
Первое на что проверялись полученные в результате кластеризации эталонного ядра по этим сервисам группы – это не делает ли сервис слишком широкие группы. А именно не попали ли запросы из разных групп эталонного ядра в один кластер по версии сервиса.
Но только такого сравнения не достаточно. Сервисы делятся на два подхода к некластеризованному остатку фраз:
- сделать для них общую группу «Некластеризованные»;
- сделать для каждой некластеризованной фразы группу из нее одной.
В сравнении я использовал оба этих параметра в виде соотношения – какой процент фраз от общего количества попал не в свою группу.
Результаты сравнения:
- Топвизор
- разные группы эталона в одной по сервису – 4%
- одна группа эталона в разных по сервису – 7%
- Pixelplus
- разные группы эталона в одной по сервису – 0%
- одна группа эталона в разных по сервису – 7%
- Serpstat
- разные группы эталона в одной по сервису – 0%
- одна группа эталона в разных по сервису – 3%
- Rush Analytics (132 фразы, demo)
- разные группы эталона в одной по сервису – 11%
- одна группа эталона в разных по сервису – 8%
- Just Magic
- разные группы эталона в одной по сервису – 0%
- одна группа эталона в разных по сервису – 9%
- Key Collector
- разные группы эталона в одной по сервису – 12%
- одна группа эталона в разных по сервису – 16%
- MindSerp – не удалось получить демо, не выходят на связь
- Semparser
- разные группы эталона в одной по сервису – 1%
- одна группа эталона в разных по сервису – 3%
- KeyAssort
- разные группы эталона в одной по сервису – 1%
- одна группа эталона в разных по сервису – 1%
- coolakov.ru
- разные группы эталона в одной по сервису – 0%
- одна группа эталона в разных по сервису – 18%
Метод 1: Эвристики и экспертные оценки
В рамках этого подхода вы на основе опыта, логики использования вашего продукта и клиентских историй, придумываете различные портреты потребителей и затем оцениваете, сколько у вас клиентов попадают под эти определения. Или же можете использовать более численные подходы, основанные на анализе показателей клиентов. Несколько популярных численным эвристик подходов это:
ABC-XYZ
Основная идея разделить клиентов по общему вкладу в вашу выручку и по динамике роста показателей. ABC отвечает за вклад в выручку, XYZ отвечает за стабильность выручки. Это формирует 9 сегментов
AX — самые большие и со стабильной выручкой
AZ — Большие, но они редко делают покупки, выручка не стабильна
CX — самые мелкие, но со стабильной выручкой
CZ — мелкие и выручка не стабильна, покупки совершают редко
В сегмент А определяют клиентов, кто формирует 80% выручки, в сегмент B, кто дает еще 15% и в сегмент C, кто дает 5%. В сегмент X — наименьшую вариативность выручки (можно взять 33 перцентиль), Z — наивысшая вариативность (соответственно верхний 33 перцентиль). Под вариативность я подразумеваю величину дисперсии выручки.
Что дает этот анализ: он позволяет разделить ваших клиентов на группы по степени важности для вашего бизнеса. Клиенты из группы AX, AY, AZ самые большие и вы должны уделять им больше всего внимания
Клиенты групп BX, BY требуют дополнительного внимания, их можно развивать
Внимание к группам в других категориях можно снижать. Особенно хорошо, если вам удастся выделить общности между клиентами в разных сегментах, что позволит вам таргетировать усилия по привлечению нужных клиентов
RFM (Recency-Frequency-Money)
Основная идея разделить клиентов по 3-м свойствам: как давно была продажа клиенту (recency), как часто он покупает товары (frequency), какой объем выручки он сгенерировал(money). В целом подход напоминает ABС-XYZ, но несколько под другим углом.
В рамках этого подхода вы разделяете клиентов по группам Recency, например:
- 0-30 дней
- 31-60 дней
- 61-90 дней
- 90+
По кол-ву покупок, например:
- Более 15
- 10-14
- 5-9
- 0-4
По объему выручки:
- 1000+
- 600-1000
- 200-599
- 0-199
Понятно, что для каждого конкретного продукта, приложения или товара вам нужно установить свои границы.
В итоге вы сможете разделить клиентов на множество сегментов, каждый из которых характеризует клиента по степени важности для вас
Матрица BCG
Основная идея разделить клиентов по категориям объема выручки и темпов роста выручки. Такой подход позволяет определить, кто большой и насколько быстро растет. Все клиенты раскладываются на 4 квадранта:
Звезды — крупнейшие клиенты с высоким темпов роста выручки
Это клиенты, кому надо уделять наибольшее внимание. Это сильная точка роста
Дойные коровы — крупные клиенты, с низкими или отрицательными темпами выручки
Эти клиенты будут формировать ядро вашей текущей выручки. Проглядите коров и потеряете бизнес.
Темные лошадки — пока мелкие клиенты, но с большим темпом роста. Это группы клиентов, на кого надо обращать внимание, т.к. они могут вырасти до звезд или дойных коров.
Собаки — мелкие клиенты с низкими или отрицательными темпами роста. Это клиенты, кому можно уделять наименьшее внимание и применять к ним массовые методы обслуживания, для сокращения издержек.
Преимущества всех эвристических методов — относительная простота реализации и возможность разделить своих клиентов на понятные с точки зрения бизнеса группы.
Недостатки в том, что мы используем всего лишь несколько свойств клиентов, для их описания и исключаем из рассмотрения прочие факторы. В добавок, чаще всего клиенты оказываются в сегментах временно, меняют позицию, а установить реальную общность внутри сегмента оказывается сложно.
Метод 2: Кластеризация
Основная идея — найти группы клиентов без использования предварительных гипотез о структуре клиентской базы, найти натуральные кластеры среди свойств клиентов исходя из имеющихся данных.
Существует набор методов (K-mean, C-mean, иерархическая кластеризация и т.п.), которые позволяют вам определить близость объектов друг друга на основании их свойств. В общем случае вы описываете вашего клиента как вектор, каждый элемент этого вектора описывает какую-то характеристику клиента (будь то выручка, кол-во месяцев сотрудничества, адрес регистрации, купленные продукты и т.п.). После чего вы преобразуете этот вектор в нужный формат для вашего алгоритма, натравливаете алгоритм на данные (и настраиваете его для кластеризации) и получаете на выходе разделение клиентов на кластеры.
Хотя процесс не выглядит сложным, детали методов и их интерпретация имеет большое значение. Выбранные метрики “расстояния”, способ трансформации данных и кол-во выбранных факторов могут сильно менять картину. Так как в конечном итоге в многомерных данных нет однозначно “правильного” решения задачи кластеризации, вам в конечном итоге придется самостоятельно оценивать качество кластеров, а именно в итоге искать для них “бизнес” интерпретацию, если вы собрались использовать эти кластеры в принятии решений людьми.
По опыту могу сказать, что не стоит использовать сложные и логически не связанные свойства клиентов, а также хитрые трансформации. Несмотря на вероятные, элегантные решения по линии алгоритмов на выходе вы можете получить сложно интерпретируемые кластеры, которые ничего вам не надут в бизнес контексте. Возможно ваш метод и хорош, если кластера будут использоваться для входных параметров другой системы машинного обучения. Но когда вы хотите разделить клиентскую базу и сформулировать маркетинговую стратегию, то такие хитрые кластера вас никуда не приведут.
Сам процесс кластеризации это итеративный процесс:
- Составьте вектор
- Трансформируйте данные
- Настройте параметры алгоритма
- Сделайте кластеризацию
- Оцените кластеры экспертно, можете ли вы их использовать
- Повторите п.1., если кластеры вас не удовлетворили
Преимущество этого подхода, что через множество итераций вы куда лучше будете понимать ваших клиентов и данных о них, т.к. Каждая попытка кластеризации покажет вам разрез поведения и свойств клиентов, на который вы никогда скорее всего не смотрели. Вы так же лучше поймете взаимосвязи и взаимоотношения между разными клиентами. Поэтому я советую проделать это упражнение и вывести свои собственные кластеры.
Прошлый статьи в цикле:
Это 6-ая статья в цикле статей по анализу продукта:
- Top-Down approach. Экономика продукта. Gross Profit
- Экономика продукта. Анализ выручки
- Погружаемся в динамику клиентской базы: когортный анализ и анализ потоков
- Собираем когортный анализ/анализ потоков на примере Excel
- Аналитика воронки продаж
- MPRU, выручка и как это связано с выручкой и динамикой клиентской базы
Быстрее алгоритмы
Наивный алгоритм для одного рычажной кластеризации легко понять , но медленно, с временной сложностью . В 1973 году Р. Сибсон предложен алгоритм с временной сложностью и сложностью пространства (как оптимальное) , известный как красться. Алгоритм Slink представляет собой кластеризацию по набору пронумерованных элементов на двух функций. Эти функции определяются как найти наименьший кластер , который содержит как элемент и , по меньшей мере , одну большую номером элемента. Первая функция отображает элемент к крупнейшему номером элемента в кластере . Вторая функция, отображает элемент на расстояние , связанное с созданием кластера . Сохранение этих функций в двух массивах , которые отображают каждый номер элемент его значение функции занимает пространство , и эта информация является достаточной для определения самой кластеризации. Как показывает Сибсон, когда новый элемент добавляется к набору элементов, обновленные функции , представляющие новой сингл сшивани кластеризации для дополненного набора, представленного таким же образом, могут быть построены из старой кластеризации во время . Алгоритм Slink затем перебирает предметы, один за другим, добавляя их к представлению агрегацию.
О(N3){\ Displaystyle О (п ^ {3})}О(N2){\ Displaystyle O (N ^ {2})}О(N){\ Displaystyle О (п)}N{\ Displaystyle п}С{\ Displaystyle C}я{\ Displaystyle я}π{\ Displaystyle \ р}я{\ Displaystyle я}С{\ Displaystyle C}λ{\ Displaystyle \ Lambda}я{\ Displaystyle я}С{\ Displaystyle C}О(N){\ Displaystyle О (п)}О(N){\ Displaystyle О (п)}
Альтернативный алгоритм, работающий в одних и тех же оптимальных временных и пространственных границ, на основе эквивалентности между наивным алгоритма и алгоритма Крускала минимальных остовных деревьев. Вместо использования алгоритма Крускал, можно использовать алгоритм Прима , в варианте без двойных куч , что занимает много времени и пространство для построения минимального остовного дерева (но не кластерный) данных элементов и расстояний. Затем, применяя алгоритм Крускала в разреженный граф , образованный краями минимального покрывающего дерева производит сам кластеризацию в дополнительном времени и пространстве .
О(N2){\ Displaystyle O (N ^ {2})}О(N){\ Displaystyle О (п)}О(NжурналN){\ Displaystyle О (п \ п лог)}О(N){\ Displaystyle О (п)}
Сравнение[править]
Не существует лучшего метода оценки качества кластеризации. Однако, в рамках исследования была предпринята попытка сравнить существующие меры на различных данных. Полученные результаты показали, что на искусственных датасетах наилучшим образом себя проявили индексы , и . На реальных датасетах лучше всех показал себя .
В Таблице 1 приведены оценки сложности мер качества кластеризации ( — число объектов в рассматриваемом наборе данных):
Из всех рассмотренных мер, меры , , и наиболее полно соответствуют когнитивному представлению асессоров о качестве кластеризации.
Список источников