กรณีธนาคาร Raiffeisen: วิธีจัดการกับการฉ้อโกงในเครือข่าย CPA

เผยแพร่แล้ว: 2022-05-25

ในขณะที่การตลาดดิจิทัลกำลังพัฒนา การฉ้อโกงโฆษณาของพันธมิตรด้านดิจิทัลที่กำลังกลายเป็นความท้าทายที่โลดโผนสำหรับนักการตลาดออนไลน์ก็เช่นกัน ดำเนินการโดยส่งทราฟฟิกขยะไปยังเว็บไซต์หรือใช้บอทเพื่อเรียกรางวัลจากพันธมิตร ไม่ว่าวิธีการที่แน่นอนจะยังคงใช้เงิน 1 ดอลลาร์จากทุกๆ 3 ดอลลาร์ที่ทำผ่านการโฆษณาออนไลน์ กล่าวอีกนัยหนึ่ง รายได้ที่ขโมยมาจำนวนมากมีภาระผูกพันทุกวัน

ในกรณีนี้ เราอธิบายโซลูชันที่จัดทำโดยทีม OWOX BI สำหรับธนาคาร Raiffeisen ซึ่งจะเป็นประโยชน์สำหรับทั้งธนาคารและผู้ใช้เครือข่าย CPA รายอื่นๆ

สารบัญ

  • ท้าทาย
  • สารละลาย
    • ขั้นตอนที่ 1 รวบรวมข้อมูลดิบ
    • ขั้นตอนที่ 2 ประมวลผลข้อมูล
    • ขั้นตอนที่ 3 สร้างรายงาน
  • ผลลัพธ์

ท้าทาย

ผู้เชี่ยวชาญด้านการตลาดของ Raiffeisen พบว่าค่าใช้จ่ายในการเข้าชมของ Affiliate เพิ่มขึ้นอย่างมาก โดยรายได้ยังคงเท่าเดิม ปัญหาอีกประการหนึ่งคือลูกค้าของธนาคารมีช่วงพักช่วงสั้น ๆ เมื่อป้อนข้อมูลสำหรับแบบฟอร์มใบสมัครบนเว็บไซต์

นั่นเป็นเหตุผลที่ Raiffeisen สันนิษฐานว่าบริษัทในเครือ CPA ของตนบางรายอาจแทนที่ค่าแหล่งที่มาของการเข้าชมในหน้าชำระเงินของธนาคาร ทำงานดังนี้: ตัวอย่างเช่น ผู้ใช้ติดตั้งส่วนขยายเบราว์เซอร์เพื่อรับส่วนลด เมื่อผู้ใช้ไปที่เว็บไซต์ของคุณและเปิดการชำระเงิน ส่วนขยายจะแสดงหน้าต่างป๊อปอัปพร้อมข้อเสนอส่วนลด หากมีการคลิกลิงก์จากหน้าต่างป๊อปอัป ส่วนขยายจะเขียนข้อมูลแหล่งที่มาของการเข้าชมใหม่ในคุกกี้โดยอัตโนมัติด้วยข้อมูลแหล่งที่มาของการเข้าชมของพาร์ทเนอร์

สารละลาย

ทีมการตลาดตัดสินใจที่จะเริ่มต้นด้วยการรวบรวมข้อมูลพฤติกรรมผู้ใช้ดิบเพื่อพิสูจน์สมมติฐานเกี่ยวกับพันธมิตรในการเขียนข้อมูลแหล่งที่มาของการเข้าชมใหม่เพื่อประโยชน์ของพวกเขา ถัดไป รวบรวมข้อมูลเกี่ยวกับลูกค้าเฉพาะราย ลูกค้าเหล่านี้มี 2 เซสชันในหน้าเดียวกันภายในเวลาไม่ถึง 60 วินาที และแหล่งที่มาของการเข้าชมของเซสชันที่ 2 ได้เปลี่ยนไปเป็น Affiliate แบบหนึ่ง ข้อมูลดังกล่าวเกี่ยวกับลูกค้าเหล่านี้จะช่วยระบุพันธมิตร Affiliate ซึ่งระบุแหล่งที่มาของการเข้าชมจากช่องทางอื่นๆ ให้กับตัวเอง เมื่อให้ข้อมูลนี้ อาจเป็นไปได้ที่จะหยุดความร่วมมือกับผู้ดูแลเว็บที่กระทำการโดยไม่สุจริต และเพิ่มประสิทธิภาพงบประมาณสำหรับการตลาด

