- Xbar-R图:用于监控样本均值和范围,适合小样本量。
- Xbar-S图:类似Xbar-R图,但适用于大样本量。
- p图:用于监控一定时间或样本量内的缺陷比率。
- np图:类似p图,但用于固定样本量。
- u图:用于监控单位内的缺陷数。
- c图:监控特定时间或样本量内的缺陷数。
每一种控制图都有其特定的用途和解读方式。比如,如果控制图显示数据点大多在控制限以内,这表明过程是稳定的。如果数据点超出控制限或呈现非随机模式,这可能表示过程有异常。
代码及案例
I-MR图
import matplotlib.pyplot as plt
import numpy as np
# 模拟数据
np.random.seed(0)
data = np.random.normal(loc=10, scale=1, size=30)
# 计算控制限
mean = np.mean(data)
std_dev = np.std(data)
upper_control_limit = mean + 3*std_dev
lower_control_limit = mean - 3*std_dev
# 绘制I-MR图
plt.figure(figsize=(10, 5))
# 绘制I图 (Individuals)
plt.subplot(1, 2, 1)
plt.plot(data, marker='o', linestyle='-')
plt.axhline(mean, color='green', linestyle='--')
plt.axhline(upper_control_limit, color='red', linestyle='--')
plt.axhline(lower_control_limit, color='red', linestyle='--')
plt.title('I图')
plt.xlabel('样本')
plt.ylabel('值')
# 绘制MR图 (Moving Range)
moving_ranges = [abs(data[i] - data[i-1]) for i in range(1, len(data))]
mean_mr = np.mean(moving_ranges)
plt.subplot(1, 2, 2)
plt.plot(moving_ranges, marker='o', linestyle='-')
plt.axhline(mean_mr, color='green', linestyle='--')
plt.title('MR图')
plt.xlabel('样本')
plt.ylabel('移动范围')
plt.tight_layout()
plt.show()
-
代码解释
数据模拟:生成了30个服从正态分布的随机数据点。
计算控制限:计算了数据的平均值和标准差,并据此确定上下控制限。
绘制I图(Individuals Chart):显示了每个数据点的变化情况,并绘制了平均线和控制限。
绘制MR图(Moving Range Chart):显示了相邻数据点之间的变化(移动范围),并绘制了其平均线。 -
图表解读
I图:如果大多数数据点都在控制限内,则过程被认为是稳定的。如果出现连续的点在控制限外,或者呈现特定的模式(如连续上升或下降),则可能表明过程存在异常。
MR图:主要用于监控过程的变异性。如果移动范围在控制限内且没有非随机模式,说明过程变异性稳定。
Xbar-R图
import pandas as pd
# 创建模拟数据(5个样本,每个样本包含5个数据点)
np.random.seed(0)
data = np.random.normal(loc=20, scale=2, size=(5, 5))
# 将数据转换为DataFrame,便于处理
df = pd.DataFrame(data)
# 计算样本均值和样本范围
sample_means = df.mean(axis=1)
sample_ranges = df.max(axis=1) - df.min(axis=1)
# 计算Xbar-R图的控制限
grand_mean = sample_means.mean() # 总体均值
mean_range = sample_ranges.mean() # 平均范围
# R图的控制限
r_chart_upper = mean_range * 2.114 # D4因子
r_chart_lower = mean_range * 0 # D3因子
# Xbar图的控制限
xbar_chart_upper = grand_mean + (r_chart_upper * 0.577) / np.sqrt(5) # A2因子
xbar_chart_lower = grand_mean - (r_chart_upper * 0.577) / np.sqrt(5)
# 绘制Xbar-R图
plt.figure(figsize=(10, 5))
# 绘制Xbar图
plt.subplot(1, 2, 1)
plt.plot(sample_means, marker='o', linestyle='-')
plt.axhline(grand_mean, color='green', linestyle='--')
plt.axhline(xbar_chart_upper, color='red', linestyle='--')
plt.axhline(xbar_chart_lower, color='red', linestyle='--')
plt.title('Xbar图')
plt.xlabel('样本')
plt.ylabel('均值')
# 绘制R图
plt.subplot(1, 2, 2)
plt.plot(sample_ranges, marker='o', linestyle='-')
plt.axhline(mean_range, color='green', linestyle='--')
plt.axhline(r_chart_upper, color='red', linestyle='--')
plt.axhline(r_chart_lower, color='red', linestyle='--')
plt.title('R图')
plt.xlabel('样本')
plt.ylabel('范围')
plt.tight_layout()
plt.show()
-
代码解释
数据模拟:创建了5组样本,每组包含5个数据点,这些数据点服从正态分布。
计算样本均值和范围:对每个样本计算了平均值和范围(最大值与最小值之差)。
计算控制限:
R图(范围图):基于样本范围的平均值和D4、D3因子计算上下控制限。
Xbar图(均值图):基于样本均值的总体均值和A2因子计算上下控制限。
绘制Xbar-R图:
Xbar图:展示了各样本均值,并标出了控制限。
R图:展示了各样本范围,并标出了控制限。 -
图表解读
Xbar图:监控样本均值的变化。如果均值大多在控制限内,表明过程均值稳定。超出控制限或呈现特定模式表明可能存在问题。
R图:监控样本范围的变化。范围的稳定性指示过程变异性的控制水平。
Xbar-S图
# 创建模拟数据(5个样本,每个样本包含10个数据点)
np.random.seed(0)
data = np.random.normal(loc=15, scale=3, size=(5, 10))
# 将数据转换为DataFrame
df = pd.DataFrame(data)
# 计算样本均值和标准差
sample_means = df.mean(axis=1)
sample_stds = df.std(axis=1, ddof=1)
# 计算Xbar-S图的控制限
grand_mean = sample_means.mean() # 总体均值
mean_std = sample_stds.mean() # 平均标准差
# S图的控制限
s_chart_upper = mean_std * 2.089 # B4因子
s_chart_lower = mean_std * 0.000 # B3因子
# Xbar图的控制限
xbar_chart_upper = grand_mean + (s_chart_upper / np.sqrt(10)) * 0.308 # A3因子
xbar_chart_lower = grand_mean - (s_chart_upper / np.sqrt(10)) * 0.308
# 绘制Xbar-S图
plt.figure(figsize=(10, 5))
# 绘制Xbar图
plt.subplot(1, 2, 1)
plt.plot(sample_means, marker='o', linestyle='-')
plt.axhline(grand_mean, color='green', linestyle='--')
plt.axhline(xbar_chart_upper, color='red', linestyle='--')
plt.axhline(xbar_chart_lower, color='red', linestyle='--')
plt.title('Xbar图')
plt.xlabel('样本')
plt.ylabel('均值')
# 绘制S图
plt.subplot(1, 2, 2)
plt.plot(sample_stds, marker='o', linestyle='-')
plt.axhline(mean_std, color='green', linestyle='--')
plt.axhline(s_chart_upper, color='red', linestyle='--')
plt.axhline(s_chart_lower, color='red', linestyle='--')
plt.title('S图')
plt.xlabel('样本')
plt.ylabel('标准差')
plt.tight_layout()
plt.show()
-
代码解释
数据模拟:创建了5组样本,每组包含10个数据点,这些数据点服从正态分布。
计算样本均值和标准差:对每个样本计算了平均值和标准差。
计算控制限:
S图(标准差图):基于样本标准差的平均值和B4、B3因子计算上下控制限。
Xbar图(均值图):基于样本均值的总体均值和A3因子计算上下控制限。
绘制Xbar-S图:
Xbar图:展示了各样本均值,并标出了控制限。
S图:展示了各样本标准差,并标出了控制限。 -
图表解读
Xbar图:监控样本均值的变化。均值的稳定性表明过程的中心趋势受控。
S图:监控样本标准差的变化。标准差的稳定性指示过程变异性的控制水平。
P图
# 模拟数据 - p图(缺陷比率图)
np.random.seed(0)
# 假设有20个样本,每个样本包含100个单元
n_samples = 20
sample_size = 100
# 模拟数据:随机生成每个样本中的缺陷数(0到10之间)
defective_units = np.random.randint(0, 11, size=n_samples)
# 计算缺陷比率
p = defective_units / sample_size
# 计算p图的控制限
p_bar = np.mean(p) # 平均缺陷比率
p_chart_upper = p_bar + 3 * np.sqrt(p_bar * (1 - p_bar) / sample_size)
p_chart_lower = p_bar - 3 * np.sqrt(p_bar * (1 - p_bar) / sample_size)
p_chart_lower = np.clip(p_chart_lower, 0, 1) # 确保下限不小于0
# 绘制p图
plt.figure(figsize=(10, 5))
plt.plot(p, marker='o', linestyle='-')
plt.axhline(p_bar, color='green', linestyle='--')
plt.axhline(p_chart_upper, color='red', linestyle='--')
plt.axhline(p_chart_lower, color='red', linestyle='--')
plt.title('p图')
plt.xlabel('样本')
plt.ylabel('缺陷比率')
plt.ylim(0, 0.15)
plt.show()
-
代码解释
数据模拟:生成了20个样本的数据,每个样本含有100个单元,并随机生成每个样本中的缺陷数(0到10之间)。
计算缺陷比率:对每个样本计算了缺陷比率。
计算控制限:基于缺陷比率的平均值计算上下控制限,确保下限不小于0。
绘制p图:展示了每个样本的缺陷比率,并标出了平均缺陷比率及控制限。 -
图表解读
p图:用于监控不同样本中缺陷比率的变化。如果大部分数据点在控制限内,表明缺陷率稳定。数据点超出控制限或呈现特定模式则可能指示过程质量变化。
np控制图
# 模拟数据 - np图(固定样本量的缺陷数量图)
np.random.seed(0)
# 假设有20个样本,每个样本包含固定的50个单元
n_samples = 20
sample_size = 50
# 模拟数据:随机生成每个样本中的缺陷数(0到10之间)
defective_units = np.random.randint(0, 11, size=n_samples)
# 计算缺陷数量
np_values = defective_units
# 计算np图的控制限
np_bar = np.mean(np_values) # 平均缺陷数量
np_chart_upper = np_bar + 3 * np.sqrt(np_bar * (1 - np_bar / sample_size))
np_chart_lower = np_bar - 3 * np.sqrt(np_bar * (1 - np_bar / sample_size))
np_chart_lower = np.clip(np_chart_lower, 0, np.inf) # 确保下限不小于0
# 绘制np图
plt.figure(figsize=(10, 5))
plt.plot(np_values, marker='o', linestyle='-')
plt.axhline(np_bar, color='green', linestyle='--')
plt.axhline(np_chart_upper, color='red', linestyle='--')
plt.axhline(np_chart_lower, color='red', linestyle='--')
plt.title('np图')
plt.xlabel('样本')
plt.ylabel('缺陷数量')
plt.ylim(0, max(np_chart_upper, max(np_values)) + 1)
plt.show()
-
代码解释
数据模拟:生成了20个样本的数据,每个样本含有固定的50个单元,并随机生成每个样本中的缺陷数(0到10之间)。
计算缺陷数量:记录每个样本的缺陷数量。
计算控制限:基于缺陷数量的平均值计算上下控制限,确保下限不小于0。
绘制np图:展示了每个样本的缺陷数量,并标出了平均缺陷数量及控制限。 -
图表解读
np图:用于监控不同样本中的固定数量单元的缺陷数量。如果大部分数据点在控制限内,表明缺陷数量稳定。数据点超出控制限或呈现特定模式则可能指示过程质量变化。
U图
# 模拟数据 - u图(单位内的缺陷数图)
np.random.seed(0)
# 假设有20个样本,每个样本的单元数量不固定
sample_sizes = np.random.randint(40, 61, size=n_samples) # 单元数在40到60之间
# 模拟数据:随机生成每个样本中的缺陷数
defective_units = np.random.randint(0, 11, size=n_samples)
# 计算单位内的缺陷数
u_values = defective_units / sample_sizes
# u图的控制限计算和绘图
u_chart_upper = [u_bar + 3 * np.sqrt(u_bar / n) for n in sample_sizes]
u_chart_lower = [u_bar - 3 * np.sqrt(u_bar / n) for n in sample_sizes]
u_chart_lower = np.clip(u_chart_lower, 0, np.inf) # 确保下限不小于0
# 绘制u图
plt.figure(figsize=(10, 5))
plt.plot(u_values, marker='o', linestyle='-')
plt.axhline(u_bar, color='green', linestyle='--')
# 由于控制限是变量,需要逐点绘制
for i in range(n_samples):
plt.plot([i, i], [u_chart_lower[i], u_chart_upper[i]], color='red', linestyle='--')
plt.title('u图')
plt.xlabel('样本')
plt.ylabel('单位内缺陷数')
plt.ylim(0, max(u_chart_upper) + 0.01)
plt.show()
-
代码解释
数据模拟:生成了20个样本的数据,每个样本含有不固定数量的单元(40到60之间),并随机生成每个样本中的缺陷数。
计算单位内的缺陷数:计算了每个样本的单位内缺陷数。
计算控制限:基于单位内缺陷数的平均值计算上下控制限,考虑到样本大小的变化。
绘制u图:展示了每个样本的单位内缺陷数,并标出了平均单位内缺陷数及控制限。 -
图表解读
u图:用于监控不同样本中单位内的缺陷数量。如果大部分数据点在控制限内,表明单位内缺陷数量稳定。数据点超出控制限或呈现特定模式则可能指示过程质量变化。
C图
# 模拟数据 - c图(特定时间或样本量内的缺陷数图)
np.random.seed(0)
# 假设有20个样本
# 模拟数据:随机生成每个样本中的缺陷数
defective_units = np.random.poisson(lam=5, size=n_samples) # 使用泊松分布模拟缺陷数
# 计算c图的控制限
c_bar = np.mean(defective_units) # 平均缺陷数量
c_chart_upper = c_bar + 3 * np.sqrt(c_bar)
c_chart_lower = c_bar - 3 * np.sqrt(c_bar)
c_chart_lower = np.clip(c_chart_lower, 0, np.inf) # 确保下限不小于0
plt.figure(figsize=(10, 5))
plt.plot(defective_units, marker='o', linestyle='-')
plt.axhline(c_bar, color='green', linestyle='--')
plt.axhline(c_chart_upper, color='red', linestyle='--')
plt.axhline(c_chart_lower, color='red', linestyle='--')
plt.title('c图')
plt.xlabel('样本')
plt.ylabel('缺陷数量')
plt.ylim(0, max(c_chart_upper, max(defective_units)) + 1)
plt.show()
-
代码解释
数据模拟:生成了20个样本的数据,使用泊松分布随机生成每个样本中的缺陷数。
计算c图的控制限:基于缺陷数量的平均值计算上下控制限。
绘制c图:展示了每个样本的缺陷数量,并标出了平均缺陷数量及控制限。 -
图表解读
c图:用于监控特定时间或样本量内的缺陷数量。如果大部分数据点在控制限内,表明缺陷数量稳定。数据点超出控制限或呈现特定模式则可能指示过程质量变化。
如何从SPC控制图中判段异常
当我们使用SPC进行过程控制的时候,绘图是根本,发现问题才是目的,就会涉及到SPC判异原则,通过SPC控制图中点的变化情况判断生产是否出现了问题,来监测生产过程是否处于控制状态。
简单的说,控制图中出现下面的8种点位分布的时候,我们就认为过程出现了特殊原因,我们必须找出点位分布异常的特殊原因,将其消除,从而提前遏制不良品的产生,保证产品质量。
为了更容易理解八大判异原则,用图表方式进行描述,先来看一下图表说明:上下A/B/C六个区间,分别代表样本值的3倍、2倍、1倍标准差区间。
SPC控制图中点的变化情况判断
判异准则1:任何 1个点落在3个标准差以外
可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。
判异准则2:连续9点落在中心线同一侧
可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。
判异准则3:连续6点递增或递减,即连成一串
可能原因:模具等工具的磨损,维护保养水平降低,操作工的技能越来越熟练。
判异准则4:连续14点相邻点交替上下
可能原因:轮流使用两台设备或两个操作工操作,数据分层不够。
判异准则5:连续3点中有2点在中心线同一侧且大于2倍标准差
可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。
判异准则6:连续5点中有4点在中心线同一侧且大于1个标准差
可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。
判异准则7:连续15点在距离中心线1个标准差内
可能原因:数据造假,控制限计算错误,数据分层不够。
判异准则8:连续8点在中心线任一侧且没有一点在1个标准差内
可能原因:数据分层不够。
SPC控制图异常的处理:当我们发现SPC控制异常时,应首先自我检查是否严格按作业标准(SOP)作业,并与质量管控专业人员进行问题分析处理。
参考链接:https://www.infinityqs.cn/Aboutus/zixun/2955.html
每文一语
学习永无止境