طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 244 · علم البيانات للويب
الدرس 22 · الوحدة 11: استخدام نماذج تعلم الآلة للتحليل

التصنيف: هل يغادر الزائر؟

هل يغادر؟ هل يشتري؟ من أي قناة جاء؟ التنبؤ بالفئة لا بالرقم. ⏱ نحو 50 دقيقة.

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

١التنبؤ بفئة لا برقم

كثير من أسئلة الويب فئويّة: هل سيغادر الزائر؟ هل سيشتري؟ هذا تصنيف Classification. النموذج يتعلّم حدًّا يفصل الفئات، ثم يصنّف أي حالةٍ جديدة. أشهر بداية: الانحدار اللوجستي LogisticRegression (اسمه يخدع — إنه مصنّف).

main.py
from sklearn.linear_model import LogisticRegressionimport numpy as np # متغيّران: مدة الجلسة وعدد الصفحات ← هل اشترى؟X = np.array([[5,1],[8,1],[12,2],[120,5],[200,7],[240,8]])y = np.array([0, 0, 0, 1, 1, 1])     # 0 لم يشترِ، 1 اشترى model = LogisticRegression().fit(X, y)# زائر جديد: جلسة قصيرة وصفحة واحدةprint("تنبّؤ (قصير):", model.predict([[6, 1]])[0])# زائر متفاعلprint("تنبّؤ (متفاعل):", model.predict([[210, 7]])[0])
Shell×
>>> %Run main.py
تنبّؤ (قصير): 0
تنبّؤ (متفاعل): 1
>>>

النموذج تعلّم أن الجلسات القصيرة لا تشتري، والطويلة المتفاعلة تشتري. الخطوات نفسها كالانحدار: أنشئ ← fit ← predict؛ تغيّر النموذج فقط.

٢الاحتمال لا الفئة فقط

التصنيف لا يعطي فئةً فحسب، بل احتمالها بـ predict_proba — مفيدٌ لترتيب الزوّار حسب أرجحيّة الشراء:

main.py
from sklearn.linear_model import LogisticRegressionimport numpy as np X = np.array([[5,1],[8,1],[12,2],[120,5],[200,7],[240,8]])y = np.array([0, 0, 0, 1, 1, 1])model = LogisticRegression().fit(X, y) p = model.predict_proba([[150, 6]])[0]print("احتمال عدم الشراء:", round(p[0], 2))print("احتمال الشراء:", round(p[1], 2))
Shell×
>>> %Run main.py
احتمال عدم الشراء: 0.0
احتمال الشراء: 1.0
>>>

٣التصنيف متعدّد الفئات

التصنيف لا يقتصر على فئتين. يمكن التنبؤ بالقناة التي سيأتي منها الزائر (بحث/إعلان/مباشر) — نفس الكود، وفئاتٌ أكثر:

main.py
from sklearn.linear_model import LogisticRegressionimport numpy as np X = np.array([[1],[2],[3],[10],[11],[20],[21]])y = np.array(["بحث","بحث","بحث","إعلان","إعلان","مباشر","مباشر"])model = LogisticRegression().fit(X, y)print("الفئات المعروفة:", list(model.classes_))print("تنبّؤ لـ 11:", model.predict([[11]])[0])
Shell×
>>> %Run main.py
الفئات المعروفة: [np.str_('إعلان'), np.str_('بحث'), np.str_('مباشر')]
تنبّؤ لـ 11: إعلان
>>>

توقّع وتحقّق

التنبؤ بفئة (نعم/لا) هو:

LogisticRegression نوعه:

لاحتمال الفئة لا الفئة فقط:

قائمة الفئات التي تعلّمها النموذج:

الخلاصة

تحدٍّ برمجي: صنّف الزائر

متقدم

درّب مصنّفًا على بيانات منفصلة بوضوح، واطبع تنبّؤه لزائرٍ قصير (جلسة 7، صفحة 1) وآخر متفاعل (جلسة 220، 8 صفحات).

المطلوب:
  • درّب LogisticRegression.
  • اطبع تنبّؤ [7,1] ثم تنبّؤ [220,8].

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

main.py
from sklearn.linear_model import LogisticRegressionimport numpy as npX = np.array([[4,1],[9,1],[15,2],[130,5],[210,7],[250,9]])y = np.array([0, 0, 0, 1, 1, 1])# درّب ثم اطبع تنبّؤ [7,1] ثم [220,8]
المطلوب×
0
1
💡 تلميح 1
درّب: LogisticRegression().fit(X, y).
💡 تلميح 2
تنبّأ: model.predict([[7, 1]])[0].

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

main.py
from sklearn.linear_model import LogisticRegressionimport numpy as npX = np.array([[4,1],[9,1],[15,2],[130,5],[210,7],[250,9]])y = np.array([0, 0, 0, 1, 1, 1])model = LogisticRegression().fit(X, y)print(model.predict([[7, 1]])[0])print(model.predict([[220, 8]])[0])
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

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