目录

基于python的员工离职与预警系统

这是一个基于 Python、Flask、SQLite、Pandas 和 scikit-learn 的员工离职分析系统。项目围绕 IBM HR Attrition 数据集实现员工管理、离职统计看板、离职风险预测、风险排名、AI 风险分析、离职洞察和综合报告导出。

功能概览

  • 用户认证:登录、注册、退出登录。
  • 用户管理:管理员维护用户、角色、状态、重置密码,普通用户维护个人资料。
  • 员工管理:员工列表分页查询、条件筛选、增删改、批量删除、CSV 导出。
  • 数据看板:员工总览、部门离职率、岗位分布、婚姻状况、年龄段趋势、工作年限趋势、收入分段离职率。
  • 离职预测:加载已训练随机森林模型,支持单员工预测和全员批量风险排名。
  • 风险预警:首页定时轮询高风险员工并弹出提醒。
  • 风险分析:风险排名页支持单员工 AI 风险分析;未配置 AI 密钥时使用本地规则生成报告。
  • 离职洞察:雷达图对比高/中/低风险人群画像,并展示管理建议矩阵。
  • 报告导出:洞察页生成综合离职分析 PNG 报告,支持预览和下载。

技术栈

  • Python >= 3.14
  • Flask
  • Flask-SQLAlchemy
  • Pandas
  • scikit-learn
  • joblib
  • seaborn / matplotlib
  • Layui
  • ECharts
  • SQLite

依赖定义在 pyproject.toml。

目录结构

.
├── app.py                         # Flask 应用入口
├── models.py                      # SQLAlchemy 数据模型
├── init_users.py                  # 初始化用户脚本
├── blueprints/                    # Flask 蓝图
│   ├── dashboard.py               # 数据看板 API
│   ├── employee.py                # 员工 CRUD 与 CSV 导出
│   ├── predict.py                 # 预测、风险分析、洞察、报告接口
│   └── user.py                    # 用户管理与个人中心
├── analysis/                      # 模型训练与分析脚本
│   ├── train_model.py             # 训练并保存离职预测模型
│   ├── predict_new_employee.py    # 新员工预测示例
│   └── factor.py                  # 相关性分析与热力图
├── model/                         # 已训练模型与预处理对象
├── report/                        # 综合 PNG 报告生成模块
├── reports/                       # 生成后的报告文件
├── static/                        # 数据集、前端静态资源、图片
├── templates/                     # 页面模板
└── task/                          # 课程练习与辅助脚本

快速开始

  1. 安装依赖:
uv sync

如果不使用 uv,可按 pyproject.toml 安装对应依赖。

  1. 初始化数据库表:
python app.py

应用启动时会执行 db.create_all(),在项目根目录使用 data.db。

  1. 初始化用户(如需要):
python init_users.py
  1. 启动应用:
python app.py

默认访问地址:

http://127.0.0.1:5000/

主要页面

  • /:登录页
  • /register:注册页
  • /home:系统首页
  • /dashboard:数据看板
  • /employee/list:员工管理
  • /predict/:单员工离职风险预测
  • /predict/ranking:全员离职风险排名
  • /predict/insight:离职洞察与综合报告导出
  • /user/list:用户管理(管理员)
  • /user/profile:个人中心

模型训练与预测

训练模型:

python analysis/train_model.py

训练脚本会读取:

static/WA_Fn-UseC_-HR-Employee-Attrition.csv

并输出以下文件到 model/:

  • attrition_model.pkl
  • scaler.pkl
  • feature_columns.pkl
  • label_encoders.pkl

运行新员工预测示例:

python analysis/predict_new_employee.py

综合离职分析报告

洞察页提供“生成分析报告图”按钮。点击后会调用后端生成 PNG 报告,报告保存到:

reports/analysis_report.png

相关接口:

  • POST /predict/api/report/generate/analysis:生成综合报告图
  • GET /predict/api/report/download/analysis:预览报告图
  • GET /predict/api/report/download/analysis?download=1:下载报告图

也可以直接运行:

python report/generate_analysis_report.py

报告包含:

  • 各部门离职率柱状图
  • 离职员工岗位分布饼图
  • 各年龄段离职率趋势折线图
  • 分析结论与管理建议
  • “内部资料 - 仅限 HR 部门使用”水印

风险预警轮询脚本

task/risk_warning_polling.py 可独立轮询批量预测接口,在终端输出高风险员工提醒:

python task/risk_warning_polling.py --base-url http://127.0.0.1:5000

只检查一次:

python task/risk_warning_polling.py --once

AI 风险分析配置

风险排名页的 AI 分析接口支持 OpenAI 兼容服务。可通过环境变量配置:

  • MENGZHEN_OPENAI_API_KEY 或 OPENAI_API_KEY
  • MENGZHEN_OPENAI_URL、MENGZHEN_OPENAI_BASE_URL 或 OPENAI_BASE_URL
  • MENGZHEN_OPENAI_MODEL 或 OPENAI_MODEL

也可以创建 .env.local 放置本地配置。.env 和 .env.* 已被忽略,不会进入版本库。

未配置 API Key 时,系统会使用本地规则生成可用的风险分析报告。

常用验证命令

Python 语法检查:

python -m py_compile app.py blueprints/predict.py report/config.py report/generate_analysis_report.py

生成综合报告:

python report/generate_analysis_report.py

检查 Git 状态:

git status --short

数据与文件说明

  • data.db:SQLite 数据库文件,当前已被 Git 跟踪,适合课程演示。
  • model/:已训练模型和预处理文件,应用启动时由 blueprints/predict.py 加载。
  • static/WA_Fn-UseC_-HR-Employee-Attrition.csv:模型训练和报告生成使用的数据集。
  • reports/analysis_report.png:当前生成的综合离职分析报告样例。

注意事项

  • markdown/ 和 word/ 目录被忽略,不作为项目运行必要文件提交。
  • 本地密钥、虚拟环境、IDE 配置和 Python 缓存文件被忽略。
  • 如果报告中文字显示为方框,请确认系统安装了 Microsoft YaHei、SimHei 或 Arial Unicode MS 字体。
关于
3.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号