序列异常检验分析

1. 异常检验算法综合比较分析

方法 数据 场景 参数 优点 缺点
Holt-Winters 时间序列数据,带有季节性和趋势性 季节性时间序列异常检测 α: 平滑参数,β: 趋势参数,γ: 季节性参数 简单易用,适用于季节性数据 对非季节性数据效果差,参数调节不直观
Prophet 时间序列数据,带有节假日效应 季节性时间序列和节假日效应的异常检测 变化点灵敏度,季节性灵敏度,节假日灵敏度 易用,处理节假日效应强,适合业务数据 对非季节性数据效果一般,参数较多
ARIMA 时间序列数据 一般时间序列异常检测 p: 自回归项,d: 差分项,q: 移动平均项 适用于一般时间序列,理论基础扎实 对季节性数据效果差,参数调节复杂
SARIMA 时间序列数据,带有季节性 季节性时间序列异常检测 p, d, q: 同ARIMA,PD,Q:季节性参数,m: 季节周期 适用于季节性时间序列,理论基础扎实 参数调节复杂,计算量大
Z-Score 数值型数据 简单的数值型数据异常检测 阈值: 判断异常的标准值 简单易用,计算量小 对复杂数据效果差,敏感于数据分布
无监督KNN 数值型或分类数据 一般异常检测 k: 最近邻的数量 直观易用,适用于多种数据类型 计算量大,对数据分布敏感
LOF 数值型或分类数据 局部异常检测 k: 最近邻的数量 适用于局部异常检测,考虑局部密度 计算量大,参数调节复杂
孤立森林 数值型或分类数据 一般异常检测 树的数量,每棵树的样本大小 高效,适用于高维数据和大数据集 对参数较敏感,结果解释性差
有监督KNN 数值型或分类数据,带标签 有标签数据的异常检测 k: 最近邻的数量 简单直观,适用于多种数据类型 计算量大,对数据分布敏感
SVM 数值型或分类数据,带标签 有标签数据的异常检测 C: 正则参数,kernel: 核函数,gamma: 核函数参数 适用于高维数据,理论基础扎实 计算量大,参数调节复杂
逻辑回归 数值型或分类数据,带标签 有标签数据的异常检测 正则化参数: 控制模型复杂度的参数 简单易用,结果解释性强 对非线性数据效果差
随机森林 数值型或分类数据,带标签 有标签数据的异常检测 树的数量,最大深度 高效,适用于高维数据和大数据集 对参数较敏感,结果解释性一般
AdaBoost 数值型或分类数据,带标签 有标签数据的异常检测 基分类器类型,迭代次数 提升模型性能,适用于多种数据类型 对噪声敏感,计算量大
XGBoost 数值型或分类数据,带标签 有标签数据的异常检测 树的数量,学习率,深度,叶子数量,正则系数… 高效,性能优异,适用于大数据集 参数调节复杂,计算量大
LightGBM 数值型或分类数据,带标签 有标签数据的异常检测 树的数量,学习率,深度,叶子数量,正则系数… 高效,性能优异,适用于大数据集,计算速度快 参数调节复杂,对小数据集效果一般
CatBoost 数值型或分类数据,带标签 有标签数据的异常检测 树的数量,学习率,深度,叶子数量,正则系数… 高效,性能优异,适用于大数据集,处理类别特征好 参数调节复杂,计算量大

总结

  • Holt-WintersProphet 适用于带有季节性和趋势性的时间序列数据,前者适合简单的季节性数据,后者适合带有节假日效应的业务数据。
  • ARIMASARIMA 适用于一般和季节性时间序列数据,前者适合无季节性的时间序列,后者适合季节性时间序列,但参数调节较为复杂。
  • Z-Score 适用于简单的数值型数据异常检测,计算简单,但对复杂数据效果差。
  • 无监督KNNLOF 适用于一般和局部异常检测,前者适合多种数据类型,后者更适合局部异常检测,但计算量大。
  • 孤立森林 适用于高维数据和大数据集的异常检测,计算高效,但对参数较敏感。
  • 有监督KNNSVM逻辑回归随机森林AdaBoostXGBoostLightGBMCatBoost 适用于有标签数据的异常检测,越靠前者越是简单直观,越靠后者性能越优异但参数调节越复杂。

2. 异动检验流程

以收入日报数据为例,下面是异动检验的详细流程。

2.1 序列数据

序列长度尽可能覆盖一个完整周期以上。

2.2 特征工程

特征工程可以从以下几个方面入手:

2.2.1 历史特征

  • k日前收入:k值建议1、2、3,即分别构建三个特征为1日前收入,2日前收入,3日前收入。
  • k周前同比日收入:k值建议1、2、3。
  • k月前同比日收入:k值建议1、2、3。
  • k年前同比日收入:k值建议1、2、3;如果数据无法支持3年以上,不建议使用k年前同比日收入特征。

2.2.2 日历表特征

  • 当日节假日类型,节假日持续天数。
  • 当日是所属周内的第几天,当日所属该年度的周次。
  • 当日是所属月份的第几天,当日所属该年度的月份。

2.2.3 统计特征

  • k日均值(不含当日):k值建议3、7、15、30;可依据具体场景的最短周期进行选择,例如某个场景的最短周期是7天,那么k可以选择7、14、21、28。
  • k日最大值(不含当日):k值建议同上。
  • k日最小值(不含当日):k值建议同上。
  • k日标准差(不含当日):k值建议同上。
  • k日变异系数(不含当日):k值建议同上。

2.2.4 时序特征

  • k日自相关系数:k值建议3、7、15、30;可依据具体场景的最短周期进行选择,例如某个场景的最短周期是7天,那么k可以选择7、14、21、28。
  • k阶差分特征:k值建议1、2。
    • 一阶差分是为了去除长期趋势,使得数据更加平稳。
    • 二阶差分是去除线性趋势和加速变化的趋势(抛物线趋势),因此可以用于季节因素明显的序列中剔除季节因素。
    • 一般不会选择三阶及以上的差分。

2.2.5 变化率特征

  • 日增长率特征(k日前收入 - (k+1)日前收入)/(k+1)日前收入\text{(k日前收入 - (k+1)日前收入)} / \text{(k+1)日前收入},k值建议0、1、2。
  • 月同比日增长率(m月前同比日收入 - (m+1)月前同比日收入)/(m+1)月前同比日收入\text{(m月前同比日收入 - (m+1)月前同比日收入)} / \text{(m+1)月前同比日收入},m值建议0、1、2。
  • 年同比日增长率(如果数据支持)(y月前同比日收入 - (y+1)月前同比日收入)/(y+1)月前同比日收入\text{(y月前同比日收入 - (y+1)月前同比日收入)} / \text{(y+1)月前同比日收入},y值建议0、1、2。

2.2.6交叉特征

交叉特征主要为了捕获特征之间的交互作用,有些特征并不是单独发挥作用的;此外,通过对重要特征进行交叉,可以获得更加丰富的数据信息,提升模型能力。一般倾向于使用类别型特征和数值型特征进行两两交叉,三交叉/多交叉使用较少。

  • 二交叉:两两交叉
    • 日历表特征 x 时序特征
    • 日历表特征 x 变化率特征
  • 三交叉/多交叉:三个及以上的特征进行交叉
    • 日历表特征 x 时序特征 x 变化率

2.3 模型选择

这里会提到一些模型的名称,但只介绍流程,不具体展开算法,详细内容可以参考下一节。

2.3.1 有监督 vs 无监督

  • 有监督:如果采集的数据有异常标记(或人工打标),则属于有监督的异常检验问题。
  • 无监督:如果数据没有异常标记(也没有人工打标结果),则属于无监督异常检验。

