概率抽样方法简介

作者:陆亚男

导语: 抽样作为统计学中非常常用的一种方法,在当前数据化运营的大背景下,被有效得应用在样本不均衡,快速的概念验证等方面,抽样包含概率抽样和非概率抽,本文主要介绍不同的概率抽样方法的核心思想,优缺点以及相关的应用场景。

概率抽样也称为随机抽样,指在总体中排除人的主观因素,给予每一个体一定的抽取机会的抽样。 其特点为,抽取样本具有一定的代表性,可以从调查结果推断总体;概率抽样方法主要分为以下几个类别:

1.简单随机抽样 (Simple sampling)

简单随机抽样也称为单纯随机抽样、纯随机抽样、SRS抽样, 是指从总体N个单位中任意抽取n个单位作为样本,使每个可能的样本被抽中的概率相等的一种抽样方式

(1)场景一:

数据源:例如我现在有一个包含qq的号码包数据集,数据量100万,需要随机抽样1万去做测试

数据源示例:

由于qq号本身的所有数据都是有差异的,不存在周期性的特性,并且是数值型的数据,所以可以采取取模的方式来进行随机抽样,用sql实现的简单示例如下:

select *
from table_a
where mod(qqno,3)=1
limit 10000

(2)场景二:

数据源:例如我现在有一个包含vopenid的号码包数据集,数据量100万,需要随机抽样1万做测试

数据源示例:

核心思想 :由于vopenid不属于数值型数据,我们可以采取为当前的数据源随机生成一个随机序列,再根据序列随机选择指定量级的数据的方式来实现随机抽样

代码实现方式:

方法1:

select  *  from table_a  order by rand() limit 10000;

方法2:

select  * 
from (        
 select table_a.*, cast(rand() * 100000 as int) as rankid
 from  table_a            
 ) table_b
order by rankid limit 10000

rand() 函数产生一个0到1的随机数字,上述两种方式都是使用rand()函数和limit关键字来获取样例数据,只是在实现细节上略有差异

方法3:

SELECT * FROM table_a DISTRIBUTE BY RAND() SORT BY RAND()  LIMIT 10000;

使用DISTRIBUTE和SORT关键字来保证数据是随机分散到mapper和reduce的,order by rand()语句可以获取同样的效果,但是性能没有那么高

简单随机抽样的特点是:每个样本单位被抽中的概率相等,样本的每个单位完全独立,彼此间无一定的关联性和排斥性

2. 系统抽样 (Systematic random sampling)

也称等距抽样。将总体中的所有单位按一定顺序排列,在规定的范围内随机地抽取一个单位作为初始单位,然后按事先规定好的规则确定其他样本单位。先从数字1到k之间随机抽取一个数字r作为初始单位,以后依次取r+k、r+2k……等单位。这种方法操作简便,可提高估计的精度,系统抽样按照具体的实现方式分为以下两种:

(1)无序系统抽样:对总体采用按无关标志的等距抽样,即总体单位的排列顺序和所要研究的标志是无关的,是一种更好的纯随机抽样方式,如现在要调查玩家的充值水平,按照玩家的qq账号的数字串大小进行排列(玩家的qq账号本身与充值水平不存在直接的关系)

数据源:例如现在有个包含vopenid,等级,充值金额三个属性的100万号码包,需要选出1万个测试用户

数据源示例:

代码实现方式:用开窗函数对数据源进行排序,然后用取模这种比较简洁的方式来选取对应的数据,由于要在100万数据中选择1万数据,则数据选择间隔为100,假设从第一个位置开始选取

select qq,level,money
from 
(
select  qq,level,money,row_number()over(order by qq) rn
from table_a
)table_b
where mod(rn,100)=0

(2)有序系统抽样:对总体采用按照有关标志的等距抽样,即总体单位的排列顺序与所要研究的标志有直接的关系,它能使标志值高低不同的单位,均有可能选入样本,从而提高样本的代表性,减小抽样误差,如现在要调查玩家的充值水平,按照玩家的充值金额大小进行排序(玩家的充值金额实际就代表了玩家的充值水平)

数据源同(1)所示

代码的是实现方式 与无序排序的代码基本一致,只是我们是按照充值金额去排序

select qq,level,money
from 
(
select  qq,level,money,row_number()over(order by money) rn
from table_a
)table_b
where mod(rn,100)=0

系统抽样的特点:抽出的单位在总体中分布均匀,且抽出的样本可少于随机抽样,最大的优势在于 经济性

3.分层抽样 (Stratified random sampling)

分层抽样是将抽样单位按某种特征或者某种规划划分为不同的层,然后从不同的层中独立、随机的抽取样本。将个层的样本结合起来,对总体的目标量估计,样本的结构与总体的结构比较相近,从而提高估计的精度,例如现在要调查不同等级的玩家的战力分布情况,数据源包含玩家的等级,vopenid,战力,则需要按照等级将玩家划分到不同的层级中,再从不同层选取指定数量的用户进行分析

数据源:包含 vopenid,level,powerpoint三个关键信息,总数据量100万,需要抽取划分的每个年龄段2000个用户

数据源示例:

代码的实现方式:

 select agemod,vopenid,age,powerpoint
