实验二:特征工程与数据标准化及降噪处理

实验目的:

- 掌握特征工程的方法,根据乘员舱降温的机理和数据特点提取、生成有效特征,提高模型对复杂关系的刻画能力。

- 学习对不同分布的数据应用适当的标准化/归一化技术,将特征缩放到合理范围,以加速模型收敛并避免某些特征主导训练。

- 了解传感器数据中的噪声对预测精度的影响,学会利用数字信号处理手段(如滤波、平滑)对时间序列数据进行降噪清洗,提升模型输入的数据质量。

实验资源要求:

- 数据: 实验一清洗后得到的乘员舱降温数据集(包含完整且一致的特征和目标变量时序)。

- 软件环境: Python 3.x,Pandas、NumPy用于特征处理,scikit-learn库用于数据标准化(提供StandardScaler、MinMaxScaler等),SciPy库(特别是scipy.signal模块)用于滤波降噪,Matplotlib用于可视化处理效果。

- 计算环境: 高性能计算环境,与实验一相同。由于需要对大量数据反复试验特征生成和信号处理,应确保运行效率。

实验时长: 约3小时

实验内容: 本实验在干净数据基础上进一步提升特征表示和数据质量,包括两个核心部分:特征工程和数据标准化与降噪。首先,学生将结合领域知识和数据特点进行特征工程。乘员舱降温过程受多因素影响,本环节引导学生思考如何衍生出能够增强模型学习能力的新特征。例如,根据原始环境变量创建组合特征:将多个风口的风速和风温计算平均值,作为整体送风强度的特征;计算舱内外温差或温降速率,帮助模型捕捉温度变化动力;引入时间特征,如将时间序列中的绝对时间转换为相对冷启动后的秒数,或提取是否在特定时间段(模拟白天/夜晚光照差异)。这些衍生特征蕴含着物理意义,有助于模型学习复杂的非线性关系,提高预测精度和稳健性。

图1 Vent Intensity(送风强度)

图2 Delta Temperature(舱内外温差)

图3 Cooling Rate(温降速率)

完成特征衍生后,学生将对特征集进行规范化处理。不同来源的特征量纲各异,例如光照强度值可能远大于温度值范围,如不经处理直接训练可能导致数值较大的特征主导损失函数。基于数据分布选择适当的标准化方法:对于近似服从正态分布的变量,可采用StandardScaler将其转换为零均值、单位方差;对于取值范围固定且无明显异常分布的变量(如比率或介于0-1的值),可采用MinMaxScaler缩放至[0,1]区间。选择方案后,对每个特征应用转换并保存所用的参数(如均值和标准差、最小值和最大值),以便在模型部署时对新数据执行相同变换。标准化将保证各特征在训练中有相近的数值尺度,有助于加快模型收敛并提高数值稳定性。

在标准化之前或之后,视情况对时间序列数据进行降噪处理也是必要步骤。实际采集的传感器数据常包含高频随机噪声,会干扰模型对真正信号模式的学习。因此本实验引入数字滤波技术对关键特征曲线进行平滑。如利用SciPy的信号处理模块,对舱内温度和其它连续变量应用低通滤波或滑动平均,以滤除频繁的小幅抖动[3]。也可使用Savitzky-Golay平滑滤波器,在尽量保持曲线总体形状的同时减少噪声。降噪处理需谨慎把握尺度,既要滤除噪声又不能过度平滑以致损失真实有效的动态变化信号。通过比较滤波前后的曲线,学生可以直观评估降噪效果,确保处理后的曲线更平滑但总体趋势不变。

经过以上步骤,最终将得到特征丰富且经过标准化和降噪的训练数据集。这一高质量特征数据为后续模型构建提供了坚实基础,体现了“垃圾进,垃圾出”的理念:只有确保输入数据的可靠和表征力,才能训练出精度高且稳健的模型。

实验步骤:

1. 导入预处理数据

技术要点: 多源合并前的强校验(模式、单位、时间戳、一致性)、内存友好读取、目标泄漏前置检查、重采样基础统计反演采样频率。

