feat: 初始化员工缺勤分析系统项目

搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块

  详细版:
  feat: 初始化员工缺勤分析系统项目

  - 后端:基于 Flask 搭建 RESTful API,包含数据概览、特征分析、预测模型、聚类分析四大模块
  - 前端:基于 Vue.js 构建单页应用,实现 Dashboard、预测、聚类、因子分析等页面
  - 模型:集成随机森林、XGBoost、LightGBM、Stacking 等多种机器学习模型
  - 文档:完成需求规格说明、系统架构设计、接口设计、数据设计、UI原型设计等文档
This commit is contained in:
2026-03-08 14:48:26 +08:00
commit a39d8b2fd2
48 changed files with 9546 additions and 0 deletions

View File

@@ -0,0 +1,609 @@
# 需求规格说明书
## 基于多维特征挖掘的员工缺勤分析与预测系统
**文档版本**V1.0
**编写日期**2026年3月
**编写人**:张硕
---
## 1. 引言
### 1.1 编写目的
本文档旨在详细说明"基于多维特征挖掘的员工缺勤分析与预测系统"的功能需求和非功能需求,为系统的设计、开发、测试和验收提供依据。本文档的预期读者包括:
- 项目指导教师
- 系统开发人员
- 测试人员
- 项目评审专家
### 1.2 项目背景
#### 1.2.1 课题来源
本课题为河南农业大学软件学院本科毕业设计项目。
#### 1.2.2 项目背景
随着企业数字化转型的深入推进,人力资源管理正从经验驱动向数据驱动转变。员工缺勤作为影响企业运营效率的重要因素,其背后蕴含着丰富的多维度信息。传统的缺勤管理方式主要依赖人工统计和经验判断,缺乏对多维度特征之间复杂关系的深入挖掘。
本系统基于UCI Absenteeism数据集利用机器学习算法对员工考勤数据进行深度分析挖掘影响缺勤的多维度特征构建缺勤预测模型为企业人力资源管理提供科学、客观的决策支持。
#### 1.2.3 术语定义
| 术语 | 定义 |
|------|------|
| UCI | University of California Irvine加州大学欧文分校著名的机器学习数据集仓库 |
| ICD | International Classification of Diseases国际疾病分类代码 |
| 缺勤 | 员工在应该工作的时间内未出勤的情况 |
| 特征挖掘 | 从原始数据中提取有价值的特征信息的过程 |
| K-Means | 一种经典的无监督聚类算法 |
| 随机森林 | 一种基于决策树的集成学习算法 |
| XGBoost | 一种高效的梯度提升算法 |
---
## 2. 项目概述
### 2.1 项目目标
本项目的核心目标是设计并实现一个完整的员工缺勤分析与预测系统,具体目标如下:
1. **数据概览**:提供直观的数据统计和可视化展示,帮助企业快速了解整体考勤状况
2. **因素分析**:挖掘影响缺勤的关键因素,回答"为什么缺勤"的问题
3. **风险预测**:构建预测模型,实现对员工缺勤风险的精准识别和预警
4. **员工画像**:利用聚类算法对员工进行分群,实现精细化管理
### 2.2 功能概述
系统包含四大核心功能模块:
| 模块编号 | 模块名称 | 功能概述 |
|----------|----------|----------|
| F01 | 数据概览与全局统计 | 展示基础统计指标、时间维度趋势、缺勤原因分布 |
| F02 | 多维特征挖掘与影响因素分析 | 特征重要性排序、相关性分析、群体对比 |
| F03 | 员工缺勤风险预测 | 单次预测、风险等级评估、模型性能展示 |
| F04 | 员工画像与群体聚类 | K-Means聚类、群体雷达图、散点图展示 |
### 2.3 用户特征
系统的目标用户主要包括:
| 用户类型 | 描述 | 主要使用场景 |
|----------|------|--------------|
| HR管理人员 | 企业人力资源部门工作人员 | 查看考勤统计、识别高风险员工、制定管理策略 |
| 部门主管 | 各业务部门负责人 | 了解本部门员工考勤情况、优化工作安排 |
| 数据分析师 | 企业数据分析人员 | 深入分析考勤数据、挖掘潜在规律 |
### 2.4 运行环境
#### 2.4.1 硬件环境
| 项目 | 最低配置 | 推荐配置 |
|------|----------|----------|
| CPU | 双核 2.0GHz | 四核 2.5GHz及以上 |
| 内存 | 4GB | 8GB及以上 |
| 硬盘 | 10GB可用空间 | 20GB及以上 |
| 网络 | 10Mbps | 100Mbps及以上 |
#### 2.4.2 软件环境
| 项目 | 要求 |
|------|------|
| 操作系统 | Windows 10/11、Linux、macOS |
| 浏览器 | Chrome 90+、Firefox 88+、Edge 90+ |
| Python版本 | 3.8及以上 |
| Node.js版本 | 16.0及以上 |
---
## 3. 功能需求
### 3.1 F01 数据概览与全局统计
#### 3.1.1 F01-01 基础统计指标展示
**功能描述**:系统自动加载数据集,计算并展示关键统计指标。
**输入**:无(自动加载)
**输出**
| 指标名称 | 说明 |
|----------|------|
| 样本总数 | 数据集中的记录总数 |
| 员工总数 | 去重后的员工人数 |
| 缺勤总时长 | 所有记录的缺勤小时数总和 |
| 平均缺勤时长 | 每条记录的平均缺勤小时数 |
| 最大缺勤时长 | 单次最大缺勤小时数 |
| 最小缺勤时长 | 单次最小缺勤小时数 |
| 高风险员工占比 | 缺勤时长超过8小时的员工比例 |
**业务规则**
- 高风险定义:单次缺勤时长 > 8小时
- 统计数据实时计算,不缓存
**界面展示**以KPI卡片形式展示每个指标一张卡片。
---
#### 3.1.2 F01-02 月度缺勤趋势分析
**功能描述**以折线图形式展示全年1-12月的缺勤变化趋势。
**输入**:无
**输出**
| 字段 | 说明 |
|------|------|
| month | 月份1-12 |
| total_hours | 该月缺勤总时长 |
| avg_hours | 该月平均缺勤时长 |
| record_count | 该月记录数 |
**界面展示**
- 图表类型:折线图
- 横轴月份1-12月
- 纵轴:缺勤时长(小时)
- 支持鼠标悬停显示具体数值
---
#### 3.1.3 F01-03 星期分布分析
**功能描述**:分析周一至周五的缺勤分布情况。
**输入**:无
**输出**
| 字段 | 说明 |
|------|------|
| weekday | 星期(周一至周五) |
| total_hours | 该星期缺勤总时长 |
| avg_hours | 该星期平均缺勤时长 |
| record_count | 该星期记录数 |
**界面展示**
- 图表类型:柱状图或热力图
- 横轴:星期(周一至周五)
- 纵轴:缺勤时长或记录数
---
#### 3.1.4 F01-04 缺勤原因分布分析
**功能描述**:展示各类缺勤原因的占比分布。
**输入**:无
**输出**
| 字段 | 说明 |
|------|------|
| reason_code | 缺勤原因代码0-28 |
| reason_name | 缺勤原因名称 |
| count | 该原因出现次数 |
| percentage | 占比百分比 |
**缺勤原因分类**
| 代码范围 | 类别 | 说明 |
|----------|------|------|
| 1-21 | ICD疾病 | 国际疾病分类代码 |
| 22 | 医疗随访 | 患者随访 |
| 23 | 医疗咨询 | 门诊咨询 |
| 24 | 献血 | 无偿献血 |
| 25 | 实验室检查 | 医学检查 |
| 26 | 无故缺勤 | 未经批准的缺勤 |
| 27 | 理疗 | 物理治疗 |
| 28 | 牙科咨询 | 口腔科就诊 |
| 0 | 未知 | 原因未记录 |
**界面展示**
- 图表类型:饼图
- 显示各类原因的占比
- 支持点击查看详情
---
### 3.2 F02 多维特征挖掘与影响因素分析
#### 3.2.1 F02-01 特征重要性排序
**功能描述**:利用训练好的随机森林模型,计算各维度特征对缺勤的影响权重。
**输入**:无
**输出**
| 字段 | 说明 |
|------|------|
| feature_name | 特征名称 |
| importance_score | 重要性得分0-1 |
| rank | 排名 |
**分析的特征包括**
| 特征名称 | 中文名称 | 特征类型 |
|----------|----------|----------|
| Reason for absence | 缺勤原因 | 类别型 |
| Month of absence | 缺勤月份 | 类别型 |
| Day of the week | 星期几 | 类别型 |
| Seasons | 季节 | 类别型 |
| Transportation expense | 交通费用 | 数值型 |
| Distance from Residence to Work | 通勤距离 | 数值型 |
| Service time | 工龄 | 数值型 |
| Age | 年龄 | 数值型 |
| Work load Average/day | 日均工作负荷 | 数值型 |
| Hit target | 达标率 | 数值型 |
| Disciplinary failure | 违纪记录 | 二分类 |
| Education | 学历 | 类别型 |
| Son | 子女数量 | 数值型 |
| Social drinker | 饮酒习惯 | 二分类 |
| Social smoker | 吸烟习惯 | 二分类 |
| Pet | 宠物数量 | 数值型 |
| Body mass index | BMI指数 | 数值型 |
**界面展示**
- 图表类型:水平柱状图
- 按重要性得分降序排列
- 鼠标悬停显示具体分数
---
#### 3.2.2 F02-02 相关性热力图分析
**功能描述**:计算特征之间的皮尔逊相关系数,以热力图形式展示。
**输入**:无
**输出**相关系数矩阵n×n
**重点关注的关联**
- 生活习惯(饮酒、吸烟)与缺勤时长的相关性
- 通勤距离与缺勤时长的相关性
- 工作负荷与缺勤时长的相关性
**界面展示**
- 图表类型:热力图
- 颜色范围:-1负相关蓝色到 +1正相关红色
- 支持鼠标悬停显示具体相关系数
---
#### 3.2.3 F02-03 群体对比分析
**功能描述**:按不同维度分组,对比各组的平均缺勤时长。
**支持的对比维度**
| 维度 | 分组 |
|------|------|
| 饮酒习惯 | 饮酒者 vs 不饮酒者 |
| 吸烟习惯 | 吸烟者 vs 不吸烟者 |
| 学历 | 高中 vs 本科 vs 研究生及以上 |
| 是否有子女 | 有子女 vs 无子女 |
| 是否有宠物 | 有宠物 vs 无宠物 |
**输出**
| 字段 | 说明 |
|------|------|
| group_name | 分组名称 |
| avg_hours | 平均缺勤时长 |
| count | 记录数 |
**界面展示**
- 图表类型:分组柱状图
- 支持切换不同的对比维度
- 显示差异百分比
---
### 3.3 F03 员工缺勤风险预测
#### 3.3.1 F03-01 单次缺勤预测
**功能描述**:接收用户输入的员工属性,调用预测模型返回预测的缺勤时长。
**输入参数**
| 参数名 | 类型 | 取值范围 | 必填 |
|--------|------|----------|------|
| reason_for_absence | int | 0-28 | 是 |
| month_of_absence | int | 1-12 | 是 |
| day_of_week | int | 2-6 | 是 |
| seasons | int | 1-4 | 是 |
| transportation_expense | int | 100-400 | 是 |
| distance | int | 1-60 | 是 |
| service_time | int | 1-30 | 是 |
| age | int | 18-60 | 是 |
| work_load | float | 200-350 | 是 |
| hit_target | int | 80-100 | 是 |
| disciplinary_failure | int | 0-1 | 是 |
| education | int | 1-4 | 是 |
| son | int | 0-5 | 是 |
| social_drinker | int | 0-1 | 是 |
| social_smoker | int | 0-1 | 是 |
| pet | int | 0-10 | 是 |
| bmi | float | 18-40 | 是 |
**输出**
| 字段 | 说明 |
|------|------|
| predicted_hours | 预测的缺勤时长(小时) |
| risk_level | 风险等级low/medium/high |
| confidence | 模型置信度 |
**风险等级判定规则**
| 预测时长 | 风险等级 | 颜色标识 |
|----------|----------|----------|
| < 4小时 | 低风险low | 绿色 |
| 4-8小时 | 中风险medium | 黄色 |
| > 8小时 | 高风险high | 红色 |
**界面展示**
- 左侧:参数输入表单
- 右侧:预测结果展示
- 底部:开始预测按钮
---
#### 3.3.2 F03-02 风险等级评估
**功能描述**:根据预测结果,自动评估并展示风险等级。
**业务规则**
- 风险等级根据预测时长自动计算
- 高风险员工需要特别关注标识
- 支持风险等级的筛选和统计
---
#### 3.3.3 F03-03 模型性能展示
**功能描述**:展示当前预测模型的性能指标。
**输出指标**
| 指标名称 | 说明 | 目标值 |
|----------|------|--------|
| R² | 决定系数 | ≥ 0.80 |
| MSE | 均方误差 | - |
| RMSE | 均方根误差 | - |
| MAE | 平均绝对误差 | - |
| 训练样本数 | 模型训练使用的样本量 | - |
**界面展示**
- 以卡片形式展示各指标
- 包含模型类型说明(随机森林/XGBoost
---
### 3.4 F04 员工画像与群体聚类
#### 3.4.1 F04-01 K-Means聚类结果展示
**功能描述**利用K-Means算法对员工进行聚类分析。
**输入参数**(可选):
| 参数名 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| n_clusters | int | 3 | 聚类数量 |
**输出**
| 字段 | 说明 |
|------|------|
| cluster_id | 聚类编号 |
| cluster_name | 聚类名称(自动生成或人工标注) |
| member_count | 该聚类包含的员工数 |
| center_point | 聚类中心点坐标 |
**聚类特征维度**
- 年龄
- 工龄
- 工作负荷
- BMI指数
- 缺勤倾向
---
#### 3.4.2 F04-02 员工群体雷达图
**功能描述**:以雷达图形式展示各聚类群体的特征分布。
**输出**
- 各聚类在多个维度上的特征值(归一化后)
**界面展示**
- 图表类型:雷达图
- 每个聚类用不同颜色表示
- 维度年龄、工龄、工作负荷、BMI、缺勤倾向
---
#### 3.4.3 F04-03 聚类散点图
**功能描述**:以散点图形式展示员工在聚类空间的分布。
**输出**
| 字段 | 说明 |
|------|------|
| employee_id | 员工ID |
| x | 横坐标年龄或PCA降维后的第一主成分 |
| y | 纵坐标缺勤时长或PCA降维后的第二主成分 |
| cluster_id | 所属聚类编号 |
**界面展示**
- 图表类型:散点图
- 不同聚类用不同颜色区分
- 支持鼠标悬停查看员工详情
---
## 4. 非功能需求
### 4.1 性能需求
| 指标 | 要求 |
|------|------|
| 页面加载时间 | 首屏加载时间 ≤ 3秒 |
| 接口响应时间 | 普通查询接口 ≤ 500ms |
| 预测接口响应时间 | ≤ 1秒 |
| 并发用户数 | 支持10个并发用户 |
| 数据处理能力 | 支持10000条以上记录处理 |
### 4.2 安全需求
| 需求项 | 说明 |
|--------|------|
| 数据安全 | 数据文件存储安全,防止未授权访问 |
| 接口安全 | API接口具备基本的访问控制 |
| 输入验证 | 前后端均需对用户输入进行校验 |
| 错误处理 | 不向前端暴露敏感的错误信息 |
### 4.3 可用性需求
| 需求项 | 说明 |
|--------|------|
| 界面友好 | 界面简洁明了,操作直观 |
| 响应式设计 | 支持不同屏幕尺寸访问 |
| 错误提示 | 提供清晰的错误提示和操作引导 |
| 帮助信息 | 关键功能提供操作提示 |
| 可访问性 | 支持主流浏览器访问 |
### 4.4 兼容性需求
| 类型 | 要求 |
|------|------|
| 浏览器兼容 | Chrome 90+、Firefox 88+、Edge 90+、Safari 14+ |
| 操作系统 | Windows 10/11、macOS 10.15+、主流Linux发行版 |
| 屏幕分辨率 | 支持1366×768及以上分辨率 |
### 4.5 可维护性需求
| 需求项 | 说明 |
|--------|------|
| 代码规范 | 遵循Python PEP8和Vue风格指南 |
| 注释文档 | 关键代码提供注释说明 |
| 模块化设计 | 高内聚低耦合,便于维护扩展 |
| 版本控制 | 使用Git进行版本管理 |
---
## 5. 用例图与用例描述
### 5.1 用例图
```
+------------------------------------------+
| 员工缺勤分析与预测系统 |
| |
| +------------------+ |
| | F01 数据概览 | |
| +------------------+ |
| | - 基础统计 | |
| | - 月度趋势 | |
| | - 星期分布 | |
| | - 原因分布 | |
| +------------------+ |
| |
| +------------------+ |
| | F02 影响因素分析 | |
| +------------------+ |
+--------+ | | - 特征重要性 | +--------+ |
| |------>| | - 相关性分析 |<------| | |
| 用户 | | | - 群体对比 | | 用户 | |
| |<------| +------------------+ | | |
+--------+ | +--------+ |
| +------------------+ | | |
| | F03 缺勤预测 |<----| 用户 | |
| +------------------+ | | |
| | - 单次预测 | +--------+ |
| | - 风险评估 | |
| | - 模型性能 | |
| +------------------+ |
| |
| +------------------+ |
| | F04 员工画像 | |
| +------------------+ |
| | - 聚类结果 | |
| | - 群体雷达图 | |
| | - 散点图 | |
| +------------------+ |
| |
+------------------------------------------+
```
### 5.2 用例详细描述
#### UC01 查看数据概览
| 项目 | 描述 |
|------|------|
| 用例名称 | 查看数据概览 |
| 参与者 | 用户 |
| 前置条件 | 用户已打开系统 |
| 主要流程 | 1. 系统加载数据集<br>2. 计算基础统计指标<br>3. 展示KPI卡片<br>4. 渲染月度趋势图<br>5. 渲染星期分布图<br>6. 渲染原因分布饼图 |
| 后置条件 | 数据概览页面展示完成 |
| 异常流程 | 数据加载失败时显示错误提示 |
#### UC02 分析影响因素
| 项目 | 描述 |
|------|------|
| 用例名称 | 分析影响因素 |
| 参与者 | 用户 |
| 前置条件 | 预测模型已训练完成 |
| 主要流程 | 1. 加载训练好的模型<br>2. 提取特征重要性<br>3. 计算相关系数矩阵<br>4. 展示特征重要性柱状图<br>5. 展示相关性热力图<br>6. 支持切换群体对比维度 |
| 后置条件 | 影响因素分析结果展示完成 |
#### UC03 进行缺勤预测
| 项目 | 描述 |
|------|------|
| 用例名称 | 进行缺勤预测 |
| 参与者 | 用户 |
| 前置条件 | 预测模型已训练完成 |
| 主要流程 | 1. 用户填写员工属性表单<br>2. 点击"开始预测"按钮<br>3. 系统调用预测模型<br>4. 返回预测结果<br>5. 展示风险等级 |
| 后置条件 | 预测结果展示完成 |
| 异常流程 | 输入参数不合法时提示错误 |
#### UC04 查看员工画像
| 项目 | 描述 |
|------|------|
| 用例名称 | 查看员工画像 |
| 参与者 | 用户 |
| 前置条件 | 聚类模型已训练完成 |
| 主要流程 | 1. 执行K-Means聚类<br>2. 计算聚类中心<br>3. 展示聚类结果<br>4. 渲染群体雷达图<br>5. 渲染散点分布图 |
| 后置条件 | 员工画像展示完成 |
---
## 6. 附录
### 6.1 参考文档
1. UCI Machine Learning Repository. Absenteeism at work Data Set
2. 开题报告文档
3. 项目架构设计文档
### 6.2 文档修改历史
| 版本 | 日期 | 修改人 | 修改内容 |
|------|------|--------|----------|
| V1.0 | 2026-03 | 张硕 | 初始版本 |
---
**文档结束**