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

تحويل قائمة التسوق إلى مصفوفة العملاء المنتج
بعد ذلك نستخدم التصفية التعاونية . الحدس هنا بسيط: العميل رقم 1 اشترى المنتج رقم 1 واثنين من المنتجات رقم 3 ؛ قام العميل رقم 2 أيضًا بشراء المنتج رقم 1 - من المحتمل أن يرغب في شراء المنتج رقم 3.
تتضمن عملية التصفية التعاونية تحلل مصفوفة كبيرة متفرقتين إلى مصففتين مميزتين لكثافة طويلة مستطيلة ذات حجم أصغر بكثير. للتحلل ، استخدمنا التنفيذ الجاهز لـ AlternatingLeastSquares من المكتبة الضمنية .
بعد تدريب النموذج ، نحصل على أعراض كامنة لجميع العملاء وجميع المنتجات. يتم تقديمها في شكل مصفوفات (عدد العملاء × عدد العلامات) و (عدد المنتجات × عدد العلامات) ، على التوالي.
العلامات الخفية هي علامات لا يتم ضبطها بشكل واضح في أي مكان ، مثل ارتفاع شخص ما أو مساحة الشقة. عادة يتم الحصول عليها نتيجة لبعض التحولات الرياضية على البيانات الأصلية.
يتم ترتيب مصفوفات الميزة الكامنة بحيث إذا قمت بضربها ، ستحصل على مصفوفة من نفس الحجم مثل الأصل. مع درجة عالية من الاصطلاحية ، يمكننا القول أنه حيثما كانت هناك أعداد أكبر ، سيكون هناك أعداد أكبر - حوالي واحد. حيث أقل هو أقل. حيث توجد أصفار ، ستكون هناك أعداد صغيرة ، بالقرب من الصفر ، وربما سلبية. ولكن الشيء المهم هو أنه في بعض الأماكن التي توجد بها أصفار ، ستظهر أعداد كبيرة - توصياتنا المستقبلية.

