功能介绍

二分类评估是对二分类算法的预测结果进行效果评估。

支持Roc曲线,LiftChart曲线,Recall-Precision曲线绘制。

流式的实验支持累计统计和窗口统计。

给出整体的评估指标包括:AUC、K-S、PRC, 不同阈值下的Precision、Recall、F-Measure、Sensitivity、Accuracy、Specificity和Kappa。

Roc曲线

横坐标:FPR

纵坐标:TPR

AUC

Roc曲线下面的面积

Recall-Precision曲线

横坐标:Recall

纵坐标:Precision

PRC

Recall-Precision曲线下面的面积

提升曲线

横坐标:

二分类评估(stream) - 图1

纵坐标:TP

Precision

二分类评估(stream) - 图2

Recall

二分类评估(stream) - 图3

F-Measure

二分类评估(stream) - 图4

Sensitivity

二分类评估(stream) - 图5

Accuracy

二分类评估(stream) - 图6

Specificity

二分类评估(stream) - 图7

Kappa

二分类评估(stream) - 图8
二分类评估(stream) - 图9
二分类评估(stream) - 图10

Logloss

二分类评估(stream) - 图11

参数说明

名称 中文名称 描述 类型 是否必须? 默认值
positiveLabelValueString 正样本 正样本对应的字符串格式。 String null
timeInterval 时间间隔 流式数据统计的时间间隔 Integer 3
labelCol 标签列名 输入表中的标签列名 String
predictionCol 预测结果列名 预测结果列名 String
predictionDetailCol 预测详细信息列名 预测详细信息列名 String

脚本示例

脚本代码

  1. import numpy as np
  2. import pandas as pd
  3. data = np.array([
  4. ["prefix1", "{\"prefix1\": 0.9, \"prefix0\": 0.1}"],
  5. ["prefix1", "{\"prefix1\": 0.8, \"prefix0\": 0.2}"],
  6. ["prefix1", "{\"prefix1\": 0.7, \"prefix0\": 0.3}"],
  7. ["prefix0", "{\"prefix1\": 0.75, \"prefix0\": 0.25}"],
  8. ["prefix0", "{\"prefix1\": 0.6, \"prefix0\": 0.4}"]])
  9. df = pd.DataFrame({"label": data[:, 0], "detailInput": data[:, 1]})
  10. inOp = BatchOperator.fromDataframe(df, schemaStr='label string, detailInput string')
  11. metrics = EvalBinaryClassBatchOp().setLabelCol("label").setPredictionDetailCol("detailInput").linkFrom(inOp).collectMetrics()
  12. print("AUC:", metrics.getAuc())
  13. print("KS:", metrics.getKs())
  14. print("PRC:", metrics.getPrc())
  15. print("Accuracy:", metrics.getAccuracy())
  16. print("Macro Precision:", metrics.getMacroPrecision())
  17. print("Micro Recall:", metrics.getMicroRecall())
  18. print("Weighted Sensitivity:", metrics.getWeightedSensitivity())
  19. inOp = StreamOperator.fromDataframe(df, schemaStr='label string, detailInput string')
  20. EvalBinaryClassStreamOp().setLabelCol("label").setPredictionDetailCol("detailInput").setTimeInterval(1).linkFrom(inOp).print()
  21. StreamOperator.execute()