Phân khúc khách hàng
Thuộc phần Học không giám sát trong hành trình Machine Learning của Coddy. Bài học 39 trên 51.
Chương này ứng dụng các cụm, tạo nên một danh sách phát được sắp xếp theo tâm trạng:
Trước tiên là các phân khúc: những nhóm người mà bạn có thể hành động dựa trên đó. Một nhà nghỉ đã mở rộng hai đặc trưng và phân nhóm khách lưu trú:
Đơn vị thực cho biết một phân đoạn có đặc điểm như thế nào. Tâm đã chuẩn hóa cho thấy điều gì làm phân đoạn đó khác biệt: từng đặc trưng tính theo độ lệch chuẩn so với mức trung bình của khách.
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))Lệnh này in ra:
[[ 1.3 -0.7]
[-0.7 -0.7]
[-0.7 1.4]]Số của mỗi hàng nằm xa 0 nhất sẽ cho biết phân khúc của hàng đó. Hàng 0 ở lại lâu hơn 1.3 độ lệch chuẩn: khách du lịch ba lô. Hàng 2 đặt chỗ sớm hơn 1.4 độ lệch chuẩn: các chuyến đi của trường học.
Thử thách
Trung bìnhMột nhà hát muốn tìm hiểu về 166 thành viên của mình. Chương trình đọc các đặc trưng dùng để phân nhóm, chẳng hạn như age,ticket_price.
- Chuẩn hóa các cột đó, phân cụm thành
best_k(X)nhóm bằng hàm trợ giúp có sẵn, rồi in số nhóm. - In từng nhóm theo thứ tự từ lớn nhất đến nhỏ nhất, gồm kích thước và tên nhóm: đặc trưng tại tâm có khoảng cách xa 0 nhất,
highhoặclow, cùng khoảng cách đó.
Với một nhà hát khác và 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)Tự làm thử
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Mỗi thành viên câu lạc bộ kịch có một hàng dữ liệu
members = pd.read_csv("theatre.csv")
# Các đặc trưng dùng để phân nhóm, chẳng hạn như age,ticket_price
features = input().split(",")
# Dựa trên điểm silhouette: chọn k từ 2 đến 6 có điểm silhouette cao nhất cho 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
# Viết code bên dưới
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Học không giám sát
1Tìm các nhóm
Học không cần nhãnĐo độ tương đồngTự thực hiện K-MeansK-Means trong scikit-learnÔn tập: thành viên phòng gym7PCA trong thực tế
Quan sát 64 chiềuCác thành phần như mẫu hìnhNén và dựng lạiPCA trước khi xây dựng mô hìnhÔn tập: máy quét khuôn mặt10Dự án: Khám phá chữ số
Quan sát các chữ sốThu gọn bằng PCAPhân cụm chữ sốĐặt tên cho các cụmTìm những chữ số khác biệt2Chọn k
Quán tínhPhương pháp khuỷu tayĐiểm số SilhouetteChuẩn hóa thang đo trước khi phân cụmÔn tập: Các vùng giao hàng3Đọc hiểu các cụm
Phân tích đặc điểm các cụmTâm cụm theo đơn vị thực tếCụm và nhãn đã biếtKhi K-Means thất bạiÔn tập: Nếm trà9Cụm trong thực tế
Phân khúc khách hàngCụm làm đặc trưngMàu sắc hình ảnhÔn tập: sắc thái danh sách phátTự luyện tập: Trình biên dịch Python online