يتم تمييز المشتريات التي تؤثر بشدة على بعضها البعض بنفس اللون. مربع يسلط الضوء على بعض التوصيات المستقبلية.
الآن ، إذا أخذنا متجه المعالم لعميل معين وضربناه في مصفوفة ميزات المنتج ، فسنحصل على متجه النتيجة لجميع المنتجات لهذا العميل. يبقى فقط أن تختار منها العديد من المنتجات بأقصى سرعة.
هناك فارق بسيط - من بين المنتجات الموصى بها ذات الاحتمالية العالية سيكون هناك تلك التي تم شراؤها بالفعل من قبل العميل - يجب استبعادها.
الغريب في الأمر ، لكن مثل هذا المخطط البسيط تبين أنه نجح والعملاء سعداء لاختبار توصياتنا. أجرينا اختبارات AB ، حيث قارنا التوصيات الشخصية مع أكثر الكتب مبيعًا. في بعض الحالات ، لم يكن هناك فرق ، لكنهم في بعض الحالات رأوا زيادة ملحوظة إحصائياً في التحويلات بنسبة تصل إلى 10٪. كانت هذه في الأساس متاجر ذات تردد عالي من عمليات الشراء ، وبالتالي كمية كبيرة من البيانات.
نحن نستخدم المزيد من البيانات.
كان من الواضح أن المعلومات حول المشتريات وحدها ليست كافية لتقديم توصيات جيدة. إذا فقط لأن العديد من العملاء ليس لديهم مشتريات على الإطلاق. لذلك ، قررنا تحسين توصياتنا.
بالإضافة إلى المشتريات ، بدأنا نأخذ في الاعتبار طرق عرض المنتج ، بالإضافة إلى إضافتها إلى قوائم مختلفة: في السلة ، في "المفضلة" ، إلخ.
لكل نوع من أنواع الإجراءات ، اخترنا وزناً وأضفناه إلى مصفوفة متفرق لدينا بهذا الوزن.
نحن نأخذ في الاعتبار وقت العمل
لقد اعتقدنا أن شراء الأمس وشراء العام الماضي يجب ألا يكون لهما نفس التأثير على التوصيات. لذلك ، قدمنا معامل نسيان أسي لجميع الإجراءات.
بالإضافة إلى ذلك ، بالنسبة لبعض المتاجر ، على سبيل المثال ، الملابس ، الموسمية مهمة: إذا كان الصيف ، فأنت بحاجة إلى إيلاء المزيد من الاهتمام لما اشتراه شخص ما في الصيف قبل عام من ما اشتراه قبل ستة أشهر في الشتاء.
نحن نأخذ في الاعتبار علامات واضحة
تحتوي قاعدة البيانات الخاصة بنا على مجموعة واسعة من المعلومات. قررنا أن كل شيء يجب أن تستخدم.
بالنسبة للمنتجات ، بدأنا في استخدام السعر والشركة المصنعة وفئة المنتج والعديد من المجالات الإضافية التي يشير إليها المتجر (حجم الملابس ولون الأثاث ووجود الكائنات المحورة وراثياً في طعام الكلاب ، إلخ).
بالنسبة للعملاء ، أخذوا الجنس والعمر ومجال صندوق البريد ونظام التشغيل في الجلسة الأخيرة والقناة التي دخل من خلالها إلى قاعدة البيانات (عبر الإنترنت أو دون الاتصال بالإنترنت أو الشبكة الاجتماعية أو ما إلى ذلك).
لربط كل هذا بالنموذج ، نحن:
- نحن نصنع مصفوفات للميزات (بشكل منفصل للعملاء والمنتجات) ، بعد معالجتها مسبقًا باستخدام طرق قياسية: القياس ، الترميز الساخن.
- استنادًا إلى ميزات المنتجات ومصفوفة العميل والمنتج الحالية ، نقوم باستعادة الميزات الإضافية المقترنة للعملاء. تتم عملية الاستعادة بطريقة تجعل منتج المنتج سمات مقترنة بسمات العميل لجعل مصفوفة المصدر قريبة قدر الإمكان. الغراء هذه علامات إضافية لتلك الموجودة كامنة.
- وبالمثل ، نحن نفعل مع علامات العملاء.

