كم يمكن لملف تعريف على شبكة اجتماعية أن يخبر عن شخص ما؟ الصور والمشاركات والتعليقات والاشتراكات - مجال لم يمس للتحليل. اليوم سنتحدث عن كيفية تحديد اهتمامات المستخدمين استنادًا إلى اشتراكاتهم في Instagram.
مصدرالنهج الواضح هو تصنيف اشتراكات الشخص. على سبيل المثال ، من بين اشتراكات المستخدم Ivan ، وجدنا مدوِّنين تلقائيين وثلاثة حسابات مع صور مضحكة ، ما تبقى من الملفات الشخصية ليست مواضيعية (نفترض أن هؤلاء أصدقاء ، أقارب ، زملاء ، إلخ). من هذا نستنتج: إيفان شخص مرح ، مولع بالسيارات. الربح. كل ما نحتاج إليه هو المراسلات "موضوع blogger + theme" ، لكن ليس كل شيء بسيط هنا.
من هو المدون؟ لا يختلف المدون على Instagram عن الحساب العادي (وبشكل عام ، إنه يشبه الحالة الذهنية). من الناحية المثالية ، نحن مهتمون بالحسابات المواضيعية التي تضم حصة كبيرة من الجمهور المباشر ، بينما لا نريد ببساطة قطع عدد المشتركين ، فقد نفقد شيئًا ما.
أين يمكن الحصول على تصنيف جيد؟ إذا توصلت إلى الفئات بنفسك ، فمن المؤكد أن شيئًا مثيرًا للاهتمام سيضيع في "أشياء مختلفة" ، وعندما يصبح كل شيء جاهزًا ، يتبين أن الفئات واسعة جدًا. نريد الحصول على قسم طبيعي ، وبالتالي سنقوم بتجميع المدونين.
هل يمكن أن ينتمي مدون واحد إلى عدة فئات؟ تماما مثل ذلك! في كثير من الأحيان ، كان في وقت واحد سويسريًا ، وريبرًا ، ومتأنقًا يلعب الرجل (وكذلك السفر ، وأسلوب الحياة ، والزوجة والأم).
لذلك ، نحن بحاجة إلى مجموعة بيانات تحتوي على عدد كبير جدًا من المدونين وخوارزمية تجميع مع مجموعات متقاطعة في الإخراج.
كيف بدأ كل شيء
نحن نتعامل مع العملاء الذين يرغبون في وضع إعلاناتهم مع قادة الرأي على Instagram بطريقة أكثر فعالية. في بعض الأحيان توجد قائمة من المدونين ، ثم نقوم بحل مشكلة التحسين - للوصول إلى المزيد من الأشخاص مقابل أموال أقل ، وأحيانًا لا توجد قائمة ويجب العثور على مدونين ذوي صلة. هذه المرة بحثوا عن ملامح من أطباء العيون.
استخدمنا مقاربة مشابهة لنظام التوصية:
- اختر من 3 إلى 7 ملفات تعريف مناسبة بيديك ("المجتمع الأساسي")
- باستخدام تقاطع المشتركين ، نحدد الأشخاص المهتمين بالموضوع ("المتحمسين")
- نحن نبحث عن أطباء جدد في اشتراكات الأشخاص "المتحمسين"
- إذا لزم الأمر ، كرر الخطوات من 1-3 (إضافة أطباء جدد إلى "القلب" أو تغييره)
الآن ، أكثر على سبيل المثال.
الخطوة 1. باستخدام بحث Instagram ، اخترنا 6 حسابات لأطباء العيون من مناطق مختلفة من روسيا:
القائمة عشوائية تمامًا ، لكن كان كافياً بالنسبة لنا أن تتطابق المدونة مع الموضوع وأن لا يقل عدد المشتركين عن 1000 شخص.
الخطوة 2. بعد عبور جميع المشتركين ، نحن ننظر إلى التوزيع.
الصيحة! هناك تقاطعات.
علاوة على ذلك ، هناك شخصان مشتركان في الملفات الشخصية الستة جميعها! لذا ، أنت الآن بحاجة إلى تحديد من نعتبره طب العيون "المتحمس". قررنا أن نأخذ الجميع ، بدءًا من ثلاثة اشتراكات. كما يقولون ، 1 مرة هي حادث ، 2 مرات هي صدفة ، 3 هو انتظام. وبالتالي ، تم العثور على 131 (2 + 3 + 24 + 102) مستخدمين "متحمسين".
الخطوة 3. قم بتنزيل اشتراكات الأشخاص "المتحمسين" وتجميعها مرة أخرى بكل طريقة ممكنة.
لدينا قائمة رائعة من الحسابات ، والتي سنختار منها الآن أطباء العيون الجدد. يوضح العمود الأيمن عدد الأشخاص الذين تم اختيارهم في الخطوة الثانية وعددهم 131 شخصًا. في الجزء العلوي ، كانت هناك ملفات شخصية من ستة برامج أصلية ، وهذا ليس مفاجئًا. إذا حددنا الآن العتبة ونقول: "جميع الملفات الشخصية التي تزيد قيمتها عن عشرة من الأطباء الجدد" ، فإننا نخاطر بإسناد حسابات شائعة مثل أولغا بوزوفا إلى أطباء العيون ، وفي الوقت نفسه نفقد ملفات شخصية صغيرة ، ولكن ذات صلة ، لذلك أضف واحدًا آخر عمود عدد المشتركين وحساب النسبة المئوية للمستخدمين المتحمسين بين المشتركين.
للراحة ، الكسر مضروب في 100 (لذلك الحصة هي النسبة المئوية في الواقع). نتيجة لذلك ، مع عدد الحالات> = 6 والمشاركة> = 0.05 ، تم تلقي 166 من أطباء العيون الجدد. الدرجة!
الخطوة 4. أصبح 172 حسابًا "جوهرًا" جديدًا للمجتمع ، وقد ساعد هذا في العثور على حوالي 500 طبيب عيون جديد ، ولكن تم تحويل النتيجة بالفعل إلى حسابات أجنبية.
حسابات مماثلة في توصيات Instagram
كل هذا مثير للاهتمام ، بالطبع ، والآن نحن نعرف كيفية العثور على حسابات متشابهة مع بعضها البعض ، لكننا لا نزال نحلم بتفكيك جميع أدوات التثبيت إلى فئات. ثم جاءت الفكرة إلى ذهني للنظر في توصيات instagram الجاهزة.
والحقيقة هي أن الحسابات المواضيعية لديها توصيات ، ولكن الناس العاديين لا. فيما يلي إجابة سؤال من الذي يجب أن يعتبره المدونون وناقصًا من صداع واحد. الصيحة!
في التوصيات ، يحتوي مدون واحد على ما يصل إلى 80 ملف تعريف مماثل. كان لدينا قائمة تضم 1000 مدونة روسية ، بدأنا بها. أخذوا منها مماثلة ، ثم مماثلة ، ثم ... حسنا ، أنت تفهم :)
كانت الخطة في يوم من الأيام ستنتهي هذه العملية ، حيث لن يتم تضمين الملفات الشخصية الصغيرة مع بضع مئات من المشتركين في التوصيات ، ولكن في الواقع توقفنا عندما انتهى الصبر. يمكنك دومًا الاستمرار في جمع مجموعة البيانات ، لكن حتى الآن لم يتم إعدادها بسهولة ، مع وجود احتمال كبير بتغطية جميع المدونين الروس تقريبًا ، حسنًا.
لدينا الآن رسمًا بيانيًا يحتوي على 3428453 رأسًا (مدونين) و 96967974 حافة (تشابه مدونين مع بعضهما البعض).
هذه هي الطريقة التي يبدو بها الرسم البياني لدينا على عينة صغيرة جدًابالمناسبة ، اتضح أننا لم نكن أول من اختار
هذا النهج.على ما يبدو ، يتم إنشاء توصيات على Instagram بناءً على من لا يزال أتباع هذا الملف الشخصي يتبعون ، لذلك سيكون لدى طبيب من Bryansk حسابات Bryansk مشهورة وأطباء آخرون في التوصيات. هذا مشابه لبحثنا عن أطباء العيون ، ولكن الآن يمكننا النظر في جميع المجتمعات التي ينتمي إليها المدون في نفس الوقت. بالإضافة إلى ذلك ، تزداد سرعة المعالجة بشكل كبير ، لأنه لا توجد حاجة لتحليل جميع مشتركي المدون ، يكفي أن يستغرق الأمر 80 حسابًا فقط.
اختيار ووصف الخوارزمية
! ممتاز تم إعداد البيانات ، والآن نحن بحاجة إلى اختيار أداة وخوارزمية يمكنها التعامل مع مثل هذا الرسم البياني الكبير ، ويفضل أن يكون ذلك في وقت مناسب. دعني أذكرك أننا في المخرجات نريد الحصول على مجموعة من المجتمعات التي يمكن أن ينتمي إليها مدون واحد للعديد منها.
اخترنا مكتبة Stanford Network Analysis Platform (SNAP)
منصة ستانفورد لتحليل الشبكات (SNAP) هي مكتبة تحليل غرافي للأغراض العامة ومكتبة لاستخراج الرسوم البيانية. إنه مكتوب بلغة C ++ ويمكن بسهولة تحويله إلى شبكات ضخمة تضم مئات الملايين من العقد ومليارات من الحواف. إنه يتعامل بكفاءة مع الرسوم البيانية الكبيرة ، ويحسب الخصائص الهيكلية ، ويولد الرسوم البيانية العادية والعشوائية ، ويدعم السمات على العقد والحواف.
انجذبت انتباهنا إلى خوارزمية AGMfit (نموذج الرسم البياني التابع لـ AGM) ، وفي النهاية استخدمنا BIGCLAM (نموذج الانتماء العنقودي للشبكات الكبيرة). إنها تختلف فقط في الحالة الأولى ، فيتم حل مشكلة التحسين بشكل تماثلي ، مما يجعلها أقل قابلية للتوسعة ، بينما تسمح لك الثانية فقط بتغذية الرسوم البيانية مثل رسوماتنا.
الفكرة الرئيسية والبديهية إلى حد ما: كلما زاد عدد العقدتين عن مجتمعات مشتركة ، زاد احتمال التواصل بين هاتين العقدتين. تعتمد كلتا الخوارزميات على نموذج الرسم البياني التابع ، لذلك دعونا نتناوله بمزيد من التفاصيل:
لنفترض أن لدينا رسم بياني ثنائي الأطراف تكون فيه القمم المستديرة مجتمعات (
و
) ، والمربع - مستخدمي الشبكة الاجتماعية ، ولكل شخص (
يشير إلى مجتمعات مختلفة ذات أوزان محددة (
و
). كلما زاد الوزن ، زاد احتمال اتصال المشارك (المألوف) بأفراد آخرين في المجتمع.
مثال: الزملاء الذين درسوا في الجامعة نفسها يتبعون بعضهم البعض على Instagram. كلاهما خريجين من الجامعة نفسها (مجتمع 1) ويعملان في نفس الشركة (مجتمع 2) ، ونحن لا نعرف ما سبب "الصداقة" على الشبكة ومتى التقيا. اسمح للمرء بالتخرج من الجامعة والحصول على وظيفة ، والخريج الثاني قبل خمس سنوات وكان يعمل في الشركة طوال هذا الوقت ، ثم سيكون وزن الانتماء إلى المجتمع الأول 1 أكثر ، والمجتمع 2 أقل والعكس بالعكس.
لكل مجتمع مشترك يتكون من زوجين ، نحصل على فرصة مستقلة لتكون على دراية:
وبالتالي ، كلما كانت المجتمعات أكثر شيوعًا ، زاد احتمال معرفتهم لبعضهم البعض:
إذا قمنا بحساب احتمالية وجود اتصال بين كل زوج من المستخدمين ، فعندئذٍ في المخرجات نحصل على رسم بياني حيث تكون القمم أشخاصًا وتكون الحواف الموجودة بينهما حقيقة من المعارف أو الاشتراك في بعضها البعض.
وهكذا ، من وجهة النظر على اليسار ، انتقلنا إلى الصورة على اليمين.
الآن دعونا نفهم كيف يتم استخدام هذا النموذج في اكتشاف المجتمع.
لدينا رسم بياني للمدونين مماثلين وهدفنا هو اكتشاف
المجتمعات التي تستخدم النموذج الموضح أعلاه ، من خلال اختيار مصفوفة الوزن الأنسب
(بعدها
العقد على
المجتمعات) بحيث الرسم البياني الحصول عليها في الإخراج يشبه الرسم الأصلي لدينا. يتم ذلك عن طريق تعظيم وظيفة الاحتمال.
ومع ذلك ، يمكن تمثيل هذا الأمر برمته باعتباره تحلل مصفوفة غير سلبي ، والذي يعطي فقط علامة زائد في قابلية تطوير خوارزمية BIGCLAM مقارنة بـ AGMfit.
اقرأ المزيد
هنا وهنا .
ترقيم المجتمع وإطلاقه
في BIGCLAM ، يمكنك تحديد العدد الدقيق للمجتمعات والفاصل الزمني. تختار الخوارزمية 20٪ من أزواج العقد لكل اختبار ، و 80٪ هي ملائمة النموذج مع عدد مختلف من المجتمعات.
شكلنا ملف إدخال مع قائمة الحواف وتشغيل:
./bigclam -o:bloggers -i:query_graph_all.edgelist -c:-1 -nc:20 -mc:50000 -xc:200000 -nt:10
تتيح لك المعلمات تحديد عدد المحاولات ، والحد الأدنى والحد الأقصى لعدد المجتمعات (أو بالضبط ، إذا لزم الأمر) ، وعدد مؤشرات الترابط والبادئة لملفات الإخراج. في حالتنا ، قمنا بتعيين الفاصل الزمني من 50 إلى 200 ألف مجتمع مع 20 محاولة في 10 سلاسل. تم احتساب كل هذه الروعة لمدة خمسة أيام على وحدة المعالجة المركزية Intel® Xeon® Gold 6150 CPU @ 2.70GHz. تلقى الإخراج ملفين ، واحد ل Gephi ، النص الثاني ، حيث كل سطر هو مجتمع.
في الواقع ، لقد أجرينا الخوارزمية مرتين ولأول مرة واجهنا الحد الأقصى البالغ 50 ألف مجتمع ، لم تكن النتيجة سيئة ، لكن المجتمعات المختلطة غالبًا ما ظهرت. هذه المرة وصلنا مرة أخرى إلى الحد الأقصى لقيمة 200 ألف مجتمع ، لكنهم كانوا أفضل بكثير ، وتوقفنا عند هذا الحد. من المحتمل أن تحصل على النتيجة بشكل أفضل ، لكن مائتي ألف من المجتمعات التي لم تسمها خائفة.
صورة جميلةماذا تفعل الآن مع كل هذا؟
من ناحية ، تساعدنا المجتمعات الناتجة على البحث بسرعة عن مجموعات ضيقة من المدونين (كما هو الحال مع أطباء العيون في ذلك الحين). إذا كان هناك عدد من المدونين كمثال ، فسنأخذ كل المجتمعات التي ينتمون إليها ، ونبذ المجتمعات غير الضرورية وهذا كل ما في الأمر. يمكنك استخدام البحث بالاسم ، على سبيل المثال ، أحد المجتمعات حول الديكور والتصميم الداخلي:
من ناحية أخرى ، من أجل تحديد اهتمامات المستخدمين ، يجب تسمية كل هذه المجتمعات بطريقة مجدية. أو ربما كل شيء ليس ضروريا.
كرنك
لسوء الحظ ، ليست كل المجتمعات المستلمة جيدة على قدم المساواة ، وللعثور على أكثرها إثارة للاهتمام ، قررنا أن نحاول استخدام طريقة تحديد أولويات CRank من نفس مكتبة SNAP. وهي مصممة لتتوافق تلقائيًا مع مرتبة كل مجتمع بناءً على هيكل الرسم البياني: كلما زادت القيمة ، كان المجتمع أفضل.
عند إدخال البرنامج ، نقدم المجتمعات التي وجدناها في وقت سابق ، لكل منها ، يتم حساب مقاييس تحديد الأولويات (4 قطع) ، ثم يتم تجميع هذه المقاييس ، ونحصل على تقدير.
اقرأ المزيد
هنا .
إطلاق
./crank -i:bloggers_cmtyvv.txt -c:query_graph_all.edgelist -o:bloggers_prioritization.txt
أثناء الإطلاق ، واجهوا مشكلة توافق مع Ubuntu 18.04 ،
وهم يقدمون حلاً
هنا .
نظرًا لأن ملف مجتمع bloggers_cmtyvv.txt وقائمة query_graph_all.edgelist الخاصة بالحواف تحتوي في البداية على أسماء مستعارة (من سلسلة الكتابة) ، فقد اضطررنا إلى تجزئتها حتى تكون int ، وإلا أقسمت أقسم.
دعونا نرى كيف يعمل هذا مع مثال:
سنختار العديد من المجتمعات التي توجد بها ملفات شخصية تحتوي على السلسلة "lokomotiv" في الاسم ، كما هو مخطط له ، ويجب أن يكون هذا هو مجتمع عشاق كرة القدم في نادي Lokomotiv ، ولنرى ما هو عليه بالفعل. يتم وضع علامة على أعضاء المجتمع باللون الأحمر ، وتحت كل صورة هناك درجة المقابلة.
المجتمع 1 ، درجة 0.4المجتمع 2 ، درجة 0.41المجتمع 3 ، درجة 0.34المجتمع 4 ، درجة 0.13ثم ، بعد النظر في جميع الملفات الشخصية من هذا الرسم الفرعي ، نختار أولئك الذين ينتمون حقًا إلى المجتمع المرغوب فيه ، واتضح أنه:
اتضح أن أول مجتمعين يحتويان فعليًا على ما نحتاجه ، تقريبًا بدون أخطاء (باستثناء ملف تعريف فريق كرة القدم الروسي) ، المجتمع الثالث جيد ، لكنه يغطي حسابات أقل من الأولين ، وبالتالي فإن النتيجة أصغر ، والرابع المجتمع ، على الرغم من أنه يتكون من حسابات حول موضوع كرة القدم (فيما يلي لاعبون من الأندية الأخرى وزوجاتهم ومديريهم) ، لكن هذا لا يناسبنا.
يمكننا أن نستنتج أن كرانك يعمل بشكل جيد.
علامات يدوية للتلوين والنتائج.
لحل مشكلة تلوين المستخدمين حسب الاهتمامات ، نحلل أيضًا نصوص المنشورات وأردنا معرفة أين تكون النتيجة أفضل / أكثر إثارة للاهتمام (في النصوص أو في اشتراكات) وما إذا كانت هناك أي تطابقات على الإطلاق. بالنسبة لعينة صغيرة من الناس ، يجب تسمية حوالي 800 مجتمع بشكل مستقل. كنا أكثر من راض عن النتيجة وقررنا تطوير هذا النهج. تتيح لك طريقة اكتشاف المجتمع العثور على فئات اهتمامات ضيقة وغير عادية ، على سبيل المثال ، الاشتراك في ملفات تعريف الفئران (بمعنى القوارض الرمادية الصغيرة) وغيرها من الأشياء المدهشة ، يمكنك معرفة نوع الرياضة التي يفترض أن يكون الشخص مهتمًا بها ، ولا يدفع كل شيء إلى الفئة "المتطرفة" و هكذا
ربما لن نحتفل بجميع الـ 200 ألف مجتمع ، ولكن ربما سنلعب بنتائج CRank ونترك فقط المجتمعات ذات السرعة العالية ، وربما سنضع علامة عليها عند الضرورة. مثل هذه الأشياء :)
شكرا لك
كُتِب هذا المقال بالاشتراك مع مشرفي Artyom Korolev ( korolevart ) R&D Dentsu Aegis Network روسيامصدر