本文转载自:https://blog.csdn.net/smileyan9/article/details/106587227/
论文名称:Opprentice: Towards Practical and Automatic Anomaly Detection Through Machine Learning
年份:2015
论文下载地址:https://wws.lanzous.com/id06nxa
请读者注意
主要内容包括以下几点:
随机森林
(random forest) 分类模型,使用这个模型自动地选择合适的检测器的参数组合和阈值。尽管上述基于机器学习的思想似乎很有前途,但将其应用于机会设计却带来了许多内在的和实际的挑战。
cThld
,后面将经常提到这个 cThld
)。Opprentice 的体系结构如下图所示。
从操作者的角度来看,操作者通过两种方式与 Opprentice 进行互动(如下图中a部分)。
cThld
(阈值) 的自动调整。从Opprentice 的角度来看
接下来,我们将详细介绍每一组的设计。
我们开发了专门的工具,帮助操作者给异常打标签。
首先,加载KPI数据并以图像的形式展示出来,如图4所示。为了帮助操作人员识别异常,前一天的数据以及上一周的数据都会以浅色展示出来。
操作人员使用方向键 (arrow keys) 来浏览数据,比如放大区间,缩小区间,左移右移等等,使用鼠标左键标记异常,鼠标右键取消标记。请查看图4便可理解。
这里的标记与取消标记的对象(也就是图像中加深颜色的部分),可以理解为“目前浏览的窗口",也就是论文中的 window,这里记录一下,是因为后面的同样来自清华大学的异常检测方面的论文中,基于滑动窗口异常检测的想法,从本质上来讲极有可能跟这个手动地选择window有一定的联系。
使用这个工具进行打标工作效率很高,操作人员不需要逐个时间段进行标记,只需要标记出现异常的部分。首先他们看到的KPI曲线是一个相当放大的视图,在这个视图中,KPI曲线是不平滑曲线,所以异常部分对于操作人员来说是可见的。然后操作人员可以放大视图,定位异常出现的时间段,并通过窗口进行打标。在我们研究的KPI中,操作员只需要几分钟就能标记一个月的数据。
标记的一个问题是可能会引入误差,特别是在标记时,异常窗口的边界经常被扩大或缩小。然而,机器学习以其对噪声的鲁棒性而闻名。我们在第5条中的评估也证明了操作员的真实标签是可行的。
标记工具类似于WebClass,但是它只支持NetFlow数据,而不支持一般的时间序列数据。更重要的是,它只允许操作员将检测器已经识别的异常标记为假阳性或未知。相比之下,我们的标记工具使操作员能够自由标记所有数据,而不是标记检测结果。
我们接下来描述的内容如下:
我们使用统一的模式代表不同的检测器:
d
a
t
a
p
o
i
n
t
a
d
e
t
e
c
t
o
r
w
i
t
h
p
a
r
a
m
e
t
e
r
s
→
s
e
v
e
r
i
t
y
s
T
h
l
d
→
{
1
,
0
}
data\ point \ \ \underrightarrow{a\ detector\ with\ parameters} \ \ severity \ \ \underrightarrow{sThld} \ \ \{1,0\}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.41088em; vertical-align: -0.522em;"></span><span class="mord mathdefault">d</span><span class="mord mathdefault">a</span><span class="mord mathdefault">t</span><span class="mord mathdefault">a</span><span class="mspace"> </span><span class="mord mathdefault">p</span><span class="mord mathdefault">o</span><span class="mord mathdefault">i</span><span class="mord mathdefault">n</span><span class="mord mathdefault">t</span><span class="mspace"> </span><span class="mspace"> </span><span class="mord accentunder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.88888em;"><span class="svg-align" style="top: -2.478em;"><span class="pstrut" style="height: 3em;"></span><span class="hide-tail" style="height: 0.522em; min-width: 0.888em;">
<svg width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice">
<path d="M0 241v40h399891c-47.3 35.3-84 78-110 128
-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
151.7 139 205zm0 0v40h399900v-40z">
a detector with parameters severity
sThld {
1,0}
首先,当检测器接收到一个输入数据时,它会在内部产生一个非负值,severity
,以测量该点的异常程度。例如,Holt-Winters 使用残差(即每个数据点的测试值与实际值之间的绝对差)来度量 severity
;历史平均值假设数据遵循高斯分布,并使用该点偏离平均值的标准差多少倍来度量 severity
.
大多数检测器都是参数化的,并且有一组内部参数。比如Holt-Winters有三个参数
α
\alpha
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span></span></span></span></span>、<span class="katex--inline"><span class="katex"><span class="katex-mathml">
β
\beta
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span></span></span></span></span>、<span class="katex--inline"><span class="katex"><span class="katex-mathml">
γ
\gamma
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.05556em;">γ</span></span></span></span></span>,而历史平均值有一个窗口长度参数。输入数据点的 <code>severity</code> 取决于检测器以及其内部参数。</p> </li><li> <p>检测器还需要阈值来将严重性转换成二进制输出(即有无异常),我们将此阈值称为 <code>severity</code> 阈值,简称 <code>sThld</code>。</p> </li></ul>
因为 severity
描述了数据的异常程度,所以把 severity
当成异常检测的特征是正常的,为了产生特征,对于每个参数化检测器,我们对它们的参数进行采样,这样就可以得到几个固定的检测器。我们称这些具有特定采样参数的检测器为检测器配置。因此,这样的配置可以充当特征提取器。
d
a
t
a
p
o
i
n
t
c
o
n
f
i
g
u
r
a
t
i
o
n
(
d
e
t
e
c
t
o
r
+
s
a
m
p
l
e
d
p
a
r
a
m
e
t
e
r
s
)
→
f
e
a
t
u
r
e
data\ point \ \ \underrightarrow{configuration \ (detector + sampled\ parameters)} \ \ feature
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.522em; vertical-align: -0.522em;"></span><span class="mord mathdefault">d</span><span class="mord mathdefault">a</span><span class="mord mathdefault">t</span><span class="mord mathdefault">a</span><span class="mspace"> </span><span class="mord mathdefault">p</span><span class="mord mathdefault">o</span><span class="mord mathdefault">i</span><span class="mord mathdefault">n</span><span class="mord mathdefault">t</span><span class="mspace"> </span><span class="mspace"> </span><span class="mord accentunder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1em;"><span class="svg-align" style="top: -2.478em;"><span class="pstrut" style="height: 3em;"></span><span class="hide-tail" style="height: 0.522em; min-width: 0.888em;">
<svg width="400em" height="0.522em" viewBox="0 0 400000 522" preserveAspectRatio="xMaxYMin slice">
<path d="M0 241v40h399891c-47.3 35.3-84 78-110 128
-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20
11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7
39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85
-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5
-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67
151.7 139 205zm0 0v40h399900v-40z">
configuration (detector+sampled parameters) feature
Oppertice中的特征提取、训练和分类(检测)都是针对单个数据点而设计的,而不是针对异常窗口。这样,机器学习算法可以有足够的训练数据,分类器可以快速检测出个别异常数据点.
当选择检测器的时候,我们有三个总体要求:
severity
(严重性)。事实上,许多被广泛应用的检测器也是这样工作的。由于我们打算让操作人员不必仔细选择探测器,因此满足上述要求的探测器用于 Oppertice ,而无需仔细评估其有效性。尽管有些检测器在检测某些 KPI 时可能不准确,Opprentice 可以从广泛选择的检测器中找到合适的检测器,并获得相对较高的精度。本文以 Oppertice 中14个广泛使用的探测器(稍后将在第5.2节中介绍)为例进行了研究。
很多检测器有很多组参数,现在需要从中采样。采样方法有两种:
α
∈
[
0
,
1
]
\alpha\ \in[0, 1]
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.5782em; vertical-align: -0.0391em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mspace"> </span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">1</span><span class="mclose">]</span></span></span></span></span>。当 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
\alpha
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span></span></span></span></span> 增大时,预测将会更加依赖于最近的数据而不是更久以前的历史数据。<br> 因此,我们可以从 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
∈
0.1
,
0.3
,
0.5
,
0.7
,
0.9
\alpha \ \in {0.1, 0.3, 0.5, 0.7, 0.9}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.5782em; vertical-align: -0.0391em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mspace"> </span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.83888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord">0</span><span class="mord">.</span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">0</span><span class="mord">.</span><span class="mord">3</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">0</span><span class="mord">.</span><span class="mord">5</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">0</span><span class="mord">.</span><span class="mord">7</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">0</span><span class="mord">.</span><span class="mord">9</span></span></span></span></span></span> 中进行取样,从EWMA中或者五种典型的特征。<br> 对于那些有多个参数和很大的参数区间的检测器,我们可以减小取样粒度。比如说,Holt-Winters 有三个 [0,1] 区间中的参数 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
,
β
,
γ
\alpha,\beta,\gamma
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mord cjk_fallback">,</span><span class="mord mathdefault" style="margin-right: 0.05278em;">β</span><span class="mord cjk_fallback">,</span><span class="mord mathdefault" style="margin-right: 0.05556em;">γ</span></span></span></span></span>。我们为了限制取样的数目,我们可以对它们选择 {0.5,0.4,0.6,0.8} 几种数值,可以得到 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
4
3
=
64
4^3 = 64
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.814108em; vertical-align: 0em;"></span><span class="mord"><span class="mord">4</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.814108em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.64444em; vertical-align: 0em;"></span><span class="mord">6</span><span class="mord">4</span></span></span></span></span> 个特征。其他类型的检测器可能需要窗口参数(window parameters),我们可以根据检测器的特点采用几个时间点、几天或者几周的窗口。例如,基于短窗口移动平均的检测器旨在识别局部异常,而时间序列分解通常使用一个周的窗口来捕获长期的异常行为(violations)。 虽然由于采样粒度相对较粗,这种采样策略不能保证我们能够找到最合适的参数(或特征),但我们只需要一组足够好的特征,而opprintice通过将它们结合起来就可以获得很好的精度。</li></ul>
选择机器学习算法的时候要特别小心,因为在我们的问题中,存在冗余和不相关的特征,这是由于使用检测器时没有仔细评估而造成的。在一些机器学习算法中,如朴素贝叶斯、logistic回归、决策树和线性支持向量机,在处理这些训练数据时会表现得很差。另外,一个有前途的算法应该是参数较少且对其参数不敏感的,这样就可以很容易地应用于不同的数据集。本论文中采用的是随机森冷算法,它可以很好地处理噪音特征,在实际操作中效果很好。而且, 随机森林只有两个参数,并且算法效果对这两个参数不敏感。评估结果也展示随机森林算法效果更好,更加稳定。
请注意,我们确实了解特征选择是一种常用的解决方案,用于减轻不相关和冗余特征的影响。然而,本文并没有对特征选择进行深入的研究,而是将其作为未来的工作,因为它可能会带来额外的计算开销,而且随机森林本身也能很好地工作。
预备工作 (preliminaries):决策树
略
随机森林(random forest):
一个随机森林是一个使用了很多个决策树的集成分类器。它的主要思想是,一群弱学习者(例如,个体决策树)可以集成为一个强学习者。为了建立不同的树,一个随机的森林增加了一些元素或随机性。首先,对每棵树进行原始训练集的子集训练。其次,树不是在每一级评估所有特征,而是每次只考虑特征的随机子集。因此,如果树不使用这些特征,一些树可能不受或更少地受到不相关和冗余特征的影响。所有的树都是这样建立的,没有修剪。然后,随机森林以多数票将这些树合并。也就是说,给定一个新的数据点,每个树都给出自己的分类。例如,如果100棵树中有40棵树将该点分类为异常,则其异常概率为40%。默认情况下,随机林使用50%作为分类阈值(即cThld)。
上述的随机性和集成特性使得随机森林比决策树对噪声更具鲁棒性,在面对无关和冗余特征时表现更好。
我们需要配置 cThld 而不是使用默认数值(比如0.5),有两个原因:
因此,我们应该适当地配置随机森林的 cThld,以满足操作人员的偏好。
在描述如何配置cThld之前,我们首先使用 PR (Precision Recall) 曲线图来提供一些直观信息。PR曲线被广泛用于评估二值分类器的准确性,尤其是在数据不平衡的情况下。通常,精确性和召回之间存在权衡。如上图所示(图6),根据PV数据训练和测试的随机森林导出的示例 PR 曲线。两种假定的操作者 偏好(1)
“recall ≥ 0.75 and precision ≥ 0.6”和 偏好(2)
“recall ≥ 0.5 and precision ≥ 0.9” 阴影矩形表示。cThlds 的配置即在PR曲线上寻找一个合适的点。在图6中,三角形符号由默认的 cThld = 0.5选择。
此外,我们还展示了另外两个精确度量的结果:
我们在图6中看到,PR曲线在两个矩形内都有点,但是默认阈值只满足 偏好(2)
,而不满足 偏好(1)
;F-score 和 SD(1,1) 两种偏好都不能满足。这是因为这些指标选择cThld时没有考虑操作员的偏好。
基于上述事实,我们提出了一种简单而有效的基于 F-score 的准确度度量方法,即PC-score(preference centric Score),以明确考虑操操作人员的偏好。
首先,对于p r曲线上的每个点(r,p),我们计算其 PC-score 如下:
f
(
n
)
=
{
2
∗
r
∗
p
r
+
p
+
1
,
r
≥
R
a
n
d
p
≥
P
2
∗
r
∗
p
r
+
p
,
o
t
h
e
r
w
i
s
e
f(n)= <span class="MathJax_Preview" style="color: inherit; display: none;"></span><div class="MathJax_Display"><span class="MathJax MathJax_FullWidth" id="MathJax-Element-1-Frame" tabindex="0" data-mathml="<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow><mo>{</mo><mtable columnalign="left left" rowspacing=".2em" columnspacing="1em" displaystyle="false"><mtr><mtd><mfrac><mrow><mn>2</mn><mo>&#x2217;</mo><mi>r</mi><mo>&#x2217;</mo><mi>p</mi></mrow><mrow><mi>r</mi><mo>+</mo><mi>p</mi></mrow></mfrac><mo>+</mo><mn>1</mn><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>r</mi><mo>&#x2265;</mo><mi>R</mi><mtext>&#xA0;</mtext><mi>a</mi><mi>n</mi><mi>d</mi><mtext>&#xA0;</mtext><mi>p</mi><mo>&#x2265;</mo><mi>P</mi></mrow></mtd></mtr><mtr><mtd><mfrac><mrow><mn>2</mn><mo>&#x2217;</mo><mi>r</mi><mo>&#x2217;</mo><mi>p</mi></mrow><mrow><mi>r</mi><mo>+</mo><mi>p</mi></mrow></mfrac><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable><mo fence="true" stretchy="true" symmetric="true"></mo></mrow></math>" role="presentation" style="position: relative;"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-1" style="width: 100%; display: inline-block; min-width: 13.376em;"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.275em, 1013.34em, 5.837em, -1000.01em); top: -4.283em; left: 0em; width: 100%;"><span class="mrow" id="MathJax-Span-2"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.275em, 1013.34em, 5.837em, -1000.01em); top: -4.283em; left: 50%; margin-left: -6.658em;"><span class="mrow" id="MathJax-Span-3"><span class="mo" id="MathJax-Span-4" style="vertical-align: -0.772em;"><span style="font-family: STIXSizeFourSym;">{</span></span><span class="mtable" id="MathJax-Span-5" style="padding-right: 0.157em; padding-left: 0.157em;"><span style="display: inline-block; position: relative; width: 11.982em; height: 0px;"><span style="position: absolute; clip: rect(2.275em, 1004em, 5.837em, -1000.01em); top: -4.283em; left: 0em;"><span style="display: inline-block; position: relative; width: 4.082em; height: 0px;"><span style="position: absolute; width: 100%; clip: rect(2.791em, 1004em, 4.598em, -1000.01em); top: -4.851em; left: 0em;"><span class="mtd" id="MathJax-Span-6"><span class="mrow" id="MathJax-Span-7"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.791em, 1004em, 4.598em, -1000.01em); top: -3.973em; left: 50%; margin-left: -2.011em;"><span class="mfrac" id="MathJax-Span-8"><span style="display: inline-block; position: relative; width: 1.861em; height: 0px; margin-right: 0.106em; margin-left: 0.106em;"><span style="position: absolute; clip: rect(3.359em, 1001.72em, 4.288em, -1000.01em); top: -4.541em; left: 50%; margin-left: -0.875em;"><span class="mrow" id="MathJax-Span-9"><span style="display: inline-block; position: relative; width: 1.758em; height: 0px;"><span style="position: absolute; clip: rect(3.359em, 1001.72em, 4.288em, -1000.01em); top: -3.973em; left: 0em;"><span class="mn" id="MathJax-Span-10" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">2</span><span class="mo" id="MathJax-Span-11" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">∗</span><span class="mi" id="MathJax-Span-12" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mo" id="MathJax-Span-13" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">∗</span><span class="mi" id="MathJax-Span-14" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">p</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.462em, 1001.1em, 4.288em, -1000.01em); top: -3.612em; left: 50%; margin-left: -0.565em;"><span class="mrow" id="MathJax-Span-15"><span style="display: inline-block; position: relative; width: 1.139em; height: 0px;"><span style="position: absolute; clip: rect(3.462em, 1001.1em, 4.288em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-16" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mo" id="MathJax-Span-17" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">+</span><span class="mi" id="MathJax-Span-18" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">p</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(0.88em, 1001.88em, 1.242em, -1000.01em); top: -1.288em; left: 0em;"><span style="display: inline-block; overflow: hidden; vertical-align: 0em; border-top: 1.3px solid; width: 1.861em; height: 0px;"></span><span style="display: inline-block; width: 0px; height: 1.087em;"></span></span></span></span><span class="mo" id="MathJax-Span-19" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">+</span><span class="mn" id="MathJax-Span-20" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">1</span><span class="mo" id="MathJax-Span-21" style="font-family: STIXGeneral-Regular;">,</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; width: 100%; clip: rect(2.791em, 1002.29em, 4.598em, -1000.01em); top: -3.096em; left: 0em;"><span class="mtd" id="MathJax-Span-37"><span class="mrow" id="MathJax-Span-38"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.791em, 1002.29em, 4.598em, -1000.01em); top: -3.973em; left: 50%; margin-left: -1.185em;"><span class="mfrac" id="MathJax-Span-39"><span style="display: inline-block; position: relative; width: 1.861em; height: 0px; margin-right: 0.106em; margin-left: 0.106em;"><span style="position: absolute; clip: rect(3.359em, 1001.72em, 4.288em, -1000.01em); top: -4.541em; left: 50%; margin-left: -0.875em;"><span class="mrow" id="MathJax-Span-40"><span style="display: inline-block; position: relative; width: 1.758em; height: 0px;"><span style="position: absolute; clip: rect(3.359em, 1001.72em, 4.288em, -1000.01em); top: -3.973em; left: 0em;"><span class="mn" id="MathJax-Span-41" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">2</span><span class="mo" id="MathJax-Span-42" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">∗</span><span class="mi" id="MathJax-Span-43" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mo" id="MathJax-Span-44" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">∗</span><span class="mi" id="MathJax-Span-45" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">p</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.462em, 1001.1em, 4.288em, -1000.01em); top: -3.612em; left: 50%; margin-left: -0.565em;"><span class="mrow" id="MathJax-Span-46"><span style="display: inline-block; position: relative; width: 1.139em; height: 0px;"><span style="position: absolute; clip: rect(3.462em, 1001.1em, 4.288em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-47" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mo" id="MathJax-Span-48" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">+</span><span class="mi" id="MathJax-Span-49" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">p</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(0.88em, 1001.88em, 1.242em, -1000.01em); top: -1.288em; left: 0em;"><span style="display: inline-block; overflow: hidden; vertical-align: 0em; border-top: 1.3px solid; width: 1.861em; height: 0px;"></span><span style="display: inline-block; width: 0px; height: 1.087em;"></span></span></span></span><span class="mo" id="MathJax-Span-50" style="font-family: STIXGeneral-Regular;">,</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span><span style="display: inline-block; width: 0px; height: 4.288em;"></span></span><span style="position: absolute; clip: rect(2.275em, 1006.78em, 5.063em, -1000.01em); top: -3.973em; left: 5.166em;"><span style="display: inline-block; position: relative; width: 6.767em; height: 0px;"><span style="position: absolute; width: 100%; clip: rect(3.152em, 1006.78em, 4.34em, -1000.01em); top: -4.851em; left: 0em;"><span class="mtd" id="MathJax-Span-22"><span class="mrow" id="MathJax-Span-23"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1006.78em, 4.34em, -1000.01em); top: -3.973em; left: 50%; margin-left: -3.405em;"><span class="texatom" id="MathJax-Span-24"><span class="mrow" id="MathJax-Span-25"><span style="display: inline-block; position: relative; width: 6.767em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1006.78em, 4.34em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-26" style="font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mo" id="MathJax-Span-27" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">≥</span><span class="mi" id="MathJax-Span-28" style="font-family: STIXGeneral-Italic; padding-left: 0.312em;">R</span><span class="mtext" id="MathJax-Span-29" style="font-family: STIXGeneral-Regular;"> </span><span class="mi" id="MathJax-Span-30" style="font-family: STIXGeneral-Italic;">a</span><span class="mi" id="MathJax-Span-31" style="font-family: STIXGeneral-Italic;">n</span><span class="mi" id="MathJax-Span-32" style="font-family: STIXGeneral-Italic;">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span class="mtext" id="MathJax-Span-33" style="font-family: STIXGeneral-Regular;"> </span><span class="mi" id="MathJax-Span-34" style="font-family: STIXGeneral-Italic;">p</span><span class="mo" id="MathJax-Span-35" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">≥</span><span class="mi" id="MathJax-Span-36" style="font-family: STIXGeneral-Italic; padding-left: 0.312em;">P</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; width: 100%; clip: rect(3.152em, 1003.89em, 4.133em, -1000.01em); top: -3.096em; left: 0em;"><span class="mtd" id="MathJax-Span-51"><span class="mrow" id="MathJax-Span-52"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1003.89em, 4.133em, -1000.01em); top: -3.973em; left: 50%; margin-left: -1.96em;"><span class="texatom" id="MathJax-Span-53"><span class="mrow" id="MathJax-Span-54"><span style="display: inline-block; position: relative; width: 3.927em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1003.89em, 4.133em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-55" style="font-family: STIXGeneral-Italic;">o</span><span class="mi" id="MathJax-Span-56" style="font-family: STIXGeneral-Italic;">t<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mi" id="MathJax-Span-57" style="font-family: STIXGeneral-Italic;">h</span><span class="mi" id="MathJax-Span-58" style="font-family: STIXGeneral-Italic;">e</span><span class="mi" id="MathJax-Span-59" style="font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mi" id="MathJax-Span-60" style="font-family: STIXGeneral-Italic;">w</span><span class="mi" id="MathJax-Span-61" style="font-family: STIXGeneral-Italic;">i</span><span class="mi" id="MathJax-Span-62" style="font-family: STIXGeneral-Italic;">s</span><span class="mi" id="MathJax-Span-63" style="font-family: STIXGeneral-Italic;">e</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span class="mo" id="MathJax-Span-64"></span></span><span style="display: inline-block; width: 0px; height: 4.288em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 4.288em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -1.443em; border-left: 0px solid; width: 0px; height: 3.359em;"></span></span></nobr><span class="MJX_Assistive_MathML MJX_Assistive_MathML_Block" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow><mo>{</mo><mtable columnalign="left left" rowspacing=".2em" columnspacing="1em" displaystyle="false"><mtr><mtd><mfrac><mrow><mn>2</mn><mo>∗</mo><mi>r</mi><mo>∗</mo><mi>p</mi></mrow><mrow><mi>r</mi><mo>+</mo><mi>p</mi></mrow></mfrac><mo>+</mo><mn>1</mn><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>r</mi><mo>≥</mo><mi>R</mi><mtext> </mtext><mi>a</mi><mi>n</mi><mi>d</mi><mtext> </mtext><mi>p</mi><mo>≥</mo><mi>P</mi></mrow></mtd></mtr><mtr><mtd><mfrac><mrow><mn>2</mn><mo>∗</mo><mi>r</mi><mo>∗</mo><mi>p</mi></mrow><mrow><mi>r</mi><mo>+</mo><mi>p</mi></mrow></mfrac><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable><mo fence="true" stretchy="true" symmetric="true"></mo></mrow></math></span></span></div><script type="math/tex; mode=display" id="MathJax-Element-1">\begin{cases} \frac{2*r*p}{r+p}+1, & {r \geq R\ and\ p \geq P} \\ \frac{2*r*p}{r+p}, & {otherwise} \end{cases}</script>
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathdefault">n</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 3.00003em; vertical-align: -1.25003em;"></span><span class="minner"><span class="mopen delimcenter" style="top: 0em;"><span class="delimsizing size4">{<!-- --></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.73911em;"><span class="" style="top: -3.73911em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.897216em;"><span class="" style="top: -2.655em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right: 0.02778em;">r</span><span class="mbin mtight">+</span><span class="mord mathdefault mtight">p</span></span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.44611em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mbin mtight">∗</span><span class="mord mathdefault mtight" style="margin-right: 0.02778em;">r</span><span class="mbin mtight">∗</span><span class="mord mathdefault mtight">p</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.481108em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord">1</span><span class="mpunct">,</span></span></span><span class="" style="top: -2.25em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mopen nulldelimiter"></span><span class="mfrac"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.897216em;"><span class="" style="top: -2.655em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight" style="margin-right: 0.02778em;">r</span><span class="mbin mtight">+</span><span class="mord mathdefault mtight">p</span></span></span></span><span class="" style="top: -3.23em;"><span class="pstrut" style="height: 3em;"></span><span class="frac-line" style="border-bottom-width: 0.04em;"></span></span><span class="" style="top: -3.44611em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">2</span><span class="mbin mtight">∗</span><span class="mord mathdefault mtight" style="margin-right: 0.02778em;">r</span><span class="mbin mtight">∗</span><span class="mord mathdefault mtight">p</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.481108em;"><span class=""></span></span></span></span></span><span class="mclose nulldelimiter"></span></span><span class="mpunct">,</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 1.23911em;"><span class=""></span></span></span></span></span><span class="arraycolsep" style="width: 1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.73911em;"><span class="" style="top: -3.73911em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault" style="margin-right: 0.02778em;">r</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mord mathdefault" style="margin-right: 0.00773em;">R</span><span class="mspace"> </span><span class="mord mathdefault">a</span><span class="mord mathdefault">n</span><span class="mord mathdefault">d</span><span class="mspace"> </span><span class="mord mathdefault">p</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span></span></span></span><span class="" style="top: -2.25em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault">o</span><span class="mord mathdefault">t</span><span class="mord mathdefault">h</span><span class="mord mathdefault">e</span><span class="mord mathdefault" style="margin-right: 0.02778em;">r</span><span class="mord mathdefault" style="margin-right: 0.02691em;">w</span><span class="mord mathdefault">i</span><span class="mord mathdefault">s</span><span class="mord mathdefault">e</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 1.23911em;"><span class=""></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span><br> 其中的R和P是来自于操作人员的偏好 "recall<span class="katex--inline"><span class="katex"><span class="katex-mathml">
≥
R
\geq R
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.77194em; vertical-align: -0.13597em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.00773em;">R</span></span></span></span></span> and precision <span class="katex--inline"><span class="katex"><span class="katex-mathml">
≥
P
\geq P
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.77194em; vertical-align: -0.13597em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span></span></span></span></span>"。PC-score 基本上是用来衡量 (r,p) 的F-score。为了找到满足操作人员偏好的点(如果存在的话),当 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
r
≥
R
a
n
d
p
≥
P
r \geq R\ and\ p \geq P
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.77194em; vertical-align: -0.13597em;"></span><span class="mord mathdefault" style="margin-right: 0.02778em;">r</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathdefault" style="margin-right: 0.00773em;">R</span><span class="mspace"> </span><span class="mord mathdefault">a</span><span class="mord mathdefault">n</span><span class="mord mathdefault">d</span><span class="mspace"> </span><span class="mord mathdefault">p</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≥</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.13889em;">P</span></span></span></span></span> 时,我们给 F-score 计算公式加1,作为激励常数(an incentive constant)。由于 F-score 不超过1,这个激励常数确保满足偏好的分数必须比不满足偏好的分数具有更大的PC分数。因此,我们选择与 PC-score 最大的点对应的 cThld 参数。在图6中,我们看到基于 PC-score 选择的两个点分别位于两个阴影接收角内。请注意,在PR曲线在偏好区域内没有点的情况下,PC-score 无法找到所需的点,但它仍然可以选择近似的召回率和精确度。</p>
EWMA 在4.3.3 介绍过 (Exponentially Weighted Moving Average),一个基于预测的检测器
上面描述了如何在离线或“oracle”模式下根据PC-score 配置cThld。也就是说,我们在要检测的数据(也称为测试集)已经到达之后配置 cThld 。这些 cThld 是我们可以配置用于检测这些数据的最佳cThld,称为 best cThld
。然而,对于在线检测,我们需要预测 cThld 来检测未来的数据。
为此,另一种方法是 k-fold 交叉验证。首先,将历史训练集划分为相同长度的k个子集。在每个测试(总共k个测试)中,使用子集中的k-1训练分类器,并使用cThld候选者对其余的分类器进行测试。在k个测试中获得最小平均PC分数的候选用于将来的检测。在本文中,我们使用k=5,并以0.001的非常细的粒度扫描cThld的空间,即我们在[0,1]的范围内评估1000个cThld候选。
然而,我们发现这种交叉验证方法在我们的问题中并不十分有效(参加5.6)。一个可能的解释是,如图7所示,最佳 cThld 在数周内可能有很大的差异。因此,在交叉验证中,在所有历史数据上获得最高平均性能的 cThld 可能与未来一周的最佳 cThld 差别很大。
我们的方法是由图7中的另一个观察结果驱动的。也就是说,尽管最好的cthld会在几周内发生变化,但它们可能更类似于相邻几周的 cThld。一种可能的解释是,导致KPI异常的潜在问题可能会在它们真正修复之前持续一段时间,因此相邻的几周更有可能出现类似的异常,并需要类似的 cThld。因此,我们基于历史数据中最好的cThld,采用 cThld 来预测 第 i
周(或者第 i
个测试集)的 cThld。
特别的是,EWMA 通过以下方式工作:
c
T
h
l
d
i
p
=
{
α
∗
c
T
h
l
d
i
−
1
b
+
(
1
−
α
)
∗
c
T
h
l
d
i
−
1
p
,
i
>
1
5
f
o
l
d
p
r
e
d
i
c
t
i
o
n
,
i
=
1
cThld^p_i = <span class="MathJax_Preview" style="color: inherit; display: none;"></span><div class="MathJax_Display"><span class="MathJax MathJax_FullWidth" id="MathJax-Element-2-Frame" tabindex="0" data-mathml="<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow><mo>{</mo><mtable columnalign="left left" rowspacing=".2em" columnspacing="1em" displaystyle="false"><mtr><mtd><mrow class="MJX-TeXAtom-ORD"><mi>&#x03B1;</mi><mo>&#x2217;</mo><mi>c</mi><mi>T</mi><mi>h</mi><mi>l</mi><msubsup><mi>d</mi><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>&#x2212;</mo><mn>1</mn></mrow><mi>b</mi></msubsup></mrow><mo>+</mo><mo stretchy="false">(</mo><mn>1</mn><mo>&#x2212;</mo><mi>&#x03B1;</mi><mo stretchy="false">)</mo><mo>&#x2217;</mo><mi>c</mi><mi>T</mi><mi>h</mi><mi>l</mi><msubsup><mi>d</mi><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>&#x2212;</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>&gt;</mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mn>5</mn><mtext>&#xA0;</mtext><mi>f</mi><mi>o</mi><mi>l</mi><mi>d</mi><mtext>&#xA0;</mtext><mi>p</mi><mi>r</mi><mi>e</mi><mi>d</mi><mi>i</mi><mi>c</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>=</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo fence="true" stretchy="true" symmetric="true"></mo></mrow></math>" role="presentation" style="position: relative;"><nobr aria-hidden="true"><span class="math" id="MathJax-Span-65" style="width: 100%; display: inline-block; min-width: 18.385em;"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.326em, 1018.4em, 5.114em, -1000.01em); top: -3.973em; left: 0em; width: 100%;"><span class="mrow" id="MathJax-Span-66"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.326em, 1018.4em, 5.114em, -1000.01em); top: -3.973em; left: 50%; margin-left: -9.188em;"><span class="mrow" id="MathJax-Span-67"><span class="mo" id="MathJax-Span-68" style="vertical-align: -0.565em;"><span style="font-family: STIXSizeThreeSym;">{</span></span><span class="mtable" id="MathJax-Span-69" style="padding-right: 0.157em; padding-left: 0.157em;"><span style="display: inline-block; position: relative; width: 17.145em; height: 0px;"><span style="position: absolute; clip: rect(2.326em, 1013.91em, 5.114em, -1000.01em); top: -3.973em; left: 0em;"><span style="display: inline-block; position: relative; width: 13.944em; height: 0px;"><span style="position: absolute; width: 100%; clip: rect(2.997em, 1013.91em, 4.546em, -1000.01em); top: -4.645em; left: 0em;"><span class="mtd" id="MathJax-Span-70"><span class="mrow" id="MathJax-Span-71"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(2.997em, 1013.91em, 4.546em, -1000.01em); top: -3.973em; left: 50%; margin-left: -6.968em;"><span class="texatom" id="MathJax-Span-72"><span class="mrow" id="MathJax-Span-73"><span style="display: inline-block; position: relative; width: 5.063em; height: 0px;"><span style="position: absolute; clip: rect(2.997em, 1005.08em, 4.546em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-74" style="font-family: STIXGeneral-Italic;">α</span><span class="mo" id="MathJax-Span-75" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">∗</span><span class="mi" id="MathJax-Span-76" style="font-family: STIXGeneral-Italic; padding-left: 0.261em;">c</span><span class="mi" id="MathJax-Span-77" style="font-family: STIXGeneral-Italic;">T<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span class="mi" id="MathJax-Span-78" style="font-family: STIXGeneral-Italic;">h</span><span class="mi" id="MathJax-Span-79" style="font-family: STIXGeneral-Italic;">l<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="msubsup" id="MathJax-Span-80"><span style="display: inline-block; position: relative; width: 1.603em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1000.54em, 4.133em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-81" style="font-family: STIXGeneral-Italic;">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.359em, 1000.43em, 4.133em, -1000.01em); top: -4.335em; left: 0.571em;"><span class="mi" id="MathJax-Span-82" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">b</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.359em, 1001.1em, 4.237em, -1000.01em); top: -3.664em; left: 0.519em;"><span class="texatom" id="MathJax-Span-83"><span class="mrow" id="MathJax-Span-84"><span style="display: inline-block; position: relative; width: 1.035em; height: 0px;"><span style="position: absolute; clip: rect(3.359em, 1000.95em, 4.237em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-85" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">i</span><span class="mo" id="MathJax-Span-86" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">−</span><span class="mn" id="MathJax-Span-87" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">1</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span class="mo" id="MathJax-Span-88" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">+</span><span class="mo" id="MathJax-Span-89" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">(</span><span class="mn" id="MathJax-Span-90" style="font-family: STIXGeneral-Regular;">1</span><span class="mo" id="MathJax-Span-91" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">−</span><span class="mi" id="MathJax-Span-92" style="font-family: STIXGeneral-Italic; padding-left: 0.261em;">α</span><span class="mo" id="MathJax-Span-93" style="font-family: STIXGeneral-Regular;">)</span><span class="mo" id="MathJax-Span-94" style="font-family: STIXGeneral-Regular; padding-left: 0.261em;">∗</span><span class="mi" id="MathJax-Span-95" style="font-family: STIXGeneral-Italic; padding-left: 0.261em;">c</span><span class="mi" id="MathJax-Span-96" style="font-family: STIXGeneral-Italic;">T<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span class="mi" id="MathJax-Span-97" style="font-family: STIXGeneral-Italic;">h</span><span class="mi" id="MathJax-Span-98" style="font-family: STIXGeneral-Italic;">l<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="msubsup" id="MathJax-Span-99"><span style="display: inline-block; position: relative; width: 1.603em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1000.54em, 4.133em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-100" style="font-family: STIXGeneral-Italic;">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.514em, 1000.43em, 4.288em, -1000.01em); top: -4.438em; left: 0.571em;"><span class="mi" id="MathJax-Span-101" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">p</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(3.359em, 1001.1em, 4.237em, -1000.01em); top: -3.664em; left: 0.519em;"><span class="texatom" id="MathJax-Span-102"><span class="mrow" id="MathJax-Span-103"><span style="display: inline-block; position: relative; width: 1.035em; height: 0px;"><span style="position: absolute; clip: rect(3.359em, 1000.95em, 4.237em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-104" style="font-size: 70.7%; font-family: STIXGeneral-Italic;">i</span><span class="mo" id="MathJax-Span-105" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">−</span><span class="mn" id="MathJax-Span-106" style="font-size: 70.7%; font-family: STIXGeneral-Regular;">1</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span class="mo" id="MathJax-Span-107" style="font-family: STIXGeneral-Regular;">,</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; width: 100%; clip: rect(3.152em, 1007.09em, 4.34em, -1000.01em); top: -3.199em; left: 0em;"><span class="mtd" id="MathJax-Span-115"><span class="mrow" id="MathJax-Span-116"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1007.09em, 4.34em, -1000.01em); top: -3.973em; left: 50%; margin-left: -3.56em;"><span class="mn" id="MathJax-Span-117" style="font-family: STIXGeneral-Regular;">5</span><span class="mtext" id="MathJax-Span-118" style="font-family: STIXGeneral-Regular;"> </span><span class="mi" id="MathJax-Span-119" style="font-family: STIXGeneral-Italic;">f<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.157em;"></span></span><span class="mi" id="MathJax-Span-120" style="font-family: STIXGeneral-Italic;">o</span><span class="mi" id="MathJax-Span-121" style="font-family: STIXGeneral-Italic;">l<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mi" id="MathJax-Span-122" style="font-family: STIXGeneral-Italic;">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span class="mtext" id="MathJax-Span-123" style="font-family: STIXGeneral-Regular;"> </span><span class="mi" id="MathJax-Span-124" style="font-family: STIXGeneral-Italic;">p</span><span class="mi" id="MathJax-Span-125" style="font-family: STIXGeneral-Italic;">r<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mi" id="MathJax-Span-126" style="font-family: STIXGeneral-Italic;">e</span><span class="mi" id="MathJax-Span-127" style="font-family: STIXGeneral-Italic;">d<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.054em;"></span></span><span class="mi" id="MathJax-Span-128" style="font-family: STIXGeneral-Italic;">i</span><span class="mi" id="MathJax-Span-129" style="font-family: STIXGeneral-Italic;">c</span><span class="mi" id="MathJax-Span-130" style="font-family: STIXGeneral-Italic;">t<span style="display: inline-block; overflow: hidden; height: 1px; width: 0.003em;"></span></span><span class="mi" id="MathJax-Span-131" style="font-family: STIXGeneral-Italic;">i</span><span class="mi" id="MathJax-Span-132" style="font-family: STIXGeneral-Italic;">o</span><span class="mi" id="MathJax-Span-133" style="font-family: STIXGeneral-Italic;">n</span><span class="mo" id="MathJax-Span-134" style="font-family: STIXGeneral-Regular;">,</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; clip: rect(2.481em, 1001.98em, 4.908em, -1000.01em); top: -3.973em; left: 15.08em;"><span style="display: inline-block; position: relative; width: 2.068em; height: 0px;"><span style="position: absolute; width: 100%; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -4.645em; left: 0em;"><span class="mtd" id="MathJax-Span-108"><span class="mrow" id="MathJax-Span-109"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -3.973em; left: 50%; margin-left: -1.03em;"><span class="texatom" id="MathJax-Span-110"><span class="mrow" id="MathJax-Span-111"><span style="display: inline-block; position: relative; width: 2.068em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-112" style="font-family: STIXGeneral-Italic;">i</span><span class="mo" id="MathJax-Span-113" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">></span><span class="mn" id="MathJax-Span-114" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">1</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span><span style="position: absolute; width: 100%; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -3.199em; left: 0em;"><span class="mtd" id="MathJax-Span-135"><span class="mrow" id="MathJax-Span-136"><span style="display: inline-block; position: relative; width: 100%; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -3.973em; left: 50%; margin-left: -1.03em;"><span class="texatom" id="MathJax-Span-137"><span class="mrow" id="MathJax-Span-138"><span style="display: inline-block; position: relative; width: 2.068em; height: 0px;"><span style="position: absolute; clip: rect(3.152em, 1001.98em, 4.133em, -1000.01em); top: -3.973em; left: 0em;"><span class="mi" id="MathJax-Span-139" style="font-family: STIXGeneral-Italic;">i</span><span class="mo" id="MathJax-Span-140" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">=</span><span class="mn" id="MathJax-Span-141" style="font-family: STIXGeneral-Regular; padding-left: 0.312em;">1</span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span class="mo" id="MathJax-Span-142"></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span></span><span style="display: inline-block; width: 0px; height: 3.978em;"></span></span></span><span style="display: inline-block; overflow: hidden; vertical-align: -1.03em; border-left: 0px solid; width: 0px; height: 2.584em;"></span></span></nobr><span class="MJX_Assistive_MathML MJX_Assistive_MathML_Block" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><mrow><mo>{</mo><mtable columnalign="left left" rowspacing=".2em" columnspacing="1em" displaystyle="false"><mtr><mtd><mrow class="MJX-TeXAtom-ORD"><mi>α</mi><mo>∗</mo><mi>c</mi><mi>T</mi><mi>h</mi><mi>l</mi><msubsup><mi>d</mi><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>b</mi></msubsup></mrow><mo>+</mo><mo stretchy="false">(</mo><mn>1</mn><mo>−</mo><mi>α</mi><mo stretchy="false">)</mo><mo>∗</mo><mi>c</mi><mi>T</mi><mi>h</mi><mi>l</mi><msubsup><mi>d</mi><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>−</mo><mn>1</mn></mrow><mi>p</mi></msubsup><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>></mo><mn>1</mn></mrow></mtd></mtr><mtr><mtd><mn>5</mn><mtext> </mtext><mi>f</mi><mi>o</mi><mi>l</mi><mi>d</mi><mtext> </mtext><mi>p</mi><mi>r</mi><mi>e</mi><mi>d</mi><mi>i</mi><mi>c</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi><mo>,</mo></mtd><mtd><mrow class="MJX-TeXAtom-ORD"><mi>i</mi><mo>=</mo><mn>1</mn></mrow></mtd></mtr></mtable><mo fence="true" stretchy="true" symmetric="true"></mo></mrow></math></span></span></div><script type="math/tex; mode=display" id="MathJax-Element-2">\begin{cases} {\alpha*cThld^b_{i-1}}+(1-\alpha)*cThld^p_{i-1}, & {i> 1} \\ 5\ fold \ prediction, & {i=1} \end{cases}</script>
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.05916em; vertical-align: -0.276864em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.7823em;"><span class="" style="top: -2.42314em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span><span class="" style="top: -3.18091em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">p</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.276864em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 3.00003em; vertical-align: -1.25003em;"></span><span class="minner"><span class="mopen delimcenter" style="top: 0em;"><span class="delimsizing size4">{<!-- --></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.69em;"><span class="" style="top: -3.69em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.849108em;"><span class="" style="top: -2.44134em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">b</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.316995em;"><span class=""></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mopen">(</span><span class="mord">1</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">∗</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.7823em;"><span class="" style="top: -2.42314em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span class="" style="top: -3.18091em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">p</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.335195em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span></span></span><span class="" style="top: -2.25em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord">5</span><span class="mspace"> </span><span class="mord mathdefault" style="margin-right: 0.10764em;">f</span><span class="mord mathdefault">o</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord mathdefault">d</span><span class="mspace"> </span><span class="mord mathdefault">p</span><span class="mord mathdefault" style="margin-right: 0.02778em;">r</span><span class="mord mathdefault">e</span><span class="mord mathdefault">d</span><span class="mord mathdefault">i</span><span class="mord mathdefault">c</span><span class="mord mathdefault">t</span><span class="mord mathdefault">i</span><span class="mord mathdefault">o</span><span class="mord mathdefault">n</span><span class="mpunct">,</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 1.19em;"><span class=""></span></span></span></span></span><span class="arraycolsep" style="width: 1em;"></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.69em;"><span class="" style="top: -3.69em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault">i</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mord">1</span></span></span></span><span class="" style="top: -2.25em;"><span class="pstrut" style="height: 3.008em;"></span><span class="mord"><span class="mord"><span class="mord mathdefault">i</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mord">1</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 1.19em;"><span class=""></span></span></span></span></span></span></span><span class="mclose nulldelimiter"></span></span></span></span></span></span></span><br> 其中 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
c
T
h
l
d
i
−
1
p
cThld^p_{i-1}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.11749em; vertical-align: -0.335195em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.7823em;"><span class="" style="top: -2.42314em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathdefault mtight">i</span><span class="mbin mtight">−</span><span class="mord mtight">1</span></span></span></span><span class="" style="top: -3.18091em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">p</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.335195em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 是第 <code>i-1</code> 周最好的 cThld。<span class="katex--inline"><span class="katex"><span class="katex-mathml">
c
T
h
l
d
i
p
cThld^p_i
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.05916em; vertical-align: -0.276864em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.7823em;"><span class="" style="top: -2.42314em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">i</span></span></span><span class="" style="top: -3.18091em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">p</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.276864em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 是第 <code>i</code> 周预测的 cThld,也是第 <code>i</code> 周用于检测时用到的参数。<span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
∈
[
0
,
1
]
\alpha \in [0,1]
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.5782em; vertical-align: -0.0391em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">1</span><span class="mclose">]</span></span></span></span></span> 是平滑常数。第一周时,我们采用 5-fold 交叉验证的方法来初始化 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
c
T
h
l
d
1
p
cThld^p_1
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.04861em; vertical-align: -0.266308em;"></span><span class="mord mathdefault">c</span><span class="mord mathdefault" style="margin-right: 0.13889em;">T</span><span class="mord mathdefault">h</span><span class="mord mathdefault" style="margin-right: 0.01968em;">l</span><span class="mord"><span class="mord mathdefault">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.7823em;"><span class="" style="top: -2.43369em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span><span class="" style="top: -3.18091em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathdefault mtight">p</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.266308em;"><span class=""></span></span></span></span></span></span></span></span></span></span> 。EWMA 简单但是在这里非常有效,因为它不需要大量的历史数据来启动。随着 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
\alpha
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span></span></span></span></span> 的增大, EWMA 更加容易得出最近最优 cThld,它在预测中有更大的影响。本论文中采用 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
α
=
0.8
\alpha=0.8
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathdefault" style="margin-right: 0.0037em;">α</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.64444em; vertical-align: 0em;"></span><span class="mord">0</span><span class="mord">.</span><span class="mord">8</span></span></span></span></span> 来快速捕捉 cThld 值。实验结果表明:基于cThld的EWMA 预测方法 比 5-fold交叉验证有更好的预测效果。</p>
我们使用Python、R和C++代码9500行来实现Opple和14个检测器。机器学习块基于scikit学习库。在本节中,我们使用来自顶级全球搜索引擎的三种KPI数据来评估Oppertice。这些数据由操作员使用我们的标记工具标记。
图8示出了评估流程。在前四个步骤中,我们用不同的方法比较了机会的各个组成部分的准确性。Opprentice 的准确性见第5.6节。除了准确性之外,Oppertice 的质量目标,即自动化,也通过直接将oppertice应用到三个不同的kpi,而无需调整来评估。唯一的手动操作是标记KPI数据。我们还询问了操作人员之前的检测器调整时间,并将其与标记时间(见5.7)进行了比较。最后,我们评估了 Oppertice 的在线检测和离线训练时间(见5.8)。接下来,我们首先描述第5.1节中的数据集和第5.2节中选择的检测器,然后展示评估结果。
我们从一个大型搜索引擎(见2.1)中收集了三种具有代表性的 KPI 数据(即PV、#SR和SRT)。这些数据由搜索引擎的操作员使用我们的标记工具标记。分别有7.8%、2.8%和7.4%的数据点被标记为PV、SR和SRT异常。虽然我们使用的数据来自搜索引擎,但它们并不仅仅是搜索引擎的特例。例如,根据以前的文献和我们的经验,我们使用的PV数据在视觉上与其他类型的体积数据相似。例如,其他基于Web的服务的PV、RTT(往返时间)和ISP的总流量以及在线购物收入。因此,我们相信这三种 KPI 足以评估机会的想法,我们认为,作为我们未来的工作,我们将使用来自搜索之外的其他领域的数据进行更广泛的评估。表2显示了从标记的数据集生成训练集和测试集的几种方法。
根据探测器要求(见4.3.2),在这个概念验证原型中,我们使用14个广泛使用的探测器评估Opprentice(表3)
在本研究之前,我们研究的搜索引擎已经使用了其中的两个检测器。一种是Diff,它简单地利用当前点与最后一个时隙点、最后一天点和上周点之间的差异来测量异常严重性。另一种方法,即“差分平均法”,利用当前点与最后一个时隙点之差的移动平均值来测量严重性。这个检测器是用来发现连续的抖动。其他12个探测器来自于以前的文献。在这些检测器中,有两种不同的检测器使用中间值周围的MAD(中间值绝对偏差)而不是平均值周围的标准偏差来测量异常严重性。该补丁可以提高对缺失数据和异常值的鲁棒性。为了空间的利益,这些探测器的细节和它们产生严重性的方式没有进一步介绍,但是可以在表3的参考文献中找到。各探测器采样参数见表3。在这里,ARIMA的参数是根据数据估计的。对于其他探测器,我们扫描它们的参数空间。
总共,我们有14个探测器和133个配置,或133个随机森林特征。请注意,Opprentice不仅限于我们使用的探测器,而且可以包含新兴探测器,只要它们满足我们在第4.3.2节中的探测器要求。
现在我们展示评估结果。首先,我们比较了在离线模式下随机森林和其他检测方法的准确性。因为我们不知道其他方法的阈值,所以我们无法公平地比较特定的召回和精确性。或者,我们使用PR曲线下的面积(AUCPR)作为精度度量。AUCPR是在所有可能的阈值上检测性能的单个数字摘要。AUCPR范围从0到1。直观地说,AUCPR较大的检测方法更有可能获得较高的查全率和查准率。
首先,在图9中,我们将随机森林与表中具有不同参数设置(133个配置)的14个基本检测器进行比较。三。我们还将随机森林与两种静态组合方法进行了比较:标准化模式[21]和多数投票[8]。这两种方法被设计用来组合不同的检测器,但不管它们的精度如何,它们都是同等对待的。为了便于比较,在本文中,我们还使用这两种方法将133个配置组合为随机林。以上方法都是从第9周开始检测数据。前8周作为随机森林的初始训练集。
在图9的左侧,我们看到对于AUCPR,随机林在图9(a)和图9(b)中排名第一,在图9(c)中排名第二,其中随机林的AUCPR仅比最高的低0.01。另一方面,两种静态组合方法的AUCPR始终排名较低。这是因为大多数配置是不准确的(在图9中AUCPR很低),因为我们没有手动选择合适的检测器或调整它们的参数。然而,这两种静态组合方法处理具有相同优先级的所有配置(例如,同等权重的投票)。因此,它们可能会受到不准确配置的严重影响。
图9的右侧显示了随机森林的PR曲线、两种组合方法和前3个最高AUCPR基本检测器。我们观察到,每个KPI的最佳基本检测器是不同的,这表明操作员对每个KPI的不同类型的异常感兴趣。表4显示了当这些方法的召回满足操作者的偏好时(召回≥0.66)的最大精确度。我们发现,对于所有的kpi,随机森林达到了很高的精度(大于0.8)。结果表明,随机森林的性能明显优于两种静态组合方法,并且对每个KPI的性能与最精确的基本检测器相似,甚至优于最精确的基本检测器。
我们还比较了随机森林和其他几种机器学习算法:决策树、logistic回归、线性支持向量机(SVMs)和朴素贝叶斯。所有这些算法都在 表2
中的 I1
上进行了训练和测试。为了说明不相关特征(例如,图9中具有低AUCPR的配置)和冗余特征(例如,具有相似参数设置的检测器)的影响,我们通过第一次使用一个特征并每次添加一个以上特征来训练这些学习算法。这些特征是按照它们的相互信息的顺序添加的,这是特征选择的一个公共度量。在图10中,我们观察到,虽然其他学习算法的AUCPR是不稳定的,并且随着更多特征的使用而降低,但是即使使用了所有133个特征,随机森林的AUCPR仍然很高。结果表明,在实际应用中,随机森林对不相关和冗余特征具有很强的鲁棒性。
在演示了随机森林的准确性和稳定性之后,我们想展示不同训练集的效果。在本次评估和以下评估步骤中,我们将只关注随机森林。我们比较了表2中生成训练集的三种方法:I4、F4和R4。图11示出了不同训练集上随机森林的AUCPR。我们发现,在大多数情况下,I4(也称为增量再训练)比其他两个训练集表现更好。这个结果与前面提到的挑战一致,即任意数据集不太可能包含足够种类的异常。在图11(b)中,我们看到三个训练集产生相似的AUCPR。这意味着#SR的异常类型相对简单,变化不大,因此可以很好地被这些训练集捕获。总的来说,由于标记异常不需要花费太多时间(见5.7),我们认为增量再训练是生成训练集的更通用和准确的方法。
到目前为止,我们已经展示了没有特定 cThld 的随机森林的离线AUCPR。接下来,我们评估用于配置 cThld 的不同精度度量。我们将提出的PC评分与默认的cThld、F-score 和SD(1,1)进行比较。具体来说,我们在 表2
中的 I1
上训练和测试随机林,并让这四个度量确定每个一周测试集的 cThld
。然后,我们使用每周的回忆和精确性来衡量他们的表现。请注意,此评估考虑脱机或oracle设置,我们假设在配置 cThld 时有测试集。我们将在5.6节中展示未来测试集(在线检测)的 cThld 预测。
图12分别示出了三种 KPI 的四个度量的结果。在左边的热图中,每个点代表一周的召回率(recall) 和精确性(precision)。第一行显示偏好下的结果(recall≥0.66,precision≥0.66),称为中度偏好。我们还评估了另外两种偏好:第二行对精确性敏感(recall≥0.6和precision≥0.8),第三行对召回率敏感(recall ≥ 0.8和 precision ≥ 0.6)。首选项由热图右上角的框表示。如果我们使用原始或降低的首选项(例如,向上缩放框),右侧的折线图将显示框内的点的百分比(满足首选项)。
通过对热图的分析,我们发现,当其他三个指标所得到的分数在不同偏好下保持不变时,PC-score 具有根据不同偏好调整查全率和查准率的能力。由于这一优势,我们在折线图中看到,无论是最初的偏好还是放大的偏好,PC-score 总是在框内获得最多的分数。
我们还注意到,要满足所有周的偏好并不容易,因为异常在某些周非常罕见。例如,我们发现在没有点满足中等偏好的周,PV和SR的异常分别比其他周少73%和78%。因此,不可避免地会产生更多的误报,以识别这些少数异常,从而导致低精度。此外,仅仅遗漏一些异常可能会导致召回率明显下降。幸运的是,由于这几周异常很少,相对较低的准确率或召回率不会导致大量的假阳性(false positive)或假阴性(false negative)。例如,如果有10个异常数据点,而我们识别了其中的4个(40%的召回率),我们将只漏掉6个异常数据点;在这种情况下,如果我们有40%的精度,我们将只识别6个误报。与我们一起工作的操作员表示,他们实际上可以处理少量的误报或漏报。
在此之前,我们展示了对cThld配置的不同度量的离线评估,发现PC得分优于其他三个。现在,我们评估了基于PC评分的在线cThld预测的性能,这也是Oppertice整体的检测精度。我们将 oppertice 使用的基于EWMA的方法与5倍交叉验证进行了比较。评估与第5.5节相似,但 cThld 预测仅使用历史数据(训练集)而非未来数据(测试集)。如前所述,由于异常在某些周内相当罕见,因此每周的结果可能有很大差异。为了得到一个稳定的结果,我们计算了4周移动窗口的平均召回率和精确度。窗口为每个步骤移动一天,以便我们可以获得更细粒度的结果。在这里,我们给出了在操作者实际偏好下的结果(recall ≥ 0.66,precision ≥ 0.66)。图13示出了每个窗口的召回率和精确度。离线检测结果(这里称为最佳情况)作为基线。
结果表明,对于PV、SR和SRT,与5倍交叉验证相比,EWMA在阴影区域内分别多出40%、23%和110%的点。共有8403个(7.3%)、2544个(2.1%)和86个(6.4%)数据点分别在三个关键绩效指标的测试集中(第9周后)被Oppertice识别为异常(未显示)。我们注意到有一些点落在阴影区域之外,例如图13(a)中58到70之间的窗口。这主要是因为那几周的异常非常罕见。 例如,在58到70之间的窗口中,平均只有4%的光伏数据的地面真值异常点。然而,如第5.5节所述,在这种情况下,稍低的精确度或召回率不会对操作者产生许多误报或漏报。总之,Oppertice 可以自动满足或近似于操作员的精度偏好。
接下来,我们将展示标签的时间成本,这是操作员使用 Oppertice 时所需的唯一手动工作。图14显示了操作员使用我们的工具(4.2节)标记三种类型的 KPI 数据时的标记时间。结果表明,一个月数据的标记时间基本上随该月异常窗口数的增加而增加。异常窗口是指由一个标记动作产生的连续异常窗口。在这三个 KPI 中,SRT 每个月的数据标记时间较少,因为它的数据间隔是60分钟,因此一个月的数据点较少。总体而言,一个月数据的标注时间小于6分钟。PV、#SR和SRT的总标记时间分别为16、17和6分钟。标记开销低的一个直观原因是,操作员每次都标记一个异常窗口,而不是逐个标记单个异常数据点。异常窗口可以比数据中的异常点小得多(图14)
为了说明Oppertice如何帮助减少操作员的手动操作,我们还提供了一些操作员调整探测器时间的事件示例,包括他们学习探测器和了解其参数的时间。我们采访了三位来自搜索引擎的操作人员,他们都有过调试检测器的经验。第一个操作员使用 SVD,他说他花了大约8天时间调试探测器;第二个操作员使用 Holt-Winters 和 Historical Average,他花了大约12天时间调试这两个探测器;第三个操作员应用时间序列分解,他说在探测器实现之后,他还花了大约10天的时间来测试和调试探测器。在上述情况下,经过几天的调试,只有第一个操作员的检测器工作得比较好,而另外两个操作员对其检测器的精度仍然不满意,最后放弃了它们。我们在第5.3.1节中比较了 Oppertice 和这些基本探测器的准确性。
尽管上面报告的时间不是用于调整的确切时间,但它提供了手动调整检测器的开销和困难的基本概念。我们采访的运营商证实,探测器调谐非常耗时,他们对此既不感兴趣,也不感到舒适。总之,Opprentice 可以用快速方便的异常标记来代替耗时且枯燥的探测器调谐。
检测时延原则上由特征提取时间和分类时间组成。我们使用Intel Xeon E5-2420 CPU和24GB内存在Dell PowerEdge R420 服务器上运行Oppertice。对于每个数据点,提取133个特征的总时间平均为0.15秒。分类所需时间很短,平均每个数据点不到0.0001秒。此外,每轮离线训练时间不到5分钟。由于所有的检测器都可以并行运行,随机林的训练也可以并行化,我们相信利用多线程技术和服务器集群上的分布式计算可以获得更好的性能。
实际上,异常检测是复杂的。在这一部分中,我们讨论了异常检测的一些问题,并澄清了机会的范围。
在异常检测领域进行了大量的工作。研究人员使用不同的技术开发了许多探测器[1-24]。此外,研究人员试图解决探测器在实际应用中的几个挑战。
异常检测的另一个重要挑战是获取地面真实性来评估探测器。三种常用的解决方案是:
因为我们的基本目标是满足运营商的需求,所以我们认为解决方案(a)在本文中更有意义。
将异常检测应用于基于 Internet 的服务在实践中具有挑战性。这是因为异常很难定量定义,现有的探测器在部署之前有参数和阈值需要调整。我们提出的框架 Oppertice 通过一种新的基于机器学习的方法来应对上述挑战。通过机器学习从真实数据和操作者的标签中获取不清晰的异常概念,同时通过机器学习可以自动组合大量现有的检测器来训练分类器来识别异常。我们对实际搜索kpi的评估表明,Oppertice 的性能始终与性能最好的基本检测器相似,甚至优于性能最好的基本检测器,后者可以针对不同的数据集进行更改。
据我们所知,Oppertice 是第一个将机器学习应用于获取实际异常概念、自动组合和调整各种已知检测器以满足操作员精度偏好的检测框架。新出现的检测器不必经过耗时且常常令人沮丧的参数调整,而是可以很容易地插入Oppertice,从而使前者更容易部署,后者更精确。此外,虽然机器学习是一个很有前途的解决方案,但在设计实际系统时需要小心,因为它会带来一些有趣的挑战,例如不平衡类和不相关的冗余特征。本文对其中的一些问题进行了探讨和解决。我们相信 Opperentice 提供了一种新的方案,以弥合实际操作需求与最先进异常检测器之间的差距。在我们未来的工作中,我们计划解决第6节中提到的几个问题,并将 Oppertice 的思想应用到其他网络操作任务中,如自动入侵检测和网络故障排除。
感谢您的 点赞、 收藏、评论 与 关注