# 数据设计文档 ## 基于多维特征挖掘的员工缺勤分析与预测系统 **文档版本**: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-28,ICD疾病代码或非疾病原因 | | 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 | 张硕 | 初始版本 | --- **文档结束**