黑产监控中,需要尽可能做到尽可能少的误伤和尽可能准确地探测,可以选择“在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