概率密度函数的求解

版权声明:本文为博主原创文章,未经博主允许不得转载。 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()

猜你喜欢

转载自blog.csdn.net/jiaoyangdetian/article/details/82221163
今日推荐