基于pandas列信号数据计算异常检测器性能指标的方法
异常检测器性能评估计算方案
标签对齐规则
首先对每个采样点的真值和预测结果做二元标签映射,完全匹配你给出的判定规则:
- 真值标签:
rr_manually_cleaned为NaN时标记为正例(真异常),非NaN时标记为负例(真正常) - 预测标签:
rr_filtered为NaN时标记为预测正例(判定为异常),非NaN时标记为预测负例(判定为正常)
基础混淆矩阵项计算
四个核心统计项可以直接基于上述两个标签列计算:
- TP(真正例,正确检出的异常):真值、预测均为NaN的样本数
- TN(真负例,正确保留的正常点):真值、预测均为非NaN的样本数
- FP(假正例,误检):匹配你给出的定义,即真值非NaN、预测为NaN的样本数
- FN(假负例,漏检):匹配你给出的定义,即真值为NaN、预测非NaN的样本数
混淆矩阵生成
完全可以直接基于现有数据生成标准2分类混淆矩阵,只需要用两个二元标签列做交叉统计即可,示例代码如下:
import pandas as pd # 生成二元标签列 df['y_true_anomaly'] = df['rr_manually_cleaned'].isna() df['y_pred_anomaly'] = df['rr_filtered'].isna() # 生成混淆矩阵,行是真实标签,列是预测标签 confusion_matrix = pd.crosstab( df['y_true_anomaly'], df['y_pred_anomaly'], rownames=['真实标签'], colnames=['预测标签'], margins=True ) print(confusion_matrix)
核心性能指标计算
所有指标都基于上述四个基础项计算:
- 精确率(Precision):衡量检测器的误检概率,即所有被判定为异常的样本中,真异常的占比
公式:Precision = TP / (TP + FP),值越高说明误判正常点为异常的概率越低 - 召回率(Recall/查全率):衡量检测器的漏检概率,即所有真实异常中,被成功检出的占比
公式:Recall = TP / (TP + FN),值越高说明漏检的异常越少 - F1分数:精确率和召回率的调和平均数,平衡两者的综合性能指标
公式:F1 = 2 * (Precision * Recall) / (Precision + Recall),取值范围0~1,越接近1性能越好 - 可选指标-准确率(Accuracy):所有样本中判断正确的占比,仅适用于正常、异常样本比例均衡的场景
公式:Accuracy = (TP + TN) / (TP + TN + FP + FN)
批量计算完整示例
# 计算四个基础项的计数 TP = ((df['y_true_anomaly'] == True) & (df['y_pred_anomaly'] == True)).sum() TN = ((df['y_true_anomaly'] == False) & (df['y_pred_anomaly'] == False)).sum() FP = ((df['y_true_anomaly'] == False) & (df['y_pred_anomaly'] == True)).sum() FN = ((df['y_true_anomaly'] == True) & (df['y_pred_anomaly'] == False)).sum() # 计算指标(加除零保护) precision = TP / (TP + FP) if (TP + FP) !=0 else 0 recall = TP / (TP + FN) if (TP + FN) !=0 else 0 f1 = 2 * precision * recall / (precision + recall) if (precision + recall) !=0 else 0 accuracy = (TP + TN) / len(df)
内容的提问来源于stack exchange,提问作者Ossz
相关产品推荐
相关产品推荐

