版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiaoyangdetian/article/details/82221163
应用的场景:
现有10000新员工入职,公司的hr想知道新员工的参训人数的比例,而由于某些原因,不能公开所有新员工的信息,现给出了2500个用户的数据,让你计算下新员工的参训人数的比例。
这里我们使用概率密度函数,来解决这个问题,hr给了个限定标准,作为她可以接受的一个计算结果的预期值:
如果计算的结果的概率,在总体点估计量:概率P的[-0.65, +0.65]区间内,就可以接受这个求得的结果
自己的一些见解:总体的实际参训人员的概率为0.6,我们因为没有完整数据不能求得这个值,但可以给出一个估计值,这个估计值在[0.6-0.065, 0.6+0.065]范围内,我们就接受这个估计的值,这里的概率密度解决了这个问题。
一 原理
首先来看一张图(图片源于网络)
红色的部分就是概率密度,它是一个面积,更多的原理请查阅统计学方面的知识。
二 Python的处理过程
import numpy as np
from pyecharts import Bar
from scipy.stats import norm
training_all = np.random.normal(265, 4, 2500)
training_all = training_all.astype(int)
training_all = training_all % 2 # 0 未参加过培训 1 参加过培训
def works5(x_data, y_data):
bar = Bar('抽样和抽样分布')
bar.add('P的抽样分布', x_data, y_data)
bar.show_config()
bar.render()
return
def PointEstimation():
# 简单随机抽样,抽取50个样本
training_sample = np.random.choice(training_all, size=50) # 样本是否参训
training_p = np.sum(training_sample == 1) / len(training_sample) # 点估计量,概率值
#print('training_p=', training_p) # 通过样本的点估计值,推断新员工中参加培训人员的比例
return training_p
def WorkSpace():
training = list([]) # 每次抽样得到的是否参训比例的点估计值
n = 1000 # 进行抽样30次
root_n = 0
while root_n < n:
t = PointEstimation()
training.append(t)
root_n = root_n + 1
# 每次抽样后的结果
print('training=', training)
print('training len=', len(training))
# 每个抽样后得到的点估计值,可以看作一个样本,它服从正太分布,则可以求它的:均值,方差,标准差,协方差等值
result_t = np.mean(training) # 均值
print('result_t=', result_t) # 0.49
result_s = np.std(training, ddof=1) # 标准差
print('result_s=', result_s) # 0.071
# 区间的范围,加减值
p_pace = 0.065
p_c1 = p_pace / result_s
p_c2 = -p_pace / result_s
# 求累积概率
cdf1 = norm.cdf(p_c1)
cdf2 = norm.cdf(p_c2)
print('cdf1=', cdf1, 'cdf2=', cdf2)
# 比率p的区间概率
p_cdf = cdf1 - cdf2
print('p_cdf=', p_cdf)
# 数据的可视化
'''
x_data = np.arange(0, n, 1)
x_data = x_data.tolist()
print('x_data=', x_data)
print('x_data len=', len(x_data))
works5(x_data, training) # 画抽样分布图
'''
return
WorkSpace()