本文章将分享统计学中的 概率分布、抽样分布。
一、概率分布
- 随机变量
1.什么是随机变量?
将随机事件出现的一个结果映射到一个数值的含义,通过数值量化随机事件,这就是随机变量的作用。(随机变量是量化随机事件的一个函数)2.随机变量的分类?
离散随机变量:结果可列举出个数,例如明天是否下雨
连续随机变量:变量里面有无限的结果,例如明天的下雨量
- 概率分布
1.什么是概率分布?
随机变量所有可能的结果,及对应结果发生的概率,比如下图是抛硬币的概率分布:
2.随机变量与概率分布的关系图
2.1 离散概率分布
2.1.1伯努利分布
伯努利试验是在相互独立的条件下随机的实验,结果只有两种:成功/不成功,例如抛硬币实验。如果这个随机变量是伯努利实验,那么它就服从伯努利分布。
1)定义随机变量X
2)概率质量函数(PMF):计算结果概率
3)python实现
先安装scipy包,安装步骤:
1)在conda中先进入python环境:activate py3
2)在conda中运行以下命令:conda install scipy
如果还没有安装numpy包和matplotlib包,也按上述命令安装这些包
然后使用Bernoulli distribution
#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''
第1步,定义随机变量:1次抛硬币
成功指正面朝上记录为1,失败指反面朝上记录为0
'''
X = np.arange(0, 2,1)
X
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
pList
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
plt.plot(X, pList, marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布:p=%.2f' % p)
#显示图形
plt.show()
2.1.2二项分布
如果我们碰到一个事情,这个事情发生的次数是固定的,而我们感兴趣的是成功的次数,那么我们就可以用到二项分布。例如,抛硬币5次,其中2次正面朝上的概率是多少。
如何检验是二项分布:
- 做某件事的次数是固定的,次数用n表示,n次某件事是相互独立的
- 每一次事件都有两个可能的结果(成功或失败)
- 每一次成功的概率都是相等的,成功的概率用p来表示
- 想知道成功了k次的概率是多少
1)定义随机变量
2)概率质量函数
- n:做某件事情的次数
- p:做某件事情成功的概率
- k:成功次数
3)逆向思维:抛硬币5次,至少有3次正面朝上的概率是多少?可以反过来想:就相当于最多2次正面朝上p(k<=2)=p(0)+p(1)+p(2)
4)python实现二项分布(Binomial Distribution)
#第1步,定义随机变量:5次抛硬币,正面朝上的次数
n = 5 # 做某件事情的次数
p = 0.5 # 做某件事情成功的概率
X = np.arange(0, n+1,1)
X
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
pList = stats.binom.pmf(X, n, p)
pList
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
plt.plot(X, pList, marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币正面朝上次数')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('二项分布:n=%i,p=%.2f' % (n,p))
#显示图形
plt.show()
2.1.3几何分布
尝试一件事多次,想要知道取得第一次成功的概率,例如抛硬币5次,才第一次正面朝上的概率是多少。
如何检验几何分布:
- 做某件事的次数是固定的,次数用n表示,n次某件事是相互独立的
- 每一件事的都有两个可能的结果(成功或者失败)
- 每一次成功的概率都是相等的,成功的概率用p来表示
- 想知道第k次做某件事,才取得第一次成功的概率是多少(不同点,与二项分布)
1)定义随机变量
2)概率质量函数——计算第k次才成功的概率
p:做某件事情成功的概率
k:第k次做某件事情,才取到第1次成功
3)几何分布的期望和方差
4)用python实现几何分布(Geometric Distribution)
'''
第1步,定义随机变量:
首次表白成功的次数,可能是1次,2次,3次等
'''
#第k次做某件事情,才取到第1次成功
#这里我们想知道5次表白成功的概率
k = 5
# 做某件事情成功的概率,这里假设每次表白成功概率都是60%
p = 0.6
X = np.arange(1, k+1,1)
X
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示表白第1次才成功的概率,表白第2次才成功的概率,表白第3次才成功的概率,表白第4次才成功的概率,表白第5次才成功的概率
pList = stats.geom.pmf(X,p)
pList
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
plt.plot(X, pList, marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:表白第k次才首次成功')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('几何分布:p=%.2f' % p)
#显示图形
plt.show()
2.1.4泊松分布
如果你想知道某个时间范围内发生某件事k次的概率是多大,可以用泊松分布。比如一周内有多少人能赢得彩票,每分钟有多少人会打电话到呼叫中心。
如何验证是泊松分布?
- 事件是独立事件
- 在任意相同的时间范围内,事件发生的概率相同
- 你想知道某个时间范围内,发生某件事k次的概率是多大
1)概率质量函数——计算某个时间范围内,发生某件事k次的概率
λ:给定时间范围内某件事情发生的平均次数
k:事情发生的次数
泊松分布的期望和方差均为λ
2)用python实现概率分布图的绘制(Poisson Distribution)
'''
第1步,定义随机变量:
已知某路口发生事故的比率是每天2次,
那么在此处一天内发生k次事故的概率是多少?
'''
mu = 2 # 平均值:每天发生2次事故
k=4 #次数,现在想知道每天发生4次事故的概率
#包含了发生0次、1次、2次,3次,4次事故
X = np.arange(0, k+1,1)
X
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
#分别表示发生1次,2次,3次,4次事故的概率
pList = stats.poisson.pmf(X,mu)
pList
#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
plt.plot(X, pList, marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
'''
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:某路口发生k次事故')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('泊松分布:平均值mu=%i' % mu)
#显示图形
plt.show()
2.2连续概率分布(2种商业模式:正态分布、幂律分布)
2.2.1正态分布(The Normal Distribution)
正态分布就是大部分属于中间值,只有du一小部分属于过大和过小的值,它zhi们分布在范围的两端。
正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由A.棣莫弗在求二项分布的渐近公式中得到,C.F.高斯在研究测量误差时从另一个角度导出了它。
正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
正态分布的表示:若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。
1)正态分布的功能:
- 预测数据的位置
第一步:确定概率范围p(k<1.05) --红色区域的面积
第二步:求标准分
标准分z =(1.05 - 平均值)/ 标准差
第三步:查找z表格
如果对于其他符号得到概率呢?
实际问题:奔驰汽车公司考虑实施一项质量保证:如果轮胎的行驶里程没有达到质量保证规定的里程,那么将以折扣价提供更换轮胎的服务,但是考虑到更换的成本,希望达到折扣质量保证条件的轮胎数不要超过总数的10%,那么应该设定的质保里程为多少公里呢?
标准分z=(k-平均值)/标准差=-1.28
2.2.2幂律分布(power-law distribution)
现实社会财富分配(幂律分布)
2.2.3正态分布VS.幂律分布
“边际成本”越高的行业,越是分散市场,符合正态分布:赚大钱的人少,亏大钱的也少,大部分人都趋向赚取平均利润。例如上班打工。
幂律分布:马太效应、二八原则、网络效应,例如:开付费专栏,微博网红。
二、抽样分布
日常生活中我们经常会看到一些缺乏统计概率常识,仅为哗众取宠博人眼球的问题,比如:
- 为什么高考状元,最后都很平庸?
- 为什么学区房那么值钱,但学历不值钱?
- 为什么一个清华毕业的,收入还干不过咪蒙?
以上问题均有以偏概全的问题,通过特殊的个例来推断整体的结论,缺乏可靠性。
如何避免以上类似的偏见,需要先了解一下统计学中总体与样本的概念?
1.什么是总体?
总体是你研究对象的整个群体。
2.什么是样本?
样本是从总体中选取的一部分,用于代表总体。
以“为什么一个清华毕业的,收入还干不过咪蒙?”这个问题为例,它比较的是毕业于清华大学的所有人平均收入和毕业于普通大学的所有人的平均收入,而咪蒙作为毕业于普通大学的所有人样本是特殊样本,并非随机样本,无法代表总体。
2.1什么是样本数量?
样本数量是你有多少个样本。
2.2什么是样本大小(样本容量)?
样本大小是每个样本里面有多少个数据。
将样本平均值的分布可视化叫做抽样分布。
3.如何用python实现随机样本?
range() 函数可创建一个整数列表,一般用在 for 循环中。
使用语法:range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)
- start: 计数从 start 开始,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
案例1:抽奖
'''
抽奖:生成多个随机数
应用案例:从395个用户中随机抽取10个人作为中奖者
'''
# 导入 random(随机数) 模块
import random
for i in range(10):
userId=random.randint(0,395)
#用%s格式化字符串
print('第 %s 位获奖用户id是 %s' % (i,userId) )
案例2:pandas数据框(DataFrame)的抽样方法
#导入包
import numpy as np #数组包
import pandas as pd #数据分析包
'''
#arange产生一个含有5*4个元素的一维数组
reshape:将数组转换成5行4列的二维数组
'''
df = pd.DataFrame(np.arange(5 * 4).reshape((5, 4)))
df
#随机选择一个n行的子集
sample1=df.sample(n=3)
sample1
4.什么是中心极限定理?
- 样本平均值约等于总体平均值。
- 不管总体上什么分布,任意一个总体的样本平均值都会围绕在总体的平均值周围,并且呈正态分布。
5.如何用样本估计总体?
样本平均值约等于总体平均值
6.如何在生活、工作、投资中避免偏见?有如下四种偏见的产生:
- 样本偏差:以偏概全,用样本推断总体,样本大小一定要足够大才可以。
- 幸存者偏差:通常关注显而易见的样本,而忽略了不容易出现的样本。也就是忽略了样本被筛选过了。所以在思考问题时一定要从多个角度去看。
- 概率偏见:主观概率和客观概率不吻合。
- 信息茧房:人们的信息领域会习惯性地被自己的兴趣所引导,从而将自己的生活桎梏于像蚕茧一般的“茧房”中的现象。也就是说,随着个性化推荐的发展,我们看见的信息仅是自己感兴趣事情的时候,这样就造成了我们的信息茧房。