YueranCao2001/election-integrity-analytics
GitHub: YueranCao2001/election-integrity-analytics
一个面向选举透明与监督的交互式分析平台,通过模拟数据与异常检测辅助识别需审查的选区模式。
Stars: 1 | Forks: 0
# 🗳️ 选举完整性分析仪表板
一个交互式分析平台,用于模拟选区级别的选举数据、检测异常投票模式,并提供与选举管理程序相一致的可解释性说明。
使用 **Python**、**Pandas**、**Scikit-learn**、**Matplotlib** 和 **Streamlit** 构建。
# 📌 项目动机
选举系统依赖透明度、审计、重计票程序和行政保障措施来维护公众信任。
本项目探索轻量级数据分析工具如何帮助识别**可能需要进行更严格行政审查的选区级异常模式**。
重要的是,该系统**并非用于检测欺诈或做出法律指控**。
相反,它展示了分析如何支持监督、可解释性和政策理解。
# 🚀 核心功能
### 📊 模拟选举数据集
生成真实的选区级别选举数据,包括:
- 注册选民数
- 投票率
- 当日投票
- 提前投票
- 缺席/邮寄投票
- 临时选票
- 候选人得票总数
### 🤖 异常检测引擎
使用无监督异常检测来标记具有异常模式的选区,例如:
- 投票率极高
- 缺席投票比例偏高
- 临时选票激增
- 罕见的投票行为组合
- 极端选票集中
### 🧠 可解释性分析
每个被标记的选区都会收到一份人类可读的解释。
示例:
- 向候选人 B 集中投票(93%),但程度较轻
- 相对于同类选区,缺席投票比例异常偏高
- 临时选票激增,需要审查
### 📘 选举规则助手
一个轻量级基于规则的助手,用于解释明尼苏达州的选举程序:
- 重计票规则
- 缺席投票流程
- 事后审计
- 选民注册
- 投票设备类型
支持交互式规则查询,例如:
- 什么情况下会在明尼苏达州触发重计票?
- 缺席投票如何运作?
- 需要哪些审计?
### 📈 交互式仪表板概览
该项目包含一个基于 Streamlit 的交互式仪表板,允许用户探索模拟选举数据、异常检测结果以及选举程序规则,并以视觉化和用户友好的方式呈现。
仪表板的关键功能包括:
- **选举摘要指标**:显示总选区数、标记异常数、平均投票率和缺席投票比例。
- **分布分析**:可视化各选区的投票率和缺席投票行为。
- **异常点检测视图**:突出显示偏离正常投票模式的标记选区。
- **散点图探索**:比较投票率与缺席比例,以识别异常组合。
- **异常类型细分**:总结检测到的异常类别(如投票率激增、缺席投票激增、临时选票激增等)。
- **选区搜索工具**:允许用户检查任意选定选区的详细统计信息。
- **规则助手**:提供明尼苏达州选举程序的快速自然语言解释,例如重计票、缺席投票和审计。
该仪表板展示了数据分析和可解释 AI 工具如何支持选举透明度、行政审查和政策理解。












