🔬 Geng Skill — 学术数据打假检测工具
用数据说话,让造假无所遁形 · Inspired by "耿同学讲故事"
Quick Start • How It Works • Input Modes • Detection Modules • Example • Documentation
🌟 这是什么?
Geng Skill 是一套基于统计学原理的学术论文数据造假检测工具包。
2026 年 4 月起,科普博主"耿同学讲故事"凭一台电脑和几个统计方法,连续揪出多所 985 高校顶尖学者的论文造假——同济大学 Nature 论文院长免职、南开大学 Nature 子刊正在调查……他证明了一件事:造假的数据一定会留下统计学破绽。
本项目将"耿同学"的技术方法论系统化、工具化,让任何人都能一键检测论文数据是否存在造假嫌疑。
💡 核心原理:真实实验数据具有随机性;人为编造的数据会呈现不自然的数学规律。
🚀 快速开始
# 克隆仓库
git clone https://github.com/YOUR_USERNAME/geng-skill.git
cd geng-skill
pip install -r requirements.txt
# 一键自动扫描(Scale 模式)
python3 scripts/input_pipeline.py --input your_data.csv --mode scale
就这么简单。Scale 模式会自动扫描所有数值列,运行 6 种检测算法,并按嫌疑程度从高到低排列结果。
🧠 工作原理
系统分为三层:
第一层 · 数据输入 Input Pipeline
支持 PDF 论文、Excel 原始数据、CSV 表格 三种格式。自动提取表格、识别数值列、标准化数据格式。
第二层 · 检测引擎 Detection Engine
6 个独立的统计检测模块,从不同角度分析数据异常:
| 模块 | 检测目标 | 方法 |
|---|---|---|
| 末位数字检测 Last Digit | 末位数字集中度异常 | Chi-squared vs 均匀分布 |
| 本福特定律 Benford's Law | 首位数字分布偏离 | Chi-squared + MAD |
| GRIM 测试 | 均值与样本量不兼容 | 离散粒度校验 |
| 固定关系检测 Fixed Ratio ⭐ | 实验组间存在完美数学关系 | 比值/回归分析 |
| 小数位一致性 Decimal | 小数部分模式重复 | 自相关 + 熵分析 |
| 图像重复检测 Image Dup | 同一图片在不同条件下重复使用 | 感知哈希 + SSIM |
第三层 · 输出报告 Output
生成出版级可视化图表、综合风险评分(0–100)、以及详细的 HTML/Markdown 检测报告,精确标注每个可疑数据点。
📥 三种输入模式
模式一:论文 PDF 输入
直接从 PDF 论文中提取数据表格:
python3 scripts/input_pipeline.py --input paper.pdf --mode extract
模式二:Excel / CSV 原始数据
处理从论文下载的 Supplementary Data:
python3 scripts/input_pipeline.py --input supplementary_data.xlsx --mode extract
python3 scripts/input_pipeline.py --input table_s1.csv --mode extract
模式三:Scale 自动扫描 ⭐(推荐)
让工具自己去找问题。 无需指定检测哪些列、用哪些方法——全部自动:
python3 scripts/input_pipeline.py --input data.csv --mode scale
Scale 模式会:
- 自动识别所有数值列
- 运行 6 大检测模块
- 交叉验证各模块结果
- 输出 suspicion_ranking(嫌疑排名榜)
🔬 检测模块
⭐ 固定关系检测(核心 · 耿同学的看家本领)
这是最致命的检测手段。如果两组"独立实验"数据之间存在完美的固定数学关系(比如每个样本 Treatment = Control × 2.0),那几乎可以断定是造假。
from fixed_relation_test import fixed_relation_test
result = fixed_relation_test(control_data, treatment_data)
# result['risk_score'] = 95 → 检测到精确 2.0 倍关系!
为什么这能定性? 即使药物真的让蛋白表达提高 2 倍,每个样本也会有生物学个体差异。20 个样本全部精确到小数点后多位都是 2.000 倍——概率趋近于零。
本福特定律检测 Benford's Law
跨越多个数量级的自然数据,首位数字遵循特定概率分布(1 最多,9 最少)。人为编造的数据会偏离:
from benford_test import benford_test
result = benford_test(values)
GRIM 测试
对于整数取值的数据(如李克特量表 1–5 分),给定样本量 n,并非所有均值都是数学上可能的:
from grim_test import grim_test_single
result = grim_test_single(mean='3.47', n=25, decimals=2)
# result['consistent'] = False → 这个均值是不可能存在的!
🧪 实战案例
输入:一篇可疑的生物医学论文数据
论文声称对小鼠进行了三组独立实验(Control / Treatment A / Treatment B),数据如下:
sample_id,control,treatment_a,treatment_b
1,2.34,4.68,7.02
2,3.12,6.24,9.36
3,1.87,3.74,5.61
4,4.56,9.12,13.68
5,2.98,5.96,8.94
...
运行 Scale 模式自动检测
python3 scripts/input_pipeline.py --input data.csv --mode scale
输出:精准定位问题
=== Scale Mode: 自动检测结果 ===
🔴 [1.00] control ↔ treatment_a ← 精确固定比值 = 2.000
🔴 [1.00] control ↔ treatment_b ← 精确固定比值 = 3.000
🔴 [1.00] treatment_a ↔ treatment_b ← 精确固定比值 = 1.500
🟠 [0.99] treatment_a ← 末位数字分布异常
╔══════════════════════════════════════════════════════════════╗
║ 综合风险评分: 92/100 🔴 极高风险 ║
╠══════════════════════════════════════════════════════════════╣
║ 三组"独立实验"数据之间存在完美的整数倍关系。 ║
║ 在真实生物实验中,这种情况出现的概率约等于零。 ║
║ 数据极大概率为人工编造。 ║
╚══════════════════════════════════════════════════════════════╝
📊 风险评分体系
| 分数 | 等级 | 含义 | 建议行动 |
|---|---|---|---|
| 0–25 | 🟢 低风险 | 未发现异常 | 无需干预 |
| 26–50 | 🟡 中等 | 存在轻微模式,可能是正常波动 | 建议复核 |
| 51–75 | 🟠 高风险 | 多项指标异常 | 深入调查 |
| 76–100 | 🔴 极高风险 | 系统性异常 | 正式举报 |
置信度规则:
- 单一模块报警 → 标注为"待确认线索"
- 2 个以上独立模块同时报警 → 标注为"高度可疑"
- 仅当综合分 > 75 且多模块交叉确认时,才标注"极高风险"
⚖️ 准确性与免责声明
✅ 本工具能做什么
- 检测不同数据列之间的固定数学关系
- 识别数字分布的统计学异常
- 标记数学上不可能的统计报告值
- 发现重复使用/篡改的论文图片
- 提供量化的风险评估和置信度等级
❌ 本工具不能做什么
- 不能证明造假的主观意图
- 不能检测加了随机噪声的"高明造假"
- 不能替代领域专家的判断
- 不具备法律效力
⚠️ 重要声明
本工具仅提供统计学层面的异常筛查功能。 输出结果为"疑点线索"(Suspicious Indicators),而非"造假判定"(Fraud Determination)。
- 统计异常可能有合理的科学解释(仪器精度限制、数据标准化处理、单位转换等)
- 最终判定需要领域专家复核和正式调查程序
- 通过全部检测 ≠ 数据一定真实(某些造假无法被统计方法捕获)
- 使用者需自行承担因不当使用(如公开发布未经验证的指控)造成的一切后果
📁 项目结构
geng-skill/
├── scripts/ 核心引擎
│ ├── input_pipeline.py 统一输入(PDF/Excel/CSV + Scale 模式)
│ ├── visualization.py 出版级可视化图表
│ ├── report_generator.py HTML + Markdown 报告生成
│ ├── geng_assess.py 综合评估引擎
│ ├── last_digit_test.py 末位数字检测
│ ├── benford_test.py 本福特定律检测
│ ├── grim_test.py GRIM 均值一致性测试
│ ├── fixed_relation_test.py 固定关系检测 ⭐
│ ├── decimal_consistency_test.py 小数位一致性检测
│ └── image_duplicate_test.py 图像重复检测
├── docs/ 完整文档
│ ├── USAGE_GUIDE.md 多平台使用指南(Claude/Cursor/GPT/Codex 等)
│ ├── DATA_SOURCES.md 学术参考文献 + 数据标准 + 伦理合规
│ ├── ANNOTATIONS.md 架构图 + API 接口 + 代码注释规范
│ └── EXAMPLE_WALKTHROUGH.md 端到端完整教程
├── examples/ 示例数据
├── tests/ 单元测试(24/24 通过)
└── assets/ README 配图
📖 文档
| 文档 | 内容 |
|---|---|
| USAGE_GUIDE.md | 在 Claude / Cursor / GPT / Codex / Jupyter / Docker 等平台上的使用方法 |
| DATA_SOURCES.md | 学术参考文献、数据标准、伦理合规框架 |
| ANNOTATIONS.md | 系统架构、API 接口规范、代码注释标准 |
| EXAMPLE_WALKTHROUGH.md | 从一篇论文到检测报告的完整教程 |
| SKILL.md | Skill 核心技术文档 |
🔗 学术参考
- Benford, F. (1938). The law of anomalous numbers. Proc. APS, 78(4), 551–572.
- Brown, N.J.L. & Heathers, J.A.J. (2017). The GRIM Test. SPPS, 8(4), 363–369.
- Bik, E.M. et al. (2016). Image duplication in biomedical research. mBio, 7(3).
- Nigrini, M.J. (2012). Benford's Law. Wiley. ISBN: 978-1118152850.
- 余菁等 (2021). 科技论文数据造假的核查策略. 中国科技期刊研究, 32(6), 770–776.
🙏 致谢
本项目的灵感来源于 "耿同学讲故事" —— 一位吉林大学生物学硕士、北航退学博士,从 2026 年 4 月开始,仅凭一台电脑和统计学方法,就揪出了多所顶尖高校教授的论文数据造假。他的工作证明了:学术诚信监督不仅必要,而且完全可行。
"如果论文里的数据存在规律性,那么就明显不是在实验室实际测量的情况下生成的。"
—— 耿同学
📄 开源许可
MIT License — 详见 LICENSE
让学术回归诚信,让数据说出真相。
Let academic integrity prevail. Let data speak the truth.