操作清单:

  1. 文件层面完整性:

    • 记录 size/hash/rowcount/mtime;对压缩(.gz/.zip)与编码(UTF-8/GBK)自动识别与回退;识别 CSV 方言(分隔符/引号/转义)。

    • 源文件目录比对期望清单,缺失或新增即告警。

  2. 模式(Schema)与单位校验:

    • 用 显式模式(如 pandera/JSON-Schema)约束字段名、dtype(Float32/Int64[NA]/string[pyarrow]/category)、单位与值域。

    • 统一单位:温度→℃(检测混用℃/℉并转换)、光照→W/m²(如源为 lux,保留原列并新增换算列,避免信息损失);速度→km/h;风速→m/s。

    • 值域硬约束(越界置标记):speed ∈ [0, 200]、sunlight ≥ 0、vent_temp ∈ [0, 30]、cabin_temp ∈ [-10, 70]。

  3. 时间戳治理与频率反演:

    • 统一时区(推荐归一到 UTC,同时保留 tz_local);校验单调性、重复、跳秒、倒序;绘制 Δt 直方图反推主采样频率与不规则采样段。

    • 对每个 session_id 统计起止时间、记录数、Δt 众数/均值/方差。

  4. 内存与性能优化:

    • 先 read_csv(..., chunksize=...) 抽样做模式/单位/值域预检;据方差和基数降精度(如 float64→float32,高基数整型仍保留)、高基数字符串分类化。

    • 长文本/备注列哈希指纹化(保留字典映射)以减小内存。

  5. 泄漏前置检查:

    • 明确目标 y(舱内温度/曲线)与输入 X(环境/送风/时间特征)。

    • 严禁 在此阶段做任何“使用未来信息”的变换(如跨越当前时刻的滑窗汇总、对照未来温度反推标签)。

  6. 健壮性抽检: 随机抽取 ≥3 个 session_id,逐行人工核对关键变量、单位与时间戳对齐是否一致。

质量门控与验收:

  • 模式/单位/值域校验零错误;时间戳单调性 ≥99.99%;重复行率 <0.1%;不可解析记录率 <0.05%。

产出物:

  • data_catalog.json(字段/单位/dtype/值域)、ingestion_report.html(异常摘要与直方图)、session_stats.csv。

2. 特征衍生与选择

技术要点: 物理可解释特征 + 统计/时序特征 + 交互/非线性变换;“只用历史侧窗口”的时间一致性;多重共线与冗余控制(VIF/条件数/相关阈值);多视角选择(Filter/Wrapper/Embedded)。

操作清单:

  1. 物理可解释特征(示例):

    • 综合送风量/强度

      • 多风口风速/温度 v_i, T_i → vent_speed_avg = mean(v_i),vent_temp_avg = mean(T_i);

      • 换热驱动力近似:vent_intensity = vent_speed_avg × max(ext_temp - vent_temp_avg, 0)。

    • 舱内外温差:delta_temp = cabin_temp - ext_temp(热负荷指示)。

    • 温降速率:cooling_rate ≈ -d(cabin_temp)/dt;可用后向差分(仅历史)或 Savitzky-Golay 的导数项(训练集拟合参数禁止泄漏)。

    • 阶段标签:基于变点检测(空调开启、风量档位变化)生成 phase ∈ {热浸, 快速降温, 渐进稳态},并派生分段斜率/阶段时长。

  2. 时序统计与时滞特征:

    • 仅用历史窗口(如过去 60/180/300 秒)计算:均值/中位/分位数、方差、范围、Hampel 稳健均值、上升/下降计数。

    • 滞后特征:依据 CCF 估计的响应时滞 τ,为 vent_speed_avg、vent_intensity 等生成 lag τ 列(如 5s、10s、20s)。

    • 注意:所有滚动/滞后计算以右开区间实现,严格避免看到未来。

  3. 时间与场景特征:

    • t_since_start、is_day(光照阈值派生)、weekday/hour(若跨日实验)、session_id 粒度统计(起始温度、平均外温、平均车速)。

    • 交互项:is_day × sunlight、vent_speed_avg × delta_temp 等。

  4. 非线性/尺度变换(按需):

    • 对正偏厚尾变量尝试 log1p/Yeo-Johnson 变换(训练集拟合)并保留原列以供比较。

    • 对界限型变量使用 logit(需映射到 (0,1))。

  5. 冗余与共线控制:

    • 计算 Spearman 相关矩阵(对单调非线性鲁棒),阈值如 |ρ|>0.9 触发冗余标记;

    • VIF 与条件数,识别多重共线;

    • 以“解释力优先、冗余最少”为准则,保留信息增益高且相对独立的特征。

  6. 多视角特征选择:

    • Filter:互信息(MI)、方差筛选(剔除近零方差)、单变量相关 + 置换检验(时间打乱需按块处理);

    • Wrapper:时间感知的 Blocked/Group K-Fold 或 Walk-Forward 上做递归特征消除(RFE);

    • Embedded:L1/ElasticNet、基于梯度模型(XGBoost/LightGBM)的特征重要度(仅用于筛选参考)。

    • 统一将候选方案在验证集上对比(相同评估协议),选择稳定且可解释的一组。

  7. 可追溯登记: 为每个特征生成 feature_registry.yaml 条目(来源、公式/窗口、是否使用历史、依赖列、单位、创建时间、责任人)。

