Menu
CoddyTech

Сегменты покупок

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 48 из 51.

Интернет-магазин растений знает своих 240 клиентов только по их действиям: число заказов в год, размер корзины, доля покупок со скидкой и количество дней с момента последнего заказа.

240 клиентов магазина растений показаны серыми точками: по горизонтали — число заказов в год, по вертикали — средняя стоимость корзины в евро, подписи отсутствуют; плотная группа точек сосредоточена в области низкой стоимости корзины, а небольшая группа клиентов с высокими расходами — ближе к верхнему левому углу

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

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

challenge icon

Задание

Сложно

Программа считывает, где разрезать дерево; в заготовке создаётся график с заголовком.

  1. Масштабируй признаки и разрежь там дерево, построенное методом Уорда. Выведи количество получившихся сегментов.
  2. Выведи коэффициент силуэта k-means (3 знака после запятой) для этого k и каждого соседнего значения, а затем — лучшее k.
  3. Переобучи модель с этим значением и сохрани результат в plants["segment"]. Сначала выведи самые большие сегменты, присвой каждому букву и выведи средние значения в исходных единицах; затем укажи сегмент с самым давним последним заказом.
  4. Построй точечную диаграмму для каждого сегмента, обозначив его буквой; добавь легенду и отобрази график.

Для другого магазина разрежь при значении 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

а вот его график:

Сегменты другого магазина на графике с заголовком Plant Shop Segments: A — 70 покупателей с 5–14 заказами в год, B — 50 покупателей с небольшим числом заказов и маленькими корзинами, C — 30 покупателей с небольшим числом заказов и большими корзинами в верхней части графика; есть легенда

Затем 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)")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python