Ad Fraud IVT Detection — 行为图 + GNN 无效流量实时检测
Skill-Ad-Fraud-IVT-Detection · 19-风控反欺诈
1. 解决的问题
母婴品牌 TikTok/Google 广告月均 30 万投放中 15-25% 为无效点击(Bot/竞品刷量),ROAS 被高估 30%——行为图 WTG + DGCNN 将 IVT 识别率提升至 95%+,年化节省无效广告支出 5-15 万元,并为平台申诉提供量化证据
2. 核心算法逻辑
核心思路:传统 IVT 检测依赖 IP 黑名单和 UserAgent 特征,Bot 可轻易伪造;BOTracle 转而对用户会话行为序列建图,捕捉"鼠标轨迹是否太规律、页面停留时间是否异常短、点击深度是否缺乏探索性"等难以伪造的行为模式。
3. 业务应用场景
场景A:TikTok Ads 竞品刷量识别 - 业务问题:母婴品牌(吸奶器/婴儿推车)TikTok 投流月均 30 万,点击后转化率异常低(< 0.3%),疑似竞品雇佣点击农场刷量消耗预算 - 数据要求:TikTok 广告点击日志(click_id, session_id, timestamp, page_sequence, dwell_time_ms, scroll_events) - 检测逻辑:会话中位停留 < 800ms、点击间隔 CV < 0.1、页面深度 ≤ 1 → 标记为 IVT - 预期产出:识别 IVT 率 15-25%,自动向平台提交无效点击申诉(部分平台支持退款) - 业务
**场景B:Google Ads 搜索欺诈保护** - 业务问题:婴儿湿巾/纸尿裤关键词竞价激烈(CPC $2-5),疑似竞品批量点击消耗日预算 - 数据要求:Google Ads 点击日志 + GA4 会话行为序列(page_path, session_duration, bounce, engagement_time) - 检测逻辑:构建用户访问图,计算图级聚类系数 + 度分布异常度,融合 Isolation Forest 打分 - 预期产出:每天屏蔽 200-500 个异常 IP 段,日均节省无效点击费 1,500-3,000 元 - 业务价值:年化节省 55-110 万元投放预算浪费,
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:月均 30 万广告预算中 15-25% 为 IVT(4.5-7.5 万元/月),年化节省 5-15 万元无效消耗;ROAS 真实值比平台报告值高 20-35%,指导预算重新分配
- 额外价值:为 TikTok/Google 提交无效点击申诉提供量化证据,历史申诉成功率 40-70%,可额外追回 1-3 万元/月
- 实施难度:⭐⭐⭐☆☆(需要广告点击日志访问权限,Bot 特征需周期性更新)
- 优先级:⭐⭐⭐⭐⭐(直接影响广告投放 ROI,止损效果立竿见影)
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
Ad Fraud IVT Detection — 行为图 + 统计异常检测
基于 BOTracle (arXiv:2412.02266) + GCD-GNN (arXiv:2407.17333) 核心思想
使用 numpy + collections,无需额外依赖
"""
import numpy as np
from collections import defaultdict
import random
random.seed(42)
np.random.seed(42)
# ─────────────────────────────────────────────
# 1. 数据生成:模拟广告点击会话(真实用户 vs Bot)
# ─────────────────────────────────────────────
def generate_session_data(n_sessions=100):
"""
生成模拟广告点击会话数据
返回:list of dict,每条为一个会话
"""
sessions = []
for i in range(n_sessions):
is_bot = i < 30 # 前30条为Bot(30% IVT率)
if is_bot:
# Bot特征:均匀间隔、极短停留、浅页面深度
n_clicks = random.randint(2, 4)
intervals_ms = [random.uniform(80, 120) for _ in range(n_clicks - 1)] # 过于规律
dwell_times_ms = [random.uniform(50, 300) for _ in range(n_clicks)] # 极短停留
page_depth = random.randint(1, 2)
scroll_events = random.randint(0, 2) # 几乎不滚动
engagement_score = random.uniform(0, 0.2)
else:
# 真实用户:随机间隔、正常停留、有探索行为
n_clicks = random.randint(3, 12)
intervals_ms = [random.uniform(500, 15000) for _ in range(n_clicks - 1)]
dwell_times_ms = [random.uniform(800, 60000) for _ in range(n_clicks)]
page_depth = random.randint(2, 8)
scroll_events = random.randint(3, 30)
engagement_score = random.uniform(0.3, 1.0)
sessions.append({
'session_id': f'sess_{i:04d}',
'is_bot_truth': is_bot,
'n_clicks': n_clicks,
'intervals_ms': intervals_ms,
'dwell_times_ms': dwell_times_ms,
'page_depth': page_depth,
'scroll_events': scroll_events,
'engagement_score': engagement_score,
})
return sessions
# ─────────────────────────────────────────────
# 2. 行为特征提取(BOTracle 核心特征)
# ─────────────────────────────────────────────
8. 论文来源
- 2407.17333
- 2412.02266