Энциклопедия маркетинга, https://www.marketing.spb.ru

Адрес документа: https://www.marketing.spb.ru/lib-research/segment/k-means_cluster_analysis.htm
Обновлено: 20.11.2017

Кластеризации для сегментирования рынка клиентов

Джон Форман Глава из книги «Много цифр: Анализ больших данных при помощи Excel»
«Альпина Паблишер»

Я работаю в индустрии почтового маркетинга для сайта под названием MailChimp.com. Мы помогаем клиентам делать новостную рассылку для своей рекламной аудитории. Каждый раз, когда кто-нибудь называет нашу работу «почтовым вбросом», я чувствую на сердце неприятный холод.

Почему? Да потому что адреса электронной почты — больше не черные ящики, которые вы забрасываете сообщениями, будто гранатами. Нет, в почтовом маркетинге (как и в других формах онлайн-контакта, включая твиты, посты в Facebook и кампании на Pinterest) бизнес получает сведения о том, как аудитория вступает в контакт на индивидуальном уровне, с помощью отслеживания кликов, онлайн-заказов, распространения статусов в социальных сетях и т. д. Эти данные — не просто помехи. Они характеризуют вашу аудиторию. Но для непосвященного эти операции сродни премудростям греческого языка. Или эсперанто.

Как вы собираете данные об операциях с вашими клиентами (пользователями, подписчиками и т. д.) и используете ли их данные, чтобы лучше понять свою аудиторию? Когда вы имеете дело с множеством людей, трудно изучить каждого клиента в отдельности, особенно если все они по-разному связываются с вами. Даже если бы теоретически вы могли достучаться до каждого лично, на практике это вряд ли осуществимо.

Нужно взять клиентскую базу и найти золотую середину между «бомбардировкой» наобум и персонализированным маркетингом для каждого отдельного покупателя. Один из способов достичь такого баланса — использование кластеризации для сегментирования рынка ваших клиентов, чтобы вы могли обращаться к разным сегментам вашей клиентской базы с различным целевым контентом, предложениями и т. д.

Кластерный анализ — это сбор различных объектов и разделение их на группы себе подобных. Работая с этими группами — определяя, что у их членов общего, а что отличает их друг от друга — вы можете многое узнать о беспорядочном имеющемся у вас массиве данных. Это знание поможет вам принимать оптимальные решения, причем на более детальном уровне, нежели раньше.

В этом разрезе кластеризация называется разведочной добычей данных, потому что эти техники помогают «вытянуть» информацию о связях в огромных наборах данных, которые не охватишь визуально. А обнаружение связей в социальных группах полезно в любой отрасли — для рекомендаций фильмов на основе привычек целевой аудитории, для определения криминальных центров города или обоснования финансовых вложений.

Одно из моих любимых применений кластеризации — это кластеризация изображений: сваливание в кучу файлов изображений, которые «выглядят одинаково» для компьютера. К примеру, в сервисах размещения изображений типа Flickr пользователи производят кучу контента и простая навигация становится невозможной из-за большого количества фотографий. Но, используя кластерные техники, вы можете объединять похожие изображения, позволяя пользователю ориентироваться между этими группами еще до подробной сортировки.

Контролируемое или неконтролируемое машинное обучение?

В разведочной добыче данных вы, по определению, не знаете раньше времени, что же за данные вы ищете. Вы — исследователь. Вы можете четко объяснить, когда двое клиентов выглядят похожими, а когда разными, но вы не знаете лучшего способа сегментировать свою клиентскую базу. Поэтому «просьба» к компьютеру сегментировать клиентскую базу за вас называется неконтролируемым машинным обучением, потому что вы ничего не контролируете — не диктуете компьютеру, как делать его работу.

В противоположность этому процессу, существует контролируемое машинное обучение, которое появляется, как правило, когда искусственный интеллект попадает на первую полосу. Если я знаю, что хочу разделить клиентов на две группы — скажем, «скорее всего купят» и «вряд ли купят» — и снабжаю компьютер историческими примерами таких покупателей, применяя все нововведения к одной из этих групп, то это контроль.

Если вместо этого я скажу: «Вот что я знаю о своих клиентах и вот как определить, разные они или одинаковые. Расскажи-ка что-нибудь интересненькое», — то это отсутствие контроля.