(
select * from 
( 
select age/10 agemod,vopenid,age,powerpoint,cast(rand()*2000 as double) rank_num 
from table_a 
)table_b
distribute by agemod sort by agemod,rank_num desc
)table_c 
where row_number(agemod)<=2000

分层抽样的优缺点:样本的代表性比较好,抽样误差比较小,缺点是抽样手续较简单随机抽样要繁杂

4. 整群抽样 (Cluster sampling)

整群抽样又称聚类抽样,是将总体各单位归并成若干个互不交叉、互不重复的集合,称之为群,然后以群为抽样单位进行单纯随机抽样抽取个体的一种抽样方式。

整群抽样与分层抽样存在直接的差异:(1)分层抽样要求各层之间的差异很大,层内个体或者单元差异小,整群抽样是要求群与群之间的差异小,群体之间的单元差异大;(2)分层抽样的样本是从每个层内抽取若干单元或者个体构成的,而整群抽样则要么是整群抽取,要不整群不被抽取

图示说明如下(蓝色圆形,紫色菱形,蓝色圆柱形代表不同类别的用户):

整群抽样

分层抽样

5.多级抽样 (Multistage sampling)

多级抽样又叫多阶段抽样,是梳理统计的一种。在复杂的,大规模的市场调查中,调查单位不是一次性直接抽取的,而是采取两阶段或者多阶段的方法,先抽取大的单位,在大单位中再选取小的单位,然后再逐层选取的方式,这种抽样方式称为多级抽样

在多级抽样的各个阶段,均可以采取简单随机抽样或者分层抽样,应用场景举例说明,现在需要完成全国大学生人口抽样,可以分为几个阶段进行,首先以省为抽样框,抽取一部分,然后在抽取的省中,再以市为单位进行抽样,抽出若干,然后逐层递进

多级抽样所面临的都是个体数目十分庞大而且分布区域又十分广泛的总体

6.特殊采样方法补充:

在某些分类场景下,如对回流用户和流失用户做逻辑回归时,回流用户中的样本数量极少,而流失用户中样本数量极多,就形成了类不平衡(class-imbalance)的问题

解决类不平衡,可以采用以下两种方案:

(1)过采样:对训练集中样本数量较少的类别(少数类)进行过采样,合成新的样本来环节类不平衡

(2)欠采样:对训练集里面样本数量较多的类别(多数类)进行欠采样,抛弃一些样本来缓解类不平衡的问题

在1~5中介绍的方法都可以用来实现欠采样,而对于过采样,可以采用SMOTE(Synthetic Minority Oversampling Technique)的方法来处理,即合成少数类过采样技术。它是基于随机过采样方法的一种改进方法,基本思想是对少数类的样本进行分析并根据少数类样本人工合成新样本添加到数据集中,合成的策略是对每个少数样本a,从它的最近邻中随机选择一个样本b,然后在a、b的连线上随机选取一个点作为新合成的少数类样本,具体的算法步骤如下:

(1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到k近邻 (2)对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。 (3)对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本。

由于SMOTE算法本身的局限性,存在边缘化和盲目性等问题,很多人纷纷提出了新的改进办法,在一定程度上改进了算法的性能,但还存在许多需要解决的问题,这里只是抛砖引玉,就不再赘述

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器学习算法与Python学习

如何识别图像边缘

图像识别?的搜寻结果 百度百科 [最佳回答]图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。一般工业使用中,采用工业相...

2886
来自专栏数说工作室

最重要的一集 | 【SAS Says·扩展篇】IML:6.作业

咱们的SAS矩阵交互语言IML就要完结了,本文将会用IML编一个回归程序。无论你需要一元的还是多元的回归模型,该程序都能计算出模型的系数、t检验以及t检验的p值...

3348
来自专栏AI研习社

传统算法和深度学习的结合和实践,解读与优化 deepfake

前言 前一段时间用于人物换脸的deepfake火爆了朋友圈,早些时候Cycle GAN就可以轻松完成换脸任务,其实换脸是计算机视觉常见的领域,比如Cycle G...

38812
来自专栏携程技术中心

干货 | 证件全文本OCR技术,了解一下

1403
来自专栏LET

谈谈我对投影的理解

1556
来自专栏企鹅号快讯

Logistic Regression Models分析交互式问答译

本文是一篇关于交互式问答系统中如何通过文本特征工程构建和Logistic Regression判定话题/主题/意图延续还是转换的论文,提供了一条比较好的思路,对...

19610
来自专栏专知

专知主题链路知识推荐#1——马尔科夫链蒙特卡洛采样(附代码)

【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视...

2967
来自专栏机器学习算法与Python学习

机器学习(5)之决策树ID3及Python实现

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 ID3是什么? ID3算法是决策树的...

2695
来自专栏人工智能

Logistic Regression Models分析交互式问答译

本文是一篇关于交互式问答系统中如何通过文本特征工程构建和Logistic Regression判定话题/主题/意图延续还是转换的论文,提供了一条比较好的思路,对...

1788
来自专栏华章科技

最全技术图谱!一文掌握人工智能各大分支技术

在过去的几个月中,我一直在收集有关人工智能的相关资料。随着各种的问题被越来越频繁的提及,我决定整理并分享有关人工智能、神经网络、机器学习、深度学习与大数据的技术...

1033

扫码关注云+社区