أنظمة التوصية (Recommendation Systems): كيف يقترح نتفليكس أو أمازون المنتجات؟

دقائق القراءة: 6

أنظمة التوصية (Recommendation Systems): كيف يقترح نتفليكس أو أمازون المنتجات؟

عندما تشاهد اقتراح فيلم جديد في نتفليكس، أو ترى في أمازون عبارة “قد يعجبك أيضاً”، فأنت أمام أحد أكثر تطبيقات Machine Learning ربحية وتأثيراً. أنظمة التوصية لا تعتمد على الحدس، بل على تحليل سلوك ملايين المستخدمين، وربط التفاعلات بالمنتجات، ثم بناء نماذج قادرة على التنبؤ بما قد ينال اهتمام كل مستخدم بشكل شخصي.

هذا المجال يجمع بين علوم البيانات، وهندسة البيانات الضخمة، والإحصاء، والبنية الموزعة. فكل نقرة، ومدة مشاهدة، وإضافة إلى السلة، وتقييم نجوم، وحتى التوقف عن التصفح، تمثل إشارة سلوكية يمكن تحويلها إلى مدخلات لنموذج توصية ذكي. ومع تضخم البيانات، يصبح الاعتماد على Spark وDataFrame وعمليات ETL أمراً ضرورياً لا اختيارياً.

ما هو نظام التوصية فعلياً؟

نظام التوصية هو محرك تنبؤي يحاول الإجابة عن سؤال بسيط ظاهرياً: ما العنصر التالي الأكثر احتمالاً أن يفضله هذا المستخدم؟ لكن خلف هذا السؤال توجد سلسلة طويلة من جمع البيانات، وتنظيفها، وتحويلها، وبناء الميزات، ثم تدريب النماذج وتقييمها ونشرها في بيئة إنتاجية.

وتعتمد هذه الأنظمة غالباً على نوعين أساسيين من البيانات:

  • بيانات صريحة مثل التقييمات، الإعجابات، أو مراجعات المستخدمين.
  • بيانات ضمنية مثل النقر، مدة المشاهدة، التمرير، الشراء، التخلي عن السلة، وتكرار الزيارة.

البيانات الضمنية أكثر شيوعاً في المنصات الحديثة لأنها تُجمع تلقائياً وعلى نطاق واسع، لكنها أصعب في التفسير، لأن عدم النقر لا يعني دائماً عدم الاهتمام.

الأنواع الرئيسية لأنظمة التوصية

1) التصفية التعاونية Collaborative Filtering

هذا الأسلوب يفترض أن المستخدمين المتشابهين في السلوك السابق قد يفضلون عناصر متشابهة لاحقاً. فإذا كان مستخدمان شاهدا نفس الأفلام وأعطيا تقييماً متقارباً، فمن المنطقي اقتراح أفلام أحدهما على الآخر.

ينقسم هذا النهج عادة إلى:

  • تشابه المستخدمين: البحث عن مستخدمين قريبين في السلوك ثم نقل تفضيلاتهم.
  • تشابه العناصر: البحث عن عناصر يستهلكها نفس الجمهور، مثل كتب تُشترى معاً أو أفلام تُشاهد ضمن نفس النمط.
  • تفكيك المصفوفة: استخدام نماذج مثل ALS لاستخراج عوامل خفية تفسر العلاقة بين المستخدم والعنصر.

2) التوصية المعتمدة على المحتوى Content-Based Filtering

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

هذا يتطلب بناء ميزات دقيقة من البيانات الوصفية، مثل النوع، العلامة التجارية، السعر، الكلمات المفتاحية، أو النصوص الوصفية. ويمكن الرجوع إلى مفاهيم هندسة الميزات ومعالجة البيانات النصية لفهم كيف نشتق تمثيلاً مناسباً للعناصر.

3) الأنظمة الهجينة Hybrid Systems

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

كيف تُبنى البيانات خلف التوصيات؟

أي نظام توصية قوي يبدأ بخط بيانات منظم. هنا يظهر دور خطوط أنابيب ETL في سحب البيانات من التطبيقات، وقواعد SQL، وسجلات النقر، ثم تنظيفها وتحويلها إلى جداول تحليلية قابلة للاستخدام.

غالباً ما يمر بناء البيانات بالمراحل التالية:

  1. جمع أحداث المستخدمين من الويب أو التطبيق.
  2. تنظيف السجلات واستبعاد البيانات الناقصة أو المشوهة.
  3. توحيد معرفات المستخدمين والعناصر عبر الأنظمة المختلفة.
  4. إنشاء مصفوفة تفاعل user_item.
  5. اشتقاق أوزان للتفاعل، مثل 1 للنقرة و5 للشراء و10 لإعادة الشراء.
  6. تخزين النتائج في مستودع تحليلي أو بيئة موزعة.

في بيئات التجارة الإلكترونية الكبيرة، لا يكفي تخزين حدث “شراء” فقط. من الأفضل تصميم Data Architecture تحفظ تسلسل الجلسة، مصدر الزيارة، نوع الجهاز، الزمن بين التفاعل والشراء، لأن هذه الإشارات ترفع جودة التوصيات بشكل ملحوظ وتسمح ببناء نماذج سياقية أكثر ذكاءً.

