LOF异常检测
使用局部离群因子检测异常. 使用局部离群因子(LOF)测量数据点相对于其邻居的局部密度偏差。密度明显较低的点被分类为异常。. 局部离群因子(LOF, Local Outlier Factor)是一种基于密度的异常检测算法,它通过比较某点的局部密度与其邻居的密度来识别离群点。与全局方法不同,LOF…
使用局部离群因子(LOF)测量数据点相对于其邻居的局部密度偏差。密度明显较低的点被分类为异常。
什么是局部异常因子(LOF)?
局部离群因子(LOF, Local Outlier Factor)是一种基于密度的异常检测算法,它通过比较某点的局部密度与其邻居的密度来识别离群点。与全局方法不同,LOF 能够在各簇密度差异较大的数据集中检测离群点——同一个点位于稀疏簇中可能是正常的,而靠近稠密簇时则可能是异常的。
该算法基于每个点的 k 近邻计算可达距离和局部可达密度(LRD)。LOF 分数即该点的 LRD 与其邻居平均 LRD 之比。LOF ≈ 1 表示与邻居密度相近(正常);LOF >> 1 表示密度远低于邻居(异常)。
邻居数量(k)控制局部性:k 较小时聚焦于非常局部的结构,k 较大时会在更宽的邻域上做平滑。污染率则按 LOF 分数的排序决定被判为异常的点所占比例。
Formula: reach-dist(A,B) = max(k-dist(B), dist(A,B)) LRD(A) = 1 / (Σ reach-dist(A,Oᵢ) / k) LOF(A) = (Σ LRD(Oᵢ) / LRD(A)) / k LOF ≈ 1: normal, LOF >> 1: outlier
计算示例
取 k=5 个邻居:稠密簇中的点 P₁ 的 LRD=10,其 5 个邻居的平均 LRD=9.5,LOF = 9.5/10 = 0.95(正常)。位于簇边缘的点 P₂ 的 LRD=2,邻居平均 LRD=8,LOF = 8/2 = 4.0(明显的离群点)。当 contamination=0.05 时,LOF 分数最高的前 5% 会被标记。
何时使用此计算器
- 数据具有不同密度的聚类时 — LOF检测Z分数或Isolation Forest等全局方法会遗漏的局部异常
- 来自不同测试站的测量形成不同散布和自然聚类的多变量质量检验时
- 正常运行模式具有不同特征模式和密度的设备振动或传感器数据分析时
- Isolation Forest的异常检测结果似乎遗漏了密集聚类附近的异常时 — LOF的密度方法处理此情况
- 在工艺排查中识别即使在全局范围内但相对于其局部邻域异常的数据点时
常见错误
- 将k(邻居数)设得太小导致对噪声敏感 — 非常小的k值使算法不稳定;从k=20开始并根据结果调整
- 对非常高维数据使用LOF — LOF依赖在高维中意义减弱的距离度量(维度灾难);首先考虑降维
- 将所有LOF > 1的点视为异常 — LOF > 1仅意味着比邻居略低的密度;使用污染阈值或有意义的LOF截断值(如LOF > 2)
- 应用LOF前未进行特征缩放 — 数值范围较大的特征主导距离计算;将所有特征标准化为零均值和单位方差
如何解读结果
- LOF ≈ 1.0 — 该点与邻居密度相似;是其局部聚类的正常成员
- LOF 1.5-3.0 — 该点相对于邻居位于密度较低区域;可能在聚类边界或为轻度异常值
- LOF > 3.0 — 该点比邻居密度低得多;是强局部异常值,应调查
- LOF < 1.0 — 该点位于比邻居密度更高的区域;紧密聚类中心的点常见
- 如果许多点有高LOF分数,数据可能没有明确定义的聚类 — 考虑LOF是否是此数据集的正确方法
相关标准与参考文献
- Breunig, Kriegel, Ng & Sander (2000), "LOF: Identifying Density-Based Local Outliers", ACM SIGMOD — 定义此处计算的LOF分数的原始论文
- ISO 16269-4 — 数据的统计解释:异常值的判定与处理,规范被标记观测值处理方式的标准
- ASTM E178 — 处理离群观测值的标准实务,是单变量异常值判定的经典补充
- Aggarwal, Outlier Analysis (Springer) — 将LOF等基于密度的方法与基于隔离和距离的替代方法进行比较的综合参考书
常见问题
如何选择邻居数量(k)?
可先取 k=20 作为合理的默认值。k 较小(5-10)能检测非常局部的异常,但对噪声敏感。k 较大(50 以上)结果更平滑,但可能漏掉局部性的异常。一个实用做法是:测试多个 k 值,看是否总是同一批点被标记——在不同 k 值下都持续出现的离群点,更可能是真正的异常。
什么时候应该用 LOF 而不是孤立森林?
当数据中存在密度不同的簇时应使用 LOF,因为 LOF 是相对于每个点的局部邻域来评估该点的。一个远离稠密簇但靠近稀疏簇的点可能是正常的——LOF 能正确处理这种情况,而全局方法可能会把它误标为异常。对于高维数据,或规模极大、使 LOF 的 O(n²) 复杂度难以承受的数据集,则应使用孤立森林。