黑产监控中,需要尽可能做到尽可能少的误伤和尽可能准确地探测,可以选择“在FPR较低时的TPR加权平均值”作为平均指标。
根据混淆矩阵计算TPR(覆盖率)和FPR(打扰率):
覆盖率:TPR = TP /(TP + FN)
打扰率:FPR = FP /(FP + TN)
TP、FN、FP、TN分别为真正例、假反例、假正例、真反例
通过设定不同的阈值,会有一系列TPR和FPR,就可以绘制出ROC曲线:
这里的评分指标,首先计算3个覆盖率TPR:
TPR1:FPR=0.001时的TPR
TPR2:FPR=0.005时的TPR
TPR3:FPR=0.01 时的TPR
最终成绩= 0.4 * TPR1 + 0.3 * TPR2 + 0.3 * TPR3
def tpr_weight_funtion(y_true,y_predict):
"""
y_true:真实的类别
y_predict:预测的类别
""" d = pd.DataFrame() d['prob'] = list(y_predict) d['y'] = list(y_true) d = d.sort_values(['prob'], ascending=[0]) y = d.y PosAll = pd.Series(y).value_counts()[1] NegAll = pd.Series(y).value_counts()[0] pCumsum = d['y'].cumsum() nCumsum = np.arange(len(y)) - pCumsum + 1 pCumsumPer = pCumsum / PosAll nCumsumPer = nCumsum / NegAll TR1 = pCumsumPer[abs(nCumsumPer-0.001).idxmin()] TR2 = pCumsumPer[abs(nCumsumPer-0.005).idxmin()] TR3 = pCumsumPer[abs(nCumsumPer-0.01).idxmin()] return 0.4 * TR1 + 0.3 * TR2 + 0.3 * TR3