检验样本是否服从泊松分布
本文以一个订单数据为例,研究顾客购买次数的分布规律,尝试从中估计总体的分布,以对后续的订单数据进行预测或进行业绩的对比。
# 环境准备
import numpy as np
import pandas as pd
import scipy.stats as stats
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']
一、数据预处理
df = pd.read_csv('orders.csv')
df.info()
df.head()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8568 entries, 0 to 8567
Data columns (total 2 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 customerId 8568 non-null int64 1 orderDate 8568 non-null object
dtypes: int64(1), object(1)
memory usage: 134.0+ KB
customerId | orderDate | |
---|---|---|
0 | 590 | 2010-10-13 |
1 | 543 | 2012-02-20 |
2 | 557 | 2011-07-15 |
3 | 557 | 2011-07-15 |
4 | 557 | 2011-07-15 |
可以看到订单日期字段是 object 对象,这里就是字符串。因此要先将其转化成 pandas 中的 DataTime 对象,然后再添加年份字段方便后续的分组聚合运算。
df.orderDate = df.orderDate.astype('datetime64')
df['year'] = df.orderDate.map(lambda dt: dt.year)
df.head()
customerId | orderDate | year | |
---|---|---|---|
0 | 590 | 2010-10-13 00:00:00 | 2010 |
1 | 543 | 2012-02-20 00:00:00 | 2012 |
2 | 557 | 2011-07-15 00:00:00 | 2011 |
3 | 557 | 2011-07-15 00:00:00 | 2011 |
4 | 557 | 2011-07-15 00:00:00 | 2011 |
二、变量分析
首先通过数据透视表,查看不同年份的购买次数分布。然后再查看单个顾客累计购买次数分布。
counts = pd.pivot_table(df, values='orderDate', index=['customerId'], columns=['year'], aggfunc='count'
).fillna(0).astype(int)
counts['all'] = counts.sum(axis=1)
df.head()
customerId | 2009 | 2010 | 2011 | 2012 | all |
---|---|---|---|---|---|
1 | 4 | 0 | 4 | 0 | 8 |
2 | 7 | 4 | 5 | 0 | 16 |
3 | 5 | 4 | 3 | 4 | 16 |
4 | 2 | 8 | 3 | 14 | 27 |
5 | 0 | 3 | 1 | 2 | 6 |
plt.figure(figsize=(12,5))
counts.plot(kind='box')
plt.figure(figsize=(12,5))
plt.subplot(121)
plt.hist(counts.sum(axis=1), bins=30)
plt.xlabel('times'); plt.ylabel('counts')plt.subplot(122)
counts.sum(axis=1).plot(kind='kde')
plt.xlim(-2,125); plt.ylim(0,0.04); plt.xlabel('times')
三、总体分布估计
根据预览的分布密度,并且由其统计学意义,猜测购买次数近似服从泊松分布。下面进行验证。
# 计算分布参数
lambda_ = counts.drop('all', axis=1).sum(axis=1).mean()
# 分布密度函数
def poisson(k, lambda_=lambda_):return np.e**(-lambda_) * lambda_**k / np.math.factorial(k)
# 计算总体分布
predict = [poisson(k) for k in range(60)]# 可视化每个年份以及汇总的分布密度,与理想的总体分布进行对比
plt.figure(figsize=(12,5))
counts.drop('all', axis=1).plot(kind='kde', linestyle='--', linewidth=1)
counts['all'].plot(kind='kde', linewidth=1, color='lightblue', label='总和')
# 理想泊松分布:
plt.plot(range(60), predict, linewidth=1, color='green', label='泊松分布密度')
# 模拟的泊松分布:
test = pd.Series([stats.poisson.rvs(lambda_) for i in range(10000)])
test.plot(kind='kde', linewidth=1, linestyle='--', color='red', label='模拟的分布密度')
plt.legend(); plt.xlim(-5, 45)
四、结论与分析
由上图可以看到,首先总和的分布与理想的分布有差异,并且均值与时间跨度有关。具体表现为,一年内的次数分布,对比四年总和的次数分布,均值明显更小,集中趋势也更加显著。由于泊松分布为二项分布的极限分布,可以理解为,时间跨度影响了二项分布中的 n 参数,进而影响泊松分布中的 lambda 参数,亦即总体均值。因此结论得出的是,样本所在总体并不服从泊松分布,但是有明显的类似泊松分布的规律,由于其它未知变量的影响产生了偏移。
另外需要注意到,泊松分布的统计学解释认为每次抽样的条件相同。对应本例中的数据,即每次抽样中,其某个特定时间段(时间点)内购买的概率相同。但是由于数据中每个观测值来自不同的客户,因此不能保证这一点。
阅读原文
Fork Notebook
检验样本是否服从泊松分布相关推荐
- 检验样本是否服从正态分布,处理偏态分布
在数据分析中如果某个数据服从正态分布的话,我们可以利用正态分布的性质做出很多有意义的分析,例如t-检验.. 如何检验样本是否服从正态分布? 可以使用Q-Q图来进行检验,Q-Q图是一个散点图,点(x, ...
- KS检验样本测试集和训练集分布问题
最初引入KS检验的原因:用SVM 做分类问题时,发现在测试集上跑出来的准确率等参数比在训练集高许多,经过分析,推断可能是由于训练集和测试集上的数据分布情况不一致.所以想通过KS检验一下数据分布情况. ...
- 利用q-q plot检验样本数据分布
利用q-q plot检验样本数据分布 什么是q-q plot 举例 检测正态分布(Normal distribution) 检测均匀分布(uniform distribution) 参考文献 什么是q ...
- java泊松分布_Java中利用Math.random()产生服从泊松分布的随机数
众所周知.Java的Math.random()产生的是服从均匀分布的随机数,可是其它分布的应用也相当广泛,比如泊松分布和高斯分布(正态分布).而这些分布Java没有非常好的提供(高斯分布能够利用Ran ...
- R语言检验样本比例:使用prop.test函数执行单样本比例检验计算总体中成功样本比例p值的置信区间
R语言检验样本比例:使用prop.test函数执行单样本比例检验计算总体中成功样本比例p值的置信区间 目录
- R语言检验样本是否符合正态性(检验样本是否来自一个正态分布总体):shapiro.test函数检验样本是否符合正态分布(normality test)
R语言检验样本是否符合正态性(检验样本是否来自一个正态分布总体):shapiro.test函数检验样本是否符合正态分布(normality test) 目录
- R语言检验样本是否符合正态性(检验样本是否来自一个正态分布总体):使用nortest包的sf.test函数检验样本是否符合正态分布(normality test)
R语言检验样本是否符合正态性(检验样本是否来自一个正态分布总体):使用nortest包的sf.test函数检验样本是否符合正态分布(normality test) 目录
- python正态性检验:检验数据是否服从正态分布
文章目录 夏皮罗一威尔克检验法(Shapiro-Wilk test) kstest see also 推荐两种检验方法:1.夏皮罗一威尔克检验法(Shapiro-Wilk test):2.kstest ...
- python KS检验:检验数据是否服从指定分布;或两份数据源于同一分布
KS检验 原假设:两份数据源于同一分布 拒绝假设:两份数据源于不同的分布 一般当p值低于0.01或0.05时,拒绝原假设,即认为两份数据源于不同的分布. 双样本KS检验 from scipy.stat ...
- MATLAB利用QQ图检验总体是否服从多维正态分布
文章目录 问题提出 数据 问题的求解 数据预处理 编写程序求解 问题提出 考查鸢尾属植物中两个不同品种的花的如下四个形状指标:X1X_1X1 位萼片长度:X2X_2X2 位萼片宽度:X3X_3X3 ...
最新文章
- 1.7 matlab矩阵元素的引用(可通过下标和序号引用)
- Java面试总结(2018 - 12 - 10)
- [COCI 2018#5]Parametriziran
- java arraylist string_在Java ArrayList String中使用contains
- linux操作系统分析 课程,《Linux操作系统》课程的现状与分析
- 2020广西师范大学计算机学院调剂,2020广西师范大学计算机视觉与应用接收考研调剂...
- CentOS6.5 安装ORACLE 安装界面乱码解决方案
- 富士康欲进军电动汽车市场 目标占据市场10%份额
- mysql java教程_mysql总结
- JAVA模板模式,简历模板(例子)
- 思科交换机设置端口 trunk 模式报错
- 超简单的—CSDN去水印方法——实用小技巧分享(01)
- Linux修改配置文件(自动)
- 语音识别(ASR)论文优选:关注语音识别系统Fairness问题Towards Measuring Fairness in Speech Recognition
- Win10睡眠唤醒后显示网络电缆被拔出怎么办
- English 900
- Python 实现哥德巴赫猜想
- Franka Emika Panda连接真实机械臂(一)
- 新增收货地址【项目 商城】
- UIAppearance定制UI元素
热门文章
- 用数组统计字符串中26个大写字母的个数
- pod中mysql配置文件修改_Pod中的secret,configmap,downwardapi的使用记录
- 视频压缩大小怎么做?压缩视频用这3个工具准没错!
- Liunx下Intel无线网卡驱动安装
- spring中AutoWired/Quafifier/Primary及相关注解知识
- 脚本小子进阶笔记1-windows基础
- ROS 入门基础(四)自定义话题, publisher和Subscriber
- HTML实例—以一个简单网页为例
- Torch常用函数详解
- linux持续测试ip端口延迟,Linux下使用nping测试TCP\UDP延迟