נטישת לקוחות
חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 58 מתוך 58.
שירות משלוח ערכות לבישול שולח קופסאות מדי שבוע. הקובץ subscribers.csv עוקב אחר 300 לקוחות והאם הם ביטלו את המינוי בתוך חודשיים. דילוג על קופסאות הוא סימן אזהרה אחד:
הצוות רוצה להתקשר ללקוחות שנמצאים בסיכון לפני שיעזבו. סימן אחד אינו מספיק, ולכן יער ישקלל את כולם.
יש לכוונן את העומק שלו, ועקומת ROC תראה עד כמה ציוני הסיכון מדרגים את מי שמבטל.
אתגר
קשהprep מכיל את המסלולים; התוכנית קוראת את עומקי העצים לתוך depths.
- פצלו רבע מנתוני הבדיקה תוך שמירה על השכבות,
random_state=0. - בצעו חיפוש רשת על
prepבתוספת יער של 100 עצים (random_state=0) על פניdepths, עם 5 קיפולים, על שורות האימון. הדפיסו את העומק הטוב ביותר ואת דיוק האימות הצולב. - מתוך הסיכויים לביטול בשורות הבדיקה, הדפיסו את ה-AUC ואת רשימת השיחות: סיכויים של 0.5 ומעלה.
- שרטטו את עקומת 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לאחר מכן 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")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה מונחית
תרגלו בעצמכם: קומפיילר Python אונליין