美文网首页
提高模型精确率的两种方法

提高模型精确率的两种方法

作者: 数据与风控 | 来源:发表于2020-01-10 11:40 被阅读0次

    由于准确率和召回率往往不能兼顾,所以在数据分析的过程中,尤其实际业务中需要兼顾某一方。例如在违规文件封禁场景,为了减少审核人力的成本,需要一些能够自动封禁的模型,这些模型对精确率要求比较高,有可能需要达到99%甚至以上的精确率。所以总结了两种提升召回率的方法:
    (1)切分数据集:在一个比较大数据集中,由于可能存在无法正确分类的异常点可能会导致精确率无法达标,我想到的一个办法是将大的数据集进行切分(可以采用基尼系数的方式达到最优切分点),这样在更小的数据集中基尼不纯度也更低,更利于提高精确率。这里如果在每个子数据集中引入一个分类模型,效果会更好。
    这种方式的一个问题是字数据集的数据量太少的话,每个模型可能会发生过拟合,所以采用这种方式的前提是要保证切分的子数据集个数不能太多,每个数据集的数量不能太少。
    (2)调整阈值,这个恐怕是业务上最常用的方式了,也就是把模型的识别分数调高,以牺牲召回率为代价尽量提升精确率,如果是一般的规则,可能就是把某个特征的阈值调高(或调低)。如果是用机器学习的话,也有可以输出具体预测值的函数。
    传统的机器学习模型(sklearn)中,分类模型内置的cutoff阈值为0.5,调用predict函数的时候这个值是没法改变的,模型直接输出的是0 或者 1 的预测结果值。其实另外还有一个predict_proba函数,可以输出每一类的具体预测概率值,这样就可以通过if条件将cutoff值进行调整,已达到提升精确率或者扩大召回率的要求。

    #引入模型
    RF_new_model_online=joblib.load("RF_new.m")`
    #查看测试集数据
    x_test = x_test.head(5)
    #predict_proba进行预测并返回具体概率值
    result = RF_new_model_online.predict_proba(x_test)`
    

    结果展示
    测试集数据(11个特征,归一化后)


    image.png

    预测结果(两列分别是预测结果为0类和1类的概率)


    image.png

    ps: 个人感觉将两种方式结合使用感觉效果更好

    相关文章

      网友评论

          本文标题:提高模型精确率的两种方法

          本文链接:https://www.haomeiwen.com/subject/qjypactx.html