注意:即使数据是有标签的,也可以使用无监督的方法进行训练和预测。

2.3.2 无监督模型

  • 无特征(基于时间序列)
    • Holt-Winters
    • Prophet
    • ARIMA
    • SARIMA
    • Z-Score
  • 有特征
    • KNN
    • 孤立森林(Isolate-Forest)
    • LOF(Local Outlier Factor)

2.3.3 有监督模型

必须要提前构建特征工程。

  • 数据集划分:与一般的截面型数据的数据集划分方式不同,对于时序类型的数据,在划分训练集和测试集时,必须严格按照时间顺序进行划分。例如前70%的数据作为训练集(时间最久远的部分数据),后30%的数据作为测试集(距离当前较近的部分数据)。否则会由于数据穿越使得模型学习到未来的信息,导致模型过拟合,即在历史数据上进行训练和预测时效果非常好,但在实际投放使用时效果非常差。
  • 特征选择:随机选择一个强模型,如XGBoost或LightGBM,先进行一次训练,根据模型给出的特征重要度来选择一部分真正有用的特征。例如,通过特征工程构造了一百个特征,但通过特征选择之后,可能只会选择50个有效的特征;通过特征选择,一方面可以减少模型的复杂度,降低过拟合的风险;另一方面,如果数据集足够大,可以加快模型训练和收敛的速度;对于某些线性模型来说,还可以减少特征之间的多重共线性问题。
  • 模型选择:模型选择在特征选择之后进行,通常会选择多个模型同时进行训练和比较,选出最优的那一个,或者通过投票等机制将多个模型进行融合集成。
    • 支持向量机 SVM(Support Vector Machine)
    • 逻辑回归 Logistic Regression
    • 随机森林 Random Forest
    • XGBoost
    • LightGBM
    • CatBoost

2.4 模型集成

  • 如果最终只选择一个模型,那么不需要进行模型集成。
  • 如果最终选择使用多个模型进行预测,那么需要选择合适的集成策略进行模型集成。

2.4.1 集成策略

  • 硬投票(hard voting):将所有模型的预测标签(0 或 1,假设 1 表示异常)直接进行相加,如果结果大于设定的某个阈值(如7个模型中超过3个认为该数据属于异常),那么标记该数据为异常;否则为正常。
  • 软投票(soft voting):将所有模型的预测概率(0-1之间的小数)直接进行相加,如果结果大于设定的某个阈值(如7个模型的预测概率之和大于2.5,或7个模型的预测概率的均值大于0.5),那么标记该数据为异常;否则为正常。
  • 两阶段法将第一阶段的预测结果作为特征(可以是预测概率,也可以是预测标签,也可以两者都用),再输入一个新的模型中进行训练,然后再进行预测;将第二阶段的模型预测结果作为最终结果。需要注意的是,第二阶段的模型尽量不要从第一阶段的模型中选择,而是单独额外选择一个不同的模型。

2.5 模型评估

依据具体的业务场景和目标,选择合适的评价指标。我们通常使用的一些评价指标如下:AUC,Accuracy,Precision,Recall(TPR),F1-Score,TPR,FNR,FPR。具体的每个指标的特点和适用场景,我们在最后一个章节进行描述和分析。

3. 基于时间序列的异常检验

基于时间序列的异常检验方法,其工作原理是通过学习序列数据的历史规律,如周期性、长期趋势、季节性等因素,构建一个预测模型,使用这个预测模型对新的(未来的)时间节点数据进行预测,如果预测值与真实值的偏差超过了某一个阈值(如3倍的标准差),则认为该时间点的数据是异常的。

3.1 Holt-winters

3.1.1 介绍

Holt-Winters 也被称为加权指数平滑法,通常用于时间序列预测,也被广泛应用于序列的异常检验。它同时考虑了数据的趋势和季节性成分,还用加权指数平滑来适应数据的变化。

3.1.2 原理

Holt-Winters模型分为三种:加法模型和乘法模型。

每种模型又包括三个主要的部分:水平(Level)成分、趋势(Trend)成分和季节性(Seasonal)成分。

  • 加法模型

水平成分更新公式:

Lt=α(YtStm)+(1α)(Lt1+Tt1)L_t = \alpha (Y_t - S_{t-m}) + (1 - \alpha)(L_{t-1} + T_{t-1})

趋势成分更新公式:

Tt=β(LtLt1)+(1β)Tt1T_t = \beta (L_t - L_{t-1}) + (1 - \beta) T_{t-1}

季节性成分更新公式:

St=γ(YtLt)+(1γ)StmS_t = \gamma (Y_t - L_t) + (1 - \gamma) S_{t-m}

预测公式:

Y^t+h=Lt+hTt+Stm+h\hat{Y}_{t+h} = L_t + hT_t + S_{t-m+h}

  • 乘法模型

水平成分更新公式:

Lt=αYtStm+(1α)(Lt1+Tt1)L_t = \alpha \frac{Y_t}{S_{t-m}} + (1 - \alpha)(L_{t-1} + T_{t-1})

趋势成分更新公式:

Tt=β(LtLt1)+(1β)Tt1T_t = \beta (L_t - L_{t-1}) + (1 - \beta) T_{t-1}

季节性成分更新公式:

St=γYtLt+(1γ)StmS_t = \gamma \frac{Y_t}{L_t} + (1 - \gamma) S_{t-m}

预测公式:

Y^t+h=(Lt+hTt)Stm+h\hat{Y}_{t+h} = (L_t + hT_t) S_{t-m+h}

3.1.3 算法流程

初始化:确定初始的水平、趋势和季节性成分。

更新参数:使用上述公式更新水平、趋势和季节性成分。

预测:根据更新后的参数进行未来值的预测。

Holt-Winters算法通过加权平均的方法对时间序列数据进行平滑处理,分别考虑了数据的水平、趋势和季节性变化。通过不断更新这三个成分,算法能够捕捉到数据的动态变化,并进行较为准确的预测。

3.1.4 优缺点分析

  • 优点

    • 适应性强:能够处理多种类型的时间序列数据,提供加法模型和乘法模型,分别适用于具有趋势和季节性的复杂数据。
    • 易于理解和实现:算法相对简单,易于在各种编程语言中实现。
    • 实时更新:可以在新数据到来时实时更新模型参数,适合动态变化的环境。
  • 缺点

    • 参数选择敏感:平滑参数αβγ\alpha 、\beta 、\gamma的选择对预测结果影响较大,参数选择不当可能导致预测不准确。
    • 初始值依赖:初始水平、趋势和季节性成分的选择对模型性能有较大影响。
    • 对异常值敏感:对异常值较为敏感,可能需要预处理数据以去除异常值。

3.1.5 注意事项

  • 数据无趋势或季节性:Holt-Winters算法主要适用于具有趋势和季节性成分的数据,如果数据没有明显的趋势或季节性,使用该算法可能不合适。
  • 参数选择不当:平滑参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 异常值处理:在进行预测前,应对数据中的异常值进行处理,否则可能影响预测结果。
  • 长期预测:Holt-Winters算法在长期预测时性能可能下降,因为模型假设趋势和季节性成分在未来保持不变。

3.2 Prophet

3.2.1 介绍

Prophet是由Facebook开发的一种时间序列预测工具,旨在处理具有季节性趋势的时间序列数据。它通过分解时间序列成趋势、季节性和假期效应三个主要成分,来进行灵活且准确的预测。Prophet特别适用于处理缺失数据和异常值,并且能够自动处理季节性和节假日效应。

3.2.2 原理