В данной главе рассматривается самый простой способ кластеризации под названием метод k-средних, который ведет свою историю из 50-х годов и с тех пор стал дежурным в открытии знаний из баз данных (ОЗБД) во всех отраслях и правительственных структурах.

Метод k-средних — не самый математически точный из всех методов. Он создан, в первую очередь, из соображений практичности и здравого смысла — как афроамериканская кухня. У нее нет такой шикарной родословной, как у французской, но и она зачастую угождает нашим гастрономическим капризам. Кластерный анализ с помощью k-средних, как вы вскоре убедитесь, — это отчасти математика, а отчасти — экскурс в историю (о прошлых событиях компании, если это сравнение относится к методам обучения менеджменту). Его несомненным преимуществом является интуитивная простота.

Посмотрим, как работает этот метод, на простом примере.

Девочки танцуют с девочками, парни чешут в затылке

Цель кластеризации методом k-средних — выбрать несколько точек в пространстве и превратить их в k группы (где k — любое выбранное вами число). Каждая группа определена точкой в центре вроде флага, воткнутого в Луну и сигнализирующего: «Эй, вот центр моей группы! Присоединяйтесь, если к этому флагу вы ближе, чем к остальным!» Этот центр группы (с официальным названием кластерный центроид) — то самое среднее из названия метода k-средних.

Вспомним для примера школьные танцы. Если вы сумели стереть ужас этого «развлечения» из своей памяти, я очень извиняюсь за возвращение таких болезненных воспоминаний.

Герои нашего примера — ученики средней школы Макакне, пришедшие на танцевальный вечер под романтическим названием «Бал на дне морском», — рассеяны по актовому залу, как показано на рис. 1. Я даже подрисовал в Photoshop паркет, чтобы было легче представить ситуацию.

Рис. 1. Ученики средней школы Макакне расположились в актовом зале

А вот примеры песен, под которые эти юные лидеры свободного мира будут неуклюже танцевать (если вдруг вам захочется музыкального сопровождения, к примеру, на Spotify):

  • Styx: Come Sail Away
  • Everything But the Girl: Missing
  • Ace of Base: All that She Wants
  • Soft Cell: Tainted Love
  • Montell Jordan: This is How We Do It
  • Eiffel 65: Blue

Теперь кластеризация по k-средним зависит от количества кластеров, на которое вы желаете поделить присутствующих. Давайте остановимся для начала на трех кластерах (далее в этой главе мы рассмотрим вопрос выбора k). Алгоритм размещает три флажка на полу актового зала некоторым допустимым образом, как показано на рис. 2, где вы видите 3 начальных флажка, распределенных по полу и отмеченных черными кружками.

Рис. 2. Размещение начальных центров кластеров

В кластеризации методом k-средних танцоры привязаны к ближайшему для них кластерному центру, так что между двумя любыми центрами на полу можно нарисовать демаркационную линию. Таким образом, если танцор находится на одной стороне линии, он принадлежит к одной группе, если по другую сторону — то уже к другой (как на рис. 3).

Рис. 3. Линии отмечают границы кластеров

Используя эти демаркационные линии, разделим танцоров на группы и раскрасим соответствующим образом, как на рис. 4. Эта диаграмма, разделяющая пространство на многоугольники, определенные близостью к тому или иному кластерному центру, называется диаграммой Вороного.

Рис. 4. Группировка по кластерам, отмеченным разными фоновыми узорами на диаграмме Вороного

Посмотрим на наше первоначальное разделение. Что-то не так, не правда ли? Пространство разделено довольно странным образом: нижняя левая группа осталась пустой, а на границе верхней правой группы, напротив, много людей.

Алгоритм кластеризации методом k-средних перемещает кластерные центры по полу, пока не достигнет наилучшего результата.

Как определить «наилучший результат»? Каждый присутствующий отстоит на сколько-то от своего кластерного центра. Чем меньше среднее расстояние от участников до центра их группы, тем лучше результат.

