Files
forsetsystem/docs/03_数据设计文档.md
shenjianZ a39d8b2fd2 feat: 初始化员工缺勤分析系统项目
搭建完整的前后端分离架构,实现数据概览、预测分析、聚类分析等核心功能模块

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

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

427 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据设计文档
## 基于多维特征挖掘的员工缺勤分析与预测系统
**文档版本**V1.0
**编写日期**2026年3月
**编写人**:张硕
---
## 1. 数据集概述
### 1.1 数据来源
| 项目 | 内容 |
|------|------|
| 数据集名称 | Absenteeism at work |
| 数据来源 | UCI Machine Learning Repository |
| 原始提供方 | 巴西某快递公司 (2007-2010年) |
| 数据提供者 | Andrea Martiniano, Ricardo Pinto Ferreira, Renato Jose Sassi |
| 所属机构 | Universidade Nove de Julho, Brazil |
### 1.2 数据规模
| 项目 | 数值 |
|------|------|
| 记录总数 | 740条 |
| 特征数量 | 21个字段 |
| 员工数量 | 36人 |
| 时间跨度 | 2007年7月 - 2010年7月 |
### 1.3 数据质量
| 检查项 | 结果 | 说明 |
|--------|------|------|
| 缺失值 | 无 | 数据完整无缺失 |
| 重复记录 | 无 | 无重复数据 |
| 异常值 | 需检查 | 部分字段可能存在异常值 |
| 数据一致性 | 良好 | 字段格式一致 |
---
## 2. 字段说明
### 2.1 字段完整列表
| 序号 | 字段名 | 中文名称 | 数据类型 | 取值范围 | 说明 |
|------|--------|----------|----------|----------|------|
| 1 | ID | 员工标识 | int | 1-36 | 唯一标识员工 |
| 2 | Reason for absence | 缺勤原因 | int | 0-28 | ICD代码或非疾病原因 |
| 3 | Month of absence | 缺勤月份 | int | 1-12 | 月份 |
| 4 | Day of the week | 星期几 | int | 2-6 | 2=周一, 6=周五 |
| 5 | Seasons | 季节 | int | 1-4 | 1=夏, 4=春 |
| 6 | Transportation expense | 交通费用 | int | 118-388 | 月交通费用(雷亚尔) |
| 7 | Distance from Residence to Work | 通勤距离 | int | 5-52 | 公里数 |
| 8 | Service time | 工龄 | int | 1-29 | 年数 |
| 9 | Age | 年龄 | int | 27-58 | 周岁 |
| 10 | Work load Average/day | 日均工作负荷 | float | 205-350 | 目标达成量/天 |
| 11 | Hit target | 达标率 | int | 81-100 | 百分比 |
| 12 | Disciplinary failure | 违纪记录 | int | 0-1 | 0=否, 1=是 |
| 13 | Education | 学历 | int | 1-4 | 1=高中, 4=博士 |
| 14 | Son | 子女数量 | int | 0-4 | 子女人数 |
| 15 | Social drinker | 饮酒习惯 | int | 0-1 | 0=否, 1=是 |
| 16 | Social smoker | 吸烟习惯 | int | 0-1 | 0=否, 1=是 |
| 17 | Pet | 宠物数量 | int | 0-8 | 宠物数量 |
| 18 | Weight | 体重 | int | 56-108 | 公斤 |
| 19 | Height | 身高 | int | 163-196 | 厘米 |
| 20 | Body mass index | BMI指数 | float | 19-38 | 体重/身高² |
| 21 | Absenteeism time in hours | 缺勤时长 | int | 0-120 | 目标变量(小时) |
### 2.2 特征分类
#### 2.2.1 类别型特征
| 字段名 | 类别数 | 类别说明 |
|--------|--------|----------|
| Reason for absence | 29 | 0-28ICD疾病代码或非疾病原因 |
| Month of absence | 12 | 1-12月 |
| Day of the week | 5 | 周一至周五 |
| Seasons | 4 | 夏秋冬春 |
| Disciplinary failure | 2 | 是/否 |
| Education | 4 | 高中/本科/研究生/博士 |
| Social drinker | 2 | 是/否 |
| Social smoker | 2 | 是/否 |
#### 2.2.2 数值型特征
| 字段名 | 类型 | 范围 | 均值 | 标准差 |
|--------|------|------|------|--------|
| Transportation expense | 连续 | 118-388 | 221.3 | 69.1 |
| Distance from Residence to Work | 连续 | 5-52 | 29.6 | 14.8 |
| Service time | 连续 | 1-29 | 12.0 | 5.7 |
| Age | 连续 | 27-58 | 36.9 | 6.5 |
| Work load Average/day | 连续 | 205-350 | 270.7 | 37.1 |
| Hit target | 连续 | 81-100 | 94.6 | 4.0 |
| Son | 离散 | 0-4 | 1.0 | 1.1 |
| Pet | 离散 | 0-8 | 0.8 | 1.5 |
| Weight | 连续 | 56-108 | 79.0 | 12.4 |
| Height | 连续 | 163-196 | 172.9 | 6.0 |
| Body mass index | 连续 | 19-38 | 26.7 | 4.3 |
| Absenteeism time in hours | 连续 | 0-120 | 6.9 | 13.3 |
### 2.3 缺勤原因详细说明
#### 2.3.1 ICD疾病分类代码1-21
| 代码 | ICD分类 | 疾病类型 |
|------|---------|----------|
| 1 | I | 传染病和寄生虫病 |
| 2 | II | 肿瘤 |
| 3 | III | 血液及造血器官疾病 |
| 4 | IV | 内分泌、营养和代谢疾病 |
| 5 | V | 精神和行为障碍 |
| 6 | VI | 神经系统疾病 |
| 7 | VII | 眼及其附属器疾病 |
| 8 | VIII | 耳及乳突疾病 |
| 9 | IX | 循环系统疾病 |
| 10 | X | 呼吸系统疾病 |
| 11 | XI | 消化系统疾病 |
| 12 | XII | 皮肤和皮下组织疾病 |
| 13 | XIII | 肌肉骨骼系统和结缔组织疾病 |
| 14 | XIV | 泌尿生殖系统疾病 |
| 15 | XV | 妊娠、分娩和产褥期 |
| 16 | XVI | 围产期疾病 |
| 17 | XVII | 先天性畸形 |
| 18 | XVIII | 症状、体征异常发现 |
| 19 | XIX | 损伤、中毒 |
| 20 | XX | 外部原因导致的发病和死亡 |
| 21 | XXI | 影响健康状态的因素 |
#### 2.3.2 非疾病原因代码22-28
| 代码 | 名称 | 说明 |
|------|------|------|
| 22 | 医疗随访 | 患者定期随访复查 |
| 23 | 医疗咨询 | 门诊就医咨询 |
| 24 | 献血 | 无偿献血活动 |
| 25 | 实验室检查 | 医学检验检查 |
| 26 | 无故缺勤 | 未经批准的缺勤 |
| 27 | 理疗 | 物理治疗康复 |
| 28 | 牙科咨询 | 口腔科就诊 |
#### 2.3.3 特殊值
| 代码 | 说明 |
|------|------|
| 0 | 未知原因(数据中存在) |
### 2.4 季节编码说明
| 代码 | 季节 | 月份范围(巴西) |
|------|------|------------------|
| 1 | 夏季 | 12月-2月 |
| 2 | 秋季 | 3月-5月 |
| 3 | 冬季 | 6月-8月 |
| 4 | 春季 | 9月-11月 |
### 2.5 学历编码说明
| 代码 | 学历 | 说明 |
|------|------|------|
| 1 | 高中 | 高中及以下学历 |
| 2 | 本科 | 大学本科学历 |
| 3 | 研究生 | 硕士研究生 |
| 4 | 博士 | 博士研究生 |
---
## 3. 数据预处理
### 3.1 数据清洗
#### 3.1.1 缺失值处理
数据集本身无缺失值,但在预处理过程中需确保:
```
检查步骤:
1. 统计每个字段的缺失值数量
2. 如发现缺失值,数值型用中位数填充,类别型用众数填充
```
#### 3.1.2 异常值处理
| 字段 | 异常值判定标准 | 处理方式 |
|------|----------------|----------|
| Absenteeism time in hours | > 24小时超过一天 | 保留,但做标记 |
| Work load Average/day | < 100 或 > 500 | 检查后决定保留或剔除 |
| Age | < 18 或 > 65 | 检查数据有效性 |
#### 3.1.3 数据类型转换
| 字段 | 原始类型 | 转换后类型 | 说明 |
|------|----------|------------|------|
| ID | int | int | 保持不变 |
| Reason for absence | int | category | 转为类别型 |
| Month of absence | int | category | 转为类别型 |
| Day of the week | int | category | 转为类别型 |
| Seasons | int | category | 转为类别型 |
| Education | int | category | 转为类别型 |
| Disciplinary failure | int | category | 转为类别型 |
| Social drinker | int | category | 转为类别型 |
| Social smoker | int | category | 转为类别型 |
### 3.2 特征编码
#### 3.2.1 独热编码 (One-Hot Encoding)
对以下类别型特征进行独热编码:
| 字段 | 编码后特征数 | 说明 |
|------|--------------|------|
| Reason for absence | 29 | 每个原因一个二进制特征 |
| Month of absence | 12 | 每个月份一个二进制特征 |
| Day of the week | 5 | 每个星期一个二进制特征 |
| Seasons | 4 | 每个季节一个二进制特征 |
| Education | 4 | 每个学历一个二进制特征 |
| Disciplinary failure | 2 | 是/否两个特征 |
| Social drinker | 2 | 是/否两个特征 |
| Social smoker | 2 | 是/否两个特征 |
**编码示例**
```
原始数据Reason for absence = 23
编码后:
Reason_0: 0
Reason_1: 0
...
Reason_23: 1
...
Reason_28: 0
```
#### 3.2.2 标准化处理 (StandardScaler)
对以下数值型特征进行标准化处理均值为0标准差为1
| 字段 | 标准化公式 |
|------|------------|
| Transportation expense | (x - μ) / σ |
| Distance from Residence to Work | (x - μ) / σ |
| Service time | (x - μ) / σ |
| Age | (x - μ) / σ |
| Work load Average/day | (x - μ) / σ |
| Hit target | (x - μ) / σ |
| Son | (x - μ) / σ |
| Pet | (x - μ) / σ |
| Weight | (x - μ) / σ |
| Height | (x - μ) / σ |
| Body mass index | (x - μ) / σ |
### 3.3 特征工程
#### 3.3.1 派生特征
可考虑创建以下派生特征:
| 派生特征 | 计算方式 | 说明 |
|----------|----------|------|
| has_children | Son > 0 | 是否有子女(二分类) |
| has_pet | Pet > 0 | 是否有宠物(二分类) |
| age_group | 年龄分组 | 青年/中年/老年 |
| service_category | 工龄分组 | 新员工/老员工 |
| bmi_category | BMI分组 | 正常/超重/肥胖 |
| workload_level | 负荷等级 | 低/中/高 |
#### 3.3.2 特征选择
基于特征重要性分析,选择对预测最有价值的特征:
| 优先级 | 特征 | 选择依据 |
|--------|------|----------|
| 高 | Reason for absence | 业务含义明确,影响直接 |
| 高 | Transportation expense | 特征重要性高 |
| 高 | Distance from Residence to Work | 特征重要性高 |
| 高 | Service time | 特征重要性高 |
| 高 | Age | 特征重要性高 |
| 中 | Work load Average/day | 有一定影响 |
| 中 | Body mass index | 有一定影响 |
| 中 | Social drinker | 群体差异明显 |
| 低 | Pet | 影响较小 |
| 低 | Height | 信息可由BMI代替 |
### 3.4 数据划分
#### 3.4.1 训练集/测试集划分
| 数据集 | 比例 | 记录数 | 用途 |
|--------|------|--------|------|
| 训练集 | 80% | 592条 | 模型训练 |
| 测试集 | 20% | 148条 | 模型评估 |
#### 3.4.2 划分方式
- 使用分层抽样,确保各缺勤原因在训练集和测试集中比例一致
- 随机种子固定random_state=42保证结果可复现
---
## 4. 数据存储方案
### 4.1 目录结构
```
backend/data/
├── raw/ # 原始数据
│ └── Absenteeism_at_work.csv # UCI原始数据集
├── processed/ # 处理后数据
│ ├── clean_data.csv # 清洗后的数据
│ ├── encoded_data.csv # 编码后的数据
│ ├── train_data.csv # 训练数据
│ └── test_data.csv # 测试数据
└── analysis/ # 分析结果数据
├── statistics.json # 统计结果
├── correlation.json # 相关性矩阵
└── feature_importance.json # 特征重要性
```
### 4.2 模型存储
```
backend/models/
├── rf_model.pkl # 随机森林模型
├── xgb_model.pkl # XGBoost模型
├── kmeans_model.pkl # K-Means模型
├── scaler.pkl # StandardScaler对象
├── encoder.pkl # OneHotEncoder对象
└── model_info.json # 模型元信息
```
### 4.3 数据文件格式
#### 4.3.1 CSV文件格式
```
分隔符:分号 (;)
编码UTF-8
表头:第一行为字段名
```
#### 4.3.2 JSON文件格式
```json
{
"created_at": "2026-03-01T10:00:00",
"version": "1.0",
"data": {
// 具体数据内容
}
}
```
---
## 5. 数据字典
### 5.1 原始数据字典
| 字段名 | 数据类型 | 是否为空 | 默认值 | 说明 |
|--------|----------|----------|--------|------|
| ID | INTEGER | NOT NULL | - | 员工唯一标识 |
| Reason for absence | INTEGER | NOT NULL | - | 缺勤原因代码 |
| Month of absence | INTEGER | NOT NULL | - | 月份(1-12) |
| Day of the week | INTEGER | NOT NULL | - | 星期(2-6) |
| Seasons | INTEGER | NOT NULL | - | 季节(1-4) |
| Transportation expense | INTEGER | NOT NULL | - | 交通费用 |
| Distance from Residence to Work | INTEGER | NOT NULL | - | 通勤距离(km) |
| Service time | INTEGER | NOT NULL | - | 工龄(年) |
| Age | INTEGER | NOT NULL | - | 年龄 |
| Work load Average/day | REAL | NOT NULL | - | 日均工作负荷 |
| Hit target | INTEGER | NOT NULL | - | 达标率(%) |
| Disciplinary failure | INTEGER | NOT NULL | 0 | 违纪记录(0/1) |
| Education | INTEGER | NOT NULL | - | 学历(1-4) |
| Son | INTEGER | NOT NULL | 0 | 子女数量 |
| Social drinker | INTEGER | NOT NULL | 0 | 饮酒习惯(0/1) |
| Social smoker | INTEGER | NOT NULL | 0 | 吸烟习惯(0/1) |
| Pet | INTEGER | NOT NULL | 0 | 宠物数量 |
| Weight | INTEGER | NOT NULL | - | 体重(kg) |
| Height | INTEGER | NOT NULL | - | 身高(cm) |
| Body mass index | REAL | NOT NULL | - | BMI指数 |
| Absenteeism time in hours | INTEGER | NOT NULL | - | 缺勤时长(目标变量) |
---
## 6. 附录
### 6.1 数据统计摘要
```
数据集基本信息:
- 记录数740
- 特征数21
- 员工数36
- 缺勤总时长5028小时
- 平均缺勤时长6.9小时
缺勤原因TOP5
1. 医疗咨询(23)149次 (20.1%)
2. 牙科咨询(28)112次 (15.1%)
3. 理疗(27)94次 (12.7%)
4. 疾病咨询(22)74次 (10.0%)
5. 消化系统疾病(11)59次 (8.0%)
学历分布:
- 高中633人 (85.5%)
- 本科79人 (10.7%)
- 研究生及以上28人 (3.8%)
生活习惯:
- 饮酒者340人 (45.9%)
- 吸烟者90人 (12.2%)
```
### 6.2 文档修改历史
| 版本 | 日期 | 修改人 | 修改内容 |
|------|------|--------|----------|
| V1.0 | 2026-03 | 张硕 | 初始版本 |
---
**文档结束**