【代码+案例】详解SPC相关控制图原理及逻辑代码

2023-12-15 20:56:39
  • 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个标准差以外

可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则2:连续9点落在中心线同一侧

可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则3:连续6点递增或递减,即连成一串

可能原因:模具等工具的磨损,维护保养水平降低,操作工的技能越来越熟练。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则4:连续14点相邻点交替上下

可能原因:轮流使用两台设备或两个操作工操作,数据分层不够。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则5:连续3点中有2点在中心线同一侧且大于2倍标准差

可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则6:连续5点中有4点在中心线同一侧且大于1个标准差

可能原因:一般认为是新员工,工艺方法错误,机器故障,原材料不合格,测量错误,计算错误,检验方法或标准变化。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则7:连续15点在距离中心线1个标准差内

可能原因:数据造假,控制限计算错误,数据分层不够。

手把手教你SPC控制图怎么做以及SPC控制图分类

判异准则8:连续8点在中心线任一侧且没有一点在1个标准差内

可能原因:数据分层不够。

手把手教你SPC控制图怎么做以及SPC控制图分类

SPC控制图异常的处理:当我们发现SPC控制异常时,应首先自我检查是否严格按作业标准(SOP)作业,并与质量管控专业人员进行问题分析处理。

参考链接:https://www.infinityqs.cn/Aboutus/zixun/2955.html

每文一语

学习永无止境

文章来源:https://blog.csdn.net/weixin_47723732/article/details/134921336
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。