Теперь вводим слово «минимизация» — оно вам очень пригодится в оптимизации модели для лучшего расположения кластерных центров. В данной главе вы будете заставлять «Поиск решения» передвигать кластерные центры бессчетное количество раз. Способ, который использует «Поиск решения» для нахождения наилучшего расположения кластерных центров, — это медленное итеративное перемещение их по поверхности с фиксацией лучших найденных результатов и комбинированием их (буквально спариванием, как скаковых лошадей) для нахождения наилучшего положения.

Так что если диаграмма на рис. 4 выглядит довольно бледно, «Поиск решения» может внезапно расположить центры как на рис. 5. Таким образом среднее расстояние между каждым танцором и его центром немного уменьшится.

Рис. 5. Слегка смещаем центры

Очевидно, что рано или поздно «Поиск решения» поймет, что центры должны быть размещены в середине каждой группы танцоров, как показано на рис. 6.

Рис. 6. Оптимальная кластеризация на школьных танцах

Отлично! Вот так выглядит идеальная кластеризация. Кластерные центры находятся в центре каждой группы танцоров, минимизируя среднее расстояние между танцором и ближайшим центром. Теперь, когда кластеризация закончена, время перейти к развлекательной части, а именно: попытке понять, что же эти кластеры означают.

Если вы узнали цвет волос танцоров, их политические предпочтения или время преодоления ими стометровки, то кластеризация не имеет особого смысла.

Но решив определить возраст и пол присутствующих, вы начнете видеть некоторые общие тенденции. Небольшая группа внизу — это пожилые люди, скорее всего сопровождающие. Группа слева вся состоит из мальчиков, а группа справа — из девочек. И все очень боятся танцевать друг с другом.

Таким образом, метод k-средних позволил вам разделить множество посетителей танцев на группы и скоррелировать характеристики каждого посетителя с принадлежностью к определенному кластеру, чтобы понять причину разделения.

Теперь вы наверняка говорите себе: «Да ладно, что за глупости. Я уже до начала знал ответ». Вы правы. В этом примере — да. Я специально привел такой «игрушечный» пример, будучи уверенным, что вы можете решить его, просто взглянув на точки. Действие происходит в двумерном пространстве, в котором кластеризация производится элементарно с помощью глаз.

Но что, если вы держите магазин, реализующий тысячи товаров? Некоторые покупатели совершили одну или две покупки за последние два года. Другие — десятки. И каждый покупал что-то свое.

Как вы кластеризируете их на таком «танцполе»? Начнем с того, что этот танцпол не двумерный, и даже не трехмерный. Это тысячемерное пространство реализации товара, в котором покупатель приобрел или не приобрел товар в каждом измерении. Видите, как быстро проблема кластеризации начинает выходить за пределы способностей «глазного яблока первого разряда», как любят говорить мои друзья-военные.

Реальная жизнь: кластеризация методом k-средних в электронном маркетинге

Давайте перейдем к более предметному случаю. Я занимаюсь электронным маркетингом, поэтому приведу пример из жизни Mailchimp.com, в которой работаю. Этот же самый пример будет работать и на данных о розничной торговле, преобразовании рекламного трафика, социальных сетей и т. д. Он взаимодействует практически с любым типом данных, связанных с донесением до клиентов рекламного материала, после чего они безоговорочно выбирают вас.

Оптовая Винная Империя Джоуи Бэг О'Донатса

Представьте на минуту, что вы живете в Нью-Джерси, где держите Оптовую Винную Империю Джоуи Бэг О'Донатса. Это импортно-экспортный бизнес, целью которого является доставка огромного количества вина из-за границы и продажи его определенным винным магазинам по всей стране. Этот бизнес работает таким образом, что Джоуи путешествует по всему миру в поисках невероятных сделок с большим количеством вина. Он отправляет его к себе в Джерси, а пристроить присланное в магазины и получить прибыль — ваша забота.

Вы находите покупателей разными способами: страница на Facebook, аккаунт в Twitter, порой даже прямая рассылка — ведь электронные письма «раскручивают» большинство видов бизнеса. В прошлом году вы отправляли одно письмо в месяц. Обычно в каждом письме описываются две или три сделки, скажем, одна с шампанским, а другая с мальбеком. Некоторые сделки просто удивительны — скидка составляет 80% или больше. В итоге вы заключили около 32 сделок за год и все они прошли более-менее гладко.

