Khách hàng rời bỏ
Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 58 trên 58.
Một dịch vụ giao bộ nguyên liệu nấu ăn theo tuần. subscribers.csv theo dõi 300 khách hàng và việc họ có hủy dịch vụ trong vòng hai tháng hay không. Bỏ qua các hộp hàng là một dấu hiệu cảnh báo:
Nhóm muốn gọi cho những khách hàng có nguy cơ rời đi trước khi họ rời đi. Một dấu hiệu là chưa đủ, vì vậy mô hình rừng sẽ cân nhắc tất cả các dấu hiệu.
Cần điều chỉnh độ sâu của mô hình, và đường cong ROC sẽ cho thấy điểm rủi ro xếp hạng những người sẽ hủy tốt đến đâu.
Thử thách
Khóprep chứa các bước xử lý dữ liệu; chương trình đọc độ sâu của cây vào depths.
- Tách một phần tư dữ liệu làm tập kiểm tra, có phân tầng, với
random_state=0. - Tìm kiếm lưới trên
prepcùng một rừng gồm 100 cây (random_state=0) qua các giá trị trongdepths, dùng 5 phần chia trên các hàng dữ liệu huấn luyện. In độ sâu tốt nhất và độ chính xác CV. - Dựa vào xác suất khách hàng hủy dịch vụ trong tập kiểm tra, in AUC và danh sách cần gọi, gồm những người có xác suất từ 0.5 trở lên.
- Vẽ đường cong ROC với nhãn
forest, đường chéo nét đứtcoin tossvà chú giải, rồi hiển thị biểu đồ.
Với một dịch vụ khác và các độ sâu 3, 5:
Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelledSau đó, Coddy mô tả đường cong của bạn.
Tự làm thử
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, roc_auc_score
subscribers = pd.read_csv("subscribers.csv")
numbers = ["months_subscribed", "boxes_skipped", "complaints", "monthly_price", "delivery_rating"]
text = ["plan", "channel"]
X = subscribers[numbers + text]
y = subscribers["churned"]
# Các luồng xử lý, như trong phần Prepare the Data
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])
# Các độ sâu của cây cần thử
n = int(input())
depths = []
for i in range(n):
depths.append(int(input()))
fig, ax = plt.subplots()
ax.set_title("Who Will Cancel?")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")
# Viết code của bạn 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 có giám sát
1Mô hình đầu tiên của bạn
Học từ ví dụTập huấn luyện và tập kiểm traHuấn luyện và dự đoánChấm điểm mô hìnhÔn tập: Bộ sắp xếp hạt giống2Láng giềng gần nhất
Cách k-NN đưa ra quyết địnhChọn kRanh giới quyết địnhChuẩn hóa dữ liệu cho láng giềngÔn tập: láng giềng với dữ liệu rượu vang5Đánh giá bộ phân loại
Ma trận nhầm lẫnĐộ chính xác và độ thu hồiĐiểm F1Các lớp mất cân bằngĐường cong ROCÔn tập: Bài kiểm tra sàng lọc11Dự án: Các loài chim cánh cụt
Làm quen với chim cánh cụtChuẩn bị dữ liệuChọn mô hìnhTinh chỉnh mô hình tốt nhấtĐưa mô hình vào sử dụng3Hồi quy tuyến tính
Dự đoán các con sốNhiều đặc trưngĐo lường sai sốBiểu đồ phần dưÔn tập: Thuê xe đạp6Cây quyết định
Cây đặt câu hỏiĐọc câyĐộ sâu của câyTầm quan trọng của đặc trưngÔn tập: quyết định cho vay9Các mô hình tổ hợp
Rừng ngẫu nhiênVì sao rừng hoạt động hiệu quảTăng cường độ dốcÔn tập: Người kiểm lâm rừng12Thử thách cuối cùng
Tiến triển của bệnh tiểu đườngPhê duyệt tín dụngChữ số viết tayKhách hàng rời bỏTự luyện tập: Trình biên dịch Python online