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:
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.
Tantangan
Sulitprep menyimpan jalur; program membaca kedalaman pohon ke dalam depths.
- Pisahkan seperempat data sebagai data uji dengan stratifikasi,
random_state=0. - Lakukan pencarian grid pada
prepditambah forest dengan 100 pohon (random_state=0) untukdepths, dengan 5 fold, menggunakan baris data pelatihan. Cetak kedalaman terbaik dan akurasi CV. - Dari peluang pembatalan pada data uji, cetak AUC dan daftar yang akan dihubungi: peluang 0.5 atau lebih.
- Plot kurva ROC sebagai
forest, diagonal putus-putuscoin 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 cancelledLalu 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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Terawasi
1Model Pertamamu
Belajar dari ContohData Latih dan Data UjiMelatih dan MemprediksiMenilai ModelRangkuman: Penyortir Benih4Regresi Logistik
Prediksi Ya atau TidakAmbang KeputusanBobot sebagai BuktiBeberapa KelasRangkuman: Filter Spam2Tetangga Terdekat
Cara k-NN MenentukanMemilih kBatas KeputusanPenskalaan untuk TetanggaRingkasan: Tetangga Wine5Mengukur Model Klasifikasi
Matriks KonfusiPresisi dan RecallSkor F1Kelas Tidak SeimbangKurva ROCRangkuman: Tes SkriningLatihan sendiri: Compiler Python online