质量门控与验收:

  • 所有时间窗与滞后特征均“只看过去”;VIF 阈值(如 >10)触发剔除或合并;最终入模特征数量与可解释性达成平衡;特征生成脚本可重复运行、产出一致。

产出物:

  • X_features.parquet(含 mask/lag/window 元数据列)、feature_registry.yaml、feature_selection_report.html。

3. 特征集拆分

技术要点: 时间序列防泄漏切分(时间顺序/会话分组)、分布一致性评估(PSI/JSD)、Walk-Forward 或 Purged K-Fold(含 Embargo)以评估稳健性。

操作清单:

  1. 切分策略确定:

    • 单一长序列:按时间 前 80% / 后 20%;

    • 多会话/多工况:按 session_id 分组切分(整组进入训练或测试),避免同会话跨集合。

    • 若需模型选择/调参:在训练集内部使用 Purged K-Fold(移除每折边界附近的“泄漏缓冲”窗口)或 Walk-Forward Validation。

  2. 序列样本构造一致性:

    • 以固定窗口 T_in 构造输入、以 H_out 构造标签(单/多步);确保训练窗口不跨越切分边界;

    • 避免重叠引起的信息泄漏(如同一物理时刻进入不同集合)。

  3. 分布一致性评估:

    • 计算训练 vs 测试在关键特征上的 PSI/JSD 或均值±3σ 比较;若偏离过大,报告“域偏移”并记录风险。

    • 记录目标 y 的起始温度、稳态温度、降温斜率等分布,确保测试集覆盖合理。

  4. 索引固化与可复现:

    • 导出 split_indices.json(或行号列表、时间范围 + session_id 列表),在后续流程中只读使用。

质量门控与验收:

  • 测试集零泄漏(无重叠时刻/会话);PSI 在多数特征上 <0.2(可接受);索引文件可复现实验结果(哈希校验通过)。

产出物:

  • split_indices.json、split_drift_report.html(分布对齐与漂移分析)。

4. 选择并应用标准化

技术要点: 按分布选择变换(Standard/Robust/MinMax/Quantile/Yeo-Johnson),只在训练集拟合,记录参数以便部署复用与逆变换;验证变换后统计与数值稳定性。

操作清单:

  1. 分布诊断与择法:

    • 直方图 + 偏度/峰度、Q-Q 图;厚尾/离群显著者优先 RobustScaler(中位数/四分位);

    • 固定范围/比例类(0–1、占比)→ MinMaxScaler;

    • 严重偏态可先 log1p/Yeo-Johnson 再 Standard;

    • 若需将不同量纲对齐但保持秩信息,可 QuantileTransformer(注意可能削弱物理可解释性)。

  2. 训练集拟合、全集变换:

    • 仅以训练集 X_train 拟合各列变换器(可用 ColumnTransformer 管线化);

    • 用相同参数变换 X_train, X_val, X_test;禁止对测试重新拟合任何变换。

    • 保留变换前的原始列(或保存映射字典),便于回溯与可解释。

  3. 参数落盘与可逆性:

    • 保存均值/标准差、最小/最大、λ(Yeo-Johnson)、分位点(Quantile);

    • 提供 inverse_transform 接口说明,用于部署时把模型输出(若在标准化空间)还原至物理量。

  4. 数值与稳定性检查:

    • 变换后均值接近 0、方差接近 1(Standard 场景);MinMax 后范围在 [0,1];

    • 检查极端值压缩是否导致信息损失(绘制变换前后分布对照);

    • 记录“溢出/无穷/NaN”检测结果与处理策略(如极小方差列回退为常数或剔除)。

质量门控与验收:

  • 变换参数均来自训练集;测试集任何一列未参与拟合;变换后不存在 NaN/Inf;变换报告(均值/方差/范围)与期望一致。

