重要性采样在抽样预测领域的应用
引言
抽样预测(Sampling)广泛应用于现代生活的各个领域,比如:总统候选人支持率预估、新药物疗效等等。但是马克吐温说,世界上有三种谎言:“谎言,该死的谎言,统计数据。”这是因为抽样预测是一个精密的多步骤实验,众多抽象概念纵横交错。实施过程中的微小错误或者调整都可能会导致结果大相径庭,甚至推导出与实际情况相悖的结论。本文将就如何构造抽样实验、进行抽样并理解抽样结果进行论述,期望帮助读者掌握抽样预测技术。
抽样预测实验往往非常昂贵,一个样本的抽查成本可能成千上万,如何提高样本利用效率长期困扰着实验者。作者也多次碰到样本数量稀缺的困境,利用重要性采样(Importance sampling)技术,在相同样本数量下预测效果得到了显著的提升,变异系数指标降低了数倍。重要性采样是人工智能领域的重要工具。在强化学习领域,它被用于将行为策略(behavior policy)值转化成目标策略(target policy)值。在NLP领域,Bengio and Sénécal利用它去训练统计语言模型(Statistical language modeling)。虽然重要性采样有坚实的理论基础,并在人工智能领域取得了巨大的成功,但是却很少看到它在其他领域的应用。本文将重点阐述如何将重要性采样技术应用于抽样预测领域。
本文主要贡献包含两块:第一详细阐述了抽样预测流程,并对核心概念进行了直观解释。第二是把重要性采样技术引入到抽样预测领域,同时给出了核心步骤代码实现,并通过模拟数据去验证其理论高效性。据作者所知,这是第一篇公开地将重要性采样应用于抽样预测领域的文章。期望这个研究结果能够帮助广大抽样预测实践者最大限度的摆脱样本稀缺困扰,提升抽样预测效率。
内容组织
文章内容组织分为三大部分,第一部分帮助读者去完整理解抽样预测,第二部分对重要性采样进行详细阐述,最后一部分对传统抽样和重要性采样的效果进行对比。
- 文章第一部分会以简单随机抽样为基础,给出抽样预测实验的基本流程,并对核心步骤进行详细解释。在阐述过程中的核心概念,作者将会尽量使用直观的语言去解释,给出必要的理论证明(只关心实施和应用的读者可以忽略此部分)。对于复杂的核心步骤,还将给出Java代码实现。
- 第二部分首先会给出重要性采样高效性的直观解释,给出必要的理论证明(只关心实施和应用的读者可以忽略此部分)。接下来会重点阐述如何进行分布函数构建、样本抽取以及预测值计算。对于核心步骤,文章会给出Java代码实现以及流程图。
- 最后一部分,作者将构造一份模拟数据,分别采用重要性采样以及传统采样方式进行抽样预测,并对预测效果进行对比。证明重要性采样的高效性。
抽样预测解析
抽样预测的目的是通过从某一群体(母体)中抽取部分个体(样本),通过观测样本的属性值,进而对母体的该属性值进行预测。这个定义里面涉及的的核心概念包括:母体、样本、期望值、个体测量值和预测值。我们将通过下面表格举例进行解释:
例子 | 母体 | 样本 | 期望值 | 个体测量值 | 预测值 |
---|---|---|---|---|---|
总统候选人支持率预测 | 所有选民 | 抽取的部分选民 | 候选人真实支持率 | 某个选民样本是否支持该候选人 | 该候选人的支持率预测值 |
产品合格率评估 | 所有该类型产品 | 抽取的部分产品 | 该产品真实合格率 | 某个产品样本是否合格 | 产品的预估合格率 |
国民总收入预估 | 国家所有人口 | 抽取的部分人口 | 国民实际总收入 | 某个人样本的收入 | 人均总收入预估值*国家人口总数 |
某地区家庭汽车总保有量预估 | 该地区所有家庭 | 抽取的部分家庭 | 该地家庭汽车总保有量 | 某个家庭样本汽车保有量 | 家庭汽车保有量预测均值*该地区家庭数量 |
抽样流程及核心概念
简单随机抽样是常见的抽样预测方法,本部分的所有的流程都以简单随机抽样为基础进行讲述。抽样预测的典型实施流程图如下:
具体而言,可以分为四个阶段:
- 确定抽样目标以及母体。
- 抽样
- 确定样本数量;
- 样本抽取,即从母体中随机选取所要求数量的样本。
- 预测值计算
- 对抽取的样本个体进行观测;
- 对所有的个体测量值进行处理,计算“预测值”。
- 给出实验结果。
这个流程从直觉上讲容易理解。比如想要知道随机抛一枚硬币正面朝上的概率,实施步骤如下:
- 目标期望值:随机抛该硬币,正面朝上的概率。母体:该硬币随机抛无限多次。
- 抽样
- 确定对该硬币随机抛多少次,比如100次;
- 实施抛该硬币100次。
- 预测值计算
- 观测每次抛该硬币,是否正面朝上。
- 计算正面朝上的比例,比如正面朝上的比例是49%。
- 给出实验结果。比如随机抛该硬币正面朝上的概率是49%。
预测目标
抽样预测实验往往都是为后续的决策提供支持,所以确定预测目标的前提是了解后续的决策需求。
常见的预测目标有两种形式:点预测和区间预测。有时候实验者只需要一个数值结果,而假定精度满足要求。点预测给出一个数值,比如A候选人的支持率为48%。有时候实验者仅仅是把相关满足一定精度的实验结果呈现出来,让第三方去评估和做决策。区间预测采用置信度和置信区间去表示精度。比如在置信度为0.95的条件下,A候选人的支持率的置信区间是48±1%。
从目标类型上讲,抽样预测常常解决两类型问题:比例问题和总量问题。像总统候选人支持率预测、产品合格率评估等都属于比例预测的例子。国民总收入、某地家庭汽车总保有量等属于总量预测的例子。与比例预测相比,总量预测需要得到母体数量,因为预测总量 = 母体数量 * 预测均值。所以,高精度的总量预测实验的前提是获得比较精确的母体总量。例如,要预测国民总收入,必须知道该国的人口总数。
注意!母体数量的获取可能非常复杂,它的获取方式往往并非通过抽样预测方式得到。所以,本文将不会深入讨论这个问题。并且假定,总量预测的实验者已经通过某种方式获得了母体数量。
点预测
人们经常只关心一个数值预测结果,并基于做决策。比如明天下雨的概率是80%,所以先把雨伞放进包里。抛硬币50次之后,抽样预测实验的结论可以是:正面朝上的概率是0.48。这种形式抽样报告结果称为“点预测”。
有人可能会问:这个预测值可信吗。它的可信度的理论基础来自于大数定律,大数定律说:如果重复实施某个实验,那么某个事件发生的频率会趋近于该事件发生概率的期望值。
接下来一个很自然的问题就是,对于一个平衡的硬币,需要抛多少次才能得到真实结果。如果抛1百次、1万次、1亿次,预测值会不会是0.5呢?不幸的是,如下表所示,随着所抛硬币的次数越多,预测值严格等于0.5的概率会越来越小。实际上,如果抛硬币的次数是奇数,那么预测值永远不会等于0.5。
预测值等于0.5的概率 | |
---|---|
2次 | 0.5 |
10次 | 0.245 |
100次 | 0.08 |
奇数次 | 0 |
置信区间(Confidence interval)
在某种意义上讲,置信区间可以理解为预测误差范围。如果一个预测实验报告为:A候选人的支持率的置信区间是48±1%,那么可以理解其置信区间是47%到49%。
如果置信区间作为结果呈现在预测报告,第三方可以根据置信区间去判断实验的精度。但是在很多时候,控制预测误差本身就是抽样预测实验的目的。置信区间的精度的确定与后续决策相关,比如:
- 需要预测某种试剂的检测准确率,并标示在产品说明书中。如果超过2.5个点的准确率误差会引起大量投诉,那么抽样实验的置信区间范围就必须在5个点以内。
- 需要预测某工业品的合格率,如果已知市场上对合格率一个点敏感。比如每提升一个点,价格就能提升10%。那么合格率抽样预测的置信区间范围应该小于0.5个点。
在有些情况下,不控制预测误差会导致整个实验失去意义,比如如下结论: - 某候选人的当选总统的概率是0-1。
- 某个地区家庭汽车均保有量是0-10辆之间。
这种预测报告没有给出任何有价值的信息。
我们已经接近抽样预测的全貌了,已经明白了:通过大量抽样观测,就能得与期望值在一定误差内的的预测值。但是到底需要多少观测样本呢?
答案非常具有戏剧性:对于某些实验,不做任何抽样就能能得到一定置信区间的预测值。而对于另外一些实验,除非把所有的母体都观测一遍,否则得不到期望置信区间的预测值。为了解决这个困惑,必须要引入置信度的概念。
置信度(Confidence level)
给定期望值的目标置信区间误差范围之后,样本数量真正影响的是置信度。反过来,给定期望值目标置信度之后,样本数量的多少影响着置信区间的误差范围。因为样本数量、置信度和置信区间有着三者相互制约的关系,所以只确定样本数量这一个因素,自然无法唯一确定置信区间误差范围。
有了置信度和置信区间的概念之后,我们就可以给出区间预测结果了。实验报告结论形式可以如下:
- 某城市的人均收入为1w元,该实验的置信度为0.95,其置信区间为0.9w元到1.1w元。
- 某产品的合格率在置信度90%的条件下的置信区间是0.97±0.02。
置信度是一个非常难以理解的概念,很多人把置信度等同于概率。例如对于如下断言:在置信度为0.95的条件下,某种试剂的检测准确率的置信区间是0.92±0.01。有人会把它解释成:该试剂的准确率位于0.92±0.01之间的概率是95%。但是这种理解是错误的。置信度0.95的本质上是说:相同实验重复做100次,每次都会有得到一个预测区间,大概95次的预测区间会包含期望值。而对于单次实验结果,它要么包含期望值,要么不包含期望值,没有任何概率的概念。
总而言之,置信度和置信区间衡量的是抽样预测实验的精度,而不是描述单次抽样实验结果数据的精度。所以实验结果的应该理解为:该数据是通过实施精度为置信度0.95,置信区间误差范围为0.01的实验中得到的。
问题开始变得复杂起来了,样本数量、执行区间和置信度之间究竟是什么样的关系呢?我们将在样本数量确定环节给出。
抽样
抽样分为两个步骤,即:
- 样本数量确定
- 抽取样本
*样本数量确定
大家很容易在网上搜索到一些计算样本数量的工具,那些工具往往只要输入置信度和置信区间范围,就可以自动算出所需样本数量。本小部分下面的内容包含比较多的理论证明,所以对于只关心实施的读者可以忽略本小节后面的内容。
以上讲解告诉我们样本数量会影响置信度和置信区间。要想弄清楚这三者之间的准确的数量关系,就必须要得到预测值和期望值之间的概率分布。遗憾的是,对于大部分抽样实验,我们无法得到。所以我们似乎又走进了死胡同。
它的解决方案是中心极限定理(Central limit theorem),其核心思想是:随着观察样本数量变多,预测值会形成一个以期望值为中心,方差逐渐递减的高斯分布。为了验证这个定理,我们做一个实验,去验证均匀分布的随机变量的和会接近高斯分布。我们从位于0到1之间的均匀分布概率函数U(0,1)中随机抽取1w个点,做成概率直方图显示如下。从图中可以看出,在每个取值点的概率都接近1。
接下来我们考虑来自U(0,1)的10个点的均值变量。我们知道,U(0,1)的期望均值是0.5。按照中心极限定理,10个点均值变量的概率分布会接近以0.5为中心的一个高斯分布。抽样10w个点,对每10个求均值,我们得到1w个均值点,其概率直方图应该会是一个钟形(高斯分布的形状)。其直方图如下,图中红线表示利用中心极限定理计算出来的高斯分布概率曲线。可以看出这两个图的匹配度很高,这个例子验证了中心极限定理的正确性。
具体而言,如果用X表示预测值,μ表示期望值,σ表示期望值的标准差,N表示样本数量。那么中心极限定理断言 Z = ( X − μ ) σ / N Z=\frac{\left ( X-\mu \right )}{\sigma /\sqrt{N}} Z=σ/N(X−μ)会是一个标准高斯分布的随机变量。
如果期望置信区间误差为ε,这意味着|X-μ|<=ε,置信度为γ,这意味着 P r ( Z < N ϵ / σ ) < γ Pr(Z<\sqrt{N}\epsilon/\sigma )<\gamma Pr(Z<