Müşteri Kaybı
Coddy'nin Machine Learning Journey'sinin Denetimli Öğrenme bölümünün bir parçası. Ders 58 / 58.
Bir yemek kiti hizmeti her hafta kutular gönderir. subscribers.csv, 300 müşteriyi ve iki ay içinde iptal edip etmediklerini takip eder. Atlanan kutular bir uyarı işaretidir:
Ekip, ayrılmadan önce risk altındaki müşterileri aramak istiyor. Tek bir işaret yeterli değil, bu yüzden bir orman hepsini değerlendirecek.
Derinliğinin ayarlanması gerekiyor ve bir ROC eğrisi, risk puanlarının iptal edenleri ne kadar iyi sıraladığını gösterecek.
Görev
Zorprep işlem hatlarını tutar; program ağaç derinliklerini depths içine okur.
- Tabakalı bir test çeyreği ayır;
random_state=0. - Eğitim satırlarında, 5 katlama kullanarak
depthsüzerindeprepile 100 ağaçlı bir orman için (random_state=0) ızgara araması yap. En iyi derinliği ve CV doğruluğunu yazdır. - Test verisindeki iptal olasılıklarından AUC'yi ve arama listesini yazdır: 0.5 veya daha yüksek olasılıklar.
- ROC eğrisini
forestolarak, kesikli bircoin tossköşegeni ve bir açıklama kutusuyla çiz; göster.
Başka bir hizmet ve 3, 5 derinlikleri için:
Best depth: 3 (CV accuracy 0.761)
Test AUC: 0.802
Call list: 21 customers, 15 of them really cancelledArdından Coddy eğrinizi açıklar.
Kendin dene
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"]
# Prepare the Data bölümündeki gibi işlem kolları
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)])
# Denenecek ağaç derinlikleri
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")
# Kodunuzu aşağıya yazın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Denetimli Öğrenme bölümündeki tüm dersler
1İlk Modeliniz
Örneklerden ÖğrenmeEğitim ve Test KümeleriUydurma ve Tahmin EtmeBir Modeli PuanlamaÖzet: Tohum Sınıflandırıcı4Lojistik Regresyon
Evet-Hayır TahminleriKarar EşiğiKanıt Olarak AğırlıklarBirden Fazla SınıfÖzet: Spam Filtresi2En Yakın Komşular
k-NN Nasıl Karar Verirk'yi SeçmekKarar SınırlarıKomşular İçin ÖlçeklemeÖzet: Şarap Komşuları5Sınıflandırıcıları Değerlendirme
Karmaşıklık MatrisiKesinlik ve DuyarlılıkF1 SkoruDengesiz SınıflarROC EğrileriÖzet: Tarama Testi8Çapraz Doğrulama
K-Katlı DoğrulamaModelleri Adil Bir Şekilde KarşılaştırmaIzgara AramasıÖzet: Kaykay Tamiri11Proje: Penguen Türleri
Penguenlerle TanışınVerileri HazırlayınBir Model SeçinEn İyisini AyarlayınModeli Yayına AlınKendi başına pratik yap: Online Python derleyicisi