Menu
CoddyTech

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:

Son 3 ayda atlanan kutu sayısına göre iptal edenlerin oranını gösteren çubuklar: 0 atlanan için %15, 1 için %36, 2 için %60, 3 için %61 ve 4 veya daha fazla için %86

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.

challenge icon

Görev

Zor

prep işlem hatlarını tutar; program ağaç derinliklerini depths içine okur.

  1. Tabakalı bir test çeyreği ayır; random_state=0.
  2. Eğitim satırlarında, 5 katlama kullanarak depths üzerinde prep ile 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.
  3. Test verisindeki iptal olasılıklarından AUC'yi ve arama listesini yazdır: 0.5 veya daha yüksek olasılıklar.
  4. ROC eğrisini forest olarak, kesikli bir coin toss köş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 cancelled

Who Will Cancel? başlıklı bir ROC eğrisi; kesikli coin toss köşegeninin üzerinde hızla yükselen düz bir forest eğrisi ve bir açıklama kutusu

Ardı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
quiz iconKendini test et

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

Kendi başına pratik yap: Online Python derleyicisi