Сегменты клиентов
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 39 из 51.
В этой главе мы применим кластеризацию на практике и составим плейлист по настроению:
Сначала — сегменты: группы людей, на действия которых можно повлиять. Хостел масштабировал два признака и разделил своих гостей на группы:
Реальные единицы измерения показывают, как выглядит сегмент. Его центр в масштабированном пространстве показывает, чем он отличается: каждую характеристику в std от среднего гостя.
X = StandardScaler().fit_transform(guests[["nights", "days_ahead"]])
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)
print(km.cluster_centers_.round(1))Это выводит:
[[ 1.3 -0.7]
[-0.7 -0.7]
[-0.7 1.4]]Число в каждой строке, наиболее удалённое от 0, указывает на её сегмент. Строка 0 остаётся на 1.3 стандартного отклонения дольше: туристы с рюкзаками. Строка 2 бронирует на 1.4 стандартного отклонения раньше: школьные поездки.
Задание
СреднеТеатр хочет узнать больше о своих 166 участниках. Программа считывает признаки для сегментации, например age,ticket_price.
- Масштабируй эти столбцы, раздели данные на сегменты с помощью вспомогательной функции из начального кода
best_k(X)и выведи их количество. - Начиная с самого большого сегмента, выведи размер и название каждого сегмента: признак центра, наиболее удалённый от 0,
highилиlow, и расстояние.
Для другого театра и признаков age,shows_per_year:
4 segments
57 members: high shows_per_year (1.2 std from average)
52 members: low shows_per_year (1.0 std from average)
40 members: low age (1.4 std from average)
32 members: high age (1.5 std from average)Попробуйте сами
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Одна строка на каждого участника театра
members = pd.read_csv("theatre.csv")
# Признаки для сегментации, например age,ticket_price
features = input().split(",")
# По оценкам силуэта: k от 2 до 6 с наилучшей оценкой силуэта для X
def best_k(X):
best, best_score = 2, -1
for k in range(2, 7):
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)
score = silhouette_score(X, labels)
if score > best_score:
best, best_score = k, score
return best
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставки3Анализ кластеров
Профилирование кластеровЦентры в реальных единицахКластеры и известные меткиКогда K-Means не справляетсяПовторение: дегустация чая9Кластеры в работе
Сегменты клиентовКластеры как признакиЦвета изображенийПовторение: настроение плейлистовПотренируйтесь самостоятельно: Онлайн-компилятор Python