Menu
CoddyTech

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:

80 bài hát được biểu diễn bằng các chấm, độ tích cực trải theo chiều ngang và năng lượng tăng theo chiều dọc, chia thành bốn nhóm mà k-means tìm được và đặt tên: căng thẳng ở góc trên bên trái, vui vẻ ở góc trên bên phải, buồn ở góc dưới bên trái, bình yên ở góc dưới bên phải

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ú:

150 khách lưu trú tại nhà nghỉ, số đêm mỗi lần lưu trú tăng theo chiều ngang và số ngày đặt trước tăng theo chiều dọc, chia thành ba phân khúc: các chuyến đi của trường học được đặt trước nhiều tháng, khách đi nghỉ cuối tuần với thời gian lưu trú ngắn, khách du lịch bụi với thời gian lưu trú dài và đặt phòng sát ngày

Đơ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.

challenge icon

Thử thách

Trung bình

Mộ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.

  1. 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.
  2. 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, high hoặc low, 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
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch Python online