دليل لربط التنبؤ - كيف تتوقع اتصالاتك المستقبلية على Facebook

نظرة عامة

  • مقدمة لربط التنبؤات ، وكيف يعمل ، وأين يمكنك استخدامه في العالم الحقيقي
  • تعرف على أهمية التنبؤ بالارتباط على وسائل التواصل الاجتماعي
  • أنشئ أول نموذج توقع للربط لحالة استخدام Facebook باستخدام Python

المقدمة

هل تساءلت يومًا من قد يكون اتصالك القادم على Facebook؟ فضولي من قد يأتي الطلب التالي؟

ماذا لو أخبرتك أن هناك طريقة للتنبؤ بذلك؟

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

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

لذا في هذه المقالة ، سنقوم بحل مشكلة الشبكة الاجتماعية بمساعدة الرسوم البيانية وتعلم الآلة. سوف نفهم أولاً المفاهيم والمكونات الأساسية لتنبؤ الارتباط قبل تناول دراسة حالة على Facebook وتنفيذها في Python!

أوصي بمراجعة المقالات أدناه للحصول على تعليق حول الرسوم البيانية وكيف تعمل:

جدول المحتويات

  1. نظرة عامة على تحليلات الشبكة الاجتماعية
  2. كتاب تمهيدي حول التنبؤ بالارتباط
  3. استراتيجية لحل مشكلة التنبؤ بالارتباط
  4. دراسة حالة: توقع الاتصالات المستقبلية بين صفحات Facebook - فهم البيانات - بناء نموذج تحضير مجموعة البيانات - استخراج الميزات - بناء النموذج: نموذج توقع الارتباط

نظرة عامة على تحليلات الشبكة الاجتماعية

دعنا نحدد شبكة اجتماعية أولاً قبل أن نتعمق في مفهوم التنبؤ بالرابط.

الشبكة الاجتماعية هي في الأساس تمثيل للعلاقات بين الكيانات الاجتماعية ، مثل الأشخاص والمنظمات والحكومات والأحزاب السياسية ، إلخ.

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

وهذا يقودنا إلى تحليلات الشبكة الاجتماعية (SNA). يمكننا تعريفه على أنه مزيج من العديد من الأنشطة التي يتم تنفيذها على وسائل التواصل الاجتماعي. تتضمن هذه الأنشطة جمع البيانات من مواقع التواصل الاجتماعي عبر الإنترنت واستخدام تلك البيانات لاتخاذ قرارات العمل.

يمكن أن تكون فوائد تحليلات الشبكة الاجتماعية مجزية للغاية. فيما يلي بعض الفوائد الرئيسية:

  • يساعدك على فهم جمهورك بشكل أفضل
  • تستخدم لتجزئة العملاء
  • تستخدم لتصميم أنظمة التوصية
  • كشف الأخبار المزيفة ، من بين أمور أخرى

كتاب تمهيدي حول التنبؤ بالارتباط

يعد التنبؤ بالارتباط أحد أهم الموضوعات البحثية في مجال الرسوم البيانية والشبكات. الهدف من التنبؤ بالارتباط هو تحديد أزواج العقد التي ستشكل رابطًا أم لا في المستقبل.

التنبؤ بالارتباط له الكثير من الاستخدامات في التطبيقات الواقعية. فيما يلي بعض حالات الاستخدام المهمة للتنبؤ بالارتباط:

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

في هذه المقالة ، سوف نستكشف حالة استخدام مختلفة قليلاً للتنبؤ بالارتباط - التنبؤ بالروابط في شبكة اجتماعية عبر الإنترنت!

استراتيجية لحل مشكلة التنبؤ بالارتباط

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

لنأخذ رسمًا وهميًا لفهم هذه الفكرة. فيما يلي رسم بياني للعقدة 7 وأزواج العقدة غير المتصلة هي AF و BD و BE و BG و EG:

الرسم البياني في الوقت ر

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

الرسم البياني في الوقت t + n

نحن بحاجة إلى مجموعة من متغيرات التوقع ومتغير هدف لبناء أي نوع من نماذج التعلم الآلي ، أليس كذلك؟ إذن أين هذه المتغيرات؟ حسنًا ، يمكننا الحصول عليه من الرسم البياني نفسه! دعونا نرى كيف يتم ذلك.

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

  1. AF
  2. دينار بحريني
  3. BE
  4. BG
  5. EG

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

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

انظر إلى الرسم البياني في الوقت t + n. يمكننا أن نرى أن هناك ثلاثة روابط جديدة في الشبكة للأزواج AF و BD و BE على التوالي. لذلك ، سنقوم بتعيين قيمة واحدة لكل منها 1. سيتم تعيين أزواج العقدة BG و EG 0 لأنه لا تزال لا توجد روابط بين العقد.

