def searchThreshold()

in aiops/AnomalyDetection/model/eval_methods.py [0:0]


def searchThreshold(score,label):
    mins=np.min(score)
    maxs=np.max(score)
    stride=(maxs-mins)/1000
    threshold=-1
    maxF1=[0]*7
    i=mins+stride
    precisions=[]
    recalls=[]
    while i<maxs+stride:
        pred, p_latency = adjust_predicts(score, label, i, calc_latency=True)
        p_t = calc_point2point(pred, label)
        precisions.append(p_t[1])
        recalls.append(p_t[2])
        if p_t[0]>maxF1[0]:
            maxF1=p_t
            threshold=i
        i+=stride
    score=np.array(score)
    mask=score<threshold
    num=mask.sum()
    ratio=num/score.size
    AUPR=0.
    sumv=[]
    for i in range(1,len(recalls)):
        AUPR+=(recalls[i]-recalls[i-1])*precisions[i-1]
        sumv.append((recalls[i]-recalls[i-1])*precisions[i-1])
    return {
        'pot-f1': maxF1[0],
        'pot-precision': maxF1[1],
        'pot-recall': maxF1[2],
        'pot-TP': maxF1[3],
        'pot-TN': maxF1[4],
        'pot-FP': maxF1[5],
        'pot-FN': maxF1[6],
        'pot-threshold': threshold,
        'threshold-ratio':ratio,
        "AUPR":AUPR
    }