Raiffeisen 銀行案例:如何應對 CPA 網絡中的欺詐行為
已發表: 2022-05-25隨著數字營銷的發展,數字聯盟廣告欺詐也在不斷發展,這正成為在線營銷人員面臨的嚴峻挑戰。 它是通過向網站發送垃圾流量或使用機器人來觸發會員獎勵來執行的。 無論採用哪種確切方法,通過在線廣告賺取的每 3 美元仍然需要 1 美元。 換句話說,每天都有大量被盜收入。
在這種情況下,我們描述了 OWOX BI 團隊為 Raiffeisen 銀行提供的解決方案,該解決方案將對銀行和任何其他 CPA 網絡用戶都派上用場。
目錄
- 挑戰
- 解決方案
- 步驟 1. 收集原始數據
- 步驟 2. 處理數據
- 步驟 3. 構建報告
- 結果
挑戰
Raiffeisen 的營銷專家發現聯屬網絡營銷成本顯著增加,而收入保持不變。 另一個問題是銀行的客戶在網站上輸入申請表數據時會出現短暫的會話中斷。
這就是為什麼 Raiffeisen 假設他們的一些 CPA 附屬機構可以替換銀行結帳頁面上的流量來源值。 它的工作原理是這樣的:例如,用戶安裝瀏覽器擴展程序以獲得折扣。 當用戶訪問您的網站並打開結帳時,擴展程序會顯示一個帶有折扣優惠的彈出窗口。 如果在彈出窗口中點擊鏈接,擴展程序會自動將 cookie 中的流量源數據重寫為關聯公司的流量源數據。
解決方案
營銷團隊決定從收集原始用戶行為數據開始,以證明關聯公司重寫流量源數據以使其受益的假設。 接下來,收集有關特定客戶的數據。 這些客戶在不到 60 秒的時間內在同一頁面上進行了兩次會話,並且第二次會話的流量來源切換到了聯屬網絡。 有關這些客戶的此類數據將有助於識別將來自其他渠道的流量歸因於自己的聯盟合作夥伴。 有了這些數據,就有可能停止與惡意網站管理員的合作,並優化營銷預算。
OWOX BI 團隊幫助收集和處理了必要的數據。 這是一個演示數據流的模式:

步驟 1. 收集原始數據
當會話數超過採樣閾值時,Google Analytics 會採樣數據。 這就是為什麼 OWOX BI 分析師建議在 Google BigQuery 中收集數據的原因。 而且,這個雲數據倉庫符合最高的安全標準,這對銀行來說非常重要。
為了設置從網站到 Google BigQuery 的數據導入,Raiffeisen 使用了 OWOX BI Pipeline。 通過這種方式,公司的專家近乎實時地獲得了非抽樣數據,並收集了每次點擊的時間戳。 這樣的解決方案允許在單個報告中跟踪跨會話的所有可能的用戶操作序列。 例如,您需要一份關於訪問您公司/促銷頁面、通過 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. 處理數據
創建了必要值的列表以識別與附屬公司一起更改的流量源值:
- 用戶身份。
- 第一屆和下屆會議的來源和媒介。
- 會話之間的時間。
- 每個會話的第一個和最終 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 表格的插件。 通過使用導入的數據,創建了表格,其中包含每個客戶的 ID,這些客戶的會話已關閉,新會話在同一頁面上打開,兩個會話之間的時間不到一分鐘。

接下來,將數據匯總在一個數據透視表中,以證明聯盟營銷人員的行為是惡意的。 以下屏幕截圖中的數字已更改,並作為示例給出:

例如,該報告展示了具有重寫源值的交易數量,以及哪些關聯公司已將流量源替換為自己的流量源。 該報告還顯示了哪些渠道被剝奪了交易:CPC 和有機。
結果
OWOX BI 團隊幫助快速識別並消除了銀行 CPA 網絡中的弱點。 借助所提供的解決方案,銀行可以監控關聯公司的統計數據(更準確地將轉化和銷售歸因於流量渠道)並揭露 CPA 網絡中的欺詐案例。 營銷團隊通過停止與重寫流量來源和無理多收 Raiffeisen 銀行的兩個不誠實合作夥伴的合作,設法優化廣告預算。