مثال عملي مبسط باستخدام PySpark

عندما تكون البيانات بحجم ملايين أو مئات الملايين من التفاعلات، فإن Apache Spark يصبح الخيار الطبيعي. المثال التالي يوضح تدريب نموذج توصية باستخدام خوارزمية ALS على بيانات تفاعل بين المستخدمين والمنتجات.

from pyspark.sql import SparkSession
from pyspark.ml.recommendation import ALS
from pyspark.sql.functions import col

spark = SparkSession.builder \
    .appName("recommendation-system") \
    .getOrCreate()

data = [
    (1, 101, 5.0),
    (1, 102, 3.0),
    (2, 101, 4.0),
    (2, 103, 5.0),
    (3, 102, 4.0),
    (3, 104, 5.0),
    (4, 101, 2.0),
    (4, 104, 4.0)
]

df = spark.createDataFrame(data, ["user_id", "item_id", "rating"])

train, test = df.randomSplit([0.8, 0.2], seed=42)

als = ALS(
    userCol="user_id",
    itemCol="item_id",
    ratingCol="rating",
    coldStartStrategy="drop",
    nonnegative=True,
    rank=10,
    maxIter=10,
    regParam=0.1
)

model = als.fit(train)
predictions = model.transform(test)

predictions.select("user_id", "item_id", "rating", "prediction").show()

users = df.select("user_id").distinct()
recommendations = model.recommendForUserSubset(users, 3)

recommendations.show(truncate=False)

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

استخدام SQL لاستخراج إشارات التوصية

قبل التدريب، نحتاج عادة إلى بناء جدول تفاعلات منظم. ويمكن تنفيذ ذلك في محركات تحليلية أو داخل بيئة Spark SQL لاشتقاق قوة كل تفاعل.

query = """
SELECT
    user_id,
    product_id AS item_id,
    SUM(
        CASE
            WHEN event_type = 'view' THEN 1
            WHEN event_type = 'cart' THEN 3
            WHEN event_type = 'purchase' THEN 5
            ELSE 0
        END
    ) AS rating
FROM user_events
WHERE event_date >= '2025-01-01'
GROUP BY user_id, product_id
HAVING rating > 0
"""

interaction_df = spark.sql(query)
interaction_df.show()

هذا الأسلوب شائع جداً في أنظمة التوصية المعتمدة على البيانات الضمنية، حيث نُحوّل السلوك إلى “درجة اهتمام” بدلاً من انتظار تقييمات صريحة نادراً ما يكتبها المستخدم.

أهم التحديات الواقعية

مشكلة البداية الباردة Cold Start

عند انضمام مستخدم جديد أو إضافة منتج جديد، لا تتوفر بيانات كافية لبناء توصيات دقيقة. هنا تساعد البيانات الوصفية، والأسئلة التمهيدية، وتوصيات الأكثر شعبية، والنماذج المعتمدة على المحتوى.

ندرة البيانات Sparsity

في المنصات الكبيرة، يتفاعل كل مستخدم مع نسبة صغيرة جداً من إجمالي الكتالوج. لذلك تكون مصفوفة التفاعل شبه فارغة، ما يجعل النماذج البسيطة ضعيفة الأداء ويستدعي خوارزميات أكثر كفاءة.

التحيز نحو الشعبية Popularity Bias

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

تحسين الأداء في أنظمة التوصية لا يعني فقط تسريع التدريب، بل أيضاً تقليل زمن الاستجابة عند الطلب. عملياً، يتم غالباً حساب التوصيات الأساسية مسبقاً عبر Batch Pipeline، ثم إعادة ترتيبها لحظياً باستخدام إشارات آنية من الجلسة عبر Streaming أو طبقة خدمة سريعة.

كيف نقيس نجاح نظام التوصية؟

نجاح النموذج لا يُقاس فقط بخطأ التنبؤ الرقمي، بل بمؤشرات أعمال حقيقية. من المقاييس الشائعة:

  • Precision@K لقياس نسبة العناصر المفيدة ضمن أول اقتراحات.
  • Recall@K لقياس القدرة على التقاط العناصر المهمة.
  • CTR لقياس النقر على التوصيات.
  • معدل التحويل والشراء ومتوسط قيمة الطلب.
  • زمن المشاهدة أو الاحتفاظ بالمستخدم في المنصة.

كما يُفضّل اختبار النماذج فعلياً عبر A/B Testing لأن النموذج الأفضل إحصائياً قد لا يكون الأفضل تجارياً أو سلوكياً.

لماذا تنجح نتفليكس وأمازون في هذا المجال؟

السبب ليس مجرد امتلاك خوارزمية جيدة، بل امتلاك منظومة متكاملة: جمع دقيق للبيانات، بنية Big Data مرنة، تحديث مستمر للنماذج، واختبار دائم لتأثير كل اقتراح على سلوك المستخدم. التوصية الناجحة هي التقاء بين هندسة البيانات وتعلم الآلة وفهم عميق لتجربة المستخدم.

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

1 comment

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *