Categories
事儿关经济 经济、IT观察与思考

从a/b实验到机制设计、商业决策

本文只代表我自己的不成熟的思考,请勿过度解读。

试想如下两个场景。

  • 场景一:我们做了一个随机试验(random experiment),通过各种实验数据分析我们得出了结论是ATE(平均效果)为1%的提升,对应的p-value是0.09。所以这个东西10%显著,应该推广。
  • 场景二:我是一个风险投资者,我现在有100个项目可以投或者不投,每个项目都有其预期收益和对应的风险。我需要通过各种投资组合实现收益的最大化。

正常的来讲,上面两个场景分属于两个领域:实验分析和金融投资分析。好像之间并没有太大的关系。如果大家做实验分析就知道,大部分paper关心的都是如何得到一个干净的average treatment effect estimate,哪怕是为了降低variance做一些variance和consistency之间的trade-off,我也是在大原则不变的情况下。第二类文献我不是特别熟,但是通过有限的金融投资学的知识,我大概知道做法就是一个线性或者非线性、随机或者非随机(这里的随机是stochastic而不是random)的最优化过程、关注的更多是一些本身不可控的因素。

可是为什么我突然把这两者放在一起?今天突然讨论起type i 和type ii error,然后就不自主的联系到decision making...然后突然间觉得好像有哪里不对...互联网公司大家特别特别的依赖a/b test,一方面是谁也不知道什么是正确的所以索性让数字来说话,另一方面也是有点过度相信统计学的权威、依赖各种统计量和统计模型——我并不是说我们应该剥夺这种权威,而是有的时候好像忘了为什么一开始我们需要引入这样的决策体系。

先说一下我所熟悉的决策体系:做一个a/b test,如果实验结果显著为正(就像大部分field experiment那样),我们就给予实验者相应的奖励(towards business goal)、然后整个铺开。从机制设计的角度,这是一个有效的机制:规则是透明的也是保证正收益的,每个组都在这个机制下play the game是相对公平的。可是这样的机制的缺点是什么...无数的analyst就一夜夜的浪费脑细胞在获得一个可以被认可、又可以最大化自己所属团队贡献的估计量。business side只关心那个估计量的大小,然后公司内部的裁判角色又来审查你这样做是不是统计上正确的。所以many companies end up with a group of data scientists。

可是我们好像忘了一个东西:efficiency。公平是公平了,但是这个机制是效率角度最优的么?从公司的角度,做这么多a/b test实际上就相当于一个投资组合的决策过程:我需要在哪些上面投入更多、哪些上面投入不要这么多。每一种决策都是有风险的,那么既然是一个风险和收益的最优化过程,我就应该计算所有预期收益、成本和量化风险。风险应该是一个连续的度量而不是一个简单如p-value <10%这样1或0的二维决策过程。

所以说到这里,其实当你在做那么多实验的时候,其实那些针对单个实验分析的指标甚至理论什么的就不重要的。每一个都做到极致并不代表整体是最优化的,甚至可能是囚徒困境那般谁都走不出去?suddenly I got very sick talking about type I and type II errors.  I don't think that fits the culture.

大概就是这些,最近脑子里面萦绕的就是这样稀奇古怪的想法...喵。

bottom line

想起来一个joke: statisticians are good at generalizing stuffs (when we talk about statistical tools....the answer is it does not matter! because you should be good at generalization.)

Categories
事儿关经济

羡慕一下这样的人生

计算机、硅谷、创业、董事长、经济学博士、社会改革践行者(而不仅仅是经济学家)。

梁建章
梁建章(James Liang)1969年生于上海,13岁时以“电脑小诗人”闻名,上海复旦大学少年班毕业后赴美国留学,20岁获得乔治亚理工学院电脑系硕士学位。之后在美国硅谷从事技术工作多年,曾任美国Oracle公司中国咨询总监,是信息技术行业的高级管理人才。1999年回国,与3位商业伙伴创建了“携程旅行网”,在2000年之2006年期间任CEO,并从2003年起兼任董事会主席。公司在他的领导下采用了一系列高效和创新性的管理方法,在4年内迅速成为中国最成功的网络公司之一,并于2003年在纳斯达克成功上市。2011年,梁建章获得斯坦福大学经济学博士学位,研究领域包括创新,创业和劳动力市场。他在合著的新书《中国人太多了吗?》中,分析了人口结构改变对中国经济的影响,并全面批评检讨了计划生育政策。现兼任北京大学光华管理学院经济学研究教授。

这才是有意思的人生?羡慕ing。

Bloom, Nicholas, James Liang, John Roberts, and Zhichun Jenny Ying. Does working from home work? Evidence from a Chinese experiment. No. w18871. National Bureau of Economic Research, 2013.

马上就上QJE了呢...

Categories
读书有感

从Variance说起:回归、聚类、残差和方差

前言的废话:有种被统计学洗脑的感觉,跟搞统计的接触的有点太多了吧...哎,算了,难得有点感悟记录一下吧...喵。本文试图以一个典型的统计学的思维过程来叙述,呃,可能功力不足,凑合着看吧,也不枉我连续几天做梦都是直方图 密度曲线 average treatment effect之类的。