产出物:

  • scalers.joblib(或 scaler_parameters.json)、standardization_report.html(分布前后对照、异常日志)。

5. 时间序列降噪

技术要点: 频域视角选择滤波参数(Welch PSD)、零相位/因果滤波的取舍、边界效应控制、SNR 与下游任务效益评估(不过度平滑)。

操作清单:

  1. 谱分析与截止频率估计:

    • 对 cabin_temp、vent_speed、sunlight 等计算功率谱密度(Welch),识别主要能量带;

    • 依据采样频率 f_s 设置截止 f_c(如把高于 0.03–0.05 Hz 的扰动视为噪声)作为初始值。

  2. 滤波器选择与实现:

    • 移动平均(窗口 5–21 s,奇数窗,中心或因果);

    • Savitzky-Golay(window_length 与 polyorder 组合)在平滑同时保边缘形状;

    • IIR 低通(Butterworth/Chebyshev):训练/评估离线分析可用 零相位 filtfilt,但若面向在线推理,需选择因果实现(允许少量滞后)。

    • 小波去噪(可选):对非平稳噪声更鲁棒(阈值选取、基函数选择需记录)。

  3. 边界/相位与异常处理:

    • 避免 filtfilt 的端点振铃(镜像延拓/填充);

    • 零相位滤波只用于离线可视化或特征工程(不得让模型看到未来);

    • 在含缺失/异常段先做插补/标记,再滤波。

  4. 参数扫描与客观准则:

    • 对候选窗口/截止频率构建网格,计算平滑前后噪声能量比(高频能量衰减)、一阶导数 RMSE(避免斜率被过度压缩);

    • 选取能让 SNR 提升且不破坏关键转折点的参数组;对不同变量分别定制。

  5. 双轨数据保留:

    • 始终保留原始序列(*_raw)与降噪后序列(*_denoised),并新增 denoise_method/params 元数据列;

    • 模型训练阶段可对比“使用与不使用降噪”的性能差异,确保收益真实。

质量门控与验收:

  • 降噪后关键转折(如快速降温段)时间定位偏差 < 1 个采样周期;SNR 提升显著(>3 dB 或预设阈值);对在线场景采用因果滤波或等效替代方案。

产出物:

  • denoise_policy.yaml(各变量滤波器与参数)、signal_compare_plots/(前后对比图)、denoise_metrics.csv(SNR/导数RMSE/转折保持率)。

6. 整理输出结果

技术要点: 版本化、可复现、可追溯;切分与变换参数固化;数据卡与质量断言;原子写入与校验。

操作清单:

  1. 数据产物落盘:

    • X_train/X_val/X_test 与 y_*(NumPy .npz 或 Parquet);同时导出“整表”特征(含元数据列与面向分析的 *_raw/*_denoised)。

    • 统一命名与版本号:YYYYMMDD.HHMM。

  2. 索引与参数固化:

    • 保存 split_indices.json、scaler_parameters.json/scalers.joblib、denoise_policy.yaml、feature_registry.yaml;

    • 生成 processing_meta.json(代码版本、依赖包版本、随机种子、运行环境摘要)。

  3. 质量断言与发布门禁:

    • 通过自动化校验(Great Expectations/自定义):缺失率阈值、值域/增速规则、时间单调、变换后均值/方差/范围、无 NaN/Inf。

    • 与上版对比 Drift(PSI/KL);非预期漂移阻断发布。

  4. 原子写与校验:

    • 先写临时文件 → 校验(行数、哈希 SHA-256、随机抽样比对)→ 原子重命名;

    • 导出 head_1k.csv 便于人工复核。

  5. 文档与数据卡:

    • 生成 data_card.html/pdf:覆盖范围、使用限制、潜在偏差、预期用途、联系方式;

    • CHANGELOG.md:与上版比较(样本量、分布、异常/缺失比率、特征变更)。

质量门控与验收:

  • 所有断言通过;哈希与行数一致;不同环境重复执行产出统计一致;文档齐全、可一键复现实验二起点。

产出物:

  • 数据:Xy_splits.npz 或 Xy_parquet/、aligned_features.parquet;

  • 元数据:split_indices.json、scalers.joblib/scaler_parameters.json、denoise_policy.yaml、feature_registry.yaml、processing_meta.json;

  • 文档与校验:standardization_report.html、denoise_metrics.csv、data_card.pdf/html、CHANGELOG.md、validation_report.html。

最后更新于