[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"article:column:/column/math-beauty/base-rates-and-alerts":3},{"id":4,"title":5,"body":6,"description":12,"extension":400,"meta":401,"navigation":406,"path":407,"seo":408,"stem":409,"__hash__":410},"column/column/math-beauty/base-rates-and-alerts.md","告警很灵，为什么收到的却常是假消息",{"type":7,"value":8,"toc":387},"minimark",[9,13,16,19,23,26,29,32,35,102,105,109,112,115,118,121,127,134,137,140,143,146,150,153,156,159,165,171,174,177,180,183,187,190,193,247,250,253,259,265,268,271,274,278,281,284,287,290,295,298,301,305,308,311,314,317,320,323,326,333,336,339,345,348,351,354,367,378,381,384],[10,11,12],"p",{},"先修：01 模型、目标与假设；02 命题与条件；分数、百分比与分类计数",[10,14,15],{},"设想一套设备监控系统。介绍材料写着：“故障检出比例99%，健康状态下误报比例仅1%。”值班人员满怀期待地打开告警列表，核查结束后，却发现其中只有一半对应真故障。这套系统在夸大效果吗？还是有人把账算错了？",[10,17,18],{},"两边可能都没有说错。检测器面对真故障时有多灵，和收到告警后其中有多少是真的，问的是两件事。本章先不引入概率公式，只整理一张台账。困惑的关键就藏在除法的分母里。",[20,21,22],"h2",{"id":22},"先约定怎样算一次",[10,24,25],{},"我们用一份专为讲解构造的虚构台账，共有10000条记录，并非实际系统评测。每条记录对应“某台设备的一段五分钟”，叫一个检测窗口。同一设备的窗口不重叠；每个窗口只记一次“告警”或“未告警”，即使系统在这五分钟内连续响了三次，也不重复计数。",[10,27,28],{},"另有事后核查标签，记为“确有故障”或“健康”。本例把故障范围事先定好，并假定标签准确、每个窗口恰属一类。现实中，传感器短暂异常算不算故障、维修记录是否完整，都需要另行核验。",[10,30,31],{},"因此，这里数的是窗口，不是设备台数，也不是相互独立的事故数。一次持续十五分钟的故障可能占据三个窗口。把窗口比例改口说成“设备中有多少会坏”，就已经换了计数对象。",[10,33,34],{},"现在摊开台账：100个窗口确有故障，9900个窗口健康。检测器在前一组报出了99个，漏了1个；在后一组误报99个，其余9801个保持安静。",[36,37,38,58],"table",{},[39,40,41],"thead",{},[42,43,44,48,52,55],"tr",{},[45,46,47],"th",{},"事后核查状态",[45,49,51],{"align":50},"right","发出告警",[45,53,54],{"align":50},"未发出告警",[45,56,57],{"align":50},"合计",[59,60,61,76,89],"tbody",{},[42,62,63,67,70,73],{},[64,65,66],"td",{},"确有故障",[64,68,69],{"align":50},"99",[64,71,72],{"align":50},"1",[64,74,75],{"align":50},"100",[42,77,78,81,83,86],{},[64,79,80],{},"健康",[64,82,69],{"align":50},[64,84,85],{"align":50},"9801",[64,87,88],{"align":50},"9900",[42,90,91,93,96,99],{},[64,92,57],{},[64,94,95],{"align":50},"198",[64,97,98],{"align":50},"9802",[64,100,101],{"align":50},"10000",[10,103,104],{},"先查加法：两行分别加回100、9900，两列加回198、9802，所有格子加回10000。比起立刻看百分数，这一步更能发现重复统计或漏掉的记录。",[20,106,108],{"id":107},"两个漂亮的数字各自除以谁","两个漂亮的数字，各自除以谁",[10,110,111],{},"“故障检出比例99%”是从确有故障的100个窗口出发，问其中多少发出了告警：",[10,113,114],{},"故障检出比例＝99÷100＝99%。",[10,116,117],{},"它常叫灵敏度，在机器学习分类任务中也叫召回率。相应地，“健康误报比例1%”从健康的9900个窗口出发：",[10,119,120],{},"健康误报比例＝99÷9900＝1%。",[10,122,123,124],{},"这叫假阳性率。这里把“发出告警”称作阳性，把“没有告警”称作阴性；阳性只是检测结果的名称，不等于故障已被证实。",[125,126,72],"span",{},[10,128,129],{},[130,131],"img",{"alt":132,"src":133},"10000个检测窗口先按真实状态分为故障100与健康9900，再分别分成告警与未告警；两个比例的分母不同","/collections-assets/math-beauty/ch18/01-two-denominators.png",[10,135,136],{},"图1：树上的每一步都在分组，框的面积不表示数量。左侧的99%除以100，右侧的1%除以9900。",[10,138,139],{},"四个格子也有常用名称：故障且告警是真阳性，记作TP；故障却未告警是假阴性，记作FN；健康却告警是假阳性，记作FP；健康且未告警是真阴性，记作TN。先记住格子含义，比背缩写更重要。",[10,141,142],{},"留意一个容易滑过去的细节：两个告警格子都是99。检测器只误伤了健康组的百分之一，可健康窗口足足是故障窗口的99倍。一个很小的比例，乘上一个很大的基数，仍会送来不少消息。",[10,144,145],{},"说“误报只有1%，所以收到的消息只有1%是假的”，就把分母悄悄换了。9900是全部健康窗口，绝不是全部告警。",[20,147,149],{"id":148},"打开告警列表重新数一次","打开告警列表，重新数一次",[10,151,152],{},"值班人员不会在列表里看见那9801个健康且安静的窗口，也不会直接看见漏掉的1个故障。他们眼前只有198条告警：99条来自真故障，99条来自健康窗口。",[10,154,155],{},"现在的问题是“告警中真故障占多少”，所以先把全部告警圈出来，再在这个集合里数真故障：",[10,157,158],{},"告警中的真故障比例＝99÷(99＋99)＝99÷198＝50%。",[10,160,161,162,164],{},"这个量在机器学习中叫精确率，在检测语境中也叫阳性预测值。",[125,163,72],{}," 本章说“告警可信度”时，专指这张台账里的这个比例。",[10,166,167],{},[130,168],{"alt":169,"src":170},"只保留198个告警窗口，99个真告警与99个误报分别用两色排列，每个圆点代表一个告警窗口","/collections-assets/math-beauty/ch18/02-alerts-only.png",[10,172,173],{},"图2：每个圆点代表一条告警窗口记录。两组都是99个，所以各占这张告警列表的一半。",[10,175,176],{},"这里没有复杂运算，只发生了观察范围的变化。算检出比例时，漏报的1个故障在分母里，99个误报不在；算告警可信度时，99个误报进入分母，漏报的1个反而退出。",[10,178,179],{},"这也说明，50%不能读成“告警完全没提供信息”。整张台账只有100÷10000＝1%的窗口有故障；筛选到告警这198个窗口后，真故障占了一半。告警确实把值得核查的范围大幅缩小了，只是仍留下许多假消息。",[10,181,182],{},"同样，台账也没有说列表里真假严格交替。连续几条都误报，或连续几条都是真故障，都不与总数冲突。一个分组比例没有交代记录出现的顺序。",[20,184,186],{"id":185},"换一张台账检测表现先保持相同","换一张台账，检测表现先保持相同",[10,188,189],{},"接着构造第二张10000窗口的台账，让故障窗口增加到1000，健康窗口变成9000。为了单独看清分组数量的影响，我们规定故障检出比例仍为99%，健康误报比例仍为1%。",[10,191,192],{},"于是，故障组检出1000×99%＝990个，漏掉10个；健康组误报9000×1%＝90个，剩下8910个未告警。",[36,194,195,207],{},[39,196,197],{},[42,198,199,201,203,205],{},[45,200,47],{},[45,202,51],{"align":50},[45,204,54],{"align":50},[45,206,57],{"align":50},[59,208,209,222,235],{},[42,210,211,213,216,219],{},[64,212,66],{},[64,214,215],{"align":50},"990",[64,217,218],{"align":50},"10",[64,220,221],{"align":50},"1000",[42,223,224,226,229,232],{},[64,225,80],{},[64,227,228],{"align":50},"90",[64,230,231],{"align":50},"8910",[64,233,234],{"align":50},"9000",[42,236,237,239,242,245],{},[64,238,57],{},[64,240,241],{"align":50},"1080",[64,243,244],{"align":50},"8920",[64,246,101],{"align":50},[10,248,249],{},"告警共990＋90＝1080个，其中真故障比例为：",[10,251,252],{},"990÷1080＝11/12，约为91.67%。",[10,254,255,256],{},"两张台账中，故障窗口占全部窗口的比例分别为1%和10%。我们把这个尚未按告警筛选的比例，叫作故障的基准比例。保持组内检测表现不变，只改变基准比例，告警可信度就从50%变成了约91.67%。检测领域同样需要区分这两层比例。",[125,257,258],{},"2",[10,260,261],{},[130,262],{"alt":263,"src":264},"两张台账的故障基准比例分别为1%和10%，故障检出均99%、健康误报均1%，但告警中真故障分别占50%和11/12","/collections-assets/math-beauty/ch18/03-base-rate-comparison.png",[10,266,267],{},"图3：两条横带各表示本台账的全部告警，长度都归一化为100%。它们比较组成，不能用总长度比较198与1080的数量。",[10,269,270],{},"这次对照没有给检测器升级。我们固定了两个组内比例，改变的是进入系统的窗口构成。反过来，只看到告警可信度下降，也不能立刻认定模型退化；要分别检查基准比例和两个组内的表现。",[10,272,273],{},"真实部署未必满足“组内表现保持不变”。换一批设备，故障类型、传感器噪声都可能改变。这个假定让本例能单独研究基准比例的作用，并不承诺换场景后检测能力自动稳定。",[20,275,277],{"id":276},"为什么两边的准确率都是99","为什么两边的准确率都是99%",[10,279,280],{},"如果把所有判断正确的窗口一起数，便得到整体正确比例，通常称为准确率，英文是accuracy：",[10,282,283],{},"第一张：准确率＝(99＋9801)÷10000＝99%；",[10,285,286],{},"第二张：准确率＝(990＋8910)÷10000＝99%。",[10,288,289],{},"两张台账的准确率完全相同，告警可信度却很不同。在这个特定构造里，故障组判对99%，健康组也判对99%，所以无论两组怎样搭配，整体正确比例仍是99%。一般情况下，两组正确比例不同，改变构成也会改变accuracy。",[10,291,292,293],{},"因此，孤零零的“准确率99%”信息太少。如果它确指accuracy，分母就是全部检测窗口；绝不能将它改写成“收到的告警99%为真”。",[125,294,72],{},[10,296,297],{},"还可以作一个更尖锐的检查：对第一张台账，一个永远不告警的规则，也能把9900个健康窗口全部判对，accuracy同样是99%。可它一个故障也没找到，故障检出比例为0。由于告警数为0，“告警中真故障比例”的除法分母也是0，这个比例没有定义，不能夸成100%。",[10,299,300],{},"总体判对很多次，未必完成了“找出罕见故障”这个任务。一个总分把四格压缩后，会隐藏我们真正关心的差别。",[20,302,304],{"id":303},"从算对账到用好告警","从算对账，到用好告警",[10,306,307],{},"这些数字都是固定台账的描述。它们不保证明天恰好每100个故障检出99个，更不保证未来198条告警仍有99条为真。要讨论未来，需要说明新窗口怎样产生、记录是否有代表性，以及比例会不会变化。第19至23章将逐步补上这些工具。",[10,309,310],{},"实际计数还必须是整数。若只有1个故障窗口，它要么被检出，要么被漏掉，单次台账中的检出比例只能是100%或0%。不能硬套99%，写出“检出0.99个故障”。小规模记录、长期表现与模型中的概率，必须分清。",[10,312,313],{},"把这套方法用于AI缺陷识别、异常日志检测或垃圾邮件过滤，首先要约定正类是什么、每条记录怎样计数。其次要保留四格及其行列合计，防止把精确率与准确率混叫成一个“准确”。最后应检查评测数据的构成：刻意收集许多故障样本有助于观察检出情况，但其中算出的告警可信度，不能直接搬到故障稀少的日常流量里。",[10,315,316],{},"核查范围也要覆盖未告警窗口。如果只检查响过的告警，可以数出其中多少为真，却无从知道安静的窗口漏了多少故障。漏报可能只是没有被看见，而非不存在。",[10,318,319],{},"至于收到告警该不该立刻停机，仅靠50%还不能决定。一次漏掉严重故障的损失，与一次误报后短暂检查的成本可能相差很大；故障严重度、复核方式和处理成本都会影响安排。本章先把证据算清，暂不替这些工程判断制定规则。",[10,321,322],{},"回到开头，告警很灵而假消息仍多，并不矛盾：健康窗口基数大，少量误报比例也能积累出很多消息。下次见到一个漂亮的百分数，先问一句“在哪一组里，数了什么？”往往就能把问题重新看清。",[20,324,325],{"id":325},"顺手试一下",[10,327,328,332],{},[329,330,331],"strong",{},"题目1："," 在另一张虚构台账里共有20000个窗口，故障200个，健康19800个。保持故障检出99%、健康误报1%，写出四格、告警总数、准确率和告警可信度。记录总数翻倍后，为什么告警可信度没有提高？",[10,334,335],{},"**提示：**分别在故障组、健康组内计算，再把两个告警格子相加。",[10,337,338],{},"**参考答案：**TP＝198，FN＝2，FP＝198，TN＝19602。告警396个；准确率＝(198＋19602)÷20000＝99%；告警可信度＝198÷396＝50%。四格都恰是第一张台账的两倍，故障基准比例仍是1%，所用检测比例也未变，因此这个固定构造中的告警组成没有改变。这里不能把“数量更多”直接理解成“每条告警更可信”。",[10,340,341,344],{},[329,342,343],{},"题目2："," 用第一张台账，分别求“全部健康窗口中误报占比”“全部告警中误报占比”“全部窗口中误报占比”。一位同事说：“既然误报占1%，198条告警里大约只有2条误报。”错在哪里？",[10,346,347],{},"**提示：**三个问题的分子都是99，但分母分别对应三个集合。",[10,349,350],{},"**参考答案：**三个比例依次为99÷9900＝1%、99÷198＝50%、99÷10000＝0.99%。同事把以健康窗口为分母的1%，拿去乘告警数198，换错了分组。台账中的误报已有精确计数99条，无须用错置的百分数重新猜测。",[20,352,353],{"id":353},"参考与延伸",[10,355,356,358,359,366],{},[125,357,72],{}," Google官方《Machine Learning Crash Course》，",[360,361,365],"a",{"href":362,"rel":363},"https://developers.google.com/machine-learning/crash-course/classification/accuracy-precision-recall",[364],"nofollow","Classification: Accuracy, recall, precision, and related metrics","。核对accuracy、recall、false positive rate、precision的分母，以及类别不均衡时整体准确率的局限。",[10,368,369,371,372,377],{},[125,370,258],{}," 宾夕法尼亚州立大学统计系，STAT 507课程讲义，",[360,373,376],{"href":374,"rel":375},"https://online.stat.psu.edu/stat507/Lesson11",[364],"第11章第11.3节 Sensitivity, Specificity, Positive Predictive Value, and Negative Predictive Value","。核对灵敏度、阳性预测值与基准比例之间的区别。本文的设备场景及整数台账独立构造，不引用该课的医学算例。",[10,379,380],{},"本文台账、练习与图解均为原创教学构造，不是实测记录；参考资料只用于核对概念。",[382,383],"hr",{},[10,385,386],{},"作者：Jiancheng Wang · 数学之美（独立原创）",{"title":388,"searchDepth":389,"depth":389,"links":390},"",3,[391,393,394,395,396,397,398,399],{"id":22,"depth":392,"text":22},2,{"id":107,"depth":392,"text":108},{"id":148,"depth":392,"text":149},{"id":185,"depth":392,"text":186},{"id":276,"depth":392,"text":277},{"id":303,"depth":392,"text":304},{"id":325,"depth":392,"text":325},{"id":353,"depth":392,"text":353},"md",{"collection":402,"order":403,"slug":404,"author":405},"数学之美",18,"base-rates-and-alerts","Jiancheng Wang",true,"/column/math-beauty/base-rates-and-alerts",{"title":5,"description":12},"column/math-beauty/base-rates-and-alerts","N-lypf2IvXaRJiWJfMj_Wqx4UOktp5Kg0xAmx7wIoeo",1791935829147]