ทีมงาน OWOX BI ช่วยในการรวบรวมและประมวลผลข้อมูลที่จำเป็น นี่คือสคีมาเพื่อสาธิตการไหลของข้อมูล:

ขั้นตอนที่ 1 รวบรวมข้อมูลดิบ

Google Analytics จะสุ่มตัวอย่างข้อมูลเมื่อจำนวนเซสชันเกินเกณฑ์การสุ่มตัวอย่าง นั่นเป็นเหตุผลที่นักวิเคราะห์ OWOX BI แนะนำให้รวบรวมข้อมูลใน Google BigQuery นอกจากนี้ คลังข้อมูลบนระบบคลาวด์ยังตรงตามมาตรฐานความปลอดภัยสูงสุด ซึ่งมีความสำคัญอย่างยิ่งต่อธนาคาร

ในการตั้งค่าการนำเข้าข้อมูลจากเว็บไซต์ไปยัง Google BigQuery Raiffeisen ใช้ OWOX BI Pipeline ด้วยวิธีนี้ ผู้เชี่ยวชาญของบริษัทจะได้ข้อมูลที่ไม่ได้สุ่มตัวอย่างในเวลาที่ใกล้เคียงเรียลไทม์และรวบรวมการประทับเวลาของทุก Hit โซลูชันดังกล่าวทำให้สามารถติดตามลำดับการกระทำของผู้ใช้ที่เป็นไปได้ทั้งหมดในเซสชันต่างๆ ภายในรายงานฉบับเดียว ตัวอย่างเช่น คุณต้องมีรายงานเกี่ยวกับผู้ใช้ที่เข้าชมหน้าเพจ/โปรโมชันของบริษัท กลับมาที่เว็บไซต์ผ่าน CPC และสุดท้ายได้ซื้อบางอย่าง อีกสิ่งหนึ่งที่จำเป็นคือการแสดงการเข้าชมเหล่านี้สำหรับวันที่ที่เลือกไว้ในรายงาน นี่คือแบบสอบถามเพื่อรับรายงานที่คุณต้องการ:

    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 ประมวลผลข้อมูล

รายการค่าที่จำเป็นถูกสร้างขึ้นเพื่อระบุค่าแหล่งที่มาของการเข้าชมที่เปลี่ยนแปลงไปพร้อมกับค่าของ Affiliate:

  • รหัสผู้ใช้
  • ที่มาและสื่อของช่วงแรกและช่วงต่อไป
  • เวลาระหว่างเซสชัน
  • 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 ชีต โดยใช้ข้อมูลที่นำเข้า ตารางจะถูกสร้างขึ้นด้วยรหัสของลูกค้าแต่ละรายที่เซสชันถูกปิดและเซสชันใหม่ถูกเปิดบนหน้าเดียวกัน ภายในระยะเวลาน้อยกว่าหนึ่งนาทีระหว่างสองเซสชัน

ต่อไป ข้อมูลถูกนำมารวมกันในตารางสาระสำคัญเพื่อแสดงให้เห็นว่านักการตลาดแบบ Affiliate กระทำการโดยไม่สุจริต ตัวเลขในภาพหน้าจอด้านล่างมีการเปลี่ยนแปลงและแสดงไว้เป็นตัวอย่าง:

ตัวอย่างเช่น รายงานแสดงจำนวนธุรกรรมที่มีการเขียนค่าแหล่งที่มาใหม่ รวมถึงบริษัทในเครือที่แทนที่แหล่งที่มาของการเข้าชมด้วยแหล่งที่มาของตนเอง รายงานยังแสดงให้เห็นว่าช่องทางใดถูกขโมยธุรกรรม: CPC และออร์แกนิก

ผลลัพธ์

ทีมงาน OWOX BI ช่วยระบุและขจัดจุดอ่อนในเครือข่าย CPA ของธนาคารได้อย่างรวดเร็ว ต้องขอบคุณโซลูชันที่มีให้นี้ ธนาคารสามารถตรวจสอบสถิติเกี่ยวกับบริษัทในเครือ (ระบุแหล่งที่มาของ Conversion และการขายให้กับช่องทางการรับส่งข้อมูลได้แม่นยำยิ่งขึ้น) และชี้ให้เห็นถึงกรณีของการฉ้อโกงในเครือข่าย CPA ทีมการตลาดพยายามปรับงบประมาณโฆษณาให้เหมาะสมโดยยุติความร่วมมือกับพันธมิตรที่ไม่ซื่อสัตย์สองคนที่เขียนแหล่งที่มาของการเข้าชมใหม่และธนาคาร Raiffeisen ที่เรียกเก็บเงินเกินสมควร