توسيع علامات كامنة
الآن لدينا المزيد من العلامات ويمكننا تقديم توصيات أكثر دقة. منذ تلك اللحظة ، بدأ عدد الاختبارات التي أظهرت نتيجة ذات دلالة إحصائية لصالح التوصيات الشخصية في النمو. بالإضافة إلى الاختبارات ، تحسن التقييم الشخصي من قبل الخبراء أيضًا.
تكوين Hyperparameters
المقاييس أولا
بالطبع ، اختبرنا توصياتنا في كل وقت. لقد أجرينا اختبارات على الإنترنت وغير متصل.
بالطبع ، تعد اختبارات AB عبر الإنترنت طريقة أكثر موثوقية للتحقق من مدى جودة التوصيات. وأظهرت هذه الاختبارات نتائج جيدة.
ومع ذلك ، الاختبارات عبر الإنترنت غير مريحة بشكل رهيب:
تحتاج إلى العثور على متجر يريد المجازفة مع عملائه واختبار الإصدار الجديد من الخوارزمية.
ثم تحتاج إلى الانتظار لمدة يوم / أسبوع / يومين للحصول على بعض النتائج ذات الأهمية الإحصائية.
تحتاج إلى تكرار هذا 100 مرة لاختبار 100 خيار مختلف.
لذلك ، لا غنى عن الاختبارات دون اتصال. وهنا لن يكون خاطئا أن نذكر كيف قمنا بها.
كمقياس في وضع عدم الاتصال ، اختاروا الشعبية والبسيطة - nDCG @ K (الربح التراكمي الطبيعي المخفض في K) ، أو بالأحرى متوسطه لعدة آلاف من العملاء.
هذا المقياس هو ترتيب الجودة. يستغرق القيم من 0 إلى 1 ويظهر مدى جودة التوصيات.
لحساب قيمة المقياس ، تحتاج إلى توصيات مثالية قياسية. ليس لدينا مثل هذا المعيار. ولكن وجدنا طريقة للخروج: لقد درسنا التوصيات في وقت ما في الماضي - قبل شهر - ونظرنا إلى ما اشترى شخص لهذا الشهر - وهذا هو المعيار لدينا.
هناك خدعة بسيطة هنا: إذا كنا قد أوصينا بشيء للعميل قبل شهر ، لكان قد اشتريها ، لكنه لم يشتريها. لكننا لن نعرف أبدا عن هذا.
نقطة أخرى: يمكن أن نوصي قبعة زرقاء مع pompom ، واشترى عميل قبعة زرقاء دون pompom. يبدو أن البضائع متشابهة ، لكن مختلفة - تتدلى متقلب. لذلك ، عند حساب المقياس ، بدأنا نأخذ في الاعتبار تشابه البضائع.
والآن حول hyperparameters
نظرًا لأن لدينا مقياسًا دون اتصال بالإنترنت ، يمكننا اختبار مجموعة متنوعة من الخيارات بأمان لتوصياتنا وعدم القلق من احتمال تعرض شخص ما لها.
لمدة أسبوع يجهد خيالنا ، جربنا 2-3 عشرات من التعديلات المختلفة للخوارزمية ، من بينها كانت بسيطة ، مثل عوامل النسيان المختلفة ، وأكثر تعقيدًا ، مثل استخدام خوارزمية أخرى لإلصاق علامات واضحة للعملاء والمنتجات.
بعض التعديلات ليس لها أي تأثير في أي مكان. أظهر البعض تحسينات على جميع المشاريع - قمنا بإصلاحها. وقام البعض في عدد من المشاريع بتحسين المقياس ، بينما ازداد سوءًا في مشاريع أخرى. لذلك حصلنا على إعداد hyperparameter .
لدينا الآن 11 hyperparameters. استغرق الأمر عدة أيام للعثور على القيم المثلى لكل منها لجميع المشاريع.
بعد التوليف ، اتضح أن المعدل لجميع المشاريع نما في المتوسط 6 مرات ، وأقوى نمو - 35 مرة!
تحسين الوظيفة
يمكننا تقديم توصيات شخصية جيدة. بارد.
ولكن كيف تعمل؟ شيء من هذا القبيل: كل ليلة في الليل ، عندما ينخفض الحمل على الخوادم ، نبدأ في إعادة فرز التوصيات لجميع المشاريع. يستهلك استهلاك ذاكرة الوصول العشوائي (RAM) ووحدة المعالجة المركزية (CPU) ، ويمر لعدة ساعات ، والتوصيات جاهزة. يذهبون إلى مخزن خاص وينتظرون حتى يتم نقلهم من هناك.
لماذا خذها؟ على سبيل المثال ، لإرسال بريد إلكتروني. هذا يبدو جيدا.
أو لتظهر على الموقع. تخيل أنك تذهب إلى الموقع ، واختر الهاتف المحمول ، وهناك توصيات شخصية في النافذة ، ونقدم لك ... غلاية! لماذا غلاية؟ نعم ، نظرًا لأنك اشتريت ميكروويفًا منذ شهر ، وحسبت الخوارزمية أن الذين اشتروا ميكروويفًا غالبًا ما يحتاجون إلى غلاية.
لكنك تحتاج إلى هاتف خلوي! كيف تكون؟
لقد حان الوقت لتقديم التوصيات التي تعمل في الوقت الحقيقي.
من وجهة نظر الرياضيات ، لا شيء جديد: لقد قسمنا ببساطة مرحلة التدريب النموذجي ومرحلة إصدار التوصيات.
ما زلنا ندرب النموذج مرة واحدة في اليوم.
والآن يمكننا إصدار توصيات عبر الإنترنت. بمجرد قيام شخص ما بإجراء ما على الموقع ، على سبيل المثال ، عرض المنتج أو إضافته إلى السلة ، يتم إنشاء طلب. يشير الطلب إلى من فعل ماذا ، مع أي منتج. تقوم خوارزمية التوصية بمعالجة هذا الطلب ، واستجابة لذلك ، تنشئ قائمة بالتوصيات لهذا العميل.
لجعل هذا ممكنًا ، كنا بحاجة إلى:
- قم بعمل مستودع حيث يتم اضافة النماذج بعد التدريب.
- قم بتنظيم وحدة تخزين ذات قيمة رئيسية لتخزين الإجراءات التي تم تنفيذها من قبل العميل ، لأنه يستغرق وقتًا طويلاً لتحميلها من قاعدة البيانات.
- تسريع توصياتنا بشكل كبير. كانت نقطة التسارع الرئيسية استخدام مكتبة nmslib للعثور على أقرب الجيران لتحديد أكثر المنتجات ذات الصلة للشخص. توصل فريق Sly من Microsoft إلى كيفية الحد من مشكلة الضرب المصفوفي واختيار الجزء العلوي من العناصر ذات القيمة الأعلى لمهمة البحث عن أقرب الجيران.
- قم بإنشاء خدمة microservice تتعقب تصرفات الشخص على الموقع ، وترسل طلبًا للتوصيات ، وترفع هذه التوصيات وتُظهرها للشخص.
وقد اكتسبت هذه الآلة الجهنمية. وحصل بسرعة. بمجرد إلقاء نظرة على هاتفك المحمول ، يتم إعادة إحصاء التوصيات في الثانية ، والهواتف المحمولة والحالات والنظارات وما شابه ذلك موصى بها لك بالفعل.
لجعل الأمر أكثر وضوحًا بسرعة: نقاوم حمولة تبلغ 7000 دورة في الدقيقة (طلبات في الدقيقة) باستخدام 3 مراكز فقط من وحدة المعالجة المركزية Intel Xeon 2.6 GHz. يتم إعطاء هذا الحمل في ذروة نشاط أكبر 2 من عملائنا.
ما التالي
يبدو أننا من النموذج الحالي ضغطنا على كل ما هو ممكن.
مزيد من التحسين سيتطلب تغييرات كبيرة.
أحد خيارات التحسين هو التقسيم الأولي للعملاء إلى مجموعات.
يتصرف الناس بشكل مختلف: شخص ما يشتري كثيرًا وشيئًا فشيئًا ، نادرًا ما ، ولكن بكميات كبيرة ، شخص ما سلع باهظة الثمن ، شخص رخيص. في الواقع ، يجب أن يجد النموذج نفسه مثل هذه المجموعات ويوصيهم بما يحتاجون إليه.
لكن قد يكون من الصعب ، على سبيل المثال ، إذا كانت المجموعات صغيرة. على سبيل المثال ، مجموعة صغيرة من الكيانات القانونية. أو مجموعة من الرجال في متجر للسيدات. لا يمكن تحديدها دائمًا بواسطة السمة الرسمية "الجنس" ، لأن الزوجة يمكنها استخدام بطاقة الولاء الصادرة لزوجها ، والعكس صحيح.
يمكنك محاولة مساعدة النموذج ، إذا قمت بتحديد هذه المجموعات لأول مرة ، ثم بناء نموذج لكل منها على حدة.
قد يكون النهج الأكثر جدية للتحسين هو أخذ تاريخ الإجراءات في الاعتبار.
الآن نأخذ بعين الاعتبار وصفة الإجراء فقط ، وهذا لا يسمح لنا بتحديد أنماط السلوك. على سبيل المثال ، لا يمكن أن يفهم النموذج أنك إذا اشتريت أولاً ملابس للنساء الحوامل ثم حفاضات الأطفال ، فقد حان الوقت للتوصية بأغذية الأطفال.
بشكل عام ، العمل على تحسين التوصيات ، في رأينا ، يمكن أن يستمر إلى ما لا نهاية تقريبا. مع استخدام كل عميل جديد لها ، تظهر حالات جديدة وافتراضات جديدة للتحسين.
لذلك نحن نواصل التحسن ، وسنحاول الكتابة عما نفعله. لا تقل وداعا :)