Prophet模型的核心思想是将时间序列分解为趋势、季节性和假期效应三个成分,并使用可加模型来进行预测。

  • 趋势成分:描述数据的长期增长或下降趋势,可以是线性或非线性
  • 季节性成分:描述数据的周期性波动,可以是年周期、月周期、周周期等。
  • 假期效应:描述特定假期对数据的影响。

Prophet的模型可以表示为:

y(t)=g(t)+s(t)+h(t)+εty(t) = g(t) + s(t) + h(t) + \varepsilon_t

其中:g(t)g(t) 表示趋势成分, s(t)s(t) 表示季节性成分, h(t)h(t) 表示假期效应, εt\varepsilon_t 表示误差项。

3.2.3 算法流程

  1. 数据预处理

    • 填补缺失值;
    • 处理异常值。
  2. 模型拟合

    • 拟合趋势成分 g(t)g(t)
    • 拟合季节性成分 s(t)s(t)
    • 拟合假期效应 h(t)h(t)
  3. 预测:使用拟合的模型对未来时间点进行预测。

Prophet通过贝叶斯估计来拟合模型参数,并使用MCMC(马尔可夫链蒙特卡罗)方法来进行参数采样,以提高预测的可靠性。

3.2.4 优缺点分析

  • 优点

    • 灵活性强:能够处理具有趋势、季节性和假期效应的时间序列数据,自定义季节性和假期效应,可以适应多种业务场景;
    • 鲁棒性强:能够处理缺失数据和异常值,对数据质量要求较低;
    • 易于使用:提供了简单的API接口,易于集成和使用。
  • 缺点

    • 计算复杂度高:模型拟合过程较为复杂,计算资源消耗较大;
    • 参数调优复杂:尽管提供了自动化的参数估计,但在某些场景下仍需手动调优
    • 对长周期预测不敏感:在长周期预测时,模型的准确性可能下降。

3.2.5 注意事项

  • 数据无明显趋势或季节性:Prophet主要适用于具有明显趋势和季节性变化的数据,如果数据不具备这些特性,使用Prophet可能效果不佳。
  • 过度依赖默认参数:虽然Prophet提供了自动化的参数估计,但在某些复杂场景下,需要手动调整参数以获得最佳效果。
  • 忽视数据预处理:尽管Prophet对缺失数据和异常值具有一定的鲁棒性,但仍需进行适当的数据预处理,以提高模型的预测准确性。
  • 长期预测:Prophet在长期预测时可能会出现性能下降的问题,尤其是在数据的趋势和季节性变化较为复杂的情况下。

3.3 ARIMA

3.3.1 介绍

ARIMA(AutoRegressive Integrated Moving Average,自回归积分滑动平均模型)是一种广泛应用于时间序列预测的统计模型。它结合了自回归(AR)、差分(I)和滑动平均(MA)三个部分,能够有效地处理非平稳时间序列数据。ARIMA模型通过对数据进行差分处理来去除非平稳性,并使用自回归和滑动平均成分来捕捉数据的动态特性。

3.3.2 原理

ARIMA模型由三个参数 (p,d,q)(p, d, q) 决定:pp是自回归项的阶数(AR),dd是差分次数 (I),qq是滑动平均项的阶数(MA)。

ARIMA 模型的数学表示为:

Yt=c+ϕ1Yt1+ϕ2Yt2++ϕpYtp+θ1εt1+θ2εt2++θqεtq+εtY_t = c + \phi_1 Y_{t-1} + \phi_2 Y_{t-2} + \cdots + \phi_p Y_{t-p} + \theta_1 \varepsilon_{t-1} + \theta_2 \varepsilon_{t-2} + \cdots + \theta_q \varepsilon_{t-q} + \varepsilon_t

其中:YtY_t 为时间序列的当前值,cc 为常数项,ϕi\phi_i 为自回归系数,θi\theta_i 为滑动平均系数,ϵt\epsilon_t 为误差项。

3.3.3 算法流程

  1. 数据预处理:检查并去除非平稳性(通过差分处理)。
  2. 模型识别:确定ARIMA模型的参数 (p,d,q)(p, d, q),通常使用ACF(自相关函数)和PACF(偏自相关函数)图来帮助识别。
  3. 模型拟合:使用历史数据拟合ARIMA模型,估计模型参数。
  4. 模型诊断:检查残差是否为白噪声,以验证模型的有效性。
  5. 预测:使用拟合好的模型进行未来值的预测。

3.3.4 优缺点分析

  • 优点

    • 理论基础扎实:ARIMA模型基于统计理论,模型解释性强;
    • 适用范围广能够处理多种类型的时间序列数据,尤其是非平稳数据(通过差分处理可以将非平稳序列转化为平稳的时间序列数据)
    • 预测准确性高:对于短期预测,ARIMA模型通常具有较高的准确性;对于长时间序列数据,模型拟合效果较好。
  • 缺点

    • 参数选择复杂模型参数 (p,d,q)(p, d, q) 的选择需要经验和技巧,且可能需要多次试验;
    • 计算复杂度高:对于大规模数据,模型拟合和预测的计算量较大;
    • 对长周期预测不敏感:在长周期预测时,模型的准确性可能下降。

3.3.5 注意事项

  • 数据无规律性:ARIMA模型主要适用于具有一定规律性的时间序列数据,如果数据无明显的规律性,使用ARIMA可能效果不佳
  • 参数选择不当:模型参数 (p,d,q)(p, d, q) 的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 忽视数据预处理在进行预测前,应对数据进行适当的预处理,如去除非平稳性,否则可能影响预测结果。
  • 长期预测:ARIMA在长期预测时可能会出现性能下降的问题,尤其是在数据的趋势和季节性变化较为复杂的情况下。

3.4 SARIMA

3.4.1 介绍

SARIMA(Seasonal ARIMA,季节性自回归积分滑动平均模型)是在ARIMA模型的基础上,增加了对季节性成分的处理。它不仅考虑了时间序列数据的非平稳性和短期依赖性,还考虑了数据的季节性变化。SARIMA模型通过引入季节性差分、自回归和滑动平均成分,能够更好地捕捉具有周期性波动的时间序列数据。

3.4.2 原理

SARIMA模型由两个部分组成:非季节性部分和季节性部分。其参数表示为 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s,其中:

  • (p,d,q)(p, d, q):非季节性部分的参数

    • pp:非季节性自回归项的阶数(AR)
    • dd:非季节性差分次数(I)
    • qq:非季节性滑动平均项的阶数(MA)
  • (P,D,Q)s(P, D, Q)_s:季节性部分的参数

    • PP:季节性自回归项的阶数(SAR)
    • DD:季节性差分次数(SI)
    • QQ:季节性滑动平均项的阶数(SMA)
    • ss:季节周期的长度

SARIMA模型的数学表示为:

ΦP(Bs)ϕp(B)(1B)d(1Bs)DYt=ΘQ(Bs)θq(B)εt\Phi_P(B^s) \phi_p(B) (1 - B)^d (1 - B^s)^D Y_t = \Theta_Q(B^s) \theta_q(B) \varepsilon_t

其中:BB 为滞后算子,ϕp(B)\phi_p(B)θq(B)\theta_q(B) 分别为非季节性自回归和滑动平均多项式,ΦP(Bs)\Phi_P(B^s)ΘQ(Bs)\Theta_Q(B^s) 分别为季节性自回归和滑动平均多项式,εt\varepsilon_t 为误差项。

