Сегменты покупок
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 48 из 51.
Интернет-магазин растений знает своих 240 клиентов только по их действиям: число заказов в год, размер корзины, доля покупок со скидкой и количество дней с момента последнего заказа.
Никто не пометил их. Владелица хочет несколько сегментов, которые она сможет описать простыми словами, и письмо для возвращения того, кто ушёл.
Пусть два метода согласуются относительно k: дерево дерева подсказывает его, а силуэт проверяет его по соседям. Затем считайте каждый сегмент в реальных единицах.
Задание
СложноПрограмма считывает, где разрезать дерево; в заготовке создаётся график с заголовком.
- Масштабируй признаки и разрежь там дерево, построенное методом Уорда. Выведи количество получившихся сегментов.
- Выведи коэффициент силуэта k-means (3 знака после запятой) для этого k и каждого соседнего значения, а затем — лучшее k.
- Переобучи модель с этим значением и сохрани результат в
plants["segment"]. Сначала выведи самые большие сегменты, присвой каждому букву и выведи средние значения в исходных единицах; затем укажи сегмент с самым давним последним заказом. - Построй точечную диаграмму для каждого сегмента, обозначив его буквой; добавь легенду и отобрази график.
Для другого магазина разрежь при значении 8:
Tree cut at 8.0: 3 segments
Silhouette at k = 2: 0.573
Silhouette at k = 3: 0.675
Silhouette at k = 4: 0.630
Best k: 3
A (70): 8.6 orders a year, 29 EUR baskets, 15% on sale, last order 23 days ago
B (50): 3.1 orders a year, 22 EUR baskets, 60% on sale, last order 53 days ago
C (30): 1.8 orders a year, 89 EUR baskets, 10% on sale, last order 148 days ago
Win-back email: segment Cа вот его график:
Затем Coddy опишет твои результаты.
Попробуйте сами
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from scipy.cluster.hierarchy import linkage, fcluster
# Одна строка на каждого покупателя магазина растений
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# Высота, на которой владелец обрезает дерево магазина, определённая по дендрограмме (3 или более сегмента)
cut = float(input())
fig, ax = plt.subplots()
ax.set_title("Plant Shop Segments")
ax.set_xlabel("Orders per year")
ax.set_ylabel("Average basket (EUR)")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python