在数据分析与风控场景中,我们常常需要从大量正常样本中找出极少数行为异常的记录。Python的scikit-learn提供了IsolationForest算法,它专门用来做无监督的异常检测,能够高效识别离群点。下面我们直接看怎么用。

IsolationForest的基本原理
IsolationForest字面意思是孤立森林,它由多棵孤立树组成。普通点因为和周围样本密集,需要多次切分才能被单独分出来;而离群点由于远离群体,很容易被一刀切开并单独隔离。算法用平均隔离路径长度衡量异常程度,路径越短,越可能是异常。
核心参数说明
| 参数 | 作用 | 常用值 |
|---|---|---|
| n_estimators | 森林中树的数量 | 100 |
| contamination | 预期异常比例 | 0.01到0.1 |
| random_state | 随机种子 | 42 |
使用步骤与代码示例
1. 准备数据与模型训练
我们用sklearn自带的make_blobs造一些带离群点的数据,然后训练模型。
from sklearn.ensemble import IsolationForest from sklearn.datasets import make_blobs import numpy as np # 生成正常簇样本 X, _ = make_blobs(n_samples=300, centers=1, cluster_std=0.5, random_state=0) # 手动加入几个明显离群点 outliers = np.array([[10, 10], [-10, -8], [9, -9]]) X = np.vstack([X, outliers]) # 初始化模型,设定异常比例为5% model = IsolationForest(n_estimators=100, contamination=0.05, random_state=42) model.fit(X) # 预测,-1表示异常,1表示正常 labels = model.predict(X) print(labels)
2. 查看异常得分
除了标签,还可以用decision_function拿到异常分数,值越小越异常。
scores = model.decision_function(X) # 打印最后三个离群点的得分 print(scores[-3:])
实际项目中的注意点
- contamination要根据业务经验设定,不要盲目用默认值。
- 如果特征量纲差异大,建议先标准化再训练。
- 孤立森林对高维稀疏数据效果会下降,可先做降维。
异常检测不是追求百分百准确,而是用低成本圈出值得人工复核的少数样本。
小结
使用Python的IsolationForest做异常检测非常简单,核心就是构造数据、设定contamination、fit预测三步。它不需要标签,适合冷启动阶段快速发现离群点。后续可结合业务规则进一步确认告警。
PythonIsolationForest异常检测修改时间:2026-07-28 10:03:19