3.4.3 算法流程

  1. 数据预处理

    • 检查并去除非平稳性(通过差分处理);
    • 检查并去除季节性非平稳性(通过季节性差分处理)。
  2. 模型识别:确定SARIMA模型的参数 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s,通常使用ACF(自相关函数)和PACF(偏自相关函数)图来帮助识别。

  3. 模型拟合:使用历史数据拟合SARIMA模型,估计模型参数。

  4. 模型诊断:检查残差是否为白噪声,以验证模型的有效性。

  5. 预测:使用拟合好的模型进行未来值的预测。

3.4.4 优缺点分析

  • 优点

    • 季节性处理强:能够同时有效处理具有季节性变化和不具有季节性变化的时间序列数据;
    • 理论基础扎实:基于统计理论,模型解释性强;
    • 预测准确性高:对于具有季节性和非季节性成分的数据,预测效果较好;对于长时间序列数据,模型拟合效果较好。
  • 缺点

    • 参数选择复杂:模型参数 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s 的选择需要经验和技巧,且可能需要多次试验;
    • 计算复杂度高:对于大规模数据,模型拟合和预测的计算量较大;
    • 对长周期预测不敏感:在长周期预测时,模型的准确性可能下降。

3.4.5 注意事项

  • 数据无季节性:SARIMA模型主要适用于具有季节性变化的时间序列数据,如果数据无明显的季节性,使用SARIMA可能效果不佳
  • 参数选择不当:模型参数 (p,d,q)×(P,D,Q)s(p, d, q) \times (P, D, Q)_s 的选择对模型性能影响较大,应避免使用默认参数而不进行调优
  • 忽视数据预处理:在进行预测前,应对数据进行适当的预处理,如去除非平稳性和季节性非平稳性,否则可能影响预测结果。
  • 长期预测:SARIMA在长期预测时可能会出现性能下降的问题,尤其是在数据的趋势和季节性变化较为复杂的情况下。

3.5 Z-Score

3.5.1 介绍

Z-Score(标准分数)是一种用于统计分析的方法,通过将数据点转换为标准正态分布下的分数,来衡量数据点相对于均值的偏离程度。Z-Score通常用于检测异常值、标准化数据以及比较不同数据集中的数据点。

3.5.2 原理

Z-Score的计算公式为:

Z=XμσZ = \frac{X - \mu}{\sigma}

其中:XX 为数据点的值,μ\mu 为数据集的均值,σ\sigma 为数据集的标准差。

Z-Score表示数据点与均值的差距,以标准差为单位。如果Z-Score的绝对值较大,说明数据点是异常值或极端值

3.5.3 算法流程

  1. 计算均值:计算数据集的均值 μ\mu
  2. 计算标准差:计算数据集的标准差 σ\sigma
  3. 计算Z-Score:对每个数据点 XX,计算其对应的Z-Score ZZ
  4. 异常值检测:根据设定的阈值(如 Z>3|Z| > 3),判断数据点是否为异常值。

3.5.4 优缺点分析

  • 优点

    • 简单直观:计算过程简单,结果易于理解;
    • 快速高效:计算量小,适合大规模数据集;
    • 广泛应用:适用于多种数据分析场景,如异常值检测、数据标准化等。
  • 缺点

    • 对数据分布敏感:假设数据服从正态分布,对于非正态分布的数据,效果可能较差;
    • 对极端值敏感:极端值会影响均值和标准差的计算,进而影响Z-Score的准确性;
    • 无法处理非数值数据:仅适用于数值型数据,无法直接应用于分类数据或文本数据。

3.5.5 注意事项

  • 数据非正态分布:Z-Score假设数据服从正态分布,对于非正态分布的数据,使用Z-Score可能不合适,应考虑其他方法如IQR(四分位距)或MAD(中位数绝对偏差)。
  • 极端值影响:数据集中存在极端值时,应先处理极端值,再计算Z-Score,否则极端值会影响均值和标准差的计算。
  • 适用范围:Z-Score 仅适用于数值型数据,对于分类数据或文本数据,应考虑其他标准化或异常值检测方法。

4. 多维无监督异常检验

该部分虽然也是无监督方法,但由于需要多个维度特征,因此需要按照实际场景需求构建相应的特征工程

4.1 无监督KNN

4.1.1 介绍

无监督KNN(K-Nearest Neighbors)是一种基于距离的异常检测方法,通过计算数据点与其最近邻居之间的距离来判断其是否为异常值。该方法不需要预先标注的数据集,适用于无监督学习场景。无监督KNN利用数据点在特征空间中的局部密度,检测那些与其邻居距离较远的点作为异常值

4.1.2 原理

无监督KNN异常检测的基本思想是:对于每个数据点,计算其与最近的 kk 个邻居之间的距离,如果该距离较大,则该数据点可能是异常值。

具体步骤如下:

  1. 数据准备:选择合适的特征作为输入数据。
  2. 距离计算:计算每个数据点与其他所有数据点之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。
  3. 邻居选择:对于每个数据点,选择其最近的 kk 个邻居。
  4. 异常评分:计算每个数据点与其 kk 个邻居的平均距离,作为该数据点的异常评分。异常评分越大,数据点越可能是异常值。异常评分公式如下:

AnomalyScore(xi)=1kj=1kdistance(xi,xij)\text{AnomalyScore}(x_i) = \frac{1}{k} \sum_{j=1}^{k} \text{distance}(x_i, x_{i_j})

其中:xix_i 为数据点,xijx_{i_j}xix_i 的第 jj 个最近邻居,distance(xi,xij)\text{distance}(x_i, x_{i_j})xix_ixijx_{i_j} 之间的距离。

  1. 异常检测**:根据设定的阈值,判断数据点是否为异常值。

4.1.3 优缺点分析

  • 优点

    • 简单易理解:基于距离的方法,直观易懂;
    • 无监督学习:不需要预先标注的数据,适用于无监督场景;
    • 适应性强:适用于多种类型的数据,包括高维数据和非线性数据。
  • 缺点

    • 计算复杂度高:距离计算的复杂度为 O(n2)O(n^2),对于大规模数据集,计算量较大;
    • 参数选择复杂参数 kk 和异常判定阈值的选择对结果影响较大,需要进行调优
    • 对异常值分布敏感:如果异常值分布较为集中,可能影响检测效果。

4.1.4 注意事项

  • 数据规模大:无监督KNN的计算复杂度较高,对于大规模数据集,计算时间可能较长,应考虑使用近似算法或降维技术。
  • 参数选择不当:参数 kk 的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 数据分布不均:如果数据分布不均匀,可能影响邻居选择的效果,应考虑数据标准化或使用加权距离。
  • 高维数据:对于高维数据,距离度量可能失效,应考虑使用降维技术或其他适合高维数据的异常检测方法。

4.2 孤立森林(Isolation Forest)

4.2.1 介绍

孤立森林(Isolation Forest)是一种基于树结构的无监督异常检测算法。它通过随机选择特征和分割点来构建决策树,将数据点隔离。与传统的基于距离或密度的方法不同,孤立森林直接利用异常点更容易被隔离这一特性来检测异常。该方法在处理高维数据和大规模数据集时具有显著优势。

4.2.2 原理

孤立森林的核心思想是:异常点更容易被隔离。即在随机分割数据集时,异常点需要的分割次数较少,因为它们通常位于数据的边缘或孤立区域。

孤立森林通过构建多棵随机树来实现异常检测:

  1. 随机选择特征:从数据集中随机选择一个特征。
  2. 随机选择分割点:在所选特征的取值范围内随机选择一个分割点。
  3. 递归分割:根据分割点将数据集分成两部分,并对每部分数据递归重复上述过程,直到每个数据点被单独隔离或达到树的最大深度。

每个数据点的异常评分由其在森林中所有树的平均路径长度决定。路径长度越短,数据点越可能是异常值。

异常评分公式:

