用 Python 理解单值控制图:从模拟数据到异常点
用一组固定的模拟数据计算控制限,生成 SVG 图,并说明控制限和规格限的区别。
先明确这张图回答什么
假设每个时点只得到一个按时间顺序记录的测量值,可以用单值图观察过程变化。本例用 20 个模拟基线值计算控制限,再添加一个新的观察值;数据仅用于展示计算步骤,不足以代表任何生产过程。
控制图关注相对于基线的变化。规格限来自产品或工艺要求,控制限来自过程数据的统计估计。点在控制限内,不自动意味着产品满足规格;点超出控制限,也应先调查原因而不是直接删除。
计算中心线与控制限
对相邻两个观测值计算绝对差 MR,再求平均移动极差。按相邻两点移动极差的单值图方法,用 MR 均值除以 1.128 估计过程标准差,控制限为均值上下各三倍该估计值。公式来源链接见文末。
MR[i] = abs(x[i] - x[i-1])
sigma_estimate = mean(MR) / 1.128
CL = mean(x)
LCL = CL - 3 * sigma_estimate
UCL = CL + 3 * sigma_estimate运行示例并查看图形
下载 Python 脚本,使用 Python 3 运行即可,不需要安装第三方库。脚本打印中心线、上下控制限和新观察值是否超限,同时在当前目录生成 control-chart.svg。CSV 文件提供相同的输入数据。
示例只用基线估计控制限,新观察值不参与计算。这样可以避免把待监控的新变化立刻混入基线,造成控制限跟着变化。脚本也保留了输入顺序,没有把数据按大小排序。
python spc_individuals.py
# 输出 control-chart.svg;用浏览器打开查看看到信号之后应记录什么
如果新观察值超限,先确认测量记录、单位、设备状态与采样条件是否正确,再记录当时的材料、人员、方法和环境变化。不能为了让图变好看而删除点;若确认有可解释的特殊原因,应保留原始数据和处理依据。
本例仅实现单点超出三倍标准差控制限的提示,没有实现连串、趋势等规则,也没有据此计算过程能力。实际应用还需要检查测量系统、数据相关性、分布特点、基线稳定性及合适的分组方式。
练习:只改变一个条件
可以把最后一个模拟观察值改为靠近中心线的数值,再运行一次。比较图形与提示是否一致。也可以把某个基线值改得很大,观察估计控制限如何变化,理解为什么基线需要有代表性。
若记录存在漏测或采样间隔变化,不应默默填零。先定义如何处理缺失以及哪些观测之间适合计算移动极差,再讨论计算结果。