-------------------------------------------废话结束了-----------------------------------

Variance这个词很好玩,如果是用在统计的情境中就中文译作方差,公式就是 ,写成列向量(N*1矩阵)的形式就是,1这里是N×1个1的列向量。从公式的形式就可以看出是一个二阶中心距,即距离中心的距离的平方(二阶)和。然后既然是二阶距,那么自然的衡量的就是某个数据集分布的离散情况。越大越散,越小越密。此为一维(这里指只有一个观测维度的情形)相信这样的定义实在是太耳熟能详了。方差有个小弟叫做标准差,就是方差开平方。这个也没啥说的,有意思的是大家习惯用字母来标注他,于是有了著名的六-西格玛原理...好吧,其实最有用的就是正态分布的几个西格玛了(随便偷张图):79f0f736afc37931c22b82ecebc4b74542a911b7.jpg

 

然后我们看简单的二维。二维就是散点图,没什么特别说的。找张著名的散点图来(随便找的,懒得自己去R里面画了。最后还是乖乖的去R里面的画了,还是自己画的好用一些,果然偷懒不容易,唉,我写博客实在是太敬业了!)。

2014-12-27 23_41_46-Plot Zoom

 

背景知识大家可以去自己搜搜,反正就是黄石公园某个自然形成的间歇性喷泉,每次喷发的时间和等待时间的散点图。挺简单的对吧。这个数据点也不多,大家一眼扫过去大概百余个的样子。可是这幅图真的很有意思,跟Variance的联系实在是太紧密了。

我们先来说直觉。如果让你用自然语言(而非统计或者数学公式)来讲述这个图,比如你带这你刚上小学的孩子去黄石公园玩,他好奇的在等待这个喷泉喷发,这个时候你应该怎么跟他讲?嗯,可以大概说一下,“你看基本上呢,你等的时间越久,下一次喷发的时间就越长哦。让我们一起来计时~” 然后小朋友看了一眼图,不服的说到,“什么嘛,明明是等了如果超过一小时(或70分钟),那么下一次基本上喷发时间才会长(4-5分钟)。”。那么到底哪种说法更准确呢?

(吐槽君:自从上次写了乐高机器人之后,落园的段子里面的科普对象就从同学们降低到小朋友了,喵~)

好啦,不跟小朋友玩了,我们得研究一下更fancy一点的方法。说白了就是,用一个什么样的模型可以让经过我们模型处理的Variance尽量的小呢?

嗯,同学们说试试回归呗,明显的正相关性啊。你都说了啊,X的增加Y也在增加(先不要理会因果即X和Y谁先谁后,我们只说相关)。

2014-12-27 23_51_53-Plot Zoom

所以我们虽然得到了一个显著的正相关关系,但是回归模型的R方只有81%(当然已经很好了,只是我们希望更好嘛)。来看看对应的残差分布:

2014-12-27 23_59_10-Plot Zoom残差好像挺散的(最理想的残差就是白噪音了,说明没有任何信息量了),但是隐隐约约也能看出来有两群这样。于是很自然的,有同学说,我们去试试聚类啊。

在去试聚类以前,先说说大名鼎鼎的K-mean算法的一些基石。

上面不是罗嗦了一堆variance在一维情形下的定义嘛,那么推广到二维,也很简单。

定义二维的中心点: ,然后就可以定义二维方差: 每个点到图中心的距离的平方和。看图就知道了。

2014-12-28 00_09_03-Plot Zoom蓝色的就是中心点。这里我们就不罗嗦什么均值容易受极值影响之类的了,那些也是看菜下料的,我们的数据看起来还好。(突然间为什么有种牛郎织女鹊桥相会的即视感...原来古人观星也是有异曲同工之妙呀,天空就是一个大大的散点图——勿喷,我保证下面不跑题了)

 

2014-12-28 00_25_06-Plot Zoom

对于一个线性回归模型来讲,我们看的就是残差项的方差——残差项方差越大,表示他们分布的越散,那模型捕捉到的信息就少。

对于聚类呢,也可以看相应的方差:每个类里面的点到类中心的距离平方和 -> K-means。K-means虽然是通过迭代来实现的,但他的原理大致也是让二维的二阶中心距最小(由每一次迭代的损失函数来决定)。一眼扫过去大概可以分成牛郎织女两堆星星,那么我们就聚两类好了。显然不用跑程序我们也知道,聚成两类之后的组内方差和肯定比直接跟中心点算一个方差要小。

2014-12-28 00_32_00-Plot Zoom聚成两类之后呢,我们类似定义的残差就是两类中每个点距离其中心点的Y轴距离(因为会直接把中心点作为每类的预测值)。还是画个残差图看看。

 

2014-12-28 00_51_13-Plot Zoom红色是K-MEANS给出的残差,蓝色是回归给出的残差。貌似这两个长得还是挺像的,也是左右两群,虽然每群中两者长得都不太一样...这个时候我们就可以回到和小朋友的对话了:你们说的都有道理,都有8成的准确率,谁也没比谁更好很多。

于是我们尝试在每组内再做回归?会有效果么?

2014-12-28 01_01_20-Plot Zoom见效寥寥...引入聚类后回归模型的R方从81%升到了84%,才3个百分点。这主要是在每一类里面,我们很难找到残差的规律了,所以这样只是通过组别信息的增加减少了组间方差,而其实从上图我们也可以看出每个组内的残差方差还是很大的、每条回归拟合线的斜率从最初的10降低到6和4,每个子回归的R方只有10%不到,能给予的信息已经很少了,所以整体模型只是增加了一点点准确性。但是无论如何也比直接玩回归的效果要好(之所以用k-means而不是简单粗暴的用类似x>3.5这样来分成两类,是因为k-means是按照其损失函数优化过的、给出的是最优的两类聚类结果)。

问题来了,为什么我只聚成两类而不是三类五类甚至更多呢?主要是怕过拟合,数据才200多个点,聚太多的话很容易过拟合了。大数据的情况下可以尝试其他办法。

好了,废话了这么多,其实统计学家们已经不仅仅玩这些了。其实我们上面的残差图传达了一个很重要的信息就是残差的分布不是一个白噪声(或者说不是均值为0、方差为常数的正态分布),称之为异方差(Heteroscedasticity)。异方差有很多很多情形,最简单的就是随着X的增加而增加。还是网上随便找了个图:

p109figure异方差的存在使得我们模型的估计(或者基于训练数据预测)精度有限(先不考虑validate- test那些),所以统计建模常年在跟残差项的分布作斗争——反正看到你有什么规律,我就可以提取出来更多的信息放到我的模型中。计量经济学家喜欢说残差项是垃圾桶,但其实也是金矿——没办法呀,资源有限,不能太浪费。

然后是一些补充的废话时间。

Categories
网络新发现

R大神们是这么玩乐高机器人的...

前段时间COS上说Rafael Irizarry用最小二乘法帮小朋友玩乐高,已经觉得很出手不凡了。然后今天直接看到了ev3dev.R这个东西,瞬间觉得整个人都不好了...大家要不要这么geek...71sXXBHsf6L._SL1500_

这种恶意卖萌的对话什么的实在是...总而言之,这货已经开始被进化了...

SER: Tell us more about the R part.
SERATRON: I am running RServe server. PCs can communicate with me using RSclient. They do all the heavy computations for me, I can’t be bothered (I have no FPU, can you imagine?!?). Those PCs think they can command me…

SER: Why do you have two servo motors?
SERATRON: So that I can move, you silly!

SER: Hmm, why do you have an infrared sensor?
SERATRON: So that I can avoid obstacles and I will not fall from height. Why do you have eyes donkey?

SER: Errrrrr, what are your touch sensors for?
SERATRON: They also prevent me from falling from height. If I don’t feel the surface below me I am not going to move. Would you?

SER: Ok, last question you naughty robot! What is your gyroscope and accelerometer for?
SERATRON: Can’t you count? It’s not one question but two. I use gyro to know my heading direction. No dumbass, not for balancing, I don’t use it in this axis. I don’t use accelerometer now but I could use tilt input as a third level protection from falling. I could also use it to detect collisions with other objects but I have other means.

SER: It was a pleasure to meet you (coughs), thank you.
SERATRON: I hope I will be finished for SER VII – 08.12.2014!

SERVIIRobot2

总而言之这货已经可以自我前进、躲避障碍什么的,为嘛我想起来的是我家那个扫地机器人iRobot 380t?

iRobot-Braava_thumb

对了,卖萌视频在此:http://www.r-bloggers.com/interview-with-seratron-lego-ev3-robot-driven-by-r/

Categories
读书有感

R vs Python: data frame和高速数据整理

由于种种的原因,我的feedly里面很多东西很久没看了...今儿抽时间看来一下,貌似是十一月份的热点是dplyr, data.table或者说,data.frame高速操作的各种办法。

http://www.r-bloggers.com/dplyr-and-a-very-basic-benchmark/

这里有有个蛮有意思的比较,抄过来:

base dplyr-df dplyr-dt dplyr-dt-k dt dt-k
Filter筛选 2 1 1 1 1 1
Sort排序 30-60 20-30 1.5-3 [1] 1.5-3 [1]
New column加列 1 1 (6) 4 (6) 4 (4) 1 (4) 1
Aggregation加总 8-100 4-30 4-6 1.5 1.5-5 1
Join合并 >100 4-15 4-6 1.5-2.5 - 1

从base的最基本函数,到dplyr+data.frame, 到dplyr+data.table,到dplyr+data.table+key,挺神奇的...我一直比较依赖的数据整理的包有两个:plyr和data.table,现在终于看到一丝更加有效率的曙光了。顺便作者还和pandas比了一下...这是为了杜绝我多用python的决心么?我一直试图努力的多用一点python,看来越来越不可能了...

pandas data.table
Aggregate 1.5 1
Aggregate (keys/pre-sorted) 0.4 0.2
Join 5.9 -
Join (keys/pre-sorted) 2.1 0.5
Creating keys (sort) 3.7 0.7

话说,谁来进一步搞一下稀疏矩阵啊?我现在对这货比较依赖...