数据策略与特征工程

数据策略与特征工程


一、数据EDA(探索性数据分析)

维度 说明
文本长度分布 统计训练集、测试集的文本长度(字符数/词数),判断是否需要截断或滑动窗口
类别分布统计 统计各类别样本数量,识别长尾分布和极端不平衡问题
缺失值分析 检查标注数据是否存在缺失、漏标、错标现象
标注质量检查 抽样检查标注实体边界是否准确,位置偏移是否常见
分布一致性检验 使用KS检验比较训练集和测试集的文本长度、词频分布是否一致
对抗验证 训练分类器区分训练集/测试集,识别分布差异特征(详见本节下方)
右偏分布处理 医疗文本常呈右偏分布,需针对性设计截断策略

1.1 对抗验证(Adversarial Validation)

维度 说明
问题背景 训练集与测试集分布不一致时,本地CV分数与线上LB分数不匹配
核心方法 给训练集打标签0、测试集打标签1,训练二分类器区分两个数据集
判断标准 AUC接近0.5说明分布一致;AUC接近1.0说明分布差异大
利用方式 将分类器预测为"像测试集"的训练样本赋予更高权重,或仅用这些样本做验证集
代码思路 model.fit(train_features, is_test_label) → 取预测概率高的训练样本作为验证集

二、验证集构造策略

方法 说明 适用场景
官方验证集 利用比赛提供的validation.csv,与线上分数大致匹配 最稳定
历史数据构建 使用历史相似比赛数据,按标签构建额外验证集 当前数据不足时
K折交叉验证 5折交叉验证,5份验证集结果平均作为最终CV分数 通用推荐
StratifiedKFold 保持类别比例的分层K折 类别不均衡时
时间划分 按时间顺序划分(时序数据) 时间序列任务
关键原则 说明
数据固定 交叉验证时固定随机种子和折划分,确保实验可复现
分布一致性 验证集分布应与测试集分布保持一致,避免过拟合
线下线上一致 线下验证分数与线上A榜分数一致→结果可靠;线下远高于线上→过拟合风险大

三、样本不均衡解决方案

3.1 采样策略

策略 原理 效果
等概率采样 每个样本等概率被抽到 大类占比远高于小类,模型偏向大类
等类别采样 先等概率选类别,再在类别内选样本 小类样本被过度重复
折中方案 对每个类别频率取P次方(0<P<1),如开根号 将100:1的差距平滑至10:1

3.2 精准权重公式

维度 说明
WeightedRandomSampler 将每个样本的权重设为所属类别频率倒数开根号,放入DataLoader中
原理 采样权重与类别频率成反比,小类样本出现概率相对偏高
示例 最大类1900条、小类16条,差距达百倍;取倒数开根号后差距缩小至约10:1

3.3 类别权重(Class Weight)

维度 说明
CrossEntropyLoss 在交叉熵损失函数中直接加入类别权重,小类权重设为频率倒数或用Softmax归一化
BCE Loss 在BCE Loss计算中调节positive weight赋予正样本更高权重
手动设定 也可手动设定小类权重(如30/100),但类别多时难调
PyTorch实现 计算每类频率倒数→softmax归一化→传入loss的weight参数

3.4 Focal Loss

维度 说明
核心公式 FL(p_t) = -alpha_t * (1-p_t)^gamma * log(p_t)
Alpha参数 控制正负样本权重平衡,通常0.25或按类别频率调整
Gamma参数 控制难分样本的聚焦程度,论文推荐2
调优建议 论文经验值不是所有场景都有效,需根据验证集调整
适用场景 小类样本极少时,alpha+gamma自适应关注难分样本

3.5 Dice Loss 与 OHEM

维度 说明
Dice Loss 源于F1指标的Dice系数,能有效处理负样本信息
分母平方优化 借鉴VNet做法,将Dice Loss分母项平方处理再求和,配合平滑系数,让梯度下降更稳定
OHEM原理 在线困难样本挖掘,筛选出模型预测错误且赋予高置信度的"困难负样本"
阈值筛选 通过计算keep_number,只筛选"顽固负样本"投入损失计算
组合效果 Dice Loss + OHEM组合使用,提升模型在挑战性样本上的训练质量

四、数据增强策略

4.1 文本增强

方法 说明 注意事项
同义词替换 使用同义词词典或Word2Vec相似度替换文本中的词汇 替换比例通常10%~30%
回译增强 中文→英文→日文→中文,通过多语言翻译引入变化 依赖翻译质量,速度较慢
随机操作(EDA) 随机插入/删除/交换,增加模型鲁棒性 替换比例通常10%
实体替换 将文本中的实体替换为同类型其他实体 需与原实体类型相同
Mixup 在Embedding空间做线性插值,非原始文本 正则化效果,提高泛化能力
对抗增强 FGM等对抗训练方法,在文本分类中应用较多 见训练策略章节

4.2 数据生成与自动标注

维度 说明
问题背景 小类别样本数量极少,模型难以学习其特征
爬虫获取 从网站爬取特定类别的实体名称(如电影名、书名、游戏名等)
替换增强 用爬取到的实体替换原文中的同类实体,保持标注不变
插入增强 将爬取到的实体插入到原文本的O(非实体)位置,并添加对应标注
类别平衡 针对样本少的类别重点生成,使各类别样本数量趋于平衡
注意事项 生成数据需符合真实语境,避免产生不合逻辑的句子

五、伪标签(Pseudo-Labeling)

5.1 K折伪标签(自动化降噪)

维度 说明
问题背景 医疗数据人工标注主观性强,存在大量漏标和错标
核心原则 严禁在全量训练集上直接生成伪标签以防过拟合
实现方式 利用K折交叉验证(如5折),让模型仅在它未见过的验证集(Fold 0)上生成预测结果
融合策略 融合多个模型生成的高质量伪标签来替代人工标签重新训练
本质作用 相当于利用AI群体完成自动纠错和降噪

5.2 半监督伪标签(比赛后期冲刺)

维度 说明
适用时机 当模型开发到一定瓶颈时
实现方式 用已经集成的、性能最强的高分模型,去对庞大的无标注测试集(或外部语料)进行预测,打上"伪标签"
置信度阈值 通常取0.9+,过低会引入噪声
混合训练 将带有高置信度伪标签的样本与原训练集混合,再重新训练新模型
核心优势 往往能压榨出最后的一点分数

六、Label Smoothing(标签平滑)

维度 说明
问题背景 多分类任务中one-hot标签存在两个问题:(1) 标注错误时模型学到错误信息;(2) 丢失类间关系信息
核心思想 对one-hot标签进行软化,加入均匀噪声,本质是一种正则化策略
公式 设类别数为K,平滑系数为ε:y_i = (1-ε)·1 + ε/K(真实类别);y_j = ε/K(其他类别)
信息论解释 one-hot信息熵极低,软化后信息熵增大,提供更丰富的类间关系先验;梯度方差更小,训练更稳定
PyTorch实现 nn.CrossEntropyLoss(label_smoothing=0.1)
调优建议 ε通常取0.05~0.1,需根据验证集表现调整;过大会导致模型欠拟合
适用阶段 分类后期提分,通常提升0.1~0.5个百分点

七、TTA(Test Time Augmentation,测试时增强)

维度 说明
核心思想 在测试阶段对测试数据做变换,用变换后的数据预测,将结果加入训练集,间接学习测试数据分布
与伪标签的区别 伪标签直接用原始测试数据预测后加入训练集;TTA对测试数据先做变换(如同义词替换、回译等),模型看到的是变换后的样本
实现流程 (1) 对测试样本做数据增强;(2) 用当前模型对增强后的测试样本预测;(3) 将增强样本+预测标签加入训练集;(4) 重新训练模型
适用条件 比赛规则未明确禁止时可以使用
注意事项 过度使用可能导致过拟合测试集;增强变换应保持语义不变

八、缺失值填充:按缺失原因分类处理

维度 说明
核心原则 不能盲目统一填充,需根据缺失的业务含义分类处理
NA = 不存在该设施 填"None",涉及特征:PoolQC, MiscFeature, Alley, Fence, FireplaceQu, GarageType/Finish/Qual/Cond, BsmtQual/Cond/Exposure/FinType1/2, MasVnrType
NA = 数值为零 填0,涉及特征:GarageYrBlt/Area/Cars, BsmtFinSF1/2, BsmtUnfSF, TotalBsmtSF, BsmtFullBath, BsftHalfBath, MasVnrArea
NA = 局部统计量 按Neighborhood分组取中位数填充,典型特征:LotFrontage
分组填充代码 all_data.groupby("Neighborhood")["LotFrontage"].transform(lambda x: x.fillna(x.median()))
核心优势 保留业务语义信息,比全局均值/中位数填充更精准

九、异常值检测与选择性删除

维度 说明
问题背景 训练集中存在少量极端异常样本,会严重干扰模型学习
检测方法 通过散点图分析特征与目标变量的关系,识别偏离整体趋势的离群点
典型异常 居住面积极大但售价极低的样本(如GrLivArea > 4000且SalePrice < 300000)
删除策略 仅删除确认的异常点,保留其他高价值样本(如高价豪宅)
核心优势 提升模型对正常样本的拟合精度,避免被异常点拉偏

十、目标变量变换

维度 说明
问题背景 房价等连续型目标变量通常呈右偏分布,直接回归会导致模型对高值样本过拟合
log1p变换 使用np.log1p()而非np.log(),避免零值取对数产生负无穷
预测还原 预测完成后使用np.expm1()将结果还原回原始量纲
Box-Cox变换 偏度>0.75的特征做变换,比log适应性更强
核心优势 使目标变量分布更接近正态,降低极端值对损失函数的影响
适用场景 房价预测、销售额预测等右偏连续变量回归任务

十一、特征编码与组合

11.1 数值转类别/有序编码

维度 说明
语义修正 修正语义错误(如建筑类型MSSubClass实为类别但被当作数值),用astype(str)转换
有序特征 有序类别用Label Encoding保留等级关系(如Ex>Gd>TA>Fa>Po)
无序特征 无序类别用One-Hot Encoding

11.2 组合特征工程

维度 说明
领域知识构造 根据业务逻辑构造新特征(如总面积=地下室+1层+2层)
交叉特征 多个特征之间的交互(如特征0 * 特征1、特征0 / 特征2)
聚合特征 按分组统计(如按类别分组计算均值/中位数)

11.3 特征选择方法

方法 原理 适用场景
过滤法 按统计指标(方差/相关系数/互信息)筛选 快速初筛,计算快
包裹法 以模型性能为评价标准搜索特征子集(如RFE) 精确但耗时
嵌入法 利用模型自身特征重要性筛选(如L1正则/树模型importance) 实用推荐
排列重要性 打乱某特征后观察性能下降程度 比内置importance更可靠

十二、社交媒体文本特征工程

