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

13 KiB
Raw Blame History

数据设计文档

基于多维特征挖掘的员工缺勤分析与预测系统

文档版本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文件格式

{
  "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 张硕 初始版本

文档结束