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
}