维度 说明
问题背景 推文等社交媒体文本包含大量结构化信号(URL、@、#等),仅用文本内容会丢失这些信息
文本统计特征 text_len(字符数)、word_count(词数)、avg_word_len(平均词长)
社交媒体特征 hashtag_count(#标签数)、mention_count(@提及数)、url_count(链接数)
语义辅助特征 digit_count(数字字符数)、uppercase_ratio(大写字母占比)
缺失值二值化 has_keyword(是否有关键词)、has_location(是否有地点),将缺失信息转化为有效特征
特征标准化 使用StandardScaler对非文本特征进行标准化,消除量纲差异
与文本模型融合 将上述特征与BERT/DeBERTa的CLS向量拼接,形成混合输入送入分类器
核心优势 弥补预训练模型对社交媒体特有符号的感知不足,提升分类边界

十三、全量数据重训练(Full Retrain)

维度 说明
问题背景 交叉验证或留出法仅用部分数据训练,浪费了验证集样本的信息
实现方式 先通过GridSearchCV或留出法确定最优超参数,再用全量训练数据重新训练最终模型
关键前提 超参数已通过验证集确认有效,全量训练不会引入过拟合风险
核心优势 充分利用所有标注数据,通常能比部分数据训练提升0.5~1个百分点
注意事项 全量重训练后无法用验证集评估,需依赖之前交叉验证的分数作为参考

十四、领域自适应预训练

维度 说明
问题背景 通用预训练模型(如BERT)在特定领域(如医疗、金融)表现不佳
实现条件 在算力允许的条件下
数据来源 利用比赛官方提供的海量无标签文本(如70G+)或外部数据集,语料需与目标任务领域相关
实现方式 使用掩码语言模型(MLM)接口让模型继续进行预训练,学习领域特定的语言模式和术语
注意事项 数据量过少(如仅1000条)时不建议做继续预训练,容易过拟合
实施步骤 数据预处理→继续预训练→保存新权重→在下游任务Fine-tuning
最终效果 帮助AI提前适应领域语境,提升下游任务表现

十五、无标注语料利用

维度 说明
语料来源 比赛官方提供的无标注数据集、网络爬虫获取的相关领域文本
应用场景 继续预训练、对比学习(SimCSE/ConSERT)、数据增强
对比学习 对同一样本进行不同数据增强,拉近正样本对、推远负样本对
核心原则 语料需与目标任务领域相关,否则可能引入噪声

十六、半监督迁移学习

维度 说明
适用场景 官方训练集数据量较少,模型性能遇到瓶颈
实现方式 从网上寻找与赛题相关的外部数据集,结合半监督学习方法
知识蒸馏 用高分模型对无标注数据生成伪标签,再重新训练新模型
代价评估 需要大量时间寻找合适数据集并调整训练流程,投入产出比需权衡

十七、评价指标深度解析

维度 说明
Macro-F1计算 对每个类别单独计算F1后取平均,小类表现对最终分数影响大
位置敏感性 NER任务中实体位置偏移会导致零分,即使实体文本正确
严格匹配要求 预测实体的起始和结束位置必须与标注完全一致
召回率优化 解码逻辑过于严格会丢失部分预测结果,需平衡精确率和召回率
零分排查 提交分数为0通常是因为位置计算错误或结果文件格式问题

十八、比赛提交注意事项

维度 说明
环境配置 注意包的版本,按照官网要求配置
结果验证 提交分数为0肯定有问题,检查结果文件是否有问题
代码检查 找认识的人检查代码,确保提交格式正确
性能平衡 模型越大占用资源越多,加双向LSTM会更慢,平衡性能和资源

十九、特征交叉高级方法

自动特征交叉

方法 原理 适用场景
FM(Factorization Machine) 用隐向量内积自动学习二阶交叉,参数量O(n*k) 结构化数据分类
DeepFM FM自动二阶 + DNN高阶交叉,共享Embedding 通用首选
DCN(Deep & Cross Network) 交叉网络显式建模有界阶特征交叉 显式交叉需求
AutoInt 多头自注意力机制自动学习特征交互 高阶稀疏特征
xDeepFM CIN压缩交互网络学习向量级交叉 更精细的交叉

特征哈希(Feature Hashing)

维度 说明
核心思想 用哈希函数将高维稀疏特征映射到固定低维空间
公式 hash_index = hash(feature_name) % bucket_size
优势 无需维护词表,内存固定,适合在线学习
劣势 哈希冲突导致信息损失
适用场景 超高维类别特征(如用户ID、物品ID)

二十、数据清洗进阶

重复样本处理

维度 说明
问题 训练集中存在完全重复或近似重复的样本,导致模型对重复样本过拟合
精确去重 完全相同的样本只保留一条
模糊去重 用MinHash/SimHash检测相似度>阈值的样本对
跨集去重 训练集与测试集有重叠样本时,删除训练集中的重叠部分
竞赛价值 数据泄露检测的关键步骤

标签噪声清洗

方法 原理 适用场景
Confident Learning 估计联合分布P(y_hat, y_true),筛选噪声标签 通用噪声标签
Cross-Validation Filter K折交叉验证,删除多数折预测与标签不一致的样本 简单有效
Loss排序过滤 按训练loss排序,删除loss最高的N%样本 高置信噪声
协同教学(Co-teaching) 两个网络互相选择干净样本训练 深度噪声标签

数据泄露检测

泄露类型 说明 检测方法
目标泄露 特征中包含目标变量的直接信息 特征与目标相关性异常高
时间泄露 使用了未来信息 检查特征时间戳是否晚于预测时间
跨集泄露 训练集和测试集有重叠 对抗验证AUC接近1.0
预处理泄露 预处理时使用了测试集信息(如用全量数据做归一化) 检查预处理流程

二十一、特征工程自动化

自动特征生成

工具 特点 适用场景
Featuretools 自动生成聚合/转换特征 关系型数据
AutoFeat 自动特征合成+选择 回归/分类
TSFresh 自动提取时序特征(700+) 时间序列

特征重要性评估进阶

方法 原理 优势 劣势
树模型importance 基于分裂增益 快速 偏向高基数特征
排列重要性 打乱特征后性能下降 更可靠 计算量大
SHAP值 Shapley值的近似 可解释性最强 计算量最大
Leave-one-out 逐个删除特征训练 最直接 极其耗时
Null Importance 用随机目标训练对比 区分真/假重要性 需额外训练

二十二、PCA 降维

维度 说明
核心思想 用主成分分析将高维特征投影到低维空间,保留主要方差
典型应用 高维嵌入降维(如 1536→64、768→256)
优势 减少计算量、降低过拟合风险、加速训练
实现方式 StandardScaler 标准化后 fit_transform
竞赛经验 嵌入维度>512 时建议 PCA 降维,通常保留 95% 方差
适用场景 预训练模型嵌入、高维特征压缩

二十三、StratifiedGroupKFold 交叉验证

维度 说明
核心思想 同时保持类别分层(Stratified)和组别隔离(Group)
分层依据 按 primary_label 保持类别比例
分组依据 按 author 分组,防止同一作者数据跨折泄露
优势 防止数据泄露的同时保持类别分布一致
适用场景 多来源数据、存在组别相关性的分类任务

二十四、OOF 元特征工程

维度 说明
核心思想 用交叉验证的 Out-of-Fold 预测构建诚实的验证特征
实现方式 GroupKFold(5) 按站点分组,验证站点排除
元特征类型 原始 logit、OOF 先验 logit、OOF 融合分数、前/后/均值/最大融合分数
优势 避免数据泄露,构建诚实验证集
适用场景 多模型集成、Stacking 元特征构建