【Python常用函数】一文让你彻底掌握Python中的f1_score函数

文摘   教育   2024-11-02 12:05   广东  

任何事情都是由量变到质变的过程,学习Python也不例外。

只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案。
本文和你一起来探索Python中的toad.metrics.f1_score函数,让你以最短的时间明白这个函数的原理。
也可以利用碎片化的时间巩固这个函数,让你在处理工作过程中更高效。
之前对模型评价指标F1值原理和实现有过介绍,只是实现方式没有用到toad包,感兴趣的朋友可以看下:模型评价指标—F1值
本文目录
  1. F1值介绍

  2. 安装toad包

  3. toad.metrics.f1_score函数定义

  4. toad.metrics.f1_score函数实例


一、F1值介绍

 1  什么是F1值

F1值又称为F1分数(F1-Score):是分类问题的一个衡量指标,它是精确率P(Precision)和召回率R(Recall)的调和平均数。

F1值=2*P*R/(P+R)

F1值的取值范围(0~1),越接近1说明模型预测效果越好,至于原因详见后文。

 2  理解F1值的一个小例子

假设1代表涉赌涉诈账户,0代表非涉赌涉的低风险账户。

T:正确预测,F:错误预测,P:1,N:0。
  • 1. TP(True Positive):模型正确预测为1的数量,即真实值是1,模型预测为1的数量。
  • 2. FN(False Negative):模型错误预测为0的数量,即真实值是1,模型预测为0的数量。
  • 3. FP(False Positive):模型错误预测为1的数量,即真实值是0,模型预测为1的数量。

  • 4.TN(True Negative):模型正确预测为0的数量,即真实值是0,模型预测为0的数量。

精确率P(Precision):被模型预测为1的样本中,实际是1的样本占比。计算公式如下:
P(Precision)=TP/(TP+FP)
召回率R(Recall):实际是1的样本中,被模型预测为1(被模型找回了多少1)的样本占比。计算公式如下:
R(Recall)=TP/(TP+FN)
F1值=2*P*R/(P+R)
思考一个极端情况,所有涉赌涉诈账户的概率都高于正常账户的概率,那意味着我可以找到一个切割点,让P和R都等于1,即F1值为1。
这时,说明模型能完全区分出涉赌涉诈账户和非涉赌涉诈账户。即F1值越接近1,模型效果越好。
为了更清晰地看出P、R和F1值之间的趋势关系,我们把F1值变下型,得到如下结果:
F1值=2/(1/P+1/R)
可以尝试通分还原。从上式可以发现,当R不变时,P越大,分母越小,则F1值越大,同理可得R。说明P、R和F1是成正比的。
接下来详细介绍用Python中的toad函数计算F1值。

二、安装toad包

f1_score是toad库下的函数,调用需先要安装toad包。打开cmd,安装语句如下:

pip install toad
若安装成功,会显示结果如下:


、toad.metrics.f1_score函数定义

F1 分数是分类任务中常用的一个评价指标,它是精确率(Precision)和召回率(Recall)的调和平均数,用于衡量模型的性能。

其基本调用语法如下:

import toad
toad.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
y_true真实的标签或目标值。也是一个数组或列表,包含了每个样本的真实类别。
y_pred:预测标签的数组或列表,包含每个样本预测的类别标签
labels(可选):一个数组或列表,指定了每个类别的标签。如果未指定,将使用y_ture中的所有唯一标签
pos_label(可选)指定正类的标签,默认值为1。这个参数在二分类问题中特别有用,因为F1分数通常针对正类计算。

average (选): 指定多类分类问题中 F1 分数的计算方式。可能的值包括:

    • 'binary': 只计算正类的 F1 分数(默认值)。

    • 'micro': 通过计算总的真正例、假正例和假负例来计算全局 F1 分数。

    • 'macro': 为每个类别计算 F1 分数,然后取未加权的平均值。

    • 'weighted': 为每个类别计算 F1 分数,然后按每个类别的样本数量加权平均。

    • 'samples': 仅适用于多标签分类问题,计算每个实例的 F1 分数,然后取平均值。

    sample_weight (可选): 一个数组,用于为每个样本指定权重。如果提供,F1 分数将根据这些权重计算。

    zero_division (可选): 指定当遇到除以零的情况时如何处理。可能的值包括:

    • 'warn': 发出警告(默认值)。

    • 0: 返回 0。

    • 1: 返回 1。

    四、toad.metric.f1_score函数实例

    接着来看下应用toad函数计算f1_score值,具体代码如下:

    import toadimport pandas as pd from sklearn.metrics import f1_score
    score = [0.1, 0.4, 0.5,0.22, 0.35, 0.8, 0.9, 0.66, 0.75] #模型预测分数target = [0, 0, 0, 0, 1, 1, 1, 1, 1] #真实标签 date = pd.DataFrame({'y':target, 'pred':score})
    for i in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]: print(i) date['pred_f'] = 0 date['pred_f'][date['pred']>i] = 1 print(toad.metrics.f1_score(date['y'], date['pred_f']) ) print('='*15)

    得到结果:

    0.10.7692307692307693===============0.20.7692307692307693===============0.30.8333333333333333===============0.40.8000000000000002===============0.50.888888888888889===============0.60.888888888888889===============0.70.7499999999999999===============0.80.33333333333333337===============0.90.0===============

    可以发现用不同的阈值切割模型预测分数,F1值会发生变化,具体可根据业务场景选择合适的阈值。

    为了验证结果的正确性,由于计算的样本较少,可以手动计算,或者和sklearn中F1值计算函数做对比,代码如下:

    import pandas as pd from sklearn.metrics import f1_score
    score = [0.1, 0.4, 0.5,0.22, 0.35, 0.8, 0.9, 0.66, 0.75] #模型预测分数target = [0, 0, 0, 0, 1, 1, 1, 1, 1] #真实标签 date = pd.DataFrame({'y':target, 'pred':score})for i in [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]: print(i) date['pred_f'] = 0 date['pred_f'][date['pred']>i] = 1 #根据阈值确定预测标签值 print(f1_score(date['y'], date['pred_f']))    #sklearn方法计算f1_score print(toad.metrics.f1_score(date['y'], date['pred_f']) )    #toad方法计算f1_score print('='*15)

    得到结果:

    0.10.76923076923076930.7692307692307693===============0.20.76923076923076930.7692307692307693===============0.30.83333333333333330.8333333333333333===============0.40.80000000000000020.8000000000000002===============0.50.8888888888888890.888888888888889===============0.60.8888888888888890.888888888888889===============0.70.74999999999999990.7499999999999999===============0.80.333333333333333370.33333333333333337===============0.90.00.0===============
    可以发现两种计算方式结果是一致的。

    至此,Python中应用toad.metrics.f1_score函数已讲解完毕,如想了解更多建模内容,可以翻看公众号中“风控建模”模块相关文章。

    往期回顾:
    信贷风控架构一张图

    变量筛选—特征包含信息量

    一文弄懂卡方分箱的原理和应用

    应用决策树生成【效果好】【非过拟合】的策略集

    一文囊括风控模型搭建(原理+Python实现),持续更新。。。

    不同工作年限风控建模岗薪资水平如何?招聘最看重面试者什么能力?

    100天精通风控建模(原理+Python实现)——第32天:集成学习是什么?在风控建模中有哪些应用?


    部分群限时免费加

    19967879837

    添加微信号、手机号

    阿黎逸阳的代码
    阿黎逸阳,分享大数据和人工智能领域知识,提供风控建模干货经验。 博主履历:世界五百强公司、互联网上市公司、高校、外资银行,多年研究大数据分析、建模以及教学工作。
     最新文章