尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

【老计带你懂AI算法】09:孤立森林,抓异常的高手,专挑那些“一眼就不对劲“的点

发布时间:2026/9/27 22:48:03

资讯中心
01
ARTICLE

【老计带你懂AI算法】09:孤立森林,抓异常的高手,专挑那些“一眼就不对劲“的点

【老计带你懂AI算法】09:孤立森林,抓异常的高手,专挑那些“一眼就不对劲“的点
【老计带你懂AI算法】09孤立森林抓异常的高手专挑那些一眼就不对劲的点开头抓异常是个特别的任务前面讲的分类、聚类处理的都是大部队。可有一类任务恰恰要盯着那些又少又怪的家伙这就是异常检测。生活和业务里到处是这种需求银行卡突然在异国他乡刷了一笔大额可能是盗刷异常交易服务器某个指标突然飙升可能是故障前兆异常监控一个账号一秒钟发了几百条消息可能是机器人异常行为。异常检测要干的就是从海量正常数据里把这些一眼看上去就不对劲的少数点揪出来。作为一个做过多年运维和监控的人我对这个任务特别有感触做SRE、做AIOps很大一部分工作就是从铺天盖地的指标和日志里及时发现那个不正常的信号抢在故障扩大前把它按住。异常检测正是这类工作背后的算法基础。这一篇讲异常检测里一个特别巧妙、又特别实用的模型孤立森林Isolation Forest。异常检测难在哪异常太少还没法预先定义先说清楚为什么异常检测不能简单当成一个普通的二分类问题正常 vs 异常来做。有两个天生的难处异常样本极少、极不均衡。一百万笔交易里可能就几十笔欺诈。你拿这种数据训练普通分类器它只要无脑把所有都判成正常准确率就有99.99%可它一个异常都没抓到毫无用处。这种极端不均衡让常规分类很难办。异常往往没法预先定义、花样百出。你没法穷举所有异常长什么样今天的欺诈手法和明天的可能完全不同。所以更多时候我们手里根本没有标好的异常样本只能用无监督的思路让模型自己去发现和大多数不一样的点。正因为这两点异常检测发展出了一批专门的方法孤立森林就是其中又快又好用的代表。孤立森林一个反常识的聪明思路孤立森林的思路第一次听会觉得反常识但想通了会拍案叫绝。一般模型抓异常是想办法去描述正常长什么样然后把不符合的挑出来。孤立森林反过来它直接盯着异常的一个本质特点下手异常点又少、又和别人不一样所以它特别容易被孤立出来。怎么理解容易被孤立孤立森林借用了决策树那种随机切一刀的动作。想象你的数据点散在一个平面上你随手画一条线把空间一切为二再在切出来的区域里继续随手切……不停地切直到每个点都被单独关在一个小格子里。关键的洞察来了一个正常点因为它周围挤满了同类你得切很多刀才能把它和邻居们彻底分开、单独孤立而一个异常点因为它孤零零地待在边缘、周围没几个同类随便切几刀就能把它单独隔离出来。打个比方一群人挤在广场中央你要用绳子把中间某个人单独圈出来得拉好多道绳子层层分隔可要圈出那个独自站在广场角落的人一两道绳子就够了。那个没几刀就被孤立的点就是异常。所以孤立森林判断异常的标准特别简洁一个点如果平均只需要很少的切分次数就能被孤立出来它就极可能是异常。它种很多棵这样随机切分的树这就是森林统计每个点平均要切多少刀才被孤立切得越少越浅就被隔离异常分数越高。为什么这个思路特别高明这个思路有几个让人叫绝的地方值得点破它不需要计算距离、不需要定义什么是正常。前面聚类、KNN都要算点之间的距离高维时会遇到维度灾难孤立森林只是随机切分、数切了几刀绕开了距离计算在高维数据上依然又快又稳。它天生高效。因为异常点几刀就被孤立模型不需要把整棵树切到底浅浅几层就能识别出大部分异常速度非常快适合大规模数据。它是无监督的。不需要你事先标好哪些是异常直接扔一堆数据进去它自己算出每个点有多异常。这正好对上了前面说的异常没法预先定义的难处。孤立森林用一个极简的动作随机切、数刀数巧妙地把异常检测这个难题化解了这种四两拨千斤的设计是算法里很美的东西。结合我做运维和SRE的经验多说几句异常检测在监控告警里的真实处境这能帮你理解它的价值和局限。传统的监控告警大多是人拍脑袋定死阈值比如CPU超过80%就告警。这种方式简单但问题一大堆阈值定高了漏报、定低了半夜被误报的告警吵醒而且很多故障根本不是单一指标超阈值而是几个指标的组合出现了从没见过的怪异模式死阈值根本抓不住。这正是异常检测这类算法要解决的痛点它不靠人定死阈值而是让模型从历史数据里自动学出什么是正常再把偏离正常的模式标出来这在AIOps智能运维里是核心能力之一。孤立森林这种无监督、高维也能跑的方法特别适合监控这种指标又多、又没有现成异常标签的场景。当然实际落地远比跑个模型复杂还要处理告警风暴、误报抑制、和业务结合定阈值等一堆工程问题但算法是这一切的底座。输入和输出长什么样输入一批样本每个若干数值特征。不需要标签无监督。通常你还会给它一个大致的估计数据里异常大约占多少比例。输出每个样本一个判定正常还是异常sklearn里正常标为1、异常标为-1还能给出每个点的异常分数分数越低越异常方便你排序、挑出最可疑的那批重点看。上代码揪出数据里的异常点用sklearn的IsolationForest。输入一批正常点混入少量异常点。输出每个点是否异常。# 依赖pip install scikit-learn numpyimportnumpyasnpfromsklearn.ensembleimportIsolationForest# 造数据:200个正常点挤在中间,10个异常点撒在外围rngnp.random.RandomState(0)normalrng.randn(200,2)*0.5# 正常点:聚在原点附近abnormalrng.uniform(low-4,high4,size(10,2))# 异常点:散在外围Xnp.vstack([normal,abnormal])# contamination:预估异常比例,这里约10/210modelIsolationForest(contamination0.05,random_state0)model.fit(X)# 无监督训练,不需要标签predmodel.predict(X)# 1正常, -1异常scoresmodel.score_samples(X)# 异常分数,越低越异常n_abnormalint(np.sum(pred-1))print(f共{len(X)}个点,判定异常{n_abnormal}个)# 看被判为异常的点里,分数最低(最异常)的前3个idxnp.argsort(scores)[:3]print(最异常的3个点坐标:)foriinidx:print(f{np.round(X[i],2)}异常分数{scores[i]:.3f})运行输出示例共210个点,判定异常11个 最异常的3个点坐标: [ 3.94 -2.06] 异常分数-0.712 [-3.52 3.18] 异常分数-0.694 [ 2.81 3.77] 异常分数-0.681运行你会看到模型把外围那些孤零零的点判为异常而中间挤成一团的正常点判为正常。score_samples给的异常分数特别实用实际业务里你往往不是简单地二分正常异常而是按异常分数排序让人工优先审查最可疑的那批这在风控、告警里非常常见。关键参数contamination污染比例你预估数据里异常大约占多少。这个参数影响判定阈值需要结合业务经验给个合理值是最需要斟酌的参数。n_estimators树的数量种多少棵切分树越多越稳默认100棵通常够用。max_samples每棵树用多少样本孤立森林有意思的一点是每棵树只用一小部分样本就够了这也是它快的原因之一。优缺点与适用场景优点无监督、不需要异常标签不算距离、在高维数据上又快又好对大规模数据高效实现简单、开箱即用。这些优点让它成为工业界异常检测的常用首选之一很多风控系统、监控平台的异常识别模块底层都能看到它的身影因为它几乎不用调太多东西就能给出一个靠谱的结果。缺点主要擅长找那种全局孤立的异常点对于藏在局部、和局部邻居不一样的异常局部异常不如专门的局部异常方法如LOF局部离群因子敏感异常分数的阈值需要人结合业务来定没有绝对标准。适合场景欺诈检测、故障和入侵检测、数据清洗时找脏数据、监控告警。凡是从大量正常里找少数异常、又没有现成标签的场景都可以先想到它。不适合异常其实有大量标签可用那可以考虑当分类问题、用专门处理不均衡的分类方法、或者异常是很微妙的局部异常。顺便把异常检测的几类思路给你串一下方便建立全局观因为孤立森林只是其中一种。第一类是基于统计的最朴素比如假设数据服从正态分布偏离均值三个标准差以外的就算异常简单直接适合单一指标。第二类是基于距离和密度的比如前一篇聚类里DBSCAN能把不属于任何稠密区域的点标为噪声还有专门的LOF局部离群因子看一个点周围的稀疏程度来判断尤其擅长抓局部异常。第三类就是孤立森林这种基于孤立难易度的不算距离高维也快。第四类是基于重建误差的用后面会讲的自编码器这类神经网络让模型学着把正常数据压缩再还原正常数据能还原得很好、异常数据还原误差大误差大的就是异常特别适合图像、时序这类复杂数据。记住这四类思路遇到异常检测需求时你就能根据数据类型和是否有标签选对趁手的方法而不是只会一招。小结与承上启下异常检测从海量正常里揪出又少又怪的异常难在样本极不均衡、异常没法预先定义常用无监督思路。孤立森林反常识的巧思异常又少又不同所以几刀就能被孤立数切分次数即可判异常不算距离、高维也快。实用点输出异常分数按分数排序让人优先审最可疑的那一批。选型无监督高维异常检测的首选之一局部异常场景不占优还可结合业务和其他方法一起用。异常检测是个越做越有体会的方向模型只是起点真正的功夫在于把它和业务场景、告警机制、人工审查流程结合好让它真正帮人减负、而不是制造更多噪声。到这里传统机器学习的主要模型就全部讲完了分类、回归、集成、概率、聚类、降维、异常检测你已经有了一张完整的传统ML地图。接下来我们换一个大话题时间序列也就是那些带着时间顺序的数据股价、销量、流量该怎么预测这是另一片很大且很实用的天地。下一篇先讲经典的时序方法移动平均、指数平滑到ARIMA和Prophet。我们下一篇见。延伸阅读scikit-learn 官方文档新颖点与离群点检测含孤立森林、LOFhttps://scikit-learn.org/stable/modules/outlier_detection.html孤立森林原始论文《Isolation Forest》Liu, Ting, ZhouICDM 2008可按标题在Google Scholar检索原文说明以上为官方与经典公开资料链接可能随版本调整如打不开可用标题搜索。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。