4. 数据清洗与预处理:缺失值处理、异常值检测、数据标准化、时间序列对齐等实操方法

康养客流数据在采集过程中,往往受设备故障、人工录入误差、系统接口波动等因素影响,形成“脏数据”。若未经清洗直接建模,轻则导致趋势误判,重则影响床位周转率预测、护理排班及物资采购决策。本章聚焦康养场景下最核心的四类预处理任务:缺失值处理、异常值检测、数据标准化与时间序列对齐,并结合养老机构、社区日间照料中心及康复医院的真实数据特征,给出可落地的实操方法。

康养客流数据清洗与预处理链路 原始数据源 门禁刷卡 / 预约系统 探访登记 / 活动签到 床位管理 / 护理记录 ① 缺失值处理 删除 / 均值 / 中位数 前向填充 / 插值法 模型预测填补 ② 异常值检测 3σ原则 / IQR箱线图 DBSCAN聚类 / 孤立森林 业务规则校验 ③ 标准化 Z-score Min-Max RobustScaler ④ 时间序列对齐 统一时间粒度(小时/天/周) | 重采样(resample) | 时区与节假日修正 | 滞后变量构造 对齐门禁、预约、护理排班多源时间戳 清洗后数据集 用于客流趋势分析、预测模型训练、可视化报表 质量评估反馈

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无固定范围存在较多异常值
实操建议:康养客流数据常含极端值(如节假日爆发),推荐优先使用RobustScaler。例如,某养老机构日常探访人数中位数为30人/天,IQR为15人,国庆节当天探访达120人,使用Z-score会将该值放大为异常,而RobustScaler能更稳健地处理。

4.4 时间序列对齐:多源数据“同频共振”

核心原理

康养客流数据往往来自多个系统:门禁系统(精确到秒)、预约平台(精确到分钟)、活动签到表(精确到天)。时间序列对齐的目标是统一时间粒度,使不同来源的数据能在同一时间轴上比较和融合。

对齐操作流程

  1. 确定基准粒度:根据分析目标选择小时/天/周。预测每日护理需求用“天”,分析高峰时段用“小时”。
  2. 重采样(Resample):将高粒度数据聚合(如15分钟→1小时),或将低粒度数据插值(如天→小时需谨慎)。
  3. 时区与节假日修正:跨区域连锁养老机构需统一时区;法定节假日需单独标记。
  4. 滞后变量构造:为捕捉“昨日客流对今日的影响”,需生成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%。

常见误区:①直接合并不同粒度的数据而不重采样,导致时间戳错位;②忽略节假日对客流模式的突变影响;③对缺失时间戳直接填充0,可能掩盖“系统离线”与“真实无人”的区别。

4.5 总结复盘:清洗质量决定分析上限

环节核心目标关键输出质量检查指标
缺失值处理减少信息损失完整数据集缺失率降至<1%
异常值检测区分真伪异常异常标注台账异常识别召回率>90%
数据标准化消除量纲影响标准化特征矩阵特征方差可比
时间对齐统一时间基准对齐后时序表时间戳完整率100%
复盘建议:每次清洗操作都应记录“清洗日志”,包括处理规则、参数、影响行数。建议在项目初期建立“数据质量基线”,后续每次清洗后对比基线,确保数据质量持续提升而非恶化。