## 📊 示例洞察
### 投票率与缺席比例
大多数选区的分布处于正常的行政范围内。
被标记的选区表现为异常点,具有不寻常的投票率、缺席投票或两者的组合。
### 标记的异常类型
检测到的异常通常涉及:
- 投票率激增
- 缺席投票激增
- 临时选票激增
- 选票集中模式
这些信号旨在供行政审查,而非执法使用。
## 🏗️ 系统架构
```
Simulation Engine
↓
Election Dataset
↓
Anomaly Detection
↓
Explanation Layer
↓
Dashboard + Rules Assistant
```
## 📂 项目架构
```
election-analytics/
│── data/
│ └── simulated_election_data.csv
│
│── outputs/
│ ├── anomaly_results.csv
│ ├── anomaly_explanations.csv
│ ├── turnout_distribution.png
│ ├── absentee_distribution.png
│ ├── anomaly_score_distribution.png
│ └── dashboard_screenshot.png
│
│── src/
│ ├── simulation.py
│ ├── anomaly.py
│ ├── explain.py
│ ├── rules.py
│ └── visualization.py
│
│── app.py
│── requirements.txt
│── README.md
```
## ⚙️ 技术栈
- Python 3.10
- Anaconda
- pandas
- numpy
- scikit-learn
- matplotlib
- streamlit
## 🖥️ 快速启动
创建环境
```
conda create -n election-ai python=3.10 -y
conda activate election-ai
pip install pandas numpy scikit-learn matplotlib streamlit
```
运行模块
```
python src/simulation.py
python src/anomaly.py
python src/explain.py
streamlit run app.py
```
## 📈 示例输出
- 投票率分布
- 缺席投票直方图
- 标记选区表格
- 选区搜索记录
- 选举程序问答
## 🎯 使用场景
- 选举管理研究
- 审计流程模拟
- 政策教育
- 数据异常检测案例研究
- 可解释 AI 演示
## 📊 实验结果与解释
### 1. 投票率分布

模拟的投票率集中在典型参与水平附近,大多数选区落在 **60% 到 80%** 之间。少数选区表现出异常高的投票率,这可能需要进一步审查。
### 2. 缺席投票比例分布

大多数选区的缺席投票比例在 **15% 到 35%** 之间,反映了邮寄投票使用的正常波动。少数极端异常点显示出显著偏高的缺席比例,代表需要行政审查的潜在不规则模式。
### 3. 异常分数分布

孤立森林模型为各选区分配异常分数。大多数选区分数集中在正常范围,而一小部分选区得分显著偏低并被标记为异常。
这些异常可能对应:
- 异常高的投票率
- 异常的缺席选票集中
- 极端候选人得票不平衡
- 临时选票数量偏高
### 4. 可解释性标记
被标记选区的解释示例:
```
P0021 – turnout rate significantly exceeds peer precinct average
P0047 – absentee voting share unusually high relative to county norm
P0113 – provisional ballot volume exceeds expected operational range
```
这通过展示标记原因而非仅依赖黑盒模型输出来提高透明度。
### 5. 治理相关性
本项目不尝试检测欺诈或归责不当行为。
相反,它展示了如何通过可解释分析来支持:
- 事后审计
- 重计票优先级排序
- 操作异常审查
- 公共部门透明度流程
- 选举管理研究
### 6. 结果解释

#### 投票率与缺席比例
大多数选区处于正常的投票率和缺席投票范围内。
被标记的选区表现为异常点,具有异常高的投票率、偏高的缺席比例,或罕见的投票行为组合。
#### 标记的异常类型
在被标记的选区中,最常见的类别包括投票率激增、临时选票激增和缺席投票异常。
这些结果说明了数据分析如何通过识别需要额外审查的案例来支持选举监督。
## 关键发现
- 模拟并分析了 300 条选区级别选举记录
- 通过孤立森林检测到 15 个统计异常选区模式
- 构建了用于公共部门分析的交互式 Streamlit 仪表板
- 添加了可解释 AI 输出以实现透明的异常解释
- 集成了用于明尼苏达州程序的基于规则的选举政策助手
## ⚖️ 免责声明
本项目不检测或声称选举欺诈。
它展示了分析工具如何支持现有的选举监督机制。
## 后续工作
- 集成真实的公共选举数据集
- 多州政策比较
- 额外的异常检测模型
- 自然语言法律问答模块
- 公共部署
标签:Kubernetes, Matplotlib, Minnesota选举, Python, Scikit-learn, Streamlit, 云计算, 交互式仪表盘, 全栈分析, 可解释AI, 异常检测, 异常模式, 投票行为, 政策规则辅助, 数据分析平台, 无后门, 无监督学习, 精准投票分析, 规则引擎, 访问控制, 逆向工具, 选举完整性, 选举审计, 选举模拟, 选举管理, 选票分析, 透明选举