4. 数据清洗与预处理:缺失值处理、异常值检测、数据标准化、时间序列对齐等实操方法
康养客流数据在采集过程中,往往受设备故障、人工录入误差、系统接口波动等因素影响,形成“脏数据”。若未经清洗直接建模,轻则导致趋势误判,重则影响床位周转率预测、护理排班及物资采购决策。本章聚焦康养场景下最核心的四类预处理任务:缺失值处理、异常值检测、数据标准化与时间序列对齐,并结合养老机构、社区日间照料中心及康复医院的真实数据特征,给出可落地的实操方法。
4.1 缺失值处理:从“丢弃”到“智能填补”
核心原理
康养客流数据缺失通常分为三类:随机缺失(MAR)、完全随机缺失(MCAR)和非随机缺失(MNAR)。例如,某养老机构门禁系统在夜间22:00-06:00时段因系统维护导致记录缺失,属于非随机缺失;而个别老人因临时外出未刷卡,属于随机缺失。处理策略需根据缺失比例、业务含义及后续建模需求综合判断。
判断方法与操作流程
| 缺失比例 | 推荐策略 | 适用场景 | 注意事项 |
|---|---|---|---|
| < 5% | 直接删除缺失行 | 数据量大且缺失随机 | 删除前需确认不引入偏差 |
| 5% - 20% | 均值/中位数填补 | 数值型客流指标 | 会降低方差,需评估影响 |
| 20% - 40% | 前向填充/插值法 | 时间序列型数据 | 适用于趋势平稳场景 |
| > 40% | 模型预测填补(KNN/回归) | 关键特征字段 | 需避免数据泄露 |
案例拆解:某康复医院门诊量缺失处理
某康复医院2024年1-6月门诊量数据中,2月10日-17日(春节假期)因系统升级导致连续8天数据缺失。若直接删除,会破坏周周期性;若用全局均值填补,会严重低估春节后康复需求反弹。
# Python伪代码示例
import pandas as pd
# 使用前向填充+周周期修正
df['门诊量'] = df['门诊量'].fillna(method='ffill')
# 对春节假期进行专项修正:取2023年同期增长率
df.loc['2024-02-10':'2024-02-17', '门诊量'] = df['门诊量'] * 1.15
结果对比:填补后2月日均门诊量较1月下降12%,而实际业务复盘显示下降约10%,误差控制在可接受范围。若使用全局均值填补,误差将达28%。
4.2 异常值检测:识别“真异常”与“假噪声”
核心原理
康养客流中的异常值可分为两类:真异常(如某日探访人数突增3倍,可能因举办大型活动)和假噪声(如传感器故障导致某小时记录为0)。检测目标不是简单剔除,而是区分后分别处理。
检测方法对比
| 方法 | 原理 | 适用场景 | 康养场景示例 |
|---|---|---|---|
| 3σ原则 | 超出均值±3倍标准差 | 正态分布数据 | 日常探访人数波动 |
| IQR箱线图 | 超出Q1-1.5×IQR或Q3+1.5×IQR | 偏态分布数据 | 住院时长分布 |
| DBSCAN聚类 | 基于密度识别离群点 | 多维特征数据 | 老人活动轨迹异常 |
| 孤立森林 | 随机分割特征空间 | 高维数据 | 多源客流特征组合 |
实战场景:社区日间照料中心客流突降排查
某社区日间照料中心3月某周客流从日均45人骤降至12人。IQR检测显示为异常值,但业务排查发现:该周社区进行水管改造,导致部分老人无法前来。此时异常值反映的是真实业务事件,不应剔除,而应标记为“事件型异常”并保留用于后续归因分析。
4.3 数据标准化:让不同量纲特征可比
核心原理
康养客流分析常涉及多个量纲差异巨大的特征:日客流量(几十到几百)、老人年龄(60-100岁)、护理等级(1-5级)、停留时长(分钟)。若不标准化,K-Means聚类、PCA降维、神经网络等算法会偏向数值大的特征。
三种标准化方法对比
| 方法 | 公式 | 输出范围 | 适用场景 |
|---|---|---|---|
| Z-score | (x-μ)/σ | 均值0,标准差1 | 数据近似正态分布 |
| Min-Max | (x-min)/(max-min) | [0,1] | 有明确边界的数据 |
| RobustScaler | (x-median)/IQR | 无固定范围 | 存在较多异常值 |
4.4 时间序列对齐:多源数据“同频共振”
核心原理
康养客流数据往往来自多个系统:门禁系统(精确到秒)、预约平台(精确到分钟)、活动签到表(精确到天)。时间序列对齐的目标是统一时间粒度,使不同来源的数据能在同一时间轴上比较和融合。
对齐操作流程
- 确定基准粒度:根据分析目标选择小时/天/周。预测每日护理需求用“天”,分析高峰时段用“小时”。
- 重采样(Resample):将高粒度数据聚合(如15分钟→1小时),或将低粒度数据插值(如天→小时需谨慎)。
- 时区与节假日修正:跨区域连锁养老机构需统一时区;法定节假日需单独标记。
- 滞后变量构造:为捕捉“昨日客流对今日的影响”,需生成lag-1、lag-7等特征。
案例拆解:多源数据对齐驱动护理排班优化
某大型养老社区需整合三类数据:①门禁出入记录(秒级);②护理服务工单(分钟级);③老人活动签到(天级)。目标:预测未来7天每日护理工时需求。
对齐过程:
# 将门禁数据聚合为小时级
df_door_hourly = df_door.resample('H', on='timestamp').agg({'count': 'sum'})
# 将护理工单对齐到小时
df_care_hourly = df_care.resample('H', on='start_time').agg({'duration_min': 'sum'})
# 合并并构造滞后特征
df_merged = df_door_hourly.join(df_care_hourly, how='outer').fillna(0)
df_merged['lag_7d'] = df_merged['count'].shift(7*24)
结果:对齐后模型预测误差(MAE)从4.2小时/天降至2.8小时/天,护理排班准确率提升33%。
4.5 总结复盘:清洗质量决定分析上限
| 环节 | 核心目标 | 关键输出 | 质量检查指标 |
|---|---|---|---|
| 缺失值处理 | 减少信息损失 | 完整数据集 | 缺失率降至<1% |
| 异常值检测 | 区分真伪异常 | 异常标注台账 | 异常识别召回率>90% |
| 数据标准化 | 消除量纲影响 | 标准化特征矩阵 | 特征方差可比 |
| 时间对齐 | 统一时间基准 | 对齐后时序表 | 时间戳完整率100% |