تسرّب العملاء
جزء من قسم التعلّم الخاضع للإشراف في رحلة 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 عبر الإنترنت