طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 244 · علم البيانات للويب
الدرس 18 · الوحدة 9: تحويل البيانات إلى معلومات قيمة

من الأرقام إلى قرار: قراءة النتائج

انتهى التحليل؛ كيف نحوّله إلى قرارٍ صائب، ونتجنّب ما يضلّلنا؟ ⏱ نحو 40 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تحوّل الأرقام إلى توصيةٍ قابلة للتنفيذ.
  • تتجنّب فخّ البيانات الضئيلة.
  • تميّز الارتباط من السببية.
  • تصوغ توصيةً محدّدة وقابلة للقياس.

١البيانات لا تقرّر؛ أنت تقرّر

انتهى التحليل: جداولٌ ورسوم. لكن قيمتها صفر ما لم تتحوّل إلى قرار. هذا الدرس عن أصعب خطوة: تحويل الأرقام إلى توصيةٍ قابلة للتنفيذ، وتجنّب الفخاخ التي تضلّل القرار.

main.py
import pandas as pdpages = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [5000, 3200, 1800, 900, 2600],    "exits":  [900, 700, 1100, 600, 500],   # غادروا الموقع من هذه الصفحة})# معدّل الخروج = من غادر ÷ من زارpages["exit_rate"] = (pages["exits"] / pages["visits"]).round(3)print(pages.sort_values("exit_rate", ascending=False)[["page", "exit_rate"]])
Shell×
>>> %Run main.py
page exit_rate
3 checkout 0.667
2 cart 0.611
1 products 0.219
4 blog 0.192
0 home 0.180
>>>

الأرقام تقول: صفحة cart أعلى معدّل خروج. القرار الذي تشتقّه: افحص صفحة السلّة — ربما زرٌّ غامض أو شحنٌ مفاجئ يطرد المشترين.

٢ثلاثة فخاخ تضلّل القرار

الفخّالمثالالعلاج
الحجم الصغيرصفحة بـ 5 زيارات معدّل خروجها 100%تجاهل الفئات قليلة البيانات
الارتباط ≠ السببيةالزوّار الذين شاهدوا الفيديو اشتروا أكثرهل الفيديو سبب، أم أن المهتمّ أصلًا يشاهده؟
الرقم بلا أساسالارتداد 40% — جيد أم سيّئ؟قارن بفترةٍ سابقة أو بمعيار
main.py
import pandas as pdpages = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [5000, 3200, 1800, 900, 2600],    "exits":  [900, 700, 1100, 600, 500],   # غادروا الموقع من هذه الصفحة})# لا تحكم على صفحة ببيانات ضئيلةreliable = pages[pages["visits"] >= 1000]worst = reliable.loc[(reliable["exits"] / reliable["visits"]).idxmax(), "page"]print("أسوأ صفحة (ببيانات كافية):", worst)
Shell×
>>> %Run main.py
أسوأ صفحة (ببيانات كافية): cart
>>>

٣من التحليل إلى توصية

التوصية الجيّدة: محدّدة (ماذا بالضبط)، ومبنيّة على الرقم (لماذا)، وقابلة للقياس (كيف نعرف أنها نجحت):

هكذا يكتمل مسار علم البيانات الذي بدأناه في الدرس 1: من أثر النقرات، إلى جدول، إلى رقم، إلى قرارٍ يُنفَّذ ويُقاس.

توقّع وتحقّق

قيمة التحليل تكتمل حين يتحوّل إلى:

معدّل خروج 100% من صفحةٍ بـ 5 زيارات:

«المشاهدون اشتروا أكثر» قد يكون:

الرقم يصبح ذا معنى حين:

الخلاصة

تحدٍّ برمجي: اشتقّ قرارًا

متقدم

احسب معدّل الخروج، لكن تجاهل الصفحات بأقل من 1000 زيارة، ثم اطبع اسم أسوأ صفحة موثوقة ومعدّل خروجها (3 منازل).

المطلوب:
  • رشّح الصفحات visits >= 1000.
  • اطبع اسم أعلاها خروجًا، ثم معدّل خروجها مقرّبًا لثلاث منازل.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
import pandas as pdpages = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [5000, 3200, 1800, 900, 2600],    "exits":  [900, 700, 1100, 600, 500],   # غادروا الموقع من هذه الصفحة})# تجاهل ما دون 1000 زيارة، ثم اطبع أسوأ صفحة موثوقة ومعدّل خروجها (3 منازل)
المطلوب×
cart
0.611
💡 تلميح 1
رشّح أولًا: pages[pages["visits"] >= 1000].
💡 تلميح 2
احسب المعدّل ثم خذ idxmax().

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
import pandas as pdpages = pd.DataFrame({    "page": ["home", "products", "cart", "checkout", "blog"],    "visits": [5000, 3200, 1800, 900, 2600],    "exits":  [900, 700, 1100, 600, 500],   # غادروا الموقع من هذه الصفحة})reliable = pages[pages["visits"] >= 1000].copy()reliable["exit_rate"] = reliable["exits"] / reliable["visits"]worst = reliable.loc[reliable["exit_rate"].idxmax()]print(worst["page"])print(round(worst["exit_rate"], 3))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس