不平衡
到目前为止,平衡训练集(50%-50%)的最干净*方法是使用观察权重。假设 1% 的案例是欺诈性的,99% 不是,那么给每个非欺诈性案例权重 1,每个欺诈性交易权重 99。这相当于将每个欺诈性案例的 98 个副本添加回训练集中。
例如,在 R 中rpart或在set中lm使用参数。在 Python 的集合中。weightsrandomForestclasswt = c(0.5, 0.5)sklearn.tree.DecisionTreeClassifierclass_weight = "balanced"
这样做将使分类器在少数结果类别(欺诈)上“更加努力”,因为现在对其进行错误分类会大大增加成本。
*我写“最干净”是因为(随机)过采样会产生不必要的采样噪声,因为某些情况的采样次数多于或少于 99 次。相反,加权会平等对待所有情况。
决策树
鉴于您使用的是分类树,您可以强制节点check == yes拆分,这样您就不必将最终在该节点中的所有案例分类为欺诈(当然我在推测 - 我不知道您的数据)。
最后,分类树自然会输出概率。假设一个新案例落入一个由 72% 的欺诈案例和 28% 的非欺诈案例组成的端节点(叶子),那么新案例是欺诈的估计概率等于 72%。