وبالتالي ، ستبدو البيانات كما يلي:

الآن بعد أن أصبح لدينا المتغير المستهدف ، يمكننا إنشاء نموذج للتعلم الآلي باستخدام هذه البيانات لإجراء تنبؤ الارتباط.

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

استخرج البيانات من رسم بياني لبناء نموذجك

في القسم أعلاه ، تمكنا من الحصول على تصنيفات للمتغير المستهدف لأنه كان بإمكاننا الوصول إلى الرسم البياني في الوقت t + n. ومع ذلك ، في سيناريوهات العالم الحقيقي ، سيكون لدينا مجموعة بيانات واحدة للرسم البياني في متناول اليد. هذا هو!

لنفترض أن لدينا الرسم البياني أدناه لشبكة اجتماعية حيث العقد هي المستخدمين وتمثل الحواف نوعًا من العلاقة:

أزواج العقدة المرشحة ، والتي قد تشكل رابطًا في المستقبل ، هي (1 و 2) ، (2 و 4) ، (5 و 6) ، (8 و 10) ، وما إلى ذلك. يجب أن نبني نموذجًا يتنبأ بما إذا كان سيكون هناك رابط بين أزواج العقدة أم لا. هذا هو كل ما يتعلق بتنبؤ الارتباط!

ومع ذلك ، لبناء نموذج التنبؤ بالرابط ، نحتاج إلى إعداد مجموعة بيانات تدريبية من هذا الرسم البياني. يمكن القيام به باستخدام خدعة بسيطة.

تخيل هذا - كيف كان سيبدو هذا الرسم البياني في وقت ما في الماضي؟ سيكون هناك حواف أقل بين العقد لأنه يتم بناء الاتصالات في شبكة اجتماعية تدريجيًا بمرور الوقت.

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

شطب الروابط من الرسم البياني

أثناء إزالة الروابط أو الحواف ، يجب أن نتجنب إزالة أي حافة قد تنتج عقدة معزولة (عقدة بدون أي حافة) أو شبكة معزولة. لنزيل بعض الحواف من شبكتنا:

كما ترون ، تمت إزالة الحواف في أزواج العقدة (1 و 4) و (7 و 9) و (3 و 8).

أضف تسميات إلى البيانات المستخرجة

بعد ذلك ، سنحتاج إلى إنشاء ميزات لجميع أزواج العقدة غير المتصلة بما في ذلك تلك التي قمنا بحذف حوافها. ستتم تسمية الحواف التي تم إزالتها كـ "1" وأزواج العقدة غير المتصلة كـ "0".

سيكون المتغير المستهدف غير متوازن للغاية في مجموعة البيانات هذه. هذا ما ستواجهه في الرسوم البيانية الواقعية أيضًا. سيكون عدد أزواج العقدة غير المتصلة كبيرًا.

لنأخذ دراسة حالة ونحل مشكلة التنبؤ بالارتباط باستخدام Python.

دراسة حالة: توقع الاتصالات المستقبلية بين صفحات Facebook

هذا هو المكان الذي سنطبق فيه كل ما سبق في سيناريو رائع في العالم الحقيقي.

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

يمكنك تنزيل مجموعة البيانات من هنا.

الهدف: إنشاء نموذج توقع للارتباط للتنبؤ بالروابط المستقبلية (الإعجابات المتبادلة) بين العقد غير المتصلة (صفحات Facebook).

دعنا نطلق دفتر ملاحظات جوبيتر (أو كولاب)!

فهم البيانات

سنقوم أولاً باستيراد جميع المكتبات والوحدات اللازمة:

دعونا تحميل صفحات Facebook كعقد وإعجابات متبادلة بين الصفحات كحواف:

الإخراج: (620 ، 2102)

لدينا 620 عقدة و 2102 روابط. لنقم الآن بإنشاء إطار بيانات لجميع العقد. يمثل كل صف من هذا الإطار dataframe ارتباطًا تشكله العقد في العمودين 'node_1' و 'node_2' ، على التوالي:

fb_df.head ()

ترتبط العقد "276" و "58" و "132" و "603" و "398" بالعقدة "0". يمكننا بسهولة تمثيل هذا الترتيب لصفحات Facebook في شكل رسم بياني:

واو ، هذا يبدو شيئًا تمامًا. هذا ما سنتعامل معه - شبكة سلكية من صفحات Facebook (نقاط زرقاء). الخطوط السوداء هي الروابط أو الحواف التي تربط جميع العقد ببعضها البعض.

إعداد مجموعة البيانات لبناء النموذج

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

استرجاع أزواج عقدة غير متصلة - عينات سلبية

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

أولاً ، سننشئ مصفوفة مجاورة للعثور على أزواج العقد غير المتصلة.

