Menu
CoddyTech

Pelanggan yang Berhenti

Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 58 dari 58.

Layanan paket bahan makanan mengirimkan kotak setiap minggu. subscribers.csv mencatat 300 pelanggan dan apakah mereka membatalkan langganan dalam dua bulan. Kotak yang dilewati adalah salah satu tanda peringatan:

Grafik batang persentase pelanggan yang membatalkan langganan berdasarkan jumlah kotak yang dilewati dalam 3 bulan terakhir: 15% untuk 0 kotak, 36% untuk 1, 60% untuk 2, 61% untuk 3, dan 86% untuk 4 atau lebih

Tim ingin menghubungi pelanggan yang berisiko sebelum mereka pergi. Satu tanda saja tidak cukup, jadi model hutan akan mempertimbangkan semuanya.

Kedalamannya perlu disetel, dan kurva ROC akan menunjukkan seberapa baik skor risiko mengurutkan orang yang membatalkan.

challenge icon

Tantangan

Sulit

prep menyimpan jalur; program membaca kedalaman pohon ke dalam depths.

  1. Pisahkan seperempat data sebagai data uji dengan stratifikasi, random_state=0.
  2. Lakukan pencarian grid pada prep ditambah forest dengan 100 pohon (random_state=0) untuk depths, dengan 5 fold, menggunakan baris data pelatihan. Cetak kedalaman terbaik dan akurasi CV.
  3. Dari peluang pembatalan pada data uji, cetak AUC dan daftar yang akan dihubungi: peluang 0.5 atau lebih.
  4. Plot kurva ROC sebagai forest, diagonal putus-putus coin toss, serta legenda; tampilkan.

Untuk layanan dan kedalaman lain, 3, 5:

Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelled

Kurva ROC berjudul Who Will Cancel? dengan kurva forest utuh yang menanjak tajam di atas diagonal putus-putus coin toss, serta legenda

Lalu Coddy menjelaskan kurvamu.

Coba sendiri

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"]

# Jalur-jalurnya, seperti dalam 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)])

# Kedalaman pohon yang akan dicoba
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")

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Terawasi

Latihan sendiri: Compiler Python online