sylvia-yyl/BITS-AerialView

GitHub: sylvia-yyl/BITS-AerialView

一套针对加密货币市场的多阶段异常交易检测系统,结合特征工程、孤立森林算法和规则模式识别,在无标签数据下实现低误报率的违规交易「盲搜」。

Stars: 0 | Forks: 0

# 问题 3 — Crypto 盲搜异常狩猎 ## 方法概述 检测流水线按 8 个顺序步骤运行,每个步骤针对特定的交易对或违规类别。所有逻辑位于 `main.py` 中,并在仓库根目录生成 `submission.csv`。 ## 分步流水线 ### 步骤 1 — 加载所有数据 所有 8 个交易对均从 `data/crypto-market/` 和 `data/crypto-trades/` 加载。列名进行了标准化(去除 Volume USDT 的空白字符,为保持一致性将 trader_id 别名设为 wallet_id)。 ### 步骤 2 — 全局特征工程 在针对特定交易对检测之前,应用于每个交易数据框: - `notional` = price × quantity - `quantity_z` — 数量的滚动 20 笔交易 z-score(按 symbol) - `intraday_z` — 按一天中的小时分桶的数量 z-score(捕捉日内基准偏移) - `wallet_frequency` — 每个钱包的累计交易计数(衡量钱包活跃度的代理指标) - `price_dev_mid` — 交易价格相对 OHLCV 柱中点的偏差,由柱范围归一化 - `ts_minute` — 向下取整到分钟的时间戳,用于与市场数据连接 ### 步骤 3 — USDCUSDT:锚定破裂 + 锚定价位刷量 **锚定破裂 (Peg break)**:任何 `abs(price - 1.0) > 0.005` 的交易。通过 volume z-score > 1.5 或下一笔交易迅速回升至锚定价来确认。与 BTC 柱回报交叉比对,以标记那些与广泛市场波动重合的情况(较不可疑)与孤立偏差(更可疑)。 **锚定价位刷量 (Wash volume at peg)**:以精确 $1.00 价格交易且每日名义交易量异常高的钱包(> 所有钱包的中位数 + 2σ)。这些钱包在不移动价格的情况下制造人为交易量。 ### 步骤 4 — BATUSDT:AML 化整为零 BATUSDT 在大多数分钟内活动接近零,使得任何活动突发立即显现。检测逻辑: - 计算每日小时名义交易量;标记任何 > 该交易对小数小时交易量 5 倍的小时 - 在被标记的小时内,按 (wallet, date) 分组交易: - **aml_structuring**:≥5 笔交易且 max/min 名义金额比率 < 1.1 — 所有规模保持在紧密区间,典型的化整为零 (smurfing) - **threshold_testing**:首笔交易恰好落在整数阈值(1000, 2000, 5000, 10000 USDT),随后 ≥3 笔交易刚好低于该阈值 - **coordinated_structuring**:≥2 个钱包在同一小时和名义金额分桶中运行相同的规模区间交易 - **manager_consolidation**:一个 manager_id 账户在收到来自不同钱包的多笔小额结构化交易后,接收一笔大型整合交易(最大名义金额 > 平均名义金额的 5 倍,≥2 个不同钱包,≥5 笔交易) - **placement_smurfing**:≥3 个新钱包(有史以来首笔交易)出现在同一个 10 分钟窗口内 ### 步骤 5 — DOGE, LTC, SOL:Isolation Forest Isolation Forest(`n_estimators=200`,`contamination='auto'`)在每个 symbol 的三个特征上训练:`quantity_z`、`price_dev_mid`、`wallet_frequency`。只有最极端的 1% 异常分数才会进入第二阶段模式分类器: - **pump_and_dump**:10 分钟 OHLCV 窗口显示 ≥5 根上涨柱,交易量 > 5 倍 ADV,累计拉升回报 > 1%,砸盘集中在 ≤2 根柱内 - **ramping**:钱包在 30 分钟窗口内有 ≥5 笔交易,其中 > 70% 以单调上涨的价格成交 - **coordinated_pump**:交易来自异常钱包的 BUY,且同一 2 分钟窗口内有 ≥3 个其他不同钱包的 BUY - **wash_trading**(兜底):被 IF 分数判定为异常但未确认具体模式 — 保守标记,仅取异常分数前 20% ### 步骤 6 — BTC, ETH:深度分析 三次检测通过: - **wash_trading via session_id**:一天内在 BUY 和 SELL 两侧共享相同 session_id 的交易,并通过 buy_qty ≈ sell_qty 比率 > 0.85 确认 - **layering_echo**:钱包在同一天内以 5 分钟间隔出现 ≥3 次 BUY↔SELL 方向反转 - **spoofing**:OHLCV 柱出现 > 0.4% 的价格尖峰并在下一根柱完全反转(反转比率 > 0.7),volume z-score > 2.5,且前一根柱平静(< 0.3%)。仅包含满足个体交易 `quantity_z > 1.5` 且交易方向与尖峰方向一致的柱内交易。 ### 步骤 7 — XRPUSDT:拉抬和链式分层 - **ramping**:一天内有 ≥5 笔交易的钱包,其中 > 70% 的连续价格差为正 - **chain_layering**:真正的 3 跳链(钱包 A → B → C),其中 B 作为第 1 跳的 next_wallet 和第 2 跳的 wallet_id 出现,三个钱包各不相同,价格严格单调上涨,且整条链在 5 分钟内完成 - **manager_consolidation**:manager_id 账户在收到来自多个子钱包的结构化活动后,接收整合交易(> 5 倍平均名义金额) ### 步骤 8 — 去重并构建提交 当同一个 trade_id 被多个检测器标记时,保留置信度优先级最高的违规类型(peg_break > aml_structuring > chain_layering > pump_and_dump > ramping > spoofing > wash_trading)。 ## 提交摘要 | Symbol | Violation type | Count | |--------|---------------|-------| | BATUSDT | coordinated_structuring | 16 | | USDCUSDT | wash_volume_at_peg | 14 | | XRPUSDT | chain_layering | 8 | | XRPUSDT | ramping | 5 | | SOLUSDT | wash_trading | 5 | | DOGEUSDT | wash_trading | 4 | | LTCUSDT | wash_trading | 3 | | USDCUSDT | peg_break | 3 | | ETHUSDT | spoofing | 1 | | **Total** | | **59** | ## 设计决策 **两阶段过滤**:每个检测器首先使用宽松的第一阶段(小时交易量 > 中位数的 5 倍,IF contamination='auto')生成候选,然后通过严格的第二阶段(规模比率阈值、模式确认、分数百分位截断)后再添加到提交中。这以牺牲边缘情况为代价保持了较低的误报率。 **不搞“散弹枪”式标记**:SOL/DOGE/LTC 的 wash_trading 条目是最弱的信号 — 标记为 IF 兜底且无钱包对确认。之所以包含,是因为 IF 分数截断值(异常分数前 1%)足够严格,可以证明考虑到 -2 的惩罚风险是合理的。 **备注列**:每行包含一个 `remarks` 字段,包含具体的数值证据(比率、z-score、钱包 ID、名义金额值)以支持部分评分。 ## 运行时 在标准笔记本电脑上约为 3 秒。所有市场数据连接使用在 `ts_minute` 上的向量化 pandas merge。
标签:Apex, BATUSDT, Isolation Forest, Python, USDCUSDT, Z-Score, 云计算, 代码示例, 分层/结构性交易, 加密货币, 区块链安全, 反洗钱, 异常检测, 拉高出货, 数据分析, 无后门, 机器学习, 欺诈检测, 清洗交易, 特征工程, 稳定币脱锚, 网络安全, 虚假交易量, 规则引擎, 逆向工具, 金融风控, 隐私保护, 高频交易