在 Python 中,我正在研究旅游保险欺诈检测的二元分类问题。这是我的数据集的特征:
- 包含具有 20 个特征的 40,000 个样本。经过一次热编码后,特征数为 50(4 个数字,46 个分类)。
- 大多数未标记:在 40,000 个样本中,33,000 个样本未标记。
- 高度不平衡:在 7,000 个标记样本中,只有 800 个样本(11%)是阳性(欺诈)。
指标是精度、召回率和 F2 分数。我们更注重避免误报,因此高召回率是值得赞赏的。作为预处理,我使用 SMOTE-NC 对阳性案例进行过采样,它也考虑了分类变量。
在尝试了包括自我训练的半监督学习和标签传播/标签传播等在内的几种方法后,我获得了很高的召回率(训练时 80%,测试时 65-70%)。但是,我的精度分数显示了一些过度拟合的痕迹(训练时 60-70%,测试时 10%)。我知道训练的精度很好,因为它是重新采样的,而测试数据的精度很低,因为它直接反映了测试数据中类别的不平衡。但是这个精度分数低得令人无法接受,所以我想解决它。
因此,为了简化模型,我正在考虑应用降维。我发现了一个名为 prince
FAMD(混合数据因子分析)的软件包。
问题 1:我应该如何进行标准化、FAMD、k-fold 交叉验证和重采样?我下面的方法正确吗?
问题2:该包prince
没有类似fit
或transform
类似的方法Sklearn
,所以我无法执行下面描述的第3步。fit
还有其他transform
适合 FAMD 的好套餐吗?还有没有其他好的方法可以减少这种数据集的维数?
我的做法:
- 做 k 个折叠并隔离其中一个进行验证,其余的用于训练
- 规范化训练数据和转换验证数据
- 在训练数据上拟合 FAMD,并转换训练和测试数据
- 使用 SMOTE-NC 仅对训练数据重新采样
- 训练任何模型,评估验证数据
- 重复 2-5 k 次并取精度的平均值,召回 F2 分数
*我也很感激任何关于我解决这个问题的整体方法的建议
谢谢!