AnomalyScore(x)=2E(h(x))c(n)\text{AnomalyScore}(x) = 2^{-\frac{E(h(x))}{c(n)}}

其中:E(h(x))E(h(x)) 为数据点 xx 在所有树中的平均路径长度,c(n)c(n) 为数据集中 nn 个数据点的平均路径长度的调整因子。

4.2.3 算法流程

  1. 数据准备:选择合适的特征作为输入数据。
  2. 构建孤立树:随机选择特征和分割点,构建多棵孤立树。
  3. 路径长度计算:对每个数据点,计算其在每棵树中的路径长度。
  4. 异常评分:计算每个数据点的异常评分。
  5. 异常检测:根据设定的阈值,判断数据点是否为异常值。

4.2.4 优缺点分析

  • 优点

    • 高效处理大规模数据:孤立森林的训练和预测速度较快,适合处理大规模数据集
    • 适用于高维数据:孤立森林能够有效处理高维数据,而不需要降维
    • 无监督学习:不需要预先标注的数据,适用于无监督场景
    • 直观易理解:基于树结构的方法,模型解释性强
  • 缺点

    • 对参数敏感:孤立森林的性能受到树的数量和样本大小等参数的影响,需要调优
    • 对噪声敏感:在噪声较多的数据集中,孤立森林可能会误判一些正常点为异常点;
    • 数据分布依赖:孤立森林假设异常点更容易被隔离,但在某些数据分布下,这一假设可能不成立。

4.2.5 注意事项

  • 数据噪声多:在噪声较多的数据集中,孤立森林可能会误判一些正常点为异常点,应考虑预处理数据以减少噪声。
  • 参数选择不当:孤立森林的性能依赖于树的数量和样本大小等参数,应避免使用默认参数而不进行调优。
  • 数据分布特殊:在某些特殊数据分布下,孤立森林的假设可能不成立,应考虑其他异常检测方法。
  • 数据规模过大:尽管孤立森林适合处理大规模数据,但在极端大规模数据集上,仍需考虑计算资源和时间成本。

4.3 局部离群因子(LOF)

4.3.1 介绍

局部离群因子(Local Outlier Factor,LOF)是一种基于密度的无监督异常检测算法。它通过比较数据点与其邻居的局部密度差异来识别异常点。LOF的核心思想是:异常点通常位于局部密度较低的区域,与其邻居的密度差异较大。LOF算法特别适用于检测局部异常值,即在数据集中某些局部区域内的异常点。

4.3.2 原理

LOF通过以下步骤计算每个数据点的局部离群因子:

  1. 数据准备:选择合适的特征作为输入数据。

  2. 计算 kk 距离和 kk 邻域

    • 对于每个数据点,找到其第 kk 个最近邻居的距离,称为 kk 距离。
    • kk 邻域是所有距离小于等于 kk 距离的点的集合。
  3. 计算可达距离:对于数据点 pp 和其邻居 oo,可达距离定义为 kk 距离和 ppoo 之间的实际距离中的较大值。即:

    reachability_distk(p,o)=max(k-distance(o),dist(p,o))\text{reachability\_dist}_k(p, o) = \max(\text{k-distance}(o), \text{dist}(p, o))

  4. 计算局部可达密度:局部可达密度是 pp 的所有邻居点的可达距离的倒数的平均值。即:

    lrdk(p)=(oNk(p)reachability_distk(p,o)Nk(p))1\text{lrd}_k(p) = \left( \frac{\sum_{o \in N_k(p)} \text{reachability\_dist}_k(p, o)}{|N_k(p)|} \right)^{-1}

  5. 计算局部离群因子:LOF是 pp 的邻居点的局部可达密度与 pp 的局部可达密度的比值的平均值。即:

    LOFk(p)=oNk(p)lrdk(o)lrdk(p)Nk(p)\text{LOF}_k(p) = \frac{\sum_{o \in N_k(p)} \frac{\text{lrd}_k(o)}{\text{lrd}_k(p)}}{|N_k(p)|}

  6. 异常检测:根据设定的阈值,判断数据点是否为异常值;LOF值越大,数据点越可能是异常值。通常,LOF值大于1表示数据点的密度低于其邻居,可能是异常值。

4.3.3 优缺点分析

  • 优点

    • 检测局部异常:LOF能够检测局部异常值,而不仅仅是全局异常值;
    • 自适应性强:LOF可以根据数据的局部密度自适应地调整异常检测标准
    • 无监督学习:不需要预先标注的数据,适用于无监督场景
  • 缺点

    • 计算复杂度高:计算每个数据点的局部离群因子需要大量的距离计算,复杂度较高
    • 参数选择复杂:参数 kk 的选择对结果影响较大,需要进行调优;
    • 对数据分布敏感:LOF对数据分布的变化较为敏感,可能导致检测结果的不稳定。

4.3.4 注意事项

  • 数据规模大:LOF的计算复杂度较高,对于大规模数据集,计算时间可能较长,应考虑使用近似算法或降维技术。
  • 参数选择不当:参数 kk 的选择对模型性能影响较大,应避免使用默认参数而不进行调优
  • 数据分布不均:如果数据分布不均匀,可能影响邻居选择的效果,应考虑数据标准化或使用加权距离
  • 高维数据对于高维数据,距离度量可能失效,应考虑使用降维技术或其他适合高维数据的异常检测方法。

5. 有监督异常检验

5.1 有监督KNN

5.1.1 介绍

有监督KNN(K-Nearest Neighbors)是一种基于实例的分类算法,通过计算待检测样本与已标注样本之间的距离来进行分类。对于异常检测任务,有监督KNN可以利用标注好的正常样本和异常样本,通过最近邻居的标签来判断新样本是否为异常值。该方法适用于有标注的数据集,能够有效利用已有标签信息进行异常检测。

5.1.2 原理

有监督KNN的核心思想是:对于一个待检测样本,通过计算其与训练集中所有样本的距离,选择最近的 kk 个邻居,根据这些邻居的标签来判断该样本的类别(正常或异常)。

具体步骤如下:

  1. 数据准备:选择合适的特征作为输入数据,并确保数据集包含已标注的正常样本和异常样本。
  2. 距离计算:计算待检测样本与训练集中所有样本之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。
  3. 邻居选择:对于待检测样本,选择其最近的 kk 个邻居。
  4. 投票分类:根据这 kk 个邻居的标签,通过多数投票的方式决定待检测样本的类别。
  5. 异常检测:如果多数邻居的标签为异常,则判定该样本为异常值;否则,判定为正常值。

5.1.3 优缺点分析

  • 优点

    • 简单直观:基于距离的分类方法,直观易懂;
    • 利用标签信息:能够有效利用已标注的正常样本和异常样本,提高检测准确性;
    • 无参数训练不需要显式的训练过程,只需保存训练数据。
  • 缺点

    • 计算复杂度高:距离计算的复杂度为 O(n)O(n),对于大规模数据集,计算量较大;
    • 参数选择复杂:参数 kk 的选择对结果影响较大,需要进行调优;
    • 对噪声敏感:在噪声较多的数据集中,KNN可能会受到噪声样本的影响,导致误判。

5.1.4 注意事项

  • 数据规模大:有监督KNN的计算复杂度较高,对于大规模数据集,计算时间可能较长,应考虑使用近似算法或降维技术。
  • 参数选择不当:参数 kk 的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 数据分布不均:如果数据分布不均匀,可能影响邻居选择的效果,应考虑数据标准化或使用加权距离
  • 高维数据:对于高维数据,距离度量可能失效,应考虑使用降维技术或其他适合高维数据的异常检测方法。
  • 噪声数据:在噪声较多的数据集中,KNN可能会受到噪声样本的影响,应考虑数据预处理以减少噪声