Но то, что дела идут просто хорошо, не значит, что они не могут идти лучше. Было бы нелишне чуть глубже понять мотивы своих покупателей. Конечно, взглянув на конкретный заказ, вы видите, что некий Адамс купил сколько-то игристого в июле с 50%-ной скидкой, но не можете определить, что подвигло его на покупку. Понравился ли ему минимальный объем заказа в одну коробку с шестью бутылками или цена, которая еще не поднялась до своего максимума?

Было бы неплохо иметь возможность разбить список клиентов на группы по интересам. Тогда вы бы могли отредактировать письма к каждой группе отдельно и, возможно, раскрутили бы бизнес еще больше. Любая подходящая данной группе сделка могла стать темой письма и идти в первом абзаце текста. Такой тип целевой рассылки может вызвать форменный взрыв продаж!

Но как разделить список рассылки? С чего начать?

Есть возможность дать компьютеру сделать работу за вас. Используя кластеризацию методом k-средних, вы можете найти наилучший вариант разбиения на группы, а затем попытаться понять, почему же он лучший.

Исходный набор данных

Документ Excel, который мы будем разбирать в этой главе, находится на сайте книги. В нем содержатся все исходные данные на случай, если вам захочется поработать с ними. Или же вы можете просто следить за текстом, подглядывая в остальные листы документа.

Для начала у вас есть два интересных источника данных:

  • метаданные по каждому заказу сохранены в электронной таблице, включая сорт, минимальное количество вина в заказе, скидку на розничную продажу, информацию о том, пройден ли ценовой максимум, и о стране происхождения. Эти данные размещены во вкладке под названием OfferInformation, как показано на рис. 7;
  • зная, кто из клиентов что заказывает, вы можете вытряхнуть эту информацию из MailChimp и скормить электронной таблице с метаданными предложений во вкладке «Transactions». Это переменные данные, представленные, как показано на рис. 8, очень просто: покупатель и его заказ.

Рис. 7. Детали последних 32 заказов

Рис. 8. Список количества заказов по покупателям

Определяем предмет измерений

И вот задача. В проблеме школьных танцев измерение расстояния между присутствующими и определение кластерных центров были несложными, не так ли? Достаточно просто найти подходящую рулетку! Но что делать сейчас?

Вы знаете, что в прошлом году было 32 предложения сделок и у вас есть список из 324 заказов в отдельной вкладке, разбитый по покупателям. Но чтобы измерить расстояние от каждого покупателя до кластерного центра, вы должны поместить их в это 32-сделочное пространство. Иначе говоря, вам нужно понять, что за сделки они не совершили, и создать матрицу сделок по покупателям, в которой каждый клиент получает свой собственный столбец с 32 ячейками сделок, заполненные единицами, если сделки были совершены, и нулями, если нет.

Другими словами, вам нужно взять эту ориентированную по строкам таблицу сделок и превратить ее в матрицу, в которой клиенты располагаются по вертикали, а предложения — по горизонтали. Лучшим способом ее создать являются сводные таблицы.

Алгоритм действия: на листе с переменными данными выделите столбцы А и В, а затем вставьте сводную таблицу. Используя Мастер создания сводных таблиц, просто выберите сделки как заголовок строки, а покупателей как заголовок столбца и заполните таблицу. В ячейке будет 1, если пара «клиент-сделка» существует, и 0, если нет (в данном случае 0 отображается как пустая ячейка). В результате получается таблица, показанная на рис. 9.

Рис. 9. Сводная таблица «клиент-сделка»

Теперь, когда у вас есть информация о заказах в формате матрицы, скопируйте лист OfferInformation и назовите его Matrix. В этот новый лист вставьте значения из сводной таблицы (не нужно копировать и вставлять номер сделки, потому что он уже содержится в информации о заказе), начиная со столбца Н. В итоге у вас должна получиться расширенная версия матрицы, дополненная информацией о заказах, как на рис. 10.

Рис. 10. Описание сделок и данные о заказах, слитые в единую матрицу

Стандартизация данных

В этой главе каждое измерение ваших данных представлено одинаково, в виде бинарной информации о заказах. Но во многих ситуациях, связанных с кластеризацией, мы не можем так сделать. Вообразите сценарий, в котором люди кластеризованы по росту, весу и зарплате. Все эти три вида данных имеют разную размерность. Рост может варьироваться от 1,5 до 2 метров, в то время как вес — от 50 до 150 кг.

