0Pricing
Pandas & NumPy Academy · درس

جدول الاحتفاظ بالفوج

أنشئ مصفوفة للاحتفاظ بالفوج تعرض نسبة مستخدمي الأسبوع 0 الذين ما زالوا نشطين في الأسابيع اللاحقة باستخدام pivot_table.

جدول الاحتفاظ بالفوج درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ما جدول الاحتفاظ حسب المجموعة؟

يجمع جدول الاحتفاظ حسب المجموعة المستخدمين وفق الأسبوع (أو الشهر) الذي استخدموا فيه المنتج للمرة الأولى، ثم يتتبع نسبة أفراد كل مجموعة الذين ما زالوا نشطين في الأسابيع اللاحقة. يعرض الصف 0 دائمًا القيمة 100% لأن تعريف الأسبوع 0 هو أسبوع التسجيل. تكشف القيم في الأعمدة اللاحقة عن سرعة فقدان المنتج لمستخدميه؛ فكلما كان الانخفاض أبطأ، كان الاحتفاظ أقوى.

import pandas as pd

df = pd.read_csv('user_events.csv', parse_dates=['event_date'])
print(df.dtypes)
print(df.head())

إسناد أسبوع المجموعة إلى كل مستخدم

أسبوع المجموعة هو أسبوع أول حدث لكل مستخدم. استخدم groupby('user_id')['event_date'].min() للعثور على تاريخ أول حدث لكل مستخدم، ثم حوّله إلى أسبوع ISO باستخدام .dt.to_period('W'). ادمج تسمية المجموعة هذه مرة أخرى مع DataFrame الأحداث الرئيسي، حتى يعرف كل صف أسبوع المجموعة الذي ينتمي إليه مستخدمه.

cohort_week = df.groupby('user_id')['event_date'].min().dt.to_period('W').rename('cohort_week')
df = df.join(cohort_week, on='user_id')

df['event_week'] = df['event_date'].dt.to_period('W')

print(df[['user_id', 'event_date', 'cohort_week', 'event_week']].head())

حساب رقم الأسبوع منذ انضمام المستخدم إلى المجموعة

رقم الأسبوع (ويُسمى أيضًا رقم الفترة أو العمر) هو الفرق بين أسبوع الحدث وأسبوع المجموعة. تعيد عملية طرح Period في Pandas إزاحة صحيحة. يعني الأسبوع 0 أن المستخدم كان نشطًا خلال أسبوع تسجيله، بينما يعني الأسبوع 4 أنه عاد بعد أربعة أسابيع. ويصبح عمود الإزاحة هذا محور الأعمدة في مصفوفة الاحتفاظ.

df['week_number'] = (df['event_week'] - df['cohort_week']).apply(lambda x: x.n)

print(df[['user_id', 'cohort_week', 'event_week', 'week_number']].head(10))

عدّ المستخدمين النشطين لكل زوج من المجموعة والأسبوع

جمّع البيانات حسب كل من cohort_week وweek_number، ثم عدّ المستخدمين الفريدين للحصول على مصفوفة أعداد الاحتفاظ الأولية. تخبرك كل خلية بعدد المستخدمين من المجموعة C الذين كانوا نشطين في الأسبوع N. ويعطي القطر الممتد من أعلى اليسار إلى أسفل اليمين (الأسبوع 0 لكل مجموعة) أحجام المجموعات، وهي المقامات المستخدمة لحساب النسب المئوية.

retention_counts = (
    df.groupby(['cohort_week', 'week_number'])['user_id']
    .nunique()
    .reset_index(name='active_users')
)

print(retention_counts.head(10))

تحويل البيانات إلى مصفوفة احتفاظ

استخدم pivot_table() لتحويل أعداد الاحتفاظ ذات التنسيق الطولي إلى مصفوفة عريضة: تمثل الصفوف أسابيع المجموعات، وتمثل الأعمدة أرقام الأسابيع. تتعامل aggfunc='sum' مع أي مفاتيح مكررة ناتجة عن التجميع. املأ الخلايا بالقيمة 0 في الأسابيع التي لم ينشط فيها أي مستخدم من تلك المجموعة. هذه المصفوفة هي أساس تحليل الاحتفاظ.

retention_matrix = retention_counts.pivot_table(
    index='cohort_week',
    columns='week_number',
    values='active_users',
    aggfunc='sum'
).fillna(0)

print(retention_matrix.iloc[:5, :8])

حساب نسب الاحتفاظ

اقسم كل صف على قيمته في الأسبوع 0 لتحويل الأعداد إلى نسب مئوية. ويمثل عمود الأسبوع 0 حجم المجموعة، المخزن في retention_matrix[0]. استخدم divide(cohort_sizes, axis=0) ثم اضرب الناتج في 100. قرّب القيم إلى منزلة عشرية واحدة لتسهيل القراءة. والنتيجة هي الخريطة الحرارية القياسية للاحتفاظ المتوقعة في تقارير تحليلات المنتجات.

cohort_sizes = retention_matrix[0]
retention_pct = retention_matrix.divide(cohort_sizes, axis=0) * 100
retention_pct = retention_pct.round(1)

print(retention_pct.iloc[:5, :8])

تفسير منحنى الاحتفاظ

