قضية بنك Raiffeisen: كيفية معالجة الاحتيال في شبكات CPA
نشرت: 2022-05-25مع تطور التسويق الرقمي ، يتطور أيضًا الاحتيال في الإعلانات الرقمية التابعة التي أصبحت تحديًا مثيرًا للمسوقين عبر الإنترنت. يتم إجراؤها عن طريق إرسال زيارات غير مرغوب فيها إلى مواقع الويب أو استخدام برامج الروبوت لتشغيل المكافآت التابعة. بغض النظر عن الطريقة الدقيقة ، لا يزال يأخذ دولارًا واحدًا من كل 3 دولارات يتم إجراؤها من خلال الإعلان عبر الإنترنت. بعبارة أخرى ، يتم ارتكاب قدر كبير من الإيرادات المسروقة كل يوم.
في هذه الحالة ، نصف الحل الذي قدمه فريق OWOX BI لبنك Raiffeisen والذي سيكون مفيدًا لكلا البنكين وأي مستخدمين آخرين لشبكة CPA.
جدول المحتويات
- تحد
- المحلول
- الخطوة 1. اجمع البيانات الأولية
- الخطوة 2. معالجة البيانات
- الخطوة 3. بناء التقارير
- نتائج
تحد
اكتشف متخصصو التسويق في Raiffeisen زيادة كبيرة في تكاليف حركة الشركات التابعة ، مع بقاء الإيرادات كما هي. كانت هناك مشكلة أخرى تتمثل في أن عملاء البنك لديهم فترات راحة قصيرة للجلسات عند إدخال البيانات الخاصة باستمارة الطلب على الموقع الإلكتروني.
لهذا السبب افترض Raiffeisen أن بعض الشركات التابعة لـ CPA يمكن أن تستبدل قيمة مصدر حركة المرور على صفحة الخروج الخاصة بالبنك. إنه يعمل على النحو التالي: على سبيل المثال ، يقوم المستخدم بتثبيت امتداد متصفح للحصول على خصومات. عندما ينتقل المستخدم إلى موقع الويب الخاص بك ويفتح الخروج ، يعرض الملحق نافذة منبثقة مع عرض خصم. في حالة وجود أي نقرات على الرابط من النافذة المنبثقة ، يقوم الامتداد تلقائيًا بإعادة كتابة بيانات مصدر حركة المرور في ملف تعريف الارتباط مع بيانات مصدر حركة الشركات التابعة.
المحلول
قرر فريق التسويق البدء بجمع بيانات سلوك المستخدم الخام لإثبات الفرضية حول الشركات التابعة التي تعيد كتابة بيانات مصدر حركة المرور لصالحها. بعد ذلك ، تم جمع البيانات حول العملاء المحددين. حصل هؤلاء العملاء على جلستين على نفس الصفحة خلال أقل من 60 ثانية ، وتم تحويل مصدر الزيارات للجلسة الثانية إلى الجلسة التابعة. ستساعد مثل هذه البيانات حول هؤلاء العملاء في تحديد الشركاء التابعين الذين نسبوا الزيارات من القنوات الأخرى إلى أنفسهم. مع توفير هذه البيانات ، قد يكون من الممكن إيقاف التعاون مع مشرفي المواقع الذين يتصرفون بسوء نية ، وتحسين الميزانية للتسويق.
ساعد فريق OWOX BI في جمع البيانات الضرورية ومعالجتها. فيما يلي مخطط لتوضيح تدفق البيانات:

الخطوة 1. اجمع البيانات الأولية
يقوم برنامج Google Analytics بأخذ عينات من البيانات عندما يتجاوز عدد الجلسات حد أخذ العينات. لهذا السبب اقترح محللو OWOX BI جمع البيانات في Google BigQuery. علاوة على ذلك ، يفي مستودع البيانات السحابية هذا بأعلى معايير الأمان ، وهو أمر مهم حقًا للبنك.
لإعداد استيراد البيانات من موقع الويب إلى Google BigQuery ، استخدم Raiffeisen OWOX BI Pipeline. بهذه الطريقة ، حصل متخصصو الشركة على بيانات غير مستندة إلى عينات في الوقت الفعلي تقريبًا وجمعوا الطابع الزمني لكل نتيجة. سمح مثل هذا الحل بتتبع جميع التسلسلات الممكنة لإجراءات المستخدم عبر الجلسات ، في تقرير واحد. على سبيل المثال ، تحتاج إلى تقرير عن المستخدمين الذين زاروا صفحة شركتك / العرض الترويجي ، وعادوا إلى موقع الويب عبر تكلفة النقرة ، وأخيراً اشتروا شيئًا ما. هناك شيء آخر ضروري وهو عرض هذه الزيارات للتاريخ المحدد في التقرير. هذا هو الاستعلام للحصول على التقرير الذي تحتاجه:
SELECT cp.promo.date AS Date, cp.promo.clientId AS ClientId, cp.promo.time AS Promo_time, cp.cpc.time AS CPC_time, send.time AS SEND_time FROM ( SELECT promo.date, promo.clientId, promo.time, cpc.time FROM ( SELECT date, clientId, MIN(time) AS time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE page.pagePath CONTAINS '/promo/' AND type = 'pageview' AND traffic.medium != 'cpc' GROUP BY date, clientId, ORDER BY clientId ASC) AS promo LEFT JOIN ( SELECT date, clientId, traffic.medium, time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium = 'cpc' AND type = 'pageview' GROUP BY date, clientId, traffic.medium, time ORDER BY clientId ASC) AS cpc ON promo.clientId=cpc.clientId WHERE promo.time < cpc.time) AS cp LEFT JOIN ( SELECT date, clientId, time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE eventInfo.eventCategory = 'send_ok' AND type = 'event' GROUP BY date, clientId, time ORDER BY clientId ASC) AS send ON cp.promo.clientId = send.clientId WHERE cp.cpc.time < send.time
SELECT cp.promo.date AS Date, cp.promo.clientId AS ClientId, cp.promo.time AS Promo_time, cp.cpc.time AS CPC_time, send.time AS SEND_time FROM ( SELECT promo.date, promo.clientId, promo.time, cpc.time FROM ( SELECT date, clientId, MIN(time) AS time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE page.pagePath CONTAINS '/promo/' AND type = 'pageview' AND traffic.medium != 'cpc' GROUP BY date, clientId, ORDER BY clientId ASC) AS promo LEFT JOIN ( SELECT date, clientId, traffic.medium, time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium = 'cpc' AND type = 'pageview' GROUP BY date, clientId, traffic.medium, time ORDER BY clientId ASC) AS cpc ON promo.clientId=cpc.clientId WHERE promo.time < cpc.time) AS cp LEFT JOIN ( SELECT date, clientId, time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE eventInfo.eventCategory = 'send_ok' AND type = 'event' GROUP BY date, clientId, time ORDER BY clientId ASC) AS send ON cp.promo.clientId = send.clientId WHERE cp.cpc.time < send.time
يوجد أدناه الجدول الذي يحتوي على جميع البيانات التي تم الحصول عليها نتيجة الاستعلام.

الخطوة 2. معالجة البيانات
تم إنشاء قائمة القيم الضرورية لتحديد قيم مصدر الزيارات التي تم تغييرها مع الشركة التابعة:

- معرف المستخدم.
- مصدر ووسيط الجلسات الأولى والتالية.
- الوقت بين الجلسات.
- عناوين URL الأولى والنهائية لكل جلسة.
- الأحداث في كل جلسة.
- حدث الصفقة في الجلسة النهائية.
بعد ذلك ، للتأكد من إعادة كتابة قيم مصدر حركة المرور بالتأكيد ، اختار محللو OWOX BI تصفية البيانات مع مراعاة هذه الشروط:
- يجب أن تصل الفترة الزمنية بين الجلستين إلى 60 ثانية.
- يجب أن تظل صفحة موقع الويب كما هي عند تغيير المصدر.
- يجب أن تكون هناك صفقة في الجلسة النهائية.
- يجب أن يكون وسيط المرور في الجلسة الأخيرة تابعًا.
إليك استعلام SQL الذي تم استخدامه للحصول على البيانات الضرورية:
SELECT * FROM ( SELECT traff.clientId clientId, traff.page.pagePath pagePath, traff.traffic.source startSource, traff.traffic.medium startMedium, traff.time startTime, aff.evCategory eventCategory, aff.evlabel eventLabel, aff.evSource finishSource, aff.evMedium fifnishMedium, aff.time finishTime, aff.isTransaction isTransaction, aff.pagePath link, traff.time - aff.time AS diff FROM ( SELECT clientId, page.pagePath, traffic.source, traffic.medium, date, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium != 'affiliate')AS traff JOIN ( SELECT total.date date, total.time time, total.clientId clientId, total.eventInfo.eventCategory evCategory, total.eventInfo.eventLabel evlabel, total.traffic.source evSource, total.traffic.medium evMedium, tr.eventInfo.eventCategory isTransaction, total.page.pagePath pagePath FROM ( SELECT clientId, page.pagePath, eventInfo.eventCategory, eventInfo.eventLabel, traffic.source, traffic.medium, date, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium = 'affiliate') AS total LEFT JOIN ( SELECT clientId, date, eventInfo.eventCategory, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE eventInfo.eventCategory = 'send_ok' GROUP BY 1, 2, 3, 4) AS tr ON total.clientId = tr.clientId AND total.date = tr.date WHERE tr.eventInfo.eventCategory = 'send_ok' AND tr.time>total.time)AS aff ON traff.clientId = aff.clientId) WHERE diff >-60 AND diff<0 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ORDER BY clientId, finishTime
SELECT * FROM ( SELECT traff.clientId clientId, traff.page.pagePath pagePath, traff.traffic.source startSource, traff.traffic.medium startMedium, traff.time startTime, aff.evCategory eventCategory, aff.evlabel eventLabel, aff.evSource finishSource, aff.evMedium fifnishMedium, aff.time finishTime, aff.isTransaction isTransaction, aff.pagePath link, traff.time - aff.time AS diff FROM ( SELECT clientId, page.pagePath, traffic.source, traffic.medium, date, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium != 'affiliate')AS traff JOIN ( SELECT total.date date, total.time time, total.clientId clientId, total.eventInfo.eventCategory evCategory, total.eventInfo.eventLabel evlabel, total.traffic.source evSource, total.traffic.medium evMedium, tr.eventInfo.eventCategory isTransaction, total.page.pagePath pagePath FROM ( SELECT clientId, page.pagePath, eventInfo.eventCategory, eventInfo.eventLabel, traffic.source, traffic.medium, date, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE traffic.medium = 'affiliate') AS total LEFT JOIN ( SELECT clientId, date, eventInfo.eventCategory, INTEGER(time) time FROM TABLE_DATE_RANGE({dataSetName}.{tableName},TIMESTAMP('{startDate}'), TIMESTAMP('{endDate}')) WHERE eventInfo.eventCategory = 'send_ok' GROUP BY 1, 2, 3, 4) AS tr ON total.clientId = tr.clientId AND total.date = tr.date WHERE tr.eventInfo.eventCategory = 'send_ok' AND tr.time>total.time)AS aff ON traff.clientId = aff.clientId) WHERE diff >-60 AND diff<0 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ORDER BY clientId, finishTime
الخطوة 3. بناء التقارير
لمزيد من التحليل ، تم تطبيق الوظيفة الإضافية لاستيراد البيانات المحددة من Google BigQuery إلى جداول بيانات Google. باستخدام البيانات المستوردة ، تم إنشاء الجدول بمعرفات كل عميل تم إغلاق جلسته وتم فتح الجلسة الجديدة على نفس الصفحة ، في غضون أقل من دقيقة بين الجلستين.

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

على سبيل المثال ، يوضح التقرير عدد المعاملات ذات قيمة المصدر المعاد كتابتها ، وكذلك الشركات التابعة التي استبدلت مصادر حركة المرور بمصادرها الخاصة. يوضح التقرير أيضًا القنوات التي تمت سرقتها من المعاملات: تكلفة النقرة والقنوات المجانية.
نتائج
ساعد فريق OWOX BI في التعرف بسرعة على نقاط الضعف في شبكات CPA الخاصة بالبنك والقضاء عليها. بفضل الحل المقدم ، يمكن للبنك مراقبة الإحصائيات الخاصة بالشركات التابعة (بشكل أكثر دقة عزو التحويلات والمبيعات إلى قنوات المرور) وتسليط الضوء على حالات الاحتيال في شبكات CPA. نجح فريق التسويق في تحسين ميزانية الإعلان من خلال وقف التعاون مع شريكين غير أمناء أعادا كتابة مصادر حركة المرور وفرضا مبالغ كبيرة على بنك Raiffeisen بشكل غير معقول.