Mecapixel/recidivism-analytics
GitHub: Mecapixel/recidivism-analytics
基于 DuckDB 的大规模合成数据封禁规避与累犯度量 SQL 框架,对身份关联信号和控制措施进行精确率与召回率审计。
Stars: 0 | Forks: 0
# 累犯分析:大规模封禁规避度量
这是一个用于解决封禁规避执行核心问题的 SQL 分析实验室:被封禁的行为者多久会回来、他们返回的速度有多快、哪些身份关联信号能抓住他们,以及已部署的控制措施是否真正降低了返回率。它运行在一个合成账户和事件数据集上(数百万到数千万行,DuckDB),该数据集保留了真实的参与者身份,因此每一个检测声明都可以准确地审计其精确率和召回率。生产环境中的执行团队很少能做到这一点,因为在生产环境中,没有人会给你提供标准答案。
这个实验室认真对待两个前提。首先,**如果行为者能在五分钟内规避封禁,这就不是执行,而是摩擦。** 其次,**在严重危害的执行中,假阳性的代价是不对称的。** 漏掉一个返回者是不可接受的,因为嘈杂的信号而封禁一个无辜用户同样也是不可接受的。这里的每一项分析都是由这种张力所塑造的。
## 数据集
`scripts/generate_data.py` 模拟了一个包含对抗性用户的 18 个月平台窗口期(2025 年 1 月至 2026 年 6 月)。行为者带有一个复杂度级别,该级别决定了他们在被封禁后返回时,多积极地轮换身份信号(设备指纹、支付工具、IP 子网、电子邮件命名模式)。封禁原因带有严重性层级,其中儿童安全执行是最高严重性的群体。在 2026 年 1 月 1 日,部署了一项注册时控制措施:严重封禁群体重用设备指纹将阻止其重新注册,从而迫使设备轮换。因为轮换需要付出努力,一些行为者停止了返回,这创造了一个可衡量的自然实验。
提供三种规模:`small`(约 7 万账户和 83 万事件,生成需数秒)、`medium`(约 29 万账户和 460 万事件)和 `full`(104 万账户和 4980 万事件,专为 64GB 工作站设计)。真实标签(`actor_id`)被写入数据集中,但**决不会被任何可部署的检测规则使用。** 只有对这些规则进行评分的审计查询才允许参考它。
## 分析
**01. 信号精确率和召回率。** 对于每个关联信号,它所关联的账户对都会与真实标签进行对比评分。全规模(1,043,028 个账户和 49,794,842 个事件)下的结果:
| signal | precision | recall |
|---|---|---|
| device_fp + payment_fp (compound) | 1.000 | 0.124 |
| device_fp | 0.849 | 0.204 |
| payment_fp | 0.809 | 0.252 |
| email_pattern | 0.062 | 0.391 |
| ip_subnet | 0.007 | 0.445 |
没有哪个单一信号能同时做到精确又完整。仅基于子网构建的规则将以 0.7% 的精确率关联超过 2000 万个账户对,这是一场执行的灾难。要求设备和支付复合匹配的规则永远不会错误地关联任何人,但会漏掉 88% 的真实多账户行为。这就是必须明确推理而非想当然地忽略的精确率与召回率的权衡。
**02. 规避集群关联。** 基于高精度边缘(设备或支付重用)的连通分量,通过纯 SQL 中的迭代标签传播构建。在全规模下:77,324 个多账户集群,平均纯度 0.83,65% 完全纯净,最大集群 14 个账户,每个真实行为者的碎片化成本为 1.93 个集群,这是拒绝低精度边缘的代价。纯度和碎片化是任何关联系统的两个失败方向。聚合得太激进会让无辜账户被卷入。聚合得太保守则会让一个行为者看起来像好几个。
**03. 累犯度量框架。** 针对每个封禁群体:返回率(真实标签)、返回时间,以及在*可部署*规则下的检测率,这意味着继任者与任何先前被封禁的账户共享设备或支付指纹,并且未参考任何真实标签。在全规模下,各群体的返回率在 51% 到 56% 之间,返回时间中位数为 67 到 70 小时,而最快的十分之一规避者在封禁后 **10 到 11 小时** 内返回。指纹重用规则抓住了 54% 到 61% 的返回者,这意味着大约十分之四的返回行为者(其中大部分是高复杂度用户)在仅靠指纹的情况下神不知鬼不觉地回来了。
**04. 控制有效性。** 注册时控制措施将严重群体的 30 天成功返回率从 0.551 降低到 0.461,相对降低了 16%,同时在关卡处阻止了 22.4% 的返回尝试。按复杂度细分是真正的发现:低复杂度行为者的返回率从 0.344 骤降至 0.122(下降 64%),中等复杂度从 0.595 降至 0.465,而高复杂度行为者几乎没有变化(从 0.853 降至 0.837),因为他们会轮换设备并吸收成本。该控制措施恰好在低成本规避存在的地方发挥作用,而残余风险则集中在最有可能造成危害的行为者身上。这正是政策团队需要的摘要:这项控制措施值得保留,但还不够充分。
## 运行
```
pip install -r requirements.txt
python scripts/generate_data.py --scale medium
python scripts/run_analysis.py
```
结果将打印到 stdout 并以 markdown 格式写入 `results/` 目录。所有查询都是位于 `sql/` 目录下的普通 DuckDB SQL,且可在任何规模下不加修改地运行。
## 诚实的局限性
合成数据编码了建模者的假设。真实的规避行为更加混乱,且真实的信号会发生漂移。合成方法的价值在于审计:因为存在真实标签,这里的每一个精确率和召回率数值都是精确的而不是估算的,并且计算它们的查询可以直接转移到生产数据集中,在生产数据集中,真实标签会较晚且仅部分地通过申诉、拒付和确认的重新识别到达。这里的可部署规则检测率应被视为机制演示,而非基准测试。
由 Meca Dismukes ([github.com/Mecapixel](https://github.com/Mecapixel)) 构建,作为 Trust & Safety 和滥用调查作品集的一部分,同期作品还包括 [WhisperWard](https://github.com/Mecapixel/whisperward-osint)(一个儿童安全 OSINT 调查平台)和 [Warden](https://github.com/Mecapixel/Warden)(一个面向 AI 智能体的零信任安全运行时,已作为 `warden-security` 发布到 PyPI)。
标签:DuckDB, SQL, 代码示例, 信任与安全, 多线程, 数据分析, 数据生成, 欺诈检测, 系统审计, 逆向工具, 风控策略