اقرأ جدول الاحتفاظ قطريًا، إذ ينخفض كل صف بمرور الوقت. سيعرض المنتج ذو الاحتفاظ القوي قيمًا مثل 100، 60، 50، 45، 42؛ أي انخفاضًا أوليًا سريعًا يتبعه استقرار. أما المنتج ضعيف الاحتفاظ فيعرض قيمًا مثل 100، 30، 15، 8، 4؛ أي انخفاضًا مستمرًا دون استقرار. ويُسمى مستوى الاستقرار، إن وُجد، معدل الاحتفاظ طويل الأمد، وهو أهم مؤشر أداء رئيسي للاحتفاظ.

# Average retention rate per week number across all cohorts
avg_retention = retention_pct.mean(axis=0)
print('Average retention by week:')
print(avg_retention.round(1))

تحديد أفضل المجموعات وأسوأها

قارن أداء المجموعات بالنظر إلى الاحتفاظ في الأسبوع 4 أو الأسبوع 8 عبر المجموعات المختلفة. استفادت المجموعة ذات أعلى احتفاظ في الأسبوع 4 من تحسين في المنتج أو من قناة اكتساب فعالة، بينما قد تكون أسوأ مجموعة قد اكتُسبت عبر قناة منخفضة الجودة. استخدم .loc[:, 4].sort_values(ascending=False) لترتيب المجموعات حسب احتفاظها في الأسبوع 4.

if 4 in retention_pct.columns:
    week4 = retention_pct[4].sort_values(ascending=False)
    print('Cohorts ranked by week-4 retention:')
    print(week4)

تصوير الاحتفاظ بخريطة حرارية

الخريطة الحرارية المرمّزة بالألوان هي التصوير المرئي القياسي لجداول الاحتفاظ. استخدم sns.heatmap() مع annot=True لعرض قيمة النسبة المئوية داخل كل خلية، واستخدم خريطة ألوان متباينة، بحيث يشير الاحتفاظ المنخفض إلى الأحمر والعالي إلى الأخضر. عيّن vmin=0 وvmax=100 حتى تكون الألوان قابلة للمقارنة عبر مقاييس الاحتفاظ المختلفة.

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(14, 6))
sns.heatmap(retention_pct.iloc[:, :13],
            annot=True, fmt='.0f',
            cmap='RdYlGn', vmin=0, vmax=100,
            ax=ax, linewidths=0.5)
ax.set_title('Weekly Cohort Retention (%)')
ax.set_xlabel('Week Number')
ax.set_ylabel('Cohort Week')
plt.tight_layout()
plt.show()

رسم منحنى الاحتفاظ

يوصل المخطط الخطي لـمتوسط الاحتفاظ حسب الأسبوع منحنى الانخفاض العام بوضوح أكبر من الخريطة الحرارية عند عرضه على أصحاب المصلحة غير التقنيين. ارسم منحنى الاحتفاظ المتوسط مع نطاق مظلل يوضح انحرافًا معياريًا واحدًا زائدًا أو ناقصًا، لإظهار مقدار التباين بين المجموعات. ويمثل الاستقرار، حيث يتسطح الخط، حد الاحتفاظ الطبيعي للمنتج.

avg_ret = retention_pct.mean(axis=0)
std_ret = retention_pct.std(axis=0)

fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(avg_ret.index, avg_ret.values, color='steelblue', linewidth=2, marker='o')
ax.fill_between(avg_ret.index, avg_ret - std_ret, avg_ret + std_ret, alpha=0.2)
ax.set_xlabel('Week Number')
ax.set_ylabel('Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()

تصدير جدول الاحتفاظ

صدّر جدول الاحتفاظ إلى Excel حتى يتمكن مديرو المنتجات من مشاركته في المراجعات الأسبوعية. استخدم to_excel() وطبّق التنسيق الشرطي يدويًا في Excel، أو استخدم Styler.background_gradient() في Pandas لإضافة الألوان مباشرةً إلى الملف المُصدّر. ويُعد جدول الاحتفاظ أحد أكثر المخرجات طلبًا في تحليلات المنتجات.

styled = retention_pct.style.background_gradient(cmap='RdYlGn', vmin=0, vmax=100)
styled.to_excel('retention_table.xlsx', engine='openpyxl')
print('Retention table saved to retention_table.xlsx')

تحقق سريع

اختبر مدى فهمك لمفاهيم تحليل البيانات الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس: إسناد المستخدمين إلى أسابيع المجموعات وحساب إزاحات الأسابيع، وتحويل البيانات إلى مصفوفة احتفاظ وتحويل الأعداد إلى نسب مئوية، وتصوير احتفاظ المجموعات بخريطة حرارية ومنحنى احتفاظ متوسط. بعد ذلك، سنستكشف تصوير رحلات المستخدمين عبر مخططات أعمدة مسارات التحويل والخرائط الحرارية.

الأسئلة الشائعة

هل درس «جدول الاحتفاظ بالفوج» مجاني؟

نعم — نص درس «جدول الاحتفاظ بالفوج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.

ماذا ستتعلم في «جدول الاحتفاظ بالفوج»؟

أنشئ مصفوفة للاحتفاظ بالفوج تعرض نسبة مستخدمي الأسبوع 0 الذين ما زالوا نشطين في الأسابيع اللاحقة باستخدام pivot_table. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟

لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «جدول الاحتفاظ بالفوج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟

نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تقسيم الجلسات وتسلسل الأحداث
  2. تحليل المسار التحويلي
  3. جدول الاحتفاظ بالفوج
  4. تصور رحلات المستخدمين
← العودة إلى Pandas & NumPy Academy