В этом контексте измерение расстояния между покупателями (как между танцорами в актовом зале) становится запутанным делом. Поэтому принято стандартизировать каждый столбец с данными, вычитая среднее и затем деля поочередно на меру разброса под названием среднеквадратичное отклонение. Таким образом, все столбцы приводятся к единой величине, количественно варьируясь около 0.

Начнем с четырех кластеров

Ну что ж, теперь все ваши данные сведены к единому удобному формату. Чтобы начать кластеризировать, нужно выбрать k — количество кластеров в алгоритме k-средних. Зачастую метод k-средних применяется так: берется набор различных k и проверяется по одному (как их выбирать, я объясню позже), но мы только начинаем — так что выберем лишь одно.

Вам понадобится количество кластеров, которое примерно подходит для того, чем вы хотите заняться. Вы явно не намерены создавать 50 кластеров и рассылать 50 целевых рекламных писем паре ребят из каждой группы. Это моментально лишает смысла наше упражнение. В нашем случае нужно что-то небольшое. Начните этот пример с 4 — в идеальном мире вы, возможно, разделили бы ваш список клиентов на 4 понятные группы по 25 человек в каждой (что в реальности маловероятно).

Итак, если придется разделить покупателей на 4 группы, как наилучшим образом их подобрать?

Вместо того чтобы портить симпатичный лист Matrix, скопируйте данные в новый лист и назовите его 4МС. Теперь вы можете вставить 4 столбца после ценового максимума в столбцы от Н до К, которые будут кластерными центрами. (Чтобы вставить столбец, кликните правой клавишей мышки на столбце Н и выберите «Вставить». Столбец появится слева.) Назовите эти кластеры от Cluster 1 до Cluster 4. Вы также можете применить на них условное форматирование, и когда бы вы ни установили их, вы сможете увидеть, насколько они отличаются.

Лист 4МС появится, как показано на рис. 11.

Рис. 11. Пустые кластерные центры, помещенные на лист 4МС

В данном случае все кластерные центры — нули. Но технически они могут быть какими угодно и, что вам особенно понравится — как на школьных танцах, распределены таким образом, что минимизируют расстояние между каждым покупателем и его кластерным центром.

Очевидно, что тогда эти центры будут иметь значения от 0 до 1 для каждой сделки, так как все клиентские векторы бинарны.

Но что означает «измерить расстояние между кластерным центром и покупателем»?

Евклидово расстояние: измерение расстояний напрямик

Для каждого клиента у вас есть отдельный столбец. Как же измерить расстояние между ними? В геометрии это называется «кратчайший путь», а расстояние, получаемое в результате, — евклидовым расстоянием.

Вернемся ненадолго в актовый зал и попробуем понять, как решить нашу проблему там.

Поместим координатные оси на полу и на рис. 12 увидим, что в точке (8,2) у нас танцор, а в (4,4) — кластерный центр. Чтобы рассчитать евклидово расстояние между ними, придется вспомнить теорему Пифагора, с которой вы знакомы еще со школьной скамьи.

Рис. 12. Танцор в точке (8,2) и кластерный центр в (4,4)

Эти две точки находятся в 8 - 4 = 4 метрах друг от друга по вертикали и в 4 - 2 = 2 метрах по горизонтали. По теореме Пифагора, квадрат расстояния между двумя точками равен 4Л2+2Л2 = 20 метрам. Отсюда мы вычисляем само расстояние, которое будет равно квадратному корню из 20, что составляет примерно 4,47м (как на рис. 13).

Рис. 13. Евклидово расстояние равняется квадратному корню из суммы расстояний в каждом направлении

В контексте подписчиков на рассылку у вас больше двух измерений, но применима та же концепция. Расстояние между покупателем и кластерным центром рассчитывается путем определения разниц между двумя точками для каждой сделки, возведения их в квадрат, сложения и извлечения квадратного корня. К примеру, на листе 4МС вы хотите узнать евклидово расстояние между центром кластера 1 в столбце Н и заказами покупателя Адамса в столбце L.

