УДК 005.6
DOI: 10.24412/2071-6168-2024-2-604-605
АНАЛИЗ КАЧЕСТВА ЭЛЕКТРОННОГО КОНТЕНТА. РАЗБИЕНИЕ ДАННЫХ О ПОТРЕБЛЕНИИ КОНТЕНТА НА ОПТИМАЛЬНОЕ ЧИСЛО КЛАСТЕРОВ ПРИ ПОМОЩИ АЛГОРИТМА KMEANS
В.Г. Мосин, В.Н. Козловский
Статья посвящена методу определения оптимального числа кластеров при выполнении кластеризации KMeans. Предложена метрика эффективности разбиения, изложены последовательные шаги алгоритма для ее вычисления. На примере данных о потреблении контента пользователями одного из ведущих хостингов показана состоятельность предложенного метода.
Ключевые слова: контент, оценка качества, анализ данных, кластеризация, KMeans, scikit-learn, pandas,
numpy.
1. Введение. Определение количества кластеров в алгоритмах кластеризации — это важный этап анализа данных, который требует обдумывания и экспертных оценок. Часто определение количества кластеров происходит на основе интуиции или предварительных знаний о данных и задаче. У ученых и экспертов в области данных может быть опыт или понимание, которое помогает им сделать предположение о подходящем количестве кластеров [3, 7].
Однако часто бывает необходимо исключить экспертную оценку (например, если кластеризация осуществляется в рамках более сложного алгоритма в режиме реального времени) и настроить гиперпараметры алгоритма кластеризации, основываясь на объективных методах, а не на человеческой интуиции.
Один из подходов к решению этой задачи рассматривается в настоящей статье.
1.1. Теоретическая часть. Несмотря на то, что кластеризация данных относится к задачам машинного обучения без учителя, и, тем самым, не требует разбиения данных на обучающую (то есть, заранее размеченную) и тестовую выборки, мы произведем такое разбиение для того, чтобы получить возможность сравнить два результата кластеризации. Если результаты окажутся близкими, мы будем считать, что разбиение проведено на верное число кластеров, в противном случае будем пытаться подобрать другое разбиение [2].
Для сравнения различных разбиений нам понадобится некоторая метрика их качества, и чтобы ее получить, мы вводим две матрицы принадлежности, которые показывают, принадлежат ли два объекта одному кластеру, или же они принадлежат разным кластерам.
1.1.1. Матрица принадлежности M_train_test. Итак, мы разбили данные на обучающую и тестовую выборки. Обучаем алгоритм KMeans на обучающей выборке и применяем обученный алгоритм к тестовой выборке. После этого каждый объект тестовой выборки получает метку принадлежности к тому или иному кластеру. Матрица M_tyrain_test определяется как квадратная матрица, порядок которой равен объему тестовой выборки, а элемент с номером (i, j) равен 1, если метки i-го и j-го объектов равны между собой, или 0, если они различны.
1.1.2. Матрица принадлежности M_test. Обучаем алгоритм KMeans на тестовой выборке и применяем обученный алгоритм к ней самой. После этого каждый объект тестовой выборки получает метку принадлежности к тому или иному кластеру. Аналогично предыдущему пункту матрица M_test определяется как квадратная матрица, порядок которой равен объему тестовой выборки, а элемент с номером (i, j) равен 1, если метки i-го и j-го объектов равны между собой, или 0, если они различны.
Теперь у нас есть две матрицы принадлежности одного для одного и того же набора объектов. Разумно предположить, что разбиение проведено качественно, если эти матрицы похожи друг на друга. И наоборот: если они сильно отличаются, разумно предположить, что такое разбиение менее качественно.
1.1.3. Метрика качества разбиения. Рассмотрим разность матриц:
M_train_test - M_test.
Понятно, что чем больше в ней нулей, тем более они похожи. Вычисляем количество нулевых элементов в разности матриц принадлежности и, чтобы получить возможность сравнивать результаты кластеризации на множествах разных объемов, нормализуем это число путем деления на общее количество компонент (то есть, на квадрат объема тестовой выборки). То, что получается в результате — это доля совпадений в матрицах принадлежности. Именно ее мы будем использовать как оценку качества разбиения: чем ближе доля совпадений к единице, тем качественнее разбиение.
1.2. Постановки задачи
1.2.1. Предмет исследования. Предметом нашего исследования является метод оценки качества кластеризации, основанный на матрицах принадлежности.
1.2.2. Методика исследования. Мы будем последовательно вычислять метрику качества в разных ситуациях и сравнивать получающиеся результаты. Поскольку, результаты естественным образом зависят от двух параметров:
1. от числа кластеров, на которые проводится разбиение,
2. от пропорции, в которой разбиваются данные на обучающую и тестовую выборки,
наша методика будет состоять в выполнении вложенного цикла: внутренний цикл мы будем вести по объему тестовой выборки, а внешний — по числу кластеров.
1.2.3. Цель исследования. Наша цель — продемонстрировать эффективность предложенного метода на примере данных о потреблении контента пользователями одного из ведущих хостингов.
1.3. Технологии. Для проведения расчетов и визуализации результатов мы применяем среду jupyter notebook и язык программирования python вместе с его библиотеками: pandas, sklearn и matplotlib. Библиотека pandas является мощным инструментом для анализа данных. Она предоставляет эффективные и интуитивно понятные структуры данных, которые позволяют эффективно оперировать с табличными данными [1]. Библиотека sklearn, также известная как scikit-learn, является одной из наиболее популярных библиотек машинного обучения в python. Она обладает широким спектром инструментов и алгоритмов для решения различных задач, таких как классификация, регрессия, кластеризация, снижение размерности и другие [4]. Библиотека matplotlib предоставляет разнообразные возможности для создания визуализаций, таких как графики, диаграммы, изображения и многое другое [4].
2. Описание данных. В качестве данных для исследования используются сведения о потреблении контента пользователями одного из ведущих хостингов. Данные содержат записи, индексированные датами с 2021-0820 по 2023-01-01, каждый объект описан при помощи 18 признаков, подробное описание структуры данных см. ниже, в п. 3.2.
3. Алгоритм
3.1. Чтение данных. При помощи функции read_csv из библиотеки pandas, читаем набор данных:
Дата Просмотры Время просмотра (часы) Поделились ... Дизлайки Лайки
2023-01-01 475.0 21.2038 9.0 . .. 0.0 16.0
2022-12-31 174.0 5.4814 1.0 . .. 0.0 4.0
2022-12-30 490.0 17.8182 3.0 . .. 1.0 3.0
2021-08-22 275.0 10.4130 1.0 . .. 0.0 2.0
2021-08-21 222.0 10.5967 0.0 . .. 2.0 4.0
2021-08-20 209.0 8.6935 0.0 . .. 0.0 1.0
Записываем датафрейм в переменную df.
3.2. Разведочный анализ. Применяем метод info библиотеки pandas и выводим сведения о признаках:
# Column Non-Null Count Dtype
0 Просмотры 500 non-null float64
1 Время просмотра (часы) 500 non-null float64
2 Поделились 500 non-null float64
3 Постоянные зрители 500 non-null float64
4 Новые комментарии 500 non-null float64
5 Отказались от подписки 500 non-null float64
6 Новые подписчики 500 non-null float64
7 Новые зрители 500 non-null float64
8 Среднее число просмотров одним пользователем 500 non-null float64
9 Уникальные зрители 500 non-null float64
10 CTR для значков видео (%) 500 non-null float64
11 Показы 500 non-null float64
12 Подписчики 500 non-null float64
13 Средний процент просмотра (%) 500 non-null float64
14 Процент лайков 500 non-null float64
15 Средняя продолжительность просмотра 500 non-null float64
16 Дизлайки 500 non-null float64
17 Лайки 500 non-null float64
В данных содержатся 500 записей, относящихся типу с плавающей запятой, пропущенных данных нет. 3.3. Нормализация данных. Применяя метод describe библиотеки pandas к датафрему df, получаем статистики признаков:
min mean max std
Время просмотра (часы) 5.48 37.17 96.72 16.64
Поделились 0.00 6.96 71.00 6.25
Постоянные зрители 30.00 163.34 463.00 78.90
Новые комментарии 0.00 0.53 6.00 0.83
Отказались от подписки 0.00 2.77 29.00 2.55
Новые подписчики 0.00 6.49 19.00 3.51
Новые зрители 60.00 366.83 735.00 174.01
Среднее число просмотров одним пользователем 1.31 1.79 2.85 0.21
Уникальные зрители 96.00 530.18 1103.00 239.22
CTR для значков видео (%) 1.25 5.54 8.52 1.11
Показы 1938.00 8093.78 39479.00 3816.08
Подписчики -23.00 3.72 15.00 4.02
Средний процент просмотра (%) 18.68 26.72 41.29 3.41
Процент лайков 0.00 92.02 100.00 10.31
Средняя продолжительность просмотра 96.07 144.33 211.02 15.66
Дизлайки 0.00 1.28 10.00 1.34
Лайки -6.00 15.80 70.00 9.13
Такие значения говорят о том, что показатели признаков могут отличаться на порядки, что, безусловно, приведет к искажению результатов. Чтобы избежать дисбаланса значений, выполняем стандартную нормализацию данных:
= ^ - df.mean0ydf.std0
где метод mean возвращает средние значения признаков, а метод std — нормализации метод describe показывает: их средние квадратичные отклонения. После
min mean max std
Время просмотра (часы) -1.90 0.00 3.57 1.00
Поделились -1.11 0.00 10.23 1.00
Постоянные зрители -1.69 0.00 3.79 1.00
Новые комментарии -0.64 0.00 6.57 1.00
Отказались от подписки -1.08 0.00 10.27 1.00
Новые подписчики -1.84 0.00 3.55 1.00
Новые зрители -1.76 0.00 2.11 1.00
Среднее число просмотров одним пользователем -2.23 0.00 4.92 1.00
Уникальные зрители -1.81 0.00 2.39 1.00
CTR для значков видео (%) -3.84 0.00 2.67 1.00
Показы -1.61 0.00 8.22 1.00
Подписчики -6.63 0.00 2.80 1.00
Средний процент просмотра (%) -2.35 0.00 4.26 1.00
Процент лайков -8.92 0.00 0.77 1.00
Средняя продолжительность просмотра -3.08 0.00 4.25 1.00
Дизлайки -0.95 0.00 6.49 1.00
Лайки -2.38 0.00 5.93 1.00
Таким образом, теперь дисбаланс ликвидирован, все признаки приведены к единой шкале, и разница в единицах измерения не повлияет на результаты нашего исследования.
3.4. Стартовые значения параметров алгоритма. Мы будем варьировать два параметра: 1) процент P, который отводится на объем тестовой выборки, и 2) число кластеров N, на которое будут разбиваться обучающая и текстовая выборки. В начале алгоритма мы устанавливаем P=10 (затем в цикле мы доведем значение этой переменной до 90 с шагом 10), N=2 (это значение мы доведем до 10 с шагом 1).
3.5. Разбиение данных на обучающую и тестовую выборки. Применяя к датафрейму df метод train_test_split из модуля model_selection библиотеки skleam и указав при этом значение параметра test_size=0.1 (что как раз соответствует 10% от общего объема выборки), получаем два датафрема: df_train и df_test. Объем обучающей выборки df_train составляет 90% от 500 объектов, то есть, 450 объектов, объем тестовой выборки df_test, соответственно — 50 объектов.
3.6. Преобразование данных в массивы numpy. Библиотека sklearn взаимодействует с массивами numpy, поэтому полученные выше датафремы df_train и df_test нам нужно перевести в формат numpy. Для этого применяем метод to_numpy к этим датафремам и получаем два массива: X_train и X_test.
3.7. Формирование моделей кластеризации. При помощи метода KMeans из модуля cluster библиотеки sklearn формируем два объекта класса модель кластеризации: модель clust_train, которую мы будем применять к обучающим данным, и модель clust_test, которую применит к тестовым данным. В качестве количества кластеров, на которые нужно разбивать данные, указываем n_clusters=N (напомним, что на старте алгоритма N=2, а затем увеличивается с каждой итерацией).
3.8. Применение моделей кластеризации. При помощи метода fit из модуля cluster библиотеки sklearn обучаем обе модели. При этом первую clust_train модель учим на массиве X_train, а вторую модель X_test — на массиве X_test.
3.9. Формирование меток кластеров на тестовых данных
3.9.1. Модель clust_train. Применяем метод predict модели clust_train, указав в качестве аргумента тестовый массив X_test. В результате получаем массив меток labelsjrainjest, указывающий, к каким кластерам относятся объекты тестовой выборки с точки зрения модели, обученной на обучающей выборке.
3.9.2. Модель clust_test. Применяем метод labels_ к модели clust_test. В результате получаем массив меток labels_test, указывающий к каким кластерам относятся объекты тестовой выборки, с точки зрения модели, обученной на тестовой выборке.
3.10. Формирование матриц принадлежности. Формируем матрицу M_train_test по следующему правилу: если i-я и j-я метки массива labelsjxainjest равны между собой, то (i-я, j-я) компонента матрицы M_train_test равна 1, иначе это 0.
Аналогично формируем матрицу M_train_test, используем при этом массив labelsjest.
3.11. Вычисление доли совпадений. Вычисляем разность M_train_test - M_test. Это квадратная матрица, порядок которой равен объему тестовой выборки. Чем больше в этой матрице нулей, тем более похожими являются разбиения на кластеры объектов тренировочной и тестовой выборок. Вычисляем число нулевых значений этой матрицы и результат делим на количество ее компонент (то есть, на квадрат объема тестовой выборки). Результат — это число из промежутка от 0 до 1, которое и есть доля совпадений в матрицах принадлежности.
3.12. Повторные запуски. Чтобы нивелировать случайные артефакты при разбиении данных, которое мы осуществили на шаге 3.5, повторяем шаги с 3.5. по 3.11 достаточное число раз (в настоящем исследовании мы использовали 100 повторных запусков), получаем серию значений для доли совпадений и усредняем их по числу запусков.
Результат записываем в массив estimate. На старте алгоритма этот массив получает одно число, а затем, с изменением объема тестовой выборки, он нарастает до девяти чисел.
3.13. Цикл по объемам тестовой выборки. Возвращаемся к шагу 3.4, увеличиваем процент тестовой выборки P=P+10 и повторяем шаги с 3.5 по 3.11 до тех пор, пока не достигнем 90% объема.
После этого в массиве estimate находятся девять чисел (см. первую строку сводной таблицы из раздела 4).
3.14. Цикл по числу кластеров. Возвращаемся к шагу 3.4, увеличиваем число кластеров n_clusters=n_clusters+1 и повторяем шаги с 3.5 по 3.11 до тех пор, пока не достигнем разбиений на 10 кластеров.
После этого получается девять массивов estimate (см. сводную таблицу из раздела 4).
4. Результаты. Результаты заносим в сводную таблицу. В ней строки маркируют число кластеров, на которое производится разбиение данных (от 2 до 10), столбцы — процент, который составляет тестовая выборка по отношению ко всему объему данных (от 10% до 90%), а в ячейках записаны доли совпадающих позиций в матрицах принадлежностей (от 0 до 1).
10% 20% 30% 40% 50% 60% 70% 80% 90%
2 0.859840 0.844320 0.815484 0.936358 0.953220 0.951657 0.839860 0.837759 0.842712
3 0.795728 0.751194 0.744674 0.748383 0.733771 0.735981 0.759787 0.783928 0.798645
4 0.793488 0.840086 0.831213 0.842351 0.837070 0.834937 0.845538 0.827218 0.774618
5 0.776184 0.782860 0.797580 0.797555 0.788700 0.791756 0.796498 0.786003 0.771724
6 0.792400 0.793376 0.792574 0.796221 0.797449 0.796489 0.790270 0.785384 0.776353
7 0.802320 0.800858 0.806198 0.806133 0.807809 0.808718 0.804820 0.797427 0.790314
8 0.818112 0.820014 0.824181 0.822953 0.819598 0.819755 0.818252 0.815128 0.800384
9 0.833192 0.834782 0.833834 0.833841 0.836052 0.835969 0.833556 0.824912 0.812554
10 0.849568 0.844254 0.844197 0.845330 0.845724 0.843363 0.843469 0.838762 0.827731
4.1. По числу кластеров. Визуализация доли совпадений как функции от числа кластеров представлена на рис. 1. Это девять кривых, которые соответствуют девяти столбцам сводной таблицы. Каждая кривая получается при фиксированном значении объема тестовой выборки (от 10% до 90%).
1.0 0.9 0.8
0.7
Однако сами по себе эти кривые мало что значат. Нам нужно представлять, какая из них соответствует наилучшим значениям метрики эффективности разбиения, а в силу того, что очевидного превосходства как-либо кривой из этого семейства по отношению к другим кривым этого семейства не наблюдается, делать какие-либо выводы на основании этой визуализации мы не можем.
Чтобы преодолеть это затруднение, мы вычисляем средние значения по всем числам кластеров, другими словами, усредняем строки сводной таблицы. Теперь, отталкиваясь от числовых значений, мы можем указать ту кривую, которая демонстрирует объективно более высокие усредненные показатели.
_10%_20%_30%_40%_50%_60%_70%_80%_90%
0.813426 0.812416 0.809993 0.825458 0.824377 0.824292 0.814672 0.810724 0.799448
Визуально это означает, что мы усредняем каждую кривую, для чего вычисляем среднее значение кривой на всем промежутке ее изменения и заменяем кривую горизонтальной прямой (см. рис. 2).
1.0
0.9
0.8 0.7
23456789 10 Рис. 2. Доля совпадений, усредненная по всем процентам тестовой выборки
Максимальное значение в усредненной таблице соответствует разбиению данных на тестовую и обучающую выборки в отношении 40% к 60% (где 40% — объем теста).
4.2. По объему теста. Визуализация доли совпадений как функции от объема тестовой выборки представлена на рис. 3. Здесь девять кривых соответствуют девяти строкам сводной таблицы, и каждая кривая описывает ситуацию при фиксированном числе кластеров, на которые производится разбиение данных (от 2 до 10).
Вычисляем средние доли совпадений по всем объемам тестовой выборки. Для этого усредняем столбцы сводной таблицы:
_2_3_4_5_6_7_8_9_10
0.875690 0.761343 0.825169 0.787651 0.791169 0.802733 0.817597 0.830966 0.842489
- 40%
- -
23456789 10
Рис. 1. Доля совпадений, соотнесенная с числом кластеров
- 40 %
Визуально это означает, что каждая кривая становится горизонтальной прямой (см. рис. 4).
1.0
0.9
0.8
0.7
\ - 2 кластера
\
10% 20% 30% 40% 50% 60% 70% 80% 90% Рис 3. Доля совпадений, соотнесенная с процентом тестовой выборки
1.0-
0.9 -
0.8-
0.7 -
— класте[ ja
10% 20% 30% 40% 50% 60% 70% 80% 90% Рис 4. Доля совпадений, усредненная по всем числам кластеров
Наиболее высокая прямая (или, что то же самое, максимальное значение в усредненной таблице) соответствует двум кластерам.
5. Выводы
Кластеризация данных используется в широком спектре задач и отраслей, включая маркетинг, медицину, обнаружение мошенничества и многие другие (см. [5]). Определение правильного числа кластеров помогает принимать правильные решения на основе кластерных анализов, такие как создание сегментов покупателей, выявление характерных поведенческих паттернов или предсказание рисков и мошеннических действий.
Число кластеров напрямую влияет на качество и интерпретируемость кластеризации. Неправильное определение числа кластеров может привести к объединению сильно различающихся групп в один кластер или к разделению однородной группы на несколько кластеров. Правильно определенное число кластеров помогает обнаружить скрытые шаблоны, взаимосвязи и сходства в данных [2, 5, 6]).
Определение числа кластеров является серьезной задачей, один из подходов к решению которой был продемонстрирован в этой статье. Применение нашего метода к реальным данным о потреблении контента потребителями одного из ведущих хостингов показало его работоспособность в условиях, когда какие-либо доводы со стороны экспертов предметной области отсутствуют, и решение о разбиении принимается формально, на основании числовых данных, но не их интерпретации.
Список литературы
1. Хейдт М. Изучаем Pandas. Москва: ДМК Пресс, 2018. 438 с.
2. Бурков А. Машинное обучение без лишних слов. СПб: Питер, 2020. 192 с.
3. Вьюгин В.В. Математические основы теории машинного обучения и прогнозирования. М.: МЦИМО. 2013. 387 с.
4. Бринк Х., Ричардс Дж., Феверолф М. Машинное обучение. СПб.: Питер, 2017. 336 с.
5. Байков И.И., Семерова Е.А., Курмуков А.И. Метод ансамблирования алгоритмов кластеризации для решения задачи совместной кластеризации // Сенсорные системы. 2021. Т. 35. № 1. С. 43-49.
6. Паксашвили С.А. Тестирование алгоритма кластеризации k-means в решении задачи кластеризации финансовых операций // В сборнике: СНК-2022. Материалы LXXII открытой международной студенческой научной конференции Московского Политеха. Москва, 2022. С. 347-353.
7. Козловский В.Н. Потребительская ценность качества автомобилей / В.Н. Козловский, Г.Л. Юнак, Д.В. Айдаров, С.А. Шанин // Стандарты и качество. 2017. № 12. С. 76-80.
Мосин Владимир Геннадьевич, канд. физ.-мат. наук, [email protected], Россия, Самара, Самарский государственный технический университет,
Козловский Владимир Николаевич, д-р техн. наук, профессор, заведующий кафедрой, [email protected], Россия, Самара, Самарский государственный технический университет
ANALYSIS OF ELECTRONIC CONTENT QUALITY. DIVISIONING DATA ABOUT CONTENT CONSUMPTION INTO THE OPTIMAL NUMBER OF CLUSTERS USING THE KMEANS ALGORITHM
V.G. Mo sin, V.N. Kozlovsky
The article is devoted to the method of determining the optimal number of clusters for clustering K Means. A metric of partitioning efficiency is proposed, and the sequential steps of the algorithm for calculating it are outlined. Using the example of data on content consumption by users of one of the leading hosting companies, the consistency of the proposed method is shown.
Key words: content, quality assessment, data science, clustering, KMeans, scikit-learn, pandas, numpy.
Mosin Vladimir Gennadievich, candidate of physical and mathematical sciences, docent, yanbacha@yandex. ru, Russia, Samara, Samara State Technical University,
Kozlovsky Vladimir Nikolaevich, doctor of technical sciences, professor, head of the department, [email protected], Russia, Samara, Samara State Technical University
УДК 005.6
DOI: 10.24412/2071-6168-2024-2-609-610
СРАВНИТЕЛЬНЫЙ АНАЛИЗ ДВУХ МЕТРИК КЛАСТЕРИЗАЦИИ ДАННЫХ О ПОТРЕБЛЕНИИ
КОНТЕНТА
В.Г. Мосин, В.Н. Козловский
В статье исследуются характеристики двух методов определения оптимального числа кластеров. Первый метод хорошо известен, он основан на индексе Рэнда и состоит в вычислении матриц принадлежности. Второй метод предлагается впервые, он основан на вычислении дистанций между центроидами на обучающей и тестовой выборке.
Ключевые слова: контент, оценка качества, анализ данных, кластеризация, KMeans, агломеративная кластеризация, scikit-learn, AgglomerativeClustering, метод ближайших соседей, kNN, pandas, numpy.
1. Введение. Кластеризация данных — это процесс разделения набора данных на группы (кластеры) объектов, которые обладают схожими характеристиками или свойствами. Кластеризация позволяет выявить скрытые закономерности, структуры и отношения в данных, а также упростить их анализ и интерпретацию [5 - 7].
Хорошо известно, что определение оптимального числа кластеров является важнейшим этапом в процессе кластеризации, так как маленькое количество кластеров может недооценить сложность данных, в то время как слишком большое число кластеров может привести к переобучению [3].
1.1. Теоретическая часть. Для определения качества кластеризации используются так называемые метрики кластеризации.
1. Индекс силуэта (Silhouette Score). Измеряет, насколько каждый объект хорошо согласуется с кластером, к которому он был отнесен, и насколько отличается от соседних кластеров.
2. Индекс Дэвиса-Болдуэна (Davies-Bouldin Index). Используется для измерения среднего степени различия между кластерами. Чем меньше значение, тем лучше кластеризация.
3. Индекс Данна (Dunn Index). Измеряет отношение минимального интеркластерного расстояния к максимальному внутрикластерному расстоянию и помогает определить оптимальное количество кластеров.
4. Индекс Рэенда (Rand index). Используется для измерения согласованности между двумя различными присвоениями кластеров.
5. И другие.
Заметим, что среди известных методов оценки эффективности лишь индекс Рэнда апеллирует к разбиению данных для повторной кластеризации и сравнения результатов.
1.2. Постановки задачи. Мы предлагаем собственную метрику, для реализации которой, так же как и для метрик, основанных на вычисления индекса Ренда, требуется разбиение данных на два блока и последующее сравнение результатов кластеризации.
1.2.1. Предмет исследования. Мы будем исследовать нашу метрику эффективности агломеративной кластеризации, основанную на вычислении средней дистанции между центроидами кластеров на обучающей и тестовой выборке (подробнее о нашем алгоритме см. ниже, п. 2.2).
1.2.2. Методика исследования. Результаты, полученные по авторской методике, мы будем сравнивать с результатами, которые получаются при применении известного и апробированного метода, основанного на индексе Рэнда. Высокая согласованность результатов будет говорить о состоятельности нашего метода.
1.2.3. Цель исследования. Наша цель — применить свою метрику кластеризации к реальным данным (мы будем использовать данные о потреблении контента) и сопоставить результаты, полученные по нашей авторской методике с результатами, получающимися при помощи одного из известных методов, основанного на вычислении индекса Рэнда.
1.3. Технологии. Мы работаем с данными в среде Jupyter Notebook, которая предоставляет удобные инструменты для работы с языком программирования Python и его основными библиотеками: numpy, pandas, sklearn и matplotlib.
Одной из лучших библиотек для вычислений и обработки массивов данных в Python является библиотека numpy. Одномерные и многомерные числовые массивы эффективно обрабатываются с помощью предлагаемых библиотекой структур данных, алгоритмов и функций [2, 3].
Библиотека, специально созданная для работы с данными — pandas. Она тесно интегрирована с другими инструментами для анализа и вычислений данных на платформе Python, такими как numpy, sklearn и matplotlib [1].
Для кластеризации и применения метода ближайших соседей мы применяем библиотеку scikit-learn, которая также известна под именем sklearn. Библиотека sklearn является мощной и гибкой библиотекой машинного обучения, что делает ее отличным средством для реализации самых разнообразных моделей [3, 4].
2. Описание метрик. Мы будем сравнивать две метрики:
1. метрику, основанную на вычислении двух матриц принадлежности, которая была предложена в [2],
2. и нашу собственную метрику, основанную на вычислении расстояний между центроидами кластеров.
В данном разделе мы дадим краткое изложение идей, на которых основаны эти метрики.
2.1. Метрика матриц принадлежности. По сути, метрика, предложенная в [2], является одним из вариантов индекса Рэнда, хотя и с небольшими вариациями. Идея состоит в том, что данные разбиваются на обучающую и тестовую составляющие, после чего выполняются следующие действия.
609