5.2 支持向量机(SVM)

5.2.1 介绍

支持向量机(Support Vector Machine,SVM)是一种常用于分类任务的监督学习算法。在异常检测中,SVM可以通过学习正常样本和异常样本之间的分界面,来识别新样本是否为异常值。SVM特别适用于高维数据和线性不可分数据,通过核函数映射到高维空间进行分类。

5.2.2 原理

SVM的核心思想是:在特征空间中找到一个最优超平面,使得不同类别的样本能够被最大间隔地分开。在异常检测中,SVM通过学习正常样本和异常样本之间的分界面,来识别新样本的类别。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本。
  2. 特征选择:选择合适的特征作为输入数据。
  3. 训练SVM模型:利用训练数据集,找到最优超平面。
  4. 分类决策:利用训练好的SVM模型,对新样本进行分类,判断其是否为异常值。
  5. 异常检测:根据分类结果,判断新样本是否为异常值。
    SVM的目标是找到一个超平面,使得:

wx+b=0w \cdot x + b = 0

其中,ww 是超平面的法向量,bb 是偏置项。

为了最大化分类间隔,优化问题可以表示为:

minw,b12w2\min_{w,b} \frac{1}{2} \|w\|^2

同时满足约束条件:

yi(wxi+b)1iy_i (w \cdot x_i + b) \geq 1 \quad \forall i

5.2.3 优缺点分析

  • 优点

    • 高维数据处理:SVM能够有效处理高维数据;
    • 非线性数据处理:通过核函数,SVM能够处理线性不可分数据
    • 强大的分类能力:SVM在小样本数据集上表现优异
  • 缺点

    • 计算复杂度高:训练时间较长,尤其是对于大规模数据集;
    • 参数选择复杂需要调优核函数类型和参数;
    • 对噪声敏感对噪声和异常值较为敏感,可能导致误判。

5.2.4 注意事项

  • 数据规模大:SVM的训练时间较长,对于大规模数据集,计算时间可能较长,应考虑使用近似算法或降维技术。
  • 参数选择不当:核函数类型和参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 数据分布不均:如果数据分布不均匀,可能影响分类效果,应考虑数据标准化或使用加权方法。
  • 高噪声数据:在噪声较多的数据集中,SVM可能会受到噪声样本的影响,应考虑数据预处理以减少噪声

5.3 逻辑回归(LR)

5.3.1 介绍

逻辑回归(Logistic Regression)是一种广泛使用的线性分类算法,通过拟合一个逻辑函数来预测样本属于某个类别的概率。在异常检测中,逻辑回归可以利用已标注的正常样本和异常样本,通过学习分类边界来识别新样本是否为异常值。逻辑回归适用于线性可分的数据集,具有较高的解释性和计算效率

5.3.2 原理

逻辑回归的核心思想是:通过学习一个线性模型来预测样本属于某个类别的概率。模型的输出通过逻辑函数(Sigmoid函数)映射到概率空间。

逻辑回归模型的形式为:

P(y=1x)=σ(wx+b)P(y=1|x) = \sigma(w \cdot x + b)

其中,σ(z)\sigma(z) 是逻辑函数,定义为:

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

模型的目标是最小化对数损失函数:

LogLoss=1ni=1n[yilog(y^i)+(1yi)log(1y^i)]\text{LogLoss} = -\frac{1}{n} \sum_{i=1}^{n} [y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i)]

其中,y^i\hat{y}_i 是第 ii 个样本的预测概率。

5.3.3 算法流程

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据。
  2. 训练逻辑回归模型:利用训练数据集,最小化对数损失函数,学习模型参数。
  3. 分类决策:利用训练好的逻辑回归模型,计算新样本属于异常类别的概率。
  4. 异常检测:根据设定的阈值,判断新样本是否为异常值。

5.3.4 优缺点分析

  • 优点

    • 简单易理解:逻辑回归模型简单,结果易于解释;
    • 计算效率高:训练和预测速度较快,适合大规模数据集
    • 概率输出能够输出样本属于异常类别的概率,便于阈值调整。
  • 缺点

    • 线性假设:假设数据是线性可分的,对于非线性数据,效果较差
    • 对异常值敏感对异常值和噪声较为敏感,可能导致误判;
    • 特征工程要求高需要进行特征选择和特征工程,以提高模型性能。

5.3.5 注意事项

  • 数据非线性:逻辑回归假设数据是线性可分的,对于非线性数据,应考虑使用非线性模型或进行特征转换。
  • 高噪声数据:在噪声较多的数据集中,逻辑回归可能会受到噪声样本的影响,应考虑数据预处理以减少噪声。
  • 特征选择不当:特征选择对逻辑回归的性能影响较大,应避免使用无关或冗余特征。
  • 数据规模过小对于小样本数据集,逻辑回归可能会过拟合,应考虑使用正则化技术

5.4 随机森林(RF)

5.4.1 介绍

随机森林(Random Forest)是一种基于决策树的集成学习方法,通过构建多个决策树并结合其预测结果来提高分类性能。在异常检测中,随机森林可以利用已标注的正常样本和异常样本,通过多数投票的方式来判断新样本是否为异常值。随机森林具有较强的抗噪声能力和较高的分类准确性

5.4.2 原理

随机森林的核心思想是:通过构建多棵决策树,并将每棵树的预测结果进行投票,来提高分类的稳定性和准确性。每棵决策树是在一个随机采样的子集上训练的,并且在每个节点分裂时,随机选择一部分特征进行分裂。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据。
  2. 数据采样:从训练数据集中随机抽取多个子集,每个子集用于训练一棵决策树(有放回抽样)。
  3. 特征选择:在每个节点分裂时,随机选择一部分特征,从中选择最佳分裂特征。
  4. 树的构建:根据选定的特征和样本,构建多棵决策树。
  5. 投票分类:对于新样本,利用所有决策树进行分类,通过多数投票决定其类别。
  6. 异常检测:根据多数投票结果,判断新样本是否为异常值。

5.4.3 优缺点分析

  • 优点

    • 高准确性:通过集成学习提高分类准确性;
    • 抗噪声能力强对噪声和异常值具有较强的鲁棒性
    • 处理高维数据:能够处理大量特征的数据集;
    • 无需特征缩放对特征的尺度不敏感
  • 缺点

    • 计算复杂度高:训练和预测过程需要较多的计算资源;
    • 模型解释性差:由于集成了多棵树,模型较难解释;
    • 参数选择复杂:需要调优树的数量和最大深度等参数

5.4.4 注意事项

  • 数据规模大:随机森林的计算复杂度较高,对于大规模数据集,计算时间可能较长,应考虑使用并行计算技术。
  • 参数选择不当:树的数量、最大深度等参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 数据分布不均如果数据分布不均匀,可能影响分类效果,应考虑数据标准化或使用加权方法。
  • 高噪声数据:尽管随机森林具有抗噪声能力,但在噪声特别多的数据集中,仍需进行数据预处理以减少噪声。

5.5 AdaBoost

5.5.1 介绍

AdaBoost(Adaptive Boosting)是一种提升方法,通过组合多个弱分类器来构建强分类器。在异常检测中,AdaBoost可以利用已标注的正常样本和异常样本,通过逐步调整样本权重,来提高分类器对异常样本的识别能力。AdaBoost在处理不平衡数据集和提高分类准确性方面表现优异

5.5.2 原理

