تحليل المسار التحويلي
تتبّع عدد المستخدمين الذين يصلون إلى كل خطوة من مسار متعدد الخطوات، واحسب معدلات التحويل بين الخطوات المتتالية.
تحليل المسار التحويلي درس مجاني في Pandas & NumPy Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Pandas & NumPy Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ما مسار التحويل؟
ينمذج مسار التحويل رحلة المستخدم عبر سلسلة من الخطوات المطلوبة، مثل: الصفحة الرئيسية → صفحة المنتج → الإضافة إلى سلة التسوق → الدفع → الشراء. في كل خطوة، يتوقف بعض المستخدمين عن المتابعة ولا يصلون إلى الخطوة التالية. ويقيس تحليل مسار التحويل هذا التسرب كميًا، حتى تتمكن الفرق من تحديد الخطوة التي ينبغي تحسينها أولًا. وتكون النتيجة جدولًا يوضح عدد المستخدمين ومعدل التحويل في كل خطوة.
import pandas as pd
FUNNEL_STEPS = [
'homepage',
'product_page',
'add_to_cart',
'checkout',
'purchase'
]
df = pd.read_csv('clickstream.csv', parse_dates=['timestamp'])
print(df['event_type'].value_counts())عدّ المستخدمين الفريدين في كل خطوة
في كل خطوة من خطوات مسار التحويل، احسب عدد المستخدمين الفريدين الذين فعّلوا هذا الحدث مرة واحدة على الأقل. استخدم df[df['event_type'] == step]['user_id'].nunique() داخل حلقة، واجمع النتائج في قاموس. ويجعل تحويل النتائج إلى Series حساب النسب المئوية اللاحق مباشرًا باستخدام عملية قسمة واحدة.
step_counts = {}
for step in FUNNEL_STEPS:
users = df[df['event_type'] == step]['user_id'].nunique()
step_counts[step] = users
funnel = pd.Series(step_counts, name='users')
print(funnel)حساب معدلات التحويل بين الخطوات
يوضح معدل التحويل بين الخطوات نسبة المستخدمين الذين أتموا الخطوة N وأتموا أيضًا الخطوة N+1. احسبه باستخدام funnel.shift(1)، الذي يعطي عدد المستخدمين في الخطوة السابقة، ثم أجرِ القسمة: funnel / funnel.shift(1) * 100. ولا توجد خطوة سابقة للخطوة الأولى، لذلك يكون معدلها NaN أو 100 %، وفقًا لطريقة تعريف خط الأساس.
funnel_df = funnel.to_frame()
funnel_df['prev_users'] = funnel_df['users'].shift(1)
funnel_df['step_conversion_%'] = (funnel_df['users'] / funnel_df['prev_users'] * 100).round(1)
print(funnel_df)حساب معدل التحويل الإجمالي
يقيس معدل التحويل الإجمالي نسبة جميع المستخدمين الذين دخلوا مسار التحويل في الخطوة الأولى وأتموا في النهاية الخطوة الأخيرة. اقسم عدد المستخدمين في الخطوة الأخيرة على عددهم في الخطوة الأولى. ويُعد معدل تحويل إجمالي يتراوح بين 2 و5 % من الصفحة الرئيسية إلى الشراء شائعًا في التجارة الإلكترونية؛ وتشير القيم الأقل من ذلك إلى تسرب حرج في موضع ما من مسار التحويل.
overall_rate = funnel.iloc[-1] / funnel.iloc[0] * 100
print(f'Overall conversion rate: {overall_rate:.1f}%')
funnel_df['overall_conversion_%'] = (funnel_df['users'] / funnel_df['users'].iloc[0] * 100).round(1)
print(funnel_df[['users', 'overall_conversion_%']])مسار تحويل مرتب: اشتراط تسلسل الخطوات
يتعامل عدّ المستخدمين الفريدين البسيط مع المستخدمين الذين انتقلوا مباشرةً إلى الدفع دون زيارة صفحة المنتج بوصفهم مشاركين صالحين في مسار التحويل، مما يضخّم التحويل في الخطوات المبكرة. ولإلزام المستخدمين بالترتيب الصحيح، تحقّق من أن كل مستخدم وصل إلى الخطوة N بعد وصوله إلى الخطوة N-1. ويتطلب ذلك مقارنة الطوابع الزمنية؛ إذ يجب أن يسبق حدث product_page حدث add_to_cart لدى المستخدم.
# Get first occurrence of each step per user
first_events = df.groupby(['user_id', 'event_type'])['timestamp'].min().unstack('event_type')
# Enforce ordering: each step must come after the previous
first_events['valid_to_cart'] = first_events['add_to_cart'] > first_events['product_page']
print(first_events[['product_page', 'add_to_cart', 'valid_to_cart']].head())مسار التحويل حسب الشريحة: نوع الجهاز
قد تحقق شرائح المستخدمين المختلفة معدلات تحويل متباينة جدًا. نفّذ حساب مسار التحويل نفسه بشكل منفصل لمستخدمي أجهزة سطح المكتب والأجهزة المحمولة باستخدام groupby('device_type'). فإذا كان مستخدمو الأجهزة المحمولة يتسربون بدرجة كبيرة عند خطوة الدفع، فمن المحتمل أن تكون صفحة الدفع غير سهلة الاستخدام على الشاشات الصغيرة. وتكشف مسارات التحويل المقسّمة فرصًا مستهدفة للتحسين.
def funnel_for_group(group_df):
counts = {}
for step in FUNNEL_STEPS:
counts[step] = group_df[group_df['event_type'] == step]['user_id'].nunique()
return pd.Series(counts)
segmented_funnel = df.groupby('device_type').apply(funnel_for_group)
print(segmented_funnel)تحديد الخطوة ذات أكبر تسرب
تُعد الخطوة التي تفقد أكبر عدد مطلق من المستخدمين الهدفَ الأعلى أولوية للتحسين. اعثر عليها بحساب الفرق بين أعداد المستخدمين في الخطوات المتتالية باستخدام funnel.diff()؛ إذ تمثل القيمة الأكثر سلبية أكبر تسرب. اعرض هذه الرؤية بصيغتين رقمية ومرئية أمام أصحاب المصلحة.
dropoffs = funnel.diff().abs()
biggest_drop = dropoffs.idxmax()
biggest_drop_count = dropoffs.max()
print(f'Biggest drop-off: {biggest_drop} ({biggest_drop_count:.0f} users lost)')الوقت بين خطوات مسار التحويل
يكشف الوقت الذي يستغرقه المستخدمون للانتقال من خطوة إلى أخرى عن مواطن الاحتكاك. فإذا انتظر المستخدمون ساعات بين إضافة منتج إلى السلة وإتمام الدفع، فقد تساعد رسالة بريد إلكتروني بشأن السلال المتروكة في استعادهم. احسب الزمن الوسيط بين كل زوج من الخطوات باستخدام DataFrame المسماة first_events، وذلك بطرح أعمدة الطوابع الزمنية المتجاورة ثم أخذ الوسيط عبر جميع المستخدمين.
for i in range(1, len(FUNNEL_STEPS)):
prev = FUNNEL_STEPS[i-1]
curr = FUNNEL_STEPS[i]
delta = (first_events[curr] - first_events[prev]).dt.total_seconds() / 60
print(f'{prev} -> {curr}: median {delta.median():.1f} min, 90th pct {delta.quantile(0.9):.1f} min')الاتجاه الأسبوعي لمسار التحويل
تابع ما إذا كانت معدلات التحويل تتحسن أو تتراجع أسبوعًا بعد أسبوع، وذلك بحساب مسار التحويل لكل أسبوع على حدة. جمّع جدول الأحداث الأولى حسب الأسبوع باستخدام first_events['homepage'].dt.isocalendar().week، ثم احسب معدل التحويل الإجمالي لكل أسبوع. وقد يتزامن الانخفاض المفاجئ في أسبوع محدد مع إصدار منتج أو تغيير تسويقي.
df['week'] = df['timestamp'].dt.isocalendar().week
weekly_conv = []
for week, wdf in df.groupby('week'):
top = wdf[wdf['event_type'] == FUNNEL_STEPS[0]]['user_id'].nunique()
bot = wdf[wdf['event_type'] == FUNNEL_STEPS[-1]]['user_id'].nunique()
weekly_conv.append({'week': week, 'conversion_%': bot/top*100 if top else 0})
print(pd.DataFrame(weekly_conv))إنشاء DataFrame ملخص لمسار التحويل
اجمع جميع مقاييس مسار التحويل في DataFrame ملخص ومنظم يمكن تصديره إلى تقرير أو إدخاله في تصور مرئي. أدرج أعمدة لاسم الخطوة، وعدد المستخدمين، والتحويل بين الخطوات، والتحويل الإجمالي، والمستخدمين الذين فُقدوا. ويجب أن يكون هذا DataFrame الواحد هو المخرج النهائي لتحليل مسار التحويل، وأن يكون مقروءًا لكل من المهندسين ومديري المنتجات.
summary = pd.DataFrame({
'step': FUNNEL_STEPS,
'users': [step_counts[s] for s in FUNNEL_STEPS]
})
summary['users_lost'] = summary['users'].shift(-1).rsub(summary['users'])
summary['step_conv_%'] = (summary['users'] / summary['users'].shift(1) * 100).round(1)
summary['overall_conv_%'] = (summary['users'] / summary['users'].iloc[0] * 100).round(1)
print(summary)تصوير مسار التحويل في مخطط أعمدة
اعرض مسار التحويل كمخطط أعمدة أفقي، بحيث يمثّل طول كل شريط عدد المستخدمين في تلك الخطوة. يظهر شكل القُمع تلقائيًا عند ترتيب الأشرطة من الأعلى، حيث أكبر عدد من المستخدمين، إلى الأسفل، حيث أقل عدد منهم. أضف إلى كل شريط نسبة التحويل من خطوة إلى أخرى، حتى يكون المخطط مكتفيًا بذاته ولا يحتاج إلى جدول بيانات منفصل لتفسيره.
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 5))
ax.barh(summary['step'][::-1], summary['users'][::-1], color='steelblue')
for i, row in summary[::-1].iterrows():
ax.text(row['users'], i - summary.index[0], f' {row['step_conv_%']}%', va='center')
ax.set_xlabel('Unique Users')
ax.set_title('Conversion Funnel')
plt.tight_layout()
plt.show()تحقق سريع
اختبر مدى فهمك لمفاهيم تحليل البيانات الواردة في هذا الدرس.
مراجعة الدرس
تعلمت في هذا الدرس: عدّ المستخدمين الفريدين في كل خطوة من مسار التحويل، وحساب معدلات التحويل من خطوة إلى أخرى ومعدلات التحويل الإجمالية، وتقسيم مسارات التحويل حسب نوع الجهاز وتتبع اتجاهات التحويل الأسبوعية. بعد ذلك، سنستكشف جداول الاحتفاظ حسب المجموعات لتتبع عدد المستخدمين الذين يعودون أسبوعًا بعد أسبوع.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «تحليل المسار التحويلي» مجاني؟
نعم — نص درس «تحليل المسار التحويلي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Pandas & NumPy Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Pandas & NumPy Academy 4 دروس في المجموع.
ماذا ستتعلم في «تحليل المسار التحويلي»؟
تتبّع عدد المستخدمين الذين يصلون إلى كل خطوة من مسار متعدد الخطوات، واحسب معدلات التحويل بين الخطوات المتتالية. تتمرن على Pandas & NumPy Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Pandas & NumPy Academy؟
لا تُشترط خبرة سابقة. Pandas & NumPy Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «تحليل المسار التحويلي»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Pandas & NumPy Academy هذا؟
نعم. كل درس في Pandas & NumPy Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تقسيم الجلسات وتسلسل الأحداث
- تحليل المسار التحويلي
- جدول الاحتفاظ بالفوج
- تصور رحلات المستخدمين