反作弊:识别假量,保护预算
这是"广告归因"系列的第七篇,也是最后一篇。在这个系列的压轴篇里,我们来聊聊一个"猫鼠游戏"——反作弊。广告投放的钱花出去了,但来的到底是真实用户还是"假量"?
一、广告作弊的常见手段
在谈反作弊之前,先要了解"敌人"是谁。广告作弊的核心目的只有一个:制造虚假的转化数据,骗取广告费用。
1.1 机器刷量
最常见也最"原始"的作弊方式。作弊者使用脚本或程序模拟用户行为:批量点击广告、使用虚拟机或云手机安装App、自动完成注册登录。
机器刷量的特点是"量大、成本低",但技术含量相对较低,特征明显,是相对容易识别的作弊类型。
- 大量请求来自同一IP段或机房
- 设备参数高度一致(机型、系统版本、分辨率)
- 行为时间戳呈现机器级的规律性
- User-Agent 字符串存在明显异常
1.2 真机假量
比机器刷量更难识别——使用真实设备,但用户行为是虚假的。
常见形式包括:
- 刷量工作室:雇佣大量人员,每人操作多台手机完成指定任务
- 激励流量:通过现金奖励或虚拟物品诱导用户下载并完成特定行为
- 羊毛党:利用规则漏洞批量注册、刷单,套取补贴或奖励
真机假量的难点在于:设备是真的,IP可能是真的,甚至部分行为也是真人完成的。但用户的"真实意图"是虚假的。
- 设备指纹真实有效
- IP地址分散,难以通过IP聚集识别
- 行为模式接近真实用户
- 需要从"意图"层面进行判断
1.3 点击劫持
一种"偷功劳"的作弊方式:用户在A渠道看到广告产生兴趣后,作弊者在用户安装前静默触发一个B渠道的"点击",归因系统就把功劳判给了B渠道。
作弊者通过这种方式,把自然量或优质渠道的转化算到自己头上。
- 利用系统漏洞静默触发点击
- 通过恶意SDK监听安装事件
- 使用包名匹配进行"抢归因"
1.4 点击洪泛(Click Flooding)
"广撒网"策略:作弊者提前向大量设备发送虚假点击,但不立即触发安装。当这些设备的用户自然安装App时,作弊者就能"碰巧"匹配到之前的点击,获得归因。
本质上,这是在赌概率——只要点击量足够大,总能"蒙中"一些自然转化。
1.5 归因篡改
更隐蔽的作弊方式:修改设备ID、注入虚假参数、劫持SDK。这类作弊需要技术能力,但一旦成功,往往能绕过常规检测。
- Hook系统API修改设备标识
- 中间人攻击篡改通信数据
- 逆向SDK修改上报逻辑
- 利用模拟器的设备伪造能力
二、反作弊的技术原理
反作弊的核心逻辑是区分"真实用户行为"和"模拟/伪造行为"。基本假设是:真实用户的行为有规律,作弊行为一定有"不自然"的痕迹。
2.1 设备指纹技术详解
设备指纹是反作弊的第一道防线。收集设备的各种特征(硬件、软件、网络、行为),生成唯一的"指纹"用于识别和追踪设备。
2.1.1 指纹采集维度
- CPU架构、核心数、频率
- GPU型号、渲染能力
- 内存大小、存储空间
- 传感器列表(陀螺仪、加速度计等)
- 电池信息、温度传感器
- 操作系统版本、内核版本
- 安装的应用列表
- 系统语言、时区设置
- 字体列表、输入法
- 浏览器版本、插件列表
- IP地址、地理位置
- 网络类型(WiFi/4G/5G)
- 运营商信息
- DNS解析特征
- 触摸屏操作模式
- 设备倾斜角度
- 应用使用习惯
- 活跃时间段
2.1.2 指纹生成算法
指纹生成的核心挑战是稳定性与唯一性的平衡:
指纹 = Hash(硬件特征 + 软件特征 + 行为特征 + 随机盐值)
- 特征权重设计:不常变化的特征(如CPU型号)权重高,常变化的特征(如IP地址)权重低
- 模糊匹配:允许一定程度的特征变化,使用相似度计算而非精确匹配
- 防伪造检测:检测特征之间的逻辑一致性(如声称是iPhone但运行Android系统)
2.1.3 指纹伪造检测
作弊者会使用工具修改设备指纹,实现"换皮"。反制手段包括:
- 特征一致性校验:检测硬件参数与系统声明是否匹配
- 行为模式分析:真实设备的触摸轨迹、传感器数据有自然噪声
- 环境检测:检测模拟器、Root、Hook框架等作弊环境
- 时间序列分析:同一物理设备的指纹变化模式
2.2 行为模式分析
真实用户和作弊者的行为模式是不同的:
- 从点击到安装有时间间隔(思考、下载、安装)
- 安装后的行为有"探索性"(浏览各个页面、尝试不同功能)
- 活跃时间符合作息规律(晚上活跃度高)
- 操作行为有"随意性"(触摸点不精准、有误操作)
- 点击后立即安装(没有"思考"时间)
- 行为高度"程式化"(按固定顺序执行操作)
- 操作过于"精准"和"规律"(触摸点坐标高度一致)
- 完成"任务"后立即停止使用
2.2.1 行为特征提取
- 点击到安装的时间间隔
- 安装到首次启动的时间
- 会话时长分布
- 操作间隔时间
- 触摸点坐标分布
- 滑动轨迹特征
- 点击热力图
- 页面访问顺序
- 功能使用路径
- 操作行为链
- 每分钟操作次数
- 页面停留时间
- 功能使用频率
2.2.2 行为建模方法
- 建立正常用户行为的统计分布
- 计算偏离程度(如Z-Score)
- 设定动态阈值
- 使用马尔可夫链建模行为序列
- 计算行为路径的概率
- 识别低概率的"异常路径"
- 使用LSTM/Transformer建模行为序列
- 学习正常用户的隐式行为模式
- 对异常行为进行预测
2.3 归因链路验证
验证归因链路的"合理性":
- 时间合理性:点击后1秒就安装?可疑
- 空间合理性:点击在北京,安装在广州?可疑
- 频次合理性:一天点击100次?可疑
- 来源合理性:从未听说的小渠道突然带来大量转化?可疑
2.3.1 时间窗口验证
正常时间窗口示例:
- 点击到安装:30秒 ~ 7天
- 安装到首次启动:0 ~ 10分钟
- 首次启动到注册:0 ~ 24小时
- 点击到安装 < 5秒:高可疑
- 点击到安装 > 7天:可能过期
- 同一设备多次点击后安装:点击劫持嫌疑
2.3.2 地理位置验证
- 点击IP与安装IP的地理距离
- 地理位置变化的时间合理性
- IP地址类型(机房/住宅/代理)
- IP地理位置库查询
- GPS定位交叉验证
- 时区设置与IP地理位置对比
2.4 交叉验证
多维度交叉验证:
- 同一IP下设备数量是否异常?
- 同一IP的归因时间分布是否合理?
- IP是否属于已知机房或代理?
- 同一设备的历史归因记录是否矛盾?
- 设备指纹是否频繁变化?
- 设备是否关联多个账号?
- 同批次用户的后续留存是否一致?
- 渠道流量是否符合历史规律?
- 渠道用户的地域分布是否合理?
三、异常检测算法详解
反作弊的"技术含量"主要体现在异常检测算法上。下面深入介绍几种常见的算法及其实现思路。
3.1 规则引擎
设定规则标记异常,是最基础但最实用的检测方式。
3.1.1 规则设计原则
- 可解释性强:业务人员能理解为什么这条规则有效
- 覆盖面广:能拦截大量明显作弊
- 误伤率低:尽量不影响真实用户
- 可绕过难度高:作弊者难以快速适配
3.1.2 典型规则示例
# 点击频次规则
- 规则ID: click_frequency_1
条件: 同一IP 1小时内点击 > 50次
动作: 标记可疑,权重 +30
- 规则ID: click_frequency_2
条件: 同一设备 24小时内归因 > 3次
动作: 标记可疑,权重 +50
# 时间规则
- 规则ID: time_interval_1
条件: 点击到安装间隔 < 5秒
动作: 标记可疑,权重 +40
# 设备规则
- 规则ID: device_1
条件: 设备指纹在黑名单中
动作: 直接拒绝
# 渠道规则
- 规则ID: channel_1
条件: 渠道转化率 > 历史均值 3倍标准差
动作: 触发人工审核
# 多条件组合
- 规则ID: combined_1
条件:
- 同一IP点击 > 20次
- 且 点击到安装间隔 < 10秒
- 且 设备Root/越狱
动作: 直接拒绝
3.1.3 规则引擎架构
┌─────────────┐
│ 事件输入 │ (点击/安装/注册)
└──────┬──────┘
│
▼
┌─────────────┐
│ 特征提取 │ (提取IP、设备、时间等特征)
└──────┬──────┘
│
▼
┌─────────────┐
│ 规则匹配 │ (并行匹配所有规则)
└──────┬──────┘
│
▼
┌─────────────┐
│ 权重计算 │ (汇总各规则得分)
└──────┬──────┘
│
▼
┌─────────────┐
│ 决策输出 │ (通过/拒绝/观察)
└─────────────┘
- 规则是死的,作弊者是活的
- 一旦被摸清就能绕过
- 规则过多导致维护困难
- 容易产生规则冲突
3.2 统计异常检测
分析数据分布特征识别"离群点"。
3.2.1 Z-Score 方法
计算数据点偏离均值的程度:
Z = (X - μ) / σ
其中:
X = 观测值
μ = 均值
σ = 标准差
- |Z| > 2:约95%置信度异常
- |Z| > 3:约99.7%置信度异常
- 渠道转化率异常检测
- 设备归因频次异常
- IP点击密度异常
3.2.2 四分位距法(IQR)
对非正态分布数据更鲁棒:
IQR = Q3 - Q1
异常下界 = Q1 - 1.5 * IQR
异常上界 = Q3 + 1.5 * IQR
3.2.3 时间序列分析
检测流量的周期性和突变:
- 移动平均:平滑短期波动,识别趋势
- 同比环比:与历史同期对比
- 突变检测:识别流量的突然变化
异常判定示例:
今日转化量 = 10000
7日移动平均 = 5000
标准差 = 1000
Z-Score = (10000 - 5000) / 1000 = 5
结论:高度异常,需要人工介入
3.3 机器学习方法
将反作弊转化为"分类问题":给定用户行为序列,判断是"真实"还是"作弊"。
3.3.1 特征工程
- 设备类型、品牌、型号
- 操作系统版本
- 是否Root/越狱
- 设备年龄(首次出现时间)
- 历史归因次数
- 关联账号数量
- 点击到安装时间
- 安装到启动时间
- 会话时长统计
- 操作频率统计
- 页面访问序列
- 功能使用分布
- 同IP设备数量
- 同设备历史记录
- 渠道历史表现
- 地理位置聚集度
3.3.2 算法选择
- XGBoost/LightGBM:结构化数据效果最好,可解释性较强
- 深度神经网络:自动特征组合,但需要大量数据
- 逻辑回归:简单高效,作为基线模型
- Isolation Forest:异常检测专用,适合发现新模式
- DBSCAN:聚类发现异常簇
- One-Class SVM:学习正常样本的边界
- 使用无监督方法发现可疑样本
- 人工标注少量样本
- 用标注数据训练监督模型
3.3.3 模型训练流程
1. 数据收集
└─ 收集历史归因数据和标注
2. 特征工程
└─ 提取设备、行为、关联特征
3. 数据清洗
└─ 处理缺失值、异常值、样本不平衡
4. 模型训练
└─ 交叉验证选择最优参数
5. 模型评估
└─ 准确率、召回率、AUC、F1-Score
6. 线上部署
└─ A/B测试验证效果
7. 持续迭代
└─ 定期用新数据重训练
- 作弊样本通常远少于正常样本
- 使用SMOTE过采样或欠采样
- 调整损失函数权重
- 使用异常检测思路而非分类
3.3.4 实际案例
某游戏平台的机器学习模型特征重要性:
| 特征 | 重要性 | 说明 |
|---|---|---|
| 点击到安装时间 | 0.18 | 作弊者往往秒级安装 |
| 同IP设备数 | 0.15 | 机房IP设备聚集 |
| 设备历史归因次数 | 0.12 | 刷量设备频繁归因 |
| 会话时长标准差 | 0.10 | 作弊者时长高度一致 |
| 触摸点坐标熵 | 0.09 | 真人操作有随机性 |
| Root/越狱标志 | 0.08 | 作弊工具需要权限 |
| ... | ... | ... |
3.4 图算法
作弊往往有"团伙"特征。将用户、设备、IP、渠道建模为图,通过图算法识别作弊网络。
3.4.1 图构建
节点类型:
- 用户(User)
- 设备(Device)
- IP地址(IP)
- 渠道(Channel)
边类型:
- 用户-设备:使用关系
- 设备-IP:网络连接
- 用户-渠道:归因关系
- 设备-设备:指纹相似
3.4.2 图算法应用
- 找出强关联的设备/用户群体
- 群体过大可能是有组织作弊
- 群体内作弊密度通常较高
- 自动划分作弊团伙
- 识别作弊网络的层级结构
- 发现核心节点和边缘节点
- 识别作弊网络的核心节点
- 高度中心性节点可能是作弊源头
- 移除核心节点可瓦解作弊网络
- 学习节点的嵌入表示
- 利用图结构进行分类
- 发现隐式的作弊关联
3.4.3 图算法案例
场景:发现一个刷量工作室
图分析过程:
1. 发现某渠道的转化率异常偏高
2. 构建该渠道的设备关联图
3. 识别出一个50台设备的强连通分量
4. 分析发现这些设备共享同一IP段
5. 进一步发现设备指纹高度相似
6. 确认为有组织刷量,整批剔除
3.5 实时与离线结合
- 实时检测:毫秒级延迟,轻量级规则快速拦截明显作弊
- 离线检测:小时或天级延迟,复杂模型深度分析发现隐蔽模式
好的系统是实时+离线组合:实时拦截大头,离线清理残余。
3.5.1 实时检测架构
┌─────────────┐
│ 事件流 │
└──────┬──────┘
│
▼
┌─────────────┐
│ 消息队列 │ (Kafka)
└──────┬──────┘
│
▼
┌─────────────┐
│ 流处理引擎 │ (Flink/Spark Streaming)
└──────┬──────┘
│
┌──────┴──────┐
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ 规则引擎 │ │ 轻量ML │
└────┬────┘ └────┬────┘
│ │
└──────┬──────┘
│
▼
┌─────────────┐
│ 实时决策 │
└─────────────┘
- 延迟 < 100ms
- 只使用当前事件和短期历史
- 规则简单但高效
- 适合拦截明显作弊
3.5.2 离线检测架构
┌─────────────┐
│ 数据仓库 │ (Hive/BigQuery)
└──────┬──────┘
│
▼
┌─────────────┐
│ 特征计算 │ (Spark)
└──────┬──────┘
│
▼
┌─────────────┐
│ 复杂模型 │ (ML模型/图算法)
└──────┬──────┘
│
▼
┌─────────────┐
│ 离线决策 │
└──────┬──────┘
│
▼
┌─────────────┐
│ 回溯剔除 │
└─────────────┘
- 延迟:小时级或天级
- 可使用完整历史数据
- 模型复杂度高
- 适合发现隐蔽作弊
四、实时风控系统设计
4.1 系统架构
一个完整的实时风控系统架构:
┌────────────────────────────────────────────────────────────┐
│ 数据接入层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SDK上报 │ │ 服务端 │ │ 渠道回传 │ │ 第三方 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼─────────────┘
│ │ │ │
└────────────┼────────────┼────────────┘
│ │
▼ ▼
┌─────────────────────┐
│ 消息队列层 │
│ (Kafka) │
└──────────┬──────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 实时处理 │ │ 准实时处理 │ │ 离线处理 │
│ (Flink) │ │ (Spark) │ │ (Hive) │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 规则引擎 │ │ ML模型 │ │ 图分析 │
└───────┬───────┘ └───────┬───────┘ └───────┬───────┘
│ │ │
└────────────────┬┴─────────────────┘
│
▼
┌─────────────────────┐
│ 决策中心 │
│ (风险评分+处置) │
└──────────┬──────────┘
│
┌────────────────┼────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 实时拦截 │ │ 延迟结算 │ │ 数据标记 │
└───────────────┘ └───────────────┘ └───────────────┘
4.2 决策流程
事件进入系统
│
▼
特征提取(10ms)
│
▼
规则引擎判断(20ms)
│
├─── 高置信度作弊 ──→ 直接拒绝
│
├─── 明确正常 ──────→ 正常处理
│
└─── 灰色地带 ──────→ ML模型判断(50ms)
│
├─── 作弊概率 > 90% ──→ 拒绝
│
├─── 作弊概率 < 10% ──→ 通过
│
└─── 中间地带 ──────→ 标记观察
│
▼
离线深度分析
4.3 性能优化
- 内存计算,避免磁盘IO
- 特征预加载,减少数据库查询
- 规则并行执行
- 模型简化,牺牲精度换速度
- 水平扩展处理节点
- 异步化非关键路径
- 批处理合并请求
- 多机房部署
- 降级策略(规则引擎优先)——我们暂未实现分层降级,当前为单层规则检测
- 熔断机制(异常流量触发保护)——我们暂未实现自动熔断,当前依赖人工监控告警
五、攻防对抗案例分析
5.1 案例一:机房IP刷量
- 作弊者租用云服务器机房
- 使用代理池模拟不同地区IP
- 批量点击和安装
- IP归属分析:机房IP特征识别
- IP聚集度分析:同IP设备数量异常
- 行为同步性:大量设备行为高度一致
- 作弊者开始使用住宅代理
- 反制:增加行为模式分析,检测"非真人"操作特征
5.2 案例二:设备农场
- 使用真实手机设备
- 每台设备频繁更换账号
- 雇佣真人操作
- 设备指纹聚类:发现设备参数高度相似
- 行为序列分析:操作模式高度程式化
- 时间聚集:大量设备同时活跃
- 作弊者增加行为随机性
- 反制:增加图分析,识别设备关联网络
5.3 案例三:点击劫持
- 监听用户安装行为
- 在安装前触发虚假点击
- 抢夺归因功劳
- 点击时间分布:大量点击集中在安装前
- 点击来源分析:点击与用户行为不匹配
- 转化链路分析:点击到转化无逻辑关联
- 作弊者分散点击时间
- 反制:增加用户行为追踪,验证点击真实性
5.4 案例四:激励流量
- 通过现金奖励诱导用户下载
- 用户完成指定行为后获得奖励
- 用户无真实使用意图
- 留存分析:激励用户留存率极低
- 行为深度:完成奖励任务后立即停止
- 转化质量:付费率、LTV显著偏低
- 作弊者要求用户保持活跃
- 反制:分析行为模式,识别"任务驱动"特征
六、效果评估与迭代
6.1 评估指标
- 召回率(Recall):识别出的作弊量 / 实际作弊量
- 精确率(Precision):正确识别的作弊量 / 识别出的作弊量
- 误伤率:被错误标记为作弊的正常量 / 总正常量
- 作弊拦截率:被拦截的作弊占比
- 预算节省:因反作弊节省的广告费用
- 渠道质量提升:反作弊后渠道指标的变化
6.2 评估方法
- 使用历史标注数据
- 计算模型在测试集上的指标
- A/B对比不同算法效果
- 灰度发布新模型
- 对比新旧模型的核心指标
- 监控误伤投诉
- 追踪被拦截用户的后续行为
- 分析漏网之鱼的特征
- 持续优化模型
6.3 迭代流程
1. 问题发现
└─ 监控指标异常 / 用户投诉 / 渠道反馈
2. 数据分析
└─ 分析作弊手法 / 提取特征 / 标注样本
3. 策略设计
└─ 设计新规则 / 训练新模型 / 调整阈值
4. 离线验证
└─ 在历史数据上验证效果 / 评估误伤率
5. 灰度上线
└─ 小流量测试 / 监控指标 / 收集反馈
6. 全量发布
└─ 逐步放量 / 持续监控 / 准备回滚(我们暂未实现自动化回滚,当前需要手动操作)
7. 效果追踪
└─ 长期指标监控 / 发现新问题 / 进入下一轮
6.4 持续优化
- 定期审查规则有效性
- 移除过时规则
- 根据新手法添加规则
- 定期重训练模型
- 使用新数据更新特征
- 尝试新算法
- 提升实时处理能力
- 优化特征计算效率
- 增强系统稳定性
七、反作弊策略设计
技术是手段,策略是核心。
7.1 分级处理
根据作弊可信度和严重程度分级:
- 高置信度:直接剔除,不计入归因
- 中置信度:标记观察,延迟结算
- 低置信度:记录日志,作为训练数据
7.2 动态阈值
固定阈值容易被绕过。动态阈值根据渠道、时段、地区调整判定标准,增加作弊者的"不确定性"。
- 渠道历史表现
- 时段流量特征
- 地区差异
- 节假日因素
7.3 蜜罐与诱捕
主动出击:发布虚假广告位标记作弊者、注入"陷阱参数"检测篡改、先让可疑流量通过再追溯剔除。
核心是让作弊者暴露自己。
7.4 黑白名单
黑名单:已确认的作弊IP、设备、渠道,直接拒绝。 白名单:可信渠道和流量源,减少检测强度。
7.5 人机结合
机器标记可疑流量,人工复核确认;定期审查渠道数据;新模式先人工分析再转化为规则。
让机器处理"量",让人处理"质"。
八、与渠道的博弈
反作弊不仅是技术问题,更是商业博弈。
8.1 渠道的"动机"
- 正当渠道:希望获得准确归因,优化投放
- 灰色渠道:对作弊睁一只眼闭一只眼,追求短期收益
- 恶意渠道:主动参与作弊,纯粹的"流量贩子"
大多数渠道属于"正当"或"灰色"。即使正当渠道,也可能因技术能力不足成为作弊的"帮凶"。
8.2 数据透明度
博弈的关键:要求渠道提供原始点击数据、对比上报数据与归因数据、开放API支持交叉验证。数据越透明,作弊空间越小。
8.3 结算机制
CPC结算有动力刷点击,CPA结算有动力刷安装,CPS结算有动力刷付费。越"后置"的结算方式作弊难度越高,但也增加渠道风险。
8.4 惩罚与淘汰
明确惩罚机制:首次发现警告扣费、多次发现降低比例限制预算、严重作弊终止合作。
惩罚要"有牙齿"才能产生威慑力。
8.5 合作共赢
最终目标是建立健康生态:与优质渠道共享反作弊数据、帮助灰色渠道提升能力、推动行业标准建立。
九、总结
反作弊是一场没有终点的"猫鼠游戏"。回顾核心要点:
- 作弊手段多样:从机器刷量到真机假量,从点击劫持到归因篡改
- 反作弊原理:通过设备指纹、行为分析、归因验证区分真实和模拟
- 检测算法:规则引擎、统计方法、机器学习、图算法,需实时离线结合
- 系统设计:实时风控架构、分级处理、动态阈值、人机结合
- 效果评估:召回率、精确率、误伤率,持续迭代优化
- 渠道博弈:数据透明、合理结算、惩罚机制、合作共赢
反作弊的本质是什么?
当作弊成本高于真实获客成本时,作弊就失去了意义。反作弊系统的目标,就是不断推高这个"成本门槛",让作弊者无利可图。
广告归因系列七篇文章到此完结。从归因原理、点击追踪、激活归因、多渠道管理、深度链接、ROI计算,到反作弊,我们完整走了一遍广告归因的技术体系。
归因系统是游戏买量的"基础设施",它不直接创造收入,但决定了广告预算的使用效率。理解归因,才能从"盲投"走向"精准打击",从"被作弊"走向"主动防御"。
- 系列一:架构篇(8篇)✅
- 系列二:用户体系篇(7篇)⚠️
- 系列三:支付篇(8篇)⏳
- 系列四:礼包码篇(6篇)⏳
- 系列五:广告归因篇(7篇)✅← 系列完结
- 系列六:运营工具篇(7篇)⏳
- 系列七:基础设施篇(9篇)⏳
💬 评论 (0)