Menu
CoddyTech
flag Ar iconالعربيةdown icon

تسرّب العملاء

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 58 من 58.

تُرسل خدمة وجبات جاهزة صناديق أسبوعية. يتتبع الملف subscribers.csv بيانات 300 عميل وما إذا كانوا قد ألغوا اشتراكهم خلال شهرين. تُعدّ الصناديق التي لم يتسلموها إحدى علامات التحذير:

أعمدة توضح نسبة من ألغوا اشتراكهم بحسب عدد الصناديق التي لم يتسلموها خلال الأشهر الثلاثة الماضية: 15% لمن لم يتسلموا أي صندوق، و36% لمن لم يتسلموا صندوقًا واحدًا، و60% لمن لم يتسلموا صندوقين، و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 بعنوان Who Will Cancel?، مع منحنى forest متصل يرتفع بشدة فوق خط قطري متقطع يمثل رمية قطعة نقدية، ومفتاح للرسم

ثم يصف 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 عبر الإنترنت