على سبيل المثال ، المجاورة للرسم البياني أدناه هي مصفوفة مربعة يتم فيها تمثيل الصفوف والأعمدة بعقد الرسم البياني:

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

سنستخدم هذه الخاصية لمصفوفة المجاورة للعثور على جميع أزواج العقدة غير المتصلة من الرسم البياني الأصلي G:

دعونا تحقق من شكل مصفوفة المجاورة:

adj_G.shape

الإخراج: (620 ، 620)

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

يمكننا إما البحث من خلال القيم الموجودة أعلى القطر (الجزء الأخضر) أو القيم أدناه (الجزء الأحمر). دعنا نبحث في القيم القطرية عن الصفر:

إليك عدد أزواج العقدة غير المتصلة الموجودة في مجموعة البيانات لدينا:

len (all_unconnected_pairs)

الإخراج: 19018

لدينا 19018 زوجا غير متصل. ستعمل أزواج العقدة هذه كعينات سلبية أثناء تدريب نموذج التنبؤ بالرابط. لنحتفظ بهذه الأزواج في إطار بيانات:

إزالة الروابط من أزواج العقدة المتصلة - عينات إيجابية

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

في فدرة الكود أدناه ، سوف نتحقق أولاً مما إذا كان إسقاط زوج عقدة يؤدي إلى تقسيم الرسم البياني (number_connected_components> 1) أو تقليل عدد العقد. إذا لم يحدث كلا الأمرين ، فإننا نسقط زوج العقدة ونكرر نفس العملية مع زوج العقدة التالي.

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

len (omissible_links_index)

الإخراج: 1483

لدينا أكثر من 1400 رابط يمكننا إسقاطها من الرسم البياني. ستعمل هذه الحواف المسقطة كأمثلة تدريب إيجابية أثناء التدريب على نموذج التنبؤ بالارتباط.

بيانات للتدريب النموذجي

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

دعنا نتحقق من توزيع قيم المتغير المستهدف:

البيانات ["link"]. value_counts ()

0 -19018 1 -1483

اتضح أن هذه بيانات غير متوازنة للغاية. نسبة الارتباط مقابل عدم الارتباط تقترب من 8٪ فقط. في القسم التالي ، سنقوم باستخراج الميزات لجميع أزواج العقدة هذه.

ميزة استخراج

سنستخدم خوارزمية node2vec لاستخراج ميزات العقدة من الرسم البياني بعد إسقاط الروابط. لذا ، دعنا أولاً ننشئ رسمًا بيانيًا جديدًا بعد إسقاط الروابط القابلة للإزالة:

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

في الوقت الحالي ، فقط ضع في اعتبارك استخدام node2vec لتمثيل ناقلات عقد الرسم البياني. دعنا نثبته:

تثبيت نقطة node2vec

قد يستغرق التثبيت على جهازك المحلي بعض الوقت (إنه سريع جدًا إذا كنت تستخدم Colab).

الآن ، سوف نقوم بتدريب نموذج node2vec على الرسم البياني (G_data):

بعد ذلك ، سنقوم بتطبيق نموذج node2vec المتدرب على كل زوج عقدة في "بيانات" إطار البيانات. لحساب ميزات زوج أو حافة ، سنضيف ميزات العقد في هذا الزوج:

x = [(n2w_model [str (i)] + n2w_model [str (j)]) لـ i، j in zip (data ['node_1']، data ['node_2'])]

بناء نموذج التنبؤ بالارتباط الخاص بنا

للتحقق من أداء نموذجنا ، يجب تقسيم بياناتنا إلى جزأين - أحدهما لتدريب النموذج والآخر لاختبار أداء النموذج:

دعونا نلائم نموذج الانحدار اللوجستي أولاً:

سنقوم الآن بعمل تنبؤات على مجموعة الاختبار:

التنبؤات = lr.predict_proba (xtest)

سنستخدم درجة AUC-ROC للتحقق من أداء نموذجنا.

roc_auc_score (ytest ، التنبؤات [: ، 1])

الإخراج: 0.7817

نحصل على درجة 0.78 باستخدام نموذج الانحدار اللوجستي. دعونا نرى ما إذا كان بإمكاننا الحصول على درجة أفضل باستخدام نموذج أكثر تعقيدًا.

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

ملاحظات النهاية

هناك إمكانات هائلة في الرسوم البيانية. يمكننا تسخير هذا لحل عدد كبير من مشاكل العالم الحقيقي ، والتي من بينها ارتباط التنبؤ.

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

لا تتردد في طرح أي أسئلة أو ترك ملاحظاتك في قسم التعليقات أدناه. استمر في الاستكشاف!

نُشر في الأصل على https://www.analyticsvidhya.com في 16 يناير 2020.