В ячейке L34, под заказами Адамса, можно вычислить разницу между вектором Адамса и кластерным центром, возвести ее в квадрат, сложить и затем извлечь корень, используя следующую формулу для массивов (отметьте абсолютные ссылки, позволяющие вам перетаскивать эту формулу вправо или вниз без изменения ссылки на кластерный центр):

{=SQRT(SUM((L$2:L$33-$H$2:$H$33)A2))}
{=КОРЕНЬ(СУММА(L$2:L$33-$H$2:$H$33)A2))}

Формулу для массивов (введите формулу и нажмите Ctrl+Shift+Enter или Cmd+Return в MacOS, как сказано в главе 1) нужно использовать, потому что ее часть (L2:L33-H2:H33)^2 должна «знать», куда обращаться для вычисления разниц и возведения их в квадрат, шаг за шагом. Однако результат в итоге — единственное число, в нашем случае 1,732 (как на рис. 14). Он имеет следующий смысл: Адамс заключил три сделки, но так как изначальные кластерные центры — нули, ответ будет равняться квадратному корню из 3, а именно 1,732.

Рис. 14. Расстояние между центром 1 кластера и Адамсом

В электронной таблице на рис. 2-14 я закрепил верхнюю строку (см. главу 1) между столбцами G и Н и назвал строку 34 в ячейке G34 «Distance to Cluster 1», просто чтобы видеть, что где находится, если проматывать страницу вниз.

Расстояния и принадлежность к кластеру для всех!

Теперь вы знаете, как вычислить расстояние между вектором заказа и кластерным центром.

Пришло время добавить Адамсу расчет расстояний до остальных кластерных центров, перетянув ячейку L34 вниз на L37, а затем изменив вручную ссылку на кластерный центр со столбца Н на столбец I, J и К в ячейках ниже. В результате должны получиться следующие 4 формулы в L34:L37:

{=SQRT(SUM((L$2:L$33-$H$2:$H$33)A2))}
{=SQRT(SUM((L$2:L$33-$I$2:$I$33)A2))}
{=SQRT(SUM((L$2:L$33-$J$2:$J$33)A2))}
{=SQRT(SUM((L$2:L$33-$K$2:$K$33)A2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$H$2:$H$33)A2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$I$2:$I$33)A2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$J$2:$J$33)A2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$K$2:$K$33)A2))}

Так как вы использовали абсолютные ссылки для кластерных центров (ведь значок $ в формулах обозначает именно это, как было сказано в главе 1), можно перетащить L34:L37 в DG34:DG37, чтобы рассчитать расстояние от каждого покупателя до всех четырех кластерных центров. Озаглавьте строки в столбце G в ячейках с 35 по 37 «Distance to Cluster 2» и т. д. Свежерассчитанные расстояния показаны на рис. 15.

Рис. 15. Расчет расстояний от каждого покупателя до всех кластерных центров

Теперь вам известно расстояние каждого клиента до всех четырех кластерных центров. Их распределение по кластерам произведено по кратчайшему расстоянию в два приема следующим образом.

Сначала вернемся к Адамсу в столбец L и рассчитаем минимальное расстояние до кластерного центра в ячейке L38. Это просто:

=min(L34:L37)
=мин(L34:L37)

Для расчета используем формулу match/поискпоз (подробнее в главе 1). Поместив ее в L39, вы можете увидеть номер ячейки из промежутка L34:L37 (считаю каждую по порядку от 1), которая находится на минимальном расстоянии:

=match(L38,L34:L37,0) =поискпоз(L38,L34:L37,0)

В данном случае расстояние одинаково для всех четырех кластеров, так что формула выбирает первый (L34) и возвращает 1 (рис. 16).

Рис. 16. Добавление на лист привязки к кластерам

Вы можете также перетащить эти две формулы на DG38: DG39. Для пущей организованности добавьте названия строк 38 и 39 в ячейки 38 и 39 столбца G «Minimum Cluster Distance» и «Assigned Cluster».

Поиск решений для кластерных центров

Ваша электронная таблица пополнилась расчетом расстояний и привязкой к кластерам. Теперь, чтобы установить наилучшее положение кластерных центров, нужно найти такие значения в столбцах от Н до К, которые минимизируют общее расстояние между покупателями и кластерными центрами, к которым они привязаны, указанными в строке 39 для каждого покупателя.

Когда слышите слово «минимизировать»: начинается этап оптимизации, а оптимизация производится с помощью «Поиска решения».

Чтобы использовать «Поиск решения», вам понадобится ячейка для результатов, поэтому в А36 просуммируем все расстояния между покупателями и их кластерными центрами:

=SUM(L38:DG38)
=CУMMA(L3 8:DG3 8)

Эта сумма расстояний от клиентов до ближайших к ним кластерных центров в точности является той целевой функцией, с которой мы встречались ранее, во время кластеризации актового зала средней школы Макакне. Но евклидово расстояние со своими степенями и квадратными корнями — чудовищно нелинейная функция, поэтому вам придется использовать эволюционный алгоритм решения вместо симплекс-метода.

В главе 1 вы уже пользовались этим методом. Симплексный алгоритм, если есть возможность его применить, работает быстрее других, но им нельзя воспользоваться для вычисления корней, квадратов и остальных нелинейных функций. Точно так же бесполезен OpenSolver, который использует симплексный алгоритм, пусть даже и будто принявший стероиды.

В нашем случае встроенный в «Поиск решения» эволюционный алгоритм использует комбинацию случайного поиска и отличное решение «скрещивания», чтобы, подобно эволюции в биологическом контексте, находить эффективные решения.

У вас есть все, что нужно для постановки задачи перед «Поиском решения»:

  • цель: минимизировать общие расстояния от покупателей к их кластерным центрам (А36);
  • переменные: вектор каждой сделки относительно кластерного центра (Н2:К33);
  • условия: кластерные центры должны иметь значения в пределах от 0 до 1.

Рекомендуется наличие «Поиска решения» и молотка. Ставим задачу «Поиску решения»: минимизировать А36 путем изменения значений Н2:К33 с условием Н2:К33 <=1, как и все векторы сделок. Убедитесь, что переменные отмечены как положительные и выбран эволюционный алгоритм (рис. 17).

Рис. 17. Установки «Поиска решения» для 4-центровой кластеризации

Но постановка задачи — еще не все. Придется немного попотеть, выбирая нужные опции эволюционного алгоритма, нажав кнопку «Параметры» в окне «Поиска решения» и перейдя в окно настройки. Советую установить максимальное время секунд на 30 побольше, в зависимости от того, сколько вы готовы ждать, пока «Поиск решений» справится со своей задачей. На рис. 18 я поставил свое на 600 секунд (10 минут). Таким образом, я могу запустить «Поиск решения» и пойти обедать. А если вам захочется прервать его пораньше, просто нажмите Escape и выйдите из него с наилучшим решением, которое тот успел найти.

Рис. 18. Параметры эволюционного алгоритма

Нажмите «Выполнить» и наблюдайте, как Excel делает свое дело, пока эволюционный алгоритм не сойдется.

Смысл полученных результатов

Как только «Поиск решения» выдает вам оптимальные кластерные центры, начинается самое веселое. Переходим к изучению групп! На рис. 19 мы видим, что «Поиск решения» нашел оптимальное общее расстояние 140,7, а все четыре кластерных центра — спасибо условному форматированию! — выглядят совершенно по-разному.

Рис. 19. Четыре оптимальных кластерных центра

Имейте в виду, что ваши кластерные центры могут отличаться от представленных в книге, потому что эволюционный алгоритм использует случайные числа и ответ каждый раз получается разный. Кластеры могут быть совершенно другими или, что более вероятно, располагаться в другом порядке (к примеру, мой кластер 1 может быть очень близок к вашему кластеру 4 и т. д.).

Так как при создании листа вы вставили в столбцы от В до G описания сделок, теперь можно прочитать подробности на рис. 19, что важно для понимания идеи кластерных центров.

Для кластера 1 в столбце Н условное форматирование выбирает сделки 24, 26, 17 и, в меньшей степени, 2. Прочитав описание этих сделок, можно понять, что у них общего: они все заключались на пино нуар.

Взглянув на столбец I, вы увидите, что во всех зеленых ячейках низкое минимальное количество. Это покупатели, которые не желают приобретать огромные партии в процессе сделки.

А вот два остальных кластерных центра, честно говоря, сложно интерпретировать. Как насчет того, чтобы вместо интерпретации кластерных центров изучить самих покупателей в кластере и определить, какие сделки им нравятся? Это могло бы внести в вопрос ясность.

Рейтинг сделок кластерным методом

Вместо выяснения, какие расстояния до какого кластерного центра ближе к 1, давайте проверим, кто к какому кластеру привязан и какие сделки предпочитает.

Чтобы это сделать, начнем с копирования листа Offerlnformation. Копию назовем 4МС — TopDealsByCluster. Пронумеруйте столбцы от Н до К на этом новом листе от 1 до 4 (как на рис. 20).

Рис. 20. Создание листа таблицы для подсчета популярности сделок с помощью кластеров

На листе 4МС у вас были привязки по кластерам от 1 до 4 в строке 39. Все, что вам нужно сделать, чтобы сосчитать сделки по кластерам, — это взглянуть на названия столбцов от Н до К на листе 4МС — TopDealsByCluster, посмотреть, кто из листа 4МС был привязан к этому кластеру в строке 39, а затем сложить количество их сделок в каждой строке. Таким образом мы получим общее количество покупателей в данном кластере, совершивших сделки.

Начнем с ячейки Н2, в которой записано количество покупателей кластера 1, принявших предложение № 1, а именно январский мальбек. Нужно сложить значения ячеек диапазона L2: DG2 на листе 4МС, но только покупателей из 1 кластера, что является классическим примером использования формулы sumif / суммесли. Выглядит она так:

=SUMIF('4MC'!$L$39:$DG$39,'4MC — TopDealsByCluster'! H$1,'4MC'!$L2:$DG2)
=CyMMEOra('4MC'!$L$39:$DG$39,'4MC — TopDealsByCluster'! H$1,'4MC'!$L2:$DG2)

Эта формула работает таким образом: вы снабжаете ее некими условными значениями, которые она проверяет в первой части '4MC'!$L$39:$DG$39,'4MC, затем сравнивает с 1 в заголовке столбца ('4MC — TopDealsByCluster'! H$1), а потом при каждом совпадении, прибавляет это значение в строку 2 в третьей части формулы '4MC'!$L2:$DG2.

Заметьте, что вы использовали абсолютные ссылки ($ в формуле) перед всем, что относится к привязке к кластеру, номеру строки в заголовках столбцов и букве, обозначающей столбец, для совершенных сделок. Сделав эти ссылки абсолютными, можно перетащить формулу в любое место из Н2:К33, чтобы рассчитать количество сделок для других кластерных центров и комбинации сделок, как на рис. 21. Чтобы эти столбцы были более читаемы, вы также можете применить к ним условное форматирование.

Рис. 21. Общее количество сделок по каждому предложению, разбитое по кластерам

Выделяя столбцы от А до К и применяя автофильтрацию, вы можете сортировать эти данные. Отсортировав от наименьшего к наибольшему столбец Н, вы увидите, какие сделки наиболее популярны в кластере 1 (рис. 22).

Рис. 22. Сортировка кластера 1. Пино, пино, пино!

Как я упоминал ранее, четыре самых крупных сделки для этого кластера — это пино. Эти ребята явно злоупотребляют фильмом «На обочине». Если вы отсортируете кластер 2, то вам станет совершенно ясно, что это — мелкооптовые покупатели (рис. 23).

Но когда вы отсортируете кластер 3, понять что-либо будет не так просто. Крупные сделки можно пересчитать по пальцам, а разница между ними и остальными не так очевидна. Однако у самых популярных сделок все же есть что-то общее — довольно хорошие скидки, 5 из 6 самых крупных сделок — на игристое вино, и Франция — производитель товара для 3 из 4 из них. Тем не менее эти предположения неоднозначны.

Что касается кластера 4, то этим ребятам по какой-то причине явно понравилось августовское предложение на шампанское. Также 5 из 6 крупнейших сделок — на французское вино, а 9 из 10 первых по величине — на большой объем товара. Может, это тяготеющий к французским винам крупнооптовый кластер? Пересечение кластеров 3 и 4 тоже беспокоит.


© 1998-2023 Дмитрий Рябых