AdaBoost的核心思想是:通过逐轮训练弱分类器,并根据每轮分类器的错误率调整样本权重,使得后续分类器更加关注前一轮分类错误的样本。最终,将所有弱分类器进行加权投票,得到最终的强分类器。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据。
  2. 初始化权重:为每个训练样本分配相同的初始权重。
  3. 训练弱分类器:利用当前样本权重,训练一个弱分类器。
  4. 计算错误率:计算弱分类器的分类错误率。
  5. 调整权重:根据错误率,更新样本权重,使得分类错误的样本权重增加。
  6. 组合分类器:将所有弱分类器进行加权投票,得到最终的强分类器。

5.5.3 优缺点分析

  • 优点

    • 提高准确性:通过组合多个弱分类器,提高分类准确性;
    • 处理不平衡数据能够有效处理类别不平衡的数据集
    • 灵活性强:可以结合多种类型的弱分类器。
  • 缺点

    • 计算复杂度高:训练过程需要多轮迭代,计算量较大;
    • 对噪声敏感对噪声和异常值较为敏感,可能导致误判
    • 参数选择复杂需要调优弱分类器的数量和学习率等参数

5.5.4 注意事项

  • 数据规模大:AdaBoost的计算复杂度较高,对于大规模数据集,计算时间可能较长,应考虑使用并行计算技术。
  • 参数选择不当:弱分类器的数量、学习率等参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 高噪声数据:在噪声较多的数据集中,AdaBoost可能会受到噪声样本的影响,应考虑数据预处理以减少噪声
  • 弱分类器选择不当:选择合适的弱分类器对AdaBoost的性能至关重要,应避免选择性能过低的弱分类器

5.6 XGBoost

5.6.1 介绍

XGBoost(Extreme Gradient Boosting)是一种基于梯度提升决策树(GBDT)的集成学习算法,通过逐步构建决策树来优化目标函数。在异常检测中,XGBoost可以利用已标注的正常样本和异常样本,通过训练多个决策树来提高分类准确性。XGBoost在处理大规模数据和高维数据方面表现出色,并且具有较强的鲁棒性和可解释性

5.6.2 原理

XGBoost的核心思想是:通过逐步构建决策树,每棵树都试图纠正前一棵树的错误,最终形成一个强大的分类器。XGBoost采用了正则化技术来防止过拟合,并通过并行计算和优化算法提高了计算效率。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据。
  2. 初始化模型:将模型初始化为一个常数函数。
  3. 逐步构建树:在每一步中,基于当前模型的残差,训练一个新的决策树。
  4. 更新模型:将新决策树的预测结果加到当前模型中。
  5. 重复步骤:重复上述步骤,直到达到预定的树数或误差不再显著减少。

XGBoost的目标函数为:

L(θ)=il(yi,y^i)+kΩ(fk)\mathcal{L}(\theta) = \sum_{i} l(y_i, \hat{y}_i) + \sum_{k} \Omega(f_k)

其中,ll 是损失函数,Ω\Omega 是正则化项,fkf_k 是第 kk 棵树。

5.6.3 优缺点分析

  • 优点

    • 高效计算:通过并行计算和优化算法,提高了计算效率;
    • 防止过拟合:采用了正则化技术,防止模型过拟合
    • 处理大规模数据能够处理大规模数据集和高维数据
    • 高准确性:具有较高的分类准确性。
  • 缺点

    • 参数调优复杂:需要调优多个参数,如学习率、树的数量和深度等;
    • 对噪声敏感对噪声和异常值较为敏感,可能导致误判
    • 计算资源需求高:训练过程需要较多的计算资源和时间。

5.6.4 注意事项

  • 数据规模大:尽管XGBoost能够处理大规模数据,但在极端大规模数据集上,仍需考虑计算资源和时间成本。
  • 参数选择不当:学习率、树的数量和深度等参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 高噪声数据:在噪声较多的数据集中,XGBoost可能会受到噪声样本的影响,应考虑数据预处理以减少噪声。
  • 特征选择不当:特征选择对XGBoost的性能影响较大,应避免使用无关或冗余特征

5.7 LightGBM

5.7.1 介绍

LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升决策树(GBDT)的高效实现,通过优化算法和数据结构,显著提高了计算速度和内存使用效率。在异常检测中,LightGBM可以利用已标注的正常样本和异常样本,通过训练多个决策树来提高分类准确性。LightGBM适用于大规模数据和高维数据,具有较高的计算效率和分类性能。

注:LightGBM实际上是XGBoost的一种改进方法,整体上原理和流程大致相同,但LightGBM具有更快的计算速度,并且可以直接处理缺失值和类别型特征。

5.7.2 原理

LightGBM的核心思想是:通过逐步构建决策树,每棵树都试图纠正前一棵树的错误,最终形成一个强大的分类器。LightGBM采用了基于直方图的算法和叶子增长策略,提高了计算效率和内存使用效率。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据。
  2. 初始化模型:将模型初始化为一个常数函数。
  3. 逐步构建树:在每一步中,基于当前模型的残差,训练一个新的决策树。
  4. 更新模型:将新决策树的预测结果加到当前模型中。
  5. 重复步骤:重复上述步骤,直到达到预定的树数或误差不再显著减少。

LightGBM的目标函数为:

L(θ)=il(yi,y^i)+kΩ(fk)\mathcal{L}(\theta) = \sum_{i} l(y_i, \hat{y}_i) + \sum_{k} \Omega(f_k)

其中,ll 是损失函数,Ω\Omega 是正则化项,fkf_k 是第 kk 棵树。

5.7.3 优缺点分析

  • 优点

    • 高效计算基于直方图的算法和叶子增长策略,提高了计算效率;
    • 低内存使用:优化的数据结构,显著降低了内存使用;
    • 处理大规模数据:能够处理大规模数据集和高维数据;
    • 高准确性:具有较高的分类准确性。
  • 缺点

    • 参数调优复杂:需要调优多个参数,如学习率、树的数量和深度等;
    • 对噪声敏感:对噪声和异常值较为敏感,可能导致误判;
    • 计算资源需求高:尽管优化了计算效率,但在极端大规模数据集上,仍需考虑计算资源和时间成本。

5.7.4 注意事项

  • 数据规模大:尽管LightGBM能够处理大规模数据,但在极端大规模数据集上,仍需考虑计算资源和时间成本。
  • 参数选择不当:学习率、树的数量和深度等参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 高噪声数据:在噪声较多的数据集中,LightGBM可能会受到噪声样本的影响,应考虑数据预处理以减少噪声。
  • 特征选择不当:特征选择对LightGBM的性能影响较大,应避免使用无关或冗余特征。

5.8 CatBoost

5.8.1 介绍

CatBoost(Categorical Boosting)是一种基于梯度提升决策树(GBDT)的集成学习算法,专门针对包含类别特征的数据进行了优化。在异常检测中,CatBoost可以利用已标注的正常样本和异常样本,通过训练多个决策树来提高分类准确性。CatBoost具有处理类别特征的独特优势,并且在处理大规模数据和高维数据方面表现出色。

注:CatBoost也是XGBoost的一种改进方法,他在处理类别型特征时使用了一种独特的方法,即有序提升统计量,将类别变量进行编码,由于其有序提升的特性,往往在具有时间顺序的数据上具有更好的表现。

5.8.2 原理

CatBoost的核心思想是:通过逐步构建决策树,每棵树都试图纠正前一棵树的错误,最终形成一个强大的分类器。CatBoost采用了独特的类别特征处理方法和顺序提升算法,减少了过拟合和目标泄露问题。

具体步骤如下:

  1. 数据准备:收集并标注正常样本和异常样本,并选择合适的特征作为输入数据,特别是类别特征。
  2. 初始化模型:将模型初始化为一个常数函数。
  3. 逐步构建树:在每一步中,基于当前模型的残差,训练一个新的决策树。
  4. 更新模型:将新决策树的预测结果加到当前模型中。
  5. 重复步骤:重复上述步骤,直到达到预定的树数或误差不再显著减少。

