决定的好坏取决于背后的数据。数据质量 指的是在系统行动之前,先问读数是否准确、是否存在、是否及时,以及对该情境是否合理。
本课延伸自解释简单的决策模型,并完成自动化与新兴系统中的推理。情境题常常加入一个故障传感器,问会出什么问题以及如何预防。
读数可能出什么问题?
- 不准确: 数值偏离真实值,例如传感器漂移。
- 缺失: 没有数值送来,或送来的是占位代码。
- 过时: 数值是旧的,描述的是房间以前的样子,而不是现在。
- 不可能: 数值不可能是真的,例如教室温度 99 °C。
- 位置错误: 传感器测量的地方不具代表性,例如放在加热器旁边。
例题
温室传感器送出 25、26、99、26、25(°C)。风扇规则是“读数平均值高于 35 就 ON”。范围检查只接受 0 至 60 的数值。
没有检查: 25 + 26 + 99 + 26 + 25 = 201,201 ÷ 5 = 40.2。因为 40.2 > 35,风扇无缘无故地打开了。
加上检查:
total ← 0
count ← 0
FOR i ← 1 TO 5
value ← GetReading()
IF value >= 0 AND value <= 60
THEN
total ← total + value
count ← count + 1
ENDIF
NEXT i
average ← total / count
| i | value | in range 0 to 60 | total | count |
|---|---|---|---|---|
| 1 | 25 | true | 25 | 1 |
| 2 | 26 | true | 51 | 2 |
| 3 | 99 | false | 51 | 2 |
| 4 | 26 | true | 77 | 3 |
| 5 | 25 | true | 102 | 4 |
平均值是 102 ÷ 4 = 25.5。因为 25.5 不高于 35,风扇保持 OFF。这个检查阻止了一个不可能的数值改变决定。
系统还应该记录有一个数值被拒绝,方便有人去检查传感器。
要留意的错误
常见的错误是说“系统会自己修正数据”。
错误答案: “处理器是电脑,所以会发现 99 是错的。”
学生以为处理器理解实际情况。
处理器只做规则要求它做的事。除非写了检查,否则 99 会像其他数字一样被接受。纠正的做法是说出具体的检查,例如范围检查,并说明系统如何处理被拒绝的数值。
自我检测
1. 传感器送出 12、14、-999、13、15,其中 -999 表示“没有读数”。有效范围是 0 至 50。求被接受数值的平均值。
显示答案
接受的数值:12、14、13、15。总和 = 12 + 14 + 13 + 15 = 54。个数 = 4。平均值 = 54 ÷ 4 = 13.5。如果把 -999 算进去,结果是 -945 ÷ 5 = -189,毫无意义。
2. 在需要每秒更新的系统中,一个迟到十分钟的读数会带来什么问题?
显示答案
这个读数过时。处理器会根据可能已不成立的情况做决定,所以执行器可能做出错误的动作。
3. 为什么范围检查的界限不应设得太窄?
显示答案
过窄的范围可能拒绝真实事件,例如温度真的升高,系统就会忽略它最需要响应的读数。
接下来学什么
本模块最后一课讲如何让笔记对应正确的年份:标注仅限 2029 的新增内容。想练习坏数据的追踪,可以在 Python 推理沙盒中用像上面这样的简短循环。
计算机科学补习的老师常会请你故意把规则弄坏,让你在考题指出弱点之前,先学会自己看出来。