venkat15vk/ato-nlp-features
GitHub: venkat15vk/ato-nlp-features
基于AWS公开登录数据集,研究并复现按账号TF-IDF特征工程在账号盗用检测任务中的效果,证明其在历史数据充足的账号上显著优于传统计数特征基线。
Stars: 0 | Forks: 0
# 用于账号盗用检测的按账号 NLP 特征
本仓库包含了针对公共 AWS Fraud Detector 示例数据集进行账号盗用 (ATO) 检测时,关于按账号 TF-IDF 特征工程研究的可复现代码。
**论文:** [arXiv 预印本 — 提交后添加链接]
## 主要结果
基于 529 个专家标注的登录事件(在 10 万名用户的 73.5 万个总事件语料库中,包含 161 个已确认的账号盗用事件)进行的五次按时间顺序的划分:
| 方法 | AUC-PR | AUC-ROC |
|---|---|---|
| RF [按账号 + 全局 TF-IDF] | **0.838 ± 0.020** | **0.763 ± 0.039** |
| RF [按账号 TF-IDF] | 0.820 ± 0.034 | 0.690 ± 0.023 |
| 全局 TF-IDF(原始,无监督) | 0.817 ± 0.016 | 0.749 ± 0.027 |
| RF [全局 TF-IDF] | 0.744 ± 0.061 | 0.631 ± 0.055 |
| 基于计数特征的 Logistic regression | 0.715 ± 0.084 | 0.611 ± 0.049 |
| 仅基于计数特征的 RF | 0.648 ± 0.057 | 0.510 ± 0.011 |
| 基于计数特征的 Isolation Forest | 0.597 ± 0.039 | 0.363 ± 0.082 |
按账号 TF-IDF 特征的 AUC-PR 比最强的计数特征基线高出 +0.17(5/5 次划分,配对 t 检验 p = 0.0002)。
这种提升在用户间表现出**异质性**:对于历史事件 ≤ 3 次的冷启动用户,按账号建模的表现不如全局建模;但随着历史深度的增加,按账号建模会占据主导地位(参见论文中的图 1)。
## 仓库结构
```
.
├── src/
│ ├── tfidf.py — PerAccountTFIDF and GlobalTFIDF
│ ├── run_ato.py — End-to-end ATO experiment (main entry point)
│ ├── run_experiments.py — Generic harness (RBA-schema datasets)
│ ├── run_openssh.py — Adapter for the loghub OpenSSH dataset
│ ├── parse_openssh.py — Log parser for the OpenSSH dataset
│ └── tokenize_event.py — Tokenizer for RBA-schema events
├── results/
│ ├── ato.csv — Main results: AWS ATO dataset, 5 splits
│ ├── hybrid.csv — Cohort-aware policy ablation
│ ├── openssh.csv — Secondary check: OpenSSH (2K sample)
│ └── openssh_multisplit.csv — OpenSSH, multi-split
├── make_figure.py — Generates Fig. 1 (volume-stratified bars)
├── requirements.txt
└── README.md
```
## 复现主要结果
```
# 安装依赖
python3 -m pip install -r requirements.txt
# 下载数据集(压缩后 51 MB,解压后 152 MB)
mkdir -p data
curl -L -o data/ato.zip \
https://raw.githubusercontent.com/aws-samples/aws-fraud-detector-samples/master/data/ato_data_800K_full.csv.zip
unzip data/ato.zip -d data/
# 运行实验(在笔记本电脑上约 30 秒)
python3 src/run_ato.py \
--data data/ato_data_800K_full.csv \
--out results/ato.csv
# (可选)重新生成 Fig. 1
python3 make_figure.py
```
输出结果应与本仓库中的 `results/ato.csv` 一致(允许存在数值噪声)。
## 方法(简述)
对于每个登录事件,从其结构化字段(IP 段、user-agent 组件、设备指纹、一天中的时间段、凭证结果)中构建一个文本 token 包。对于具有足够历史记录的每个用户账号,根据该用户之前的事件计算 TF-IDF 分数(“按账号”)。同时,针对整个语料库单独计算一个 TF-IDF 分数(“全局”)。将这些分数与七个基于计数的按用户特征(事件数、不同 IP 数、不同 user-agent 数等)拼接起来,并训练一个随机森林分类器。
完整的方法描述、数学公式和消融实验请参见论文。
## 数据集
本工作使用了 AWS Fraud Detector Account Takeover Insights 示例数据集,该数据集公开托管在 `aws-samples/aws-fraud-detector-samples`。包含了 2022 年大约三个月内、涉及 100,000 个不同用户账号的 735,683 个登录事件,其中包含 529 个专家标注的正/负样本(161 个已确认的账号盗用,368 个合法行为)。许可证:根据源代码仓库规定,采用 Apache 2.0 / MIT-0。
## 引用
```
@misc{gopalakrishnan2026ato,
author = {Gopalakrishnan, Venkatakrishnan},
title = {Per-Account NLP Features for Account-Takeover Detection: A Reproducible Study on Real-World Login Data},
year = {2026},
howpublished = {arXiv preprint [arXiv ID to be added after submission]}
}
```
## 许可证
代码:MIT(请参阅 LICENSE)
本工作中使用的数据集按 aws-samples/aws-fraud-detector-samples 仓库的条款分发;有关数据集的使用权,请参阅该项目。
## 联系方式
欢迎提交 Issues 和 pull requests。
标签:Apex, NLP特征工程, TF-IDF, 异常检测, 机器学习, 网络安全, 账户接管检测, 身份认证安全, 逆向工具, 隐私保护