B题已经完成模型代码!详情查看文末名片
问题1:可以考虑使用统计学中的“样本量估算”方法,使用二项分布或正态近似来决定最少的样本量,并通过假设检验(如单侧检验)在95%和90%置信度下进行判断。
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
# 参数设置
p_0 = 0.10 # 标称次品率(供应商声称)
confidence_level_95 = 0.95 # 问题 (1) 的置信水平
confidence_level_90 = 0.90 # 问题 (2) 的置信水平
margin_of_error = 0.05 # 误差限
# 计算Z值
Z_95 = stats.norm.ppf((1 + confidence_level_95) / 2) # 95%置信区间
Z_90 = stats.norm.ppf((1 + confidence_level_90) / 2) # 90%置信区间
# 样本量估算公式
def sample_size(Z, p, E):
"""根据Z值,次品率p,误差限E计算最少样本量"""
return (Z**2 * p * (1 - p)) / (E**2)
# 计算95%和90%置信度下的最少样本量
n_95 = sample_size(Z_95, p_0, margin_of_error)
n_90 = sample_size(Z_90, p_0, margin_of_error)
print(f"95%置信水平下的最少样本量: {int(np.ceil(n_95))}")
print(f"90%置信水平下的最少样本量: {int(np.ceil(n_90))}")
# 抽样假设检验
def hypothesis_test(p_0, n, x, confidence_level):
"""
根据样本量n,抽样检测到的次品数量x,以及置信水平,计算置信区间
p_0: 标称次品率
n: 样本量
x: 次品数量
confidence_level: 置信水平
"""
p_hat = x / n # 样本次品率
Z = stats.norm.ppf((1 + confidence_level) / 2)
margin = Z * np.sqrt((p_hat * (1 - p_hat)) / n)
lower_bound = p_hat - margin