CatBoost的目标函数为:

L(θ)=il(yi,y^i)+kΩ(fk)\mathcal{L}(\theta) = \sum_{i} l(y_i, \hat{y}_i) + \sum_{k} \Omega(f_k)

其中,ll 是损失函数,Ω\Omega 是正则化项,fkf_k 是第 kk 棵树。

5.8.3 优缺点分析

  • 优点

    • 处理类别特征独特的类别特征处理方法,减少了目标泄露
    • 高效计算:顺序提升算法,提高了计算效率;
    • 防止过拟合:采用了正则化技术,防止模型过拟合;
    • 高准确性:具有较高的分类准确性。
  • 缺点

    • 参数调优复杂:需要调优多个参数,如学习率、树的数量和深度等;
    • 对噪声敏感:对噪声和异常值较为敏感,可能导致误判;
    • 计算资源需求高:训练过程需要较多的计算资源和时间。

5.8.4 注意事项

  • 数据规模大:尽管CatBoost能够处理大规模数据,但在极端大规模数据集上,仍需考虑计算资源和时间成本。
  • 参数选择不当:学习率、树的数量和深度等参数的选择对模型性能影响较大,应避免使用默认参数而不进行调优。
  • 高噪声数据:在噪声较多的数据集中,CatBoost可能会受到噪声样本的影响,应考虑数据预处理以减少噪声。
  • 特征选择不当:特征选择对CatBoost的性能影响较大,应避免使用无关或冗余特征。

6. 深度学习中的异常检验

深度学习模型需要大量的历史数据进行训练,例如分、秒级别的股票交易数据,对于日、周级别的数据,一般不建议采用深度学习模型。鉴于我们场景的特点,我们对深度学习模型仅做名称上的介绍,内容上不作展开。

6.1 自编码器(AutoEncoder)

6.2 变分自编码器(Variational Autoencoder, VAE)

6.3 长短期记忆(Long Short-Term Memory,LSTM)

7. 模型评估

训练模型之后很重要的一个工作是如何建立一个有效的评价体系来评估模型的预测能力。对与无标签数据,我们无法直观的描述模型预测结果的好坏,因为没有真正的对比数据,需要线上运行一定周期之后人工进行反馈。而对于有标签数据,我们可以依据如下的一些统计指标进行评估。

7.1混淆矩阵(Confusion Matrix)

在介绍具体的评价指标之前,我们首先引入混淆矩阵(Confusion Matrix),这是所有评价指标的基础。

混淆矩阵是用于描述分类模型性能的工具,它总结了模型在一组测试数据上的预测结果。混淆矩阵通常包括以下四个部分:

  • True Positive (TP):真实类别为正,预测类别也为正。

  • True Negative (TN):真实类别为负,预测类别也为负。

  • False Positive (FP):真实类别为负,预测类别为正(误报)。

  • False Negative (FN):真实类别为正,预测类别为负(漏报)。

    混淆矩阵的结构如下:

预测正类 (Positive) 预测负类 (Negative)
真实正类 (Positive) TP FN
真实负类 (Negative) FP TN

7.2 AUC (Area Under the Curve)

AUC(Area Under the Curve)是ROC曲线下的面积。ROC曲线是通过改变分类阈值,绘制出模型的真阳性率(Recall)与假阳性率(FPR)之间的关系曲线。AUC值越接近1,模型性能越好。

在业务中,AUC值越高,说明模型在区分正负样本方面的能力越强。对于需要高准确率的任务,如欺诈检测、医疗诊断等,AUC是一个重要的评价指标。

  • 优点
    • 类别不平衡问题不敏感
    • 能够综合评估模型的分类性能
  • 缺点
    • 计算复杂度较高。
    • 不适用于需要明确阈值的应用场景。

7.3 Accuracy (准确率)

准确率(Accuracy)是指分类器预测正确(包括正样本预测正确和负样本预测正确)的样本数占总样本数的比例。其计算公式如下:

Accuracy=TP+TNTP+TN+FP+FN\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}

在业务中,准确率高意味着模型整体预测的正确率高。但在类别不平衡的情况下(如罕见疾病检测、异常检验、欺诈检验等),高准确率可能掩盖模型在少数类上的低性能。

  • 优点
    • 简单直观。
    • 计算方便。
  • 缺点
    • 类别不平衡问题敏感
    • 在类别不平衡的情况下,可能会导致误导性的高准确率

7.4 Precision (精确率)

精确率(Precision)是指在所有被预测为正类的样本中,实际为正类的样本比例。其计算公式为

Precision=TPTP+FP\text{Precision} = \frac{TP}{TP + FP}

在业务中,精确率高意味着模型预测为正的样本大部分是正确的。适用于例如垃圾邮件检测、广告点击预测等需要减少误报的场景。

  • 优点
    • 对假阳性(误报,FP)敏感。
    • 适用于需要减少误报的场景
  • 缺点
    • 忽略了假阴性(漏报,FN)

7.5 Recall (召回率)/TPR

召回率(Recall,亦是TPR,二者是同一概念)是指在所有实际为正类的样本中,被正确预测为正类的比例。计算公式为

Recall=TPTP+FN\text{Recall} = \frac{TP}{TP + FN}

在业务中,召回率高意味着模型能够识别大部分的正类样本。适用于如疾病检测、故障检测等需要减少漏报的场景。

  • 优点
    • 对假阴性(漏报,FN)敏感
    • 适用于需要减少漏报的场景
  • 缺点
    • 忽略了假阳性(误报,FP)

7.6 FPR (False Positive Rate,误报率)

假阳性率(False Positive Rate, FPR)是指在所有实际为负类的样本中,被错误预测为正类的比例。计算方式如下

FPR=FPFP+TN\text{FPR} = \frac{FP}{FP + TN}

在业务中,假阳性率低意味着模型误报的概率低。适用于如信用卡欺诈检测、网络安全等需要控制误报的场景。

  • 优点
    • 能够衡量模型的误报率。
    • 适用于需要控制误报的场景。
  • 缺点
    • 忽略了假阴性(漏报,FN)。

7.7 FNR (False Negative Rate,漏报率)

假阴性率(False Negative Rate, FNR)是指在所有实际为正类的样本中,被错误预测为负类的比例。计算方式如下

FNR=FNFN+TP\text{FNR} = \frac{FN}{FN + TP}

在业务中,假阴性率低意味着模型漏报的概率低。适用于如医疗诊断、故障检测等需要控制漏报的场景。

  • 优点
    • 能够衡量模型的漏报率。
    • 适用于需要控制漏报的场景。
  • 缺点
    • 忽略了假阳性(误报,FP)。

7.8 F1-Score

F1-Score是精确率和召回率的调和平均值,用于综合评估模型的精确率和召回率。其计算方式如下

F1-Score=2PrecisionRecallPrecision+Recall\text{F1-Score} = \frac{2 \cdot \text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}

在业务中,F1-Score高意味着模型在精确率和召回率上表现均衡。适用于如信息检索、文本分类等需要平衡精确率和召回率的场景。

  • 优点
    • 综合考虑了精确率和召回率。
    • 适用于需要平衡精确率和召回率的场景。
  • 缺点
    • 计算复杂度较高。
    • 可能无法单独反映精确率或召回率的极端情况

序列异常检验分析
https://www.lihaibao.cn/2024/07/25/序列异常检验分析/
Author
Seal Li
Posted on
July 25, 2024
Licensed under