Menu
CoddyTech

נטישת לקוחות

חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 58 מתוך 58.

שירות משלוח ערכות לבישול שולח קופסאות מדי שבוע. הקובץ subscribers.csv עוקב אחר 300 לקוחות והאם הם ביטלו את המינוי בתוך חודשיים. דילוג על קופסאות הוא סימן אזהרה אחד:

עמודות המציגות את שיעור הלקוחות שביטלו לפי מספר הקופסאות שעליהן דילגו בשלושת החודשים האחרונים: 15% עבור 0 דילוגים, 36% עבור 1, 60% עבור 2, 61% עבור 3 ו-86% עבור 4 או יותר

הצוות רוצה להתקשר ללקוחות שנמצאים בסיכון לפני שיעזבו. סימן אחד אינו מספיק, ולכן יער ישקלל את כולם.

יש לכוונן את העומק שלו, ועקומת ROC תראה עד כמה ציוני הסיכון מדרגים את מי שמבטל.

challenge icon

אתגר

קשה

prep מכיל את המסלולים; התוכנית קוראת את עומקי העצים לתוך depths.

  1. פצלו רבע מנתוני הבדיקה תוך שמירה על השכבות, random_state=0.
  2. בצעו חיפוש רשת על prep בתוספת יער של 100 עצים (random_state=0) על פני depths, עם 5 קיפולים, על שורות האימון. הדפיסו את העומק הטוב ביותר ואת דיוק האימות הצולב.
  3. מתוך הסיכויים לביטול בשורות הבדיקה, הדפיסו את ה-AUC ואת רשימת השיחות: סיכויים של 0.5 ומעלה.
  4. שרטטו את עקומת ROC בתור forest, אלכסון מקווקו של coin toss, ומקרא; הציגו.

עבור שירות אחר ועומקים 3, 5:

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

עקומת ROC שכותרתה מי יבטל? עם עקומת יער רציפה שמטפסת בתלילות מעל אלכסון מקווקו של הטלת מטבע, ומקרא

לאחר מכן Coddy מתארת את העקומה שלך.

נסו בעצמכם

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

# מסלולי העיבוד, כמו ב״הכנת הנתונים״
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)])

# עומקי העץ שיש לנסות
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")

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה מונחית

תרגלו בעצמכם: קומפיילר Python אונליין