2010年10月25日星期一

FreeWheel isn't sitting in the middle, it is making money

上周跟着FreeWheel的男女老少去清华做校园招聘,CEO想方设法让同学们理解FreeWheel是怎么赚钱的,可是同学们依旧一脸茫然,如同他们走进教室时一样,如同两年前的坐在这里的那些人一样。
PPT上有些图,如同所有公司宣传一样,FW被画在中间,上下左右是各种类型的客户,仿佛天地因FW的存在而运转,仿佛钱从四面八方向FW而来。这种八卦图看多了,同学不禁会想,谁都说自己是中心,到底谁是中心呢?
在我看来,其实大家是在一个N维单位球面上。一共有N个公司。每个公司都是这个球面上的一个点,因此任何两个点之间的距离都相同。但是,由于每个公司都觉得世界是平的,而且看到所有其他公司到自己的距离都相同,所以觉得自己必然巍然中央,所有其他公司落在以自己为中心,半径为1的圆环上。

同学们也觉得世界是平的,而且点特别多,所以觉得应该至多存在一个点,使得所有其他点到这个点的距离相同。这个点就是中心。

争谁最大最牛没意义,争谁是宇宙中心也没意义,挣钱才是真的。

2010年10月23日星期六

没有光驱?死不了的

过去我一直觉得重装系统就必须有光驱,而且得有张光盘带光启,非常神奇。这周买了个小上网本,没有光驱,没有预装操作系统。表示惊讶之后,只好在另外一台能上网的电脑上反复百度,终于用U盘搞定了。参考:http://apps.hi.baidu.com/share/detail/866549

2010年10月14日星期四

基本的蒙特卡洛方法(三)​

基本的蒙特卡洛方法(三)​

根据蒙特卡洛方法得到的样本总是无偏的,即样本期望等于总体期望。实践中,期望相同还不够,还要求方差尽量小。因此方差减小技术是蒙特卡洛方法极重要的一部分。

分层采样(Stratified sampling)

充分利用积分的可加性。

仍然考虑计算广告学中的例子,考察样本空间E=<V, C>,其中V是视频集合,C是城市集合。一个点e=(v, c)表示一个来自视频v且来自城市c的广告请求。

给定E的子集E1,求E1中的广告请求个数。

如何广告请求顺序写在了一个文件里,那我们只好随机采。

如果来自不同城市的请求分别写在不同的文件里,那我们可以每个城市随机采,从而有望减小方差。

方差减小的充要条件可以模糊地形容为:同一个城市的用户看视频的偏好相近。

不证明了,举个小规模的例子:

两个城市,100个视频,每个城市每个视频恰好有一个广告请求,共200个。考虑E1={城市1的视频1到90,城市2的视频1到10}。我们一眼就看出来E1中广告请求有90+10=100个。让我们采两个样本,来估计之。

在全空间上随机采:从200中等概率、有重复地采2个,X个属于E1,则100X是无偏估计。经计算,X的方差是0.5。

分层采:从每个城市各采1个,城市1中采中属于E1的个数是X1,城市2中采中属于E1的个数是X2,则100X=100(X1+X2)是无偏估计。经计算,X的方差是0.18。

控制变量法

也叫借鸡下蛋法,呵呵。

这部分的分析很简洁漂亮,情不自禁地说两句。

假设我们关心随机变量X的期望EX。已知另一个随机变量C的期望EC,而且X和C比较相关。用待定系数法,令随机变量X(b)=X-b(C-EC)。(原书中写成了+b有误!)

显然EX(b)=EX,因此,无论系数b如何取,求EX(b)即可。关键在于,适当选取b使得X(b)的方差尽量小。

varX(b)=varX-2bcov(X,C)+b2varC

中学生都会,这是关于b的抛物线,当b=cov(X,C)/varC时最小,最小值为


神了,这看上去就是白给。其实有很多代价:首先要知道EC,其次还要能算b,这太浪漫了。

举个浪漫的例子吧。考虑100个视频请求,一个广告C要投放在1~60,另一个广告X要投放在1~50。假设C的情况我们了解了,X是新来的,要通过采样估计它的访问量。

先按公式算出来b=5/6。从100个请求中随机采1个,属于广告X投放范围的有X个,属于广告C投放范围的有C个,则X(b)=X-5/6*C+0.5。

X

C

X(b)

概率

0

0

0.5

0.4

0

1

-1/3

0.1

1

0

1.5

0

1
1
2/3
0.5


varX(b)=1/3*0.4+1/9*0.1+1/2*4/9=1/12

varX=1/4






2010年10月7日星期四

协稳的假设有多强?

多元时间序列分析一个特别醒目的概念,就是协稳:若干个时间序列,他们可能每个都不平稳,但是他们的某个线性组合是平稳的。
在计算广告学实践中,我们考虑一个网站的若干视频,每个视频的日访问量序列看作一个时间序列。很少有哪个视频的访问量是平稳序列,因为人们总是喜新厌旧,一个视频刚上线的一段时间内,看的人越来越多,一段时间后,就渐渐地没什么人看了。但是在成熟、稳定的市场(而非快速增长的市场),一个网站的视频日访问总量在较长一段时间内是平稳的,因为随着老视频陆续淡出,不断有新的视频上线,形成协稳的格局。
当然这只是美好的假设。现在让我们来看看这个假设究竟有多强。
假设有N个视频,用N维时间序列X(t)表示。M个网站,用M维时间序列b(t)表示。假设视频和网站的多对多关系用M*N的0-1矩阵A表示:即A[i][j]=1当且仅当视频j出现在网站i上。于是有下列线性方程组:A*X(t)=b(t)
模型假设说每个网站的流量都平稳,也就是A*EX(t)=Eb(t)=b。考虑方程组AX=b的非负数解,下面简称解。
当方程组无解时,说明"每个网站的流量都平稳"的假设不成立。
当方程组解存在唯一时,X(t)也平稳,这是退化的情形,即所有视频的流量都平稳,这在现实世界很难发生。
当方程组解存在且不唯一时,才是模型假设的经典情形,即若干非平稳序列的线性组合平稳,由线性代数知识可知,此时A的行秩小于N是必要的。

2010年10月3日星期日

修改App Engine上的cronjob

以前用Windows的时候用Java+Eclipse写了一个免费收短信的工具,每天两条,一个天气预报,一个每日英语。
最近觉得每天发的那个每日英语内容没什么意思,决定取消掉。可是已经换了电脑,Eclipse一键部署的功能没有了。
全新的Ubuntu下,下载了一个Python的App Engine SDK,唯一的目的就是停掉发每日英语的cronjob。
原本担心:
1. 没有代码树如何提交?
2. 当时部署的是Java的环境,现在如何用Python工具修改?
实践发现:
只需要建一个目录a,下面放两个文件:
空白的应用程序配置文件
app.yaml
application: freewheel-sms
version: 2
runtime: python
api_version: 1

handlers:
- url: /
  static_dir: /

和新的cronjob配置文件
cron.yaml
cron:
- description: daily_weather
  url: /routine
  schedule: every day 21:02
  timezone: Asia/Shanghai

然后执行
python appcfg.py update_cron a

即可
这个部署脚本特别单纯,不管代码diff,也不管原来部署的运行时语言,只管更新cronjob

2010年10月2日星期六

How to use VPN in Ubuntu 10.4

参考
http://www.mcmaster.ca/uts/network/vpn/vpnclient_linux.html
http://www.lamnk.com/blog/vpn/how-to-install-cisco-vpn-client-on-ubuntu-jaunty-jackalope-and-karmic-koala-64-bit/
步骤
第一步:下载并解压
http://www.mcmaster.ca//uts/network/software/vpnclient-linux-x86_64-4.8.02.0030-k9.tar.gz
第二步:打补丁de关键三句话

wget http://lamnk.com/download/vpnclient-linux-2.6.31-final.diff

patch < ./vpnclient-linux-2.6.31-final.diff

sudo sed -i 's/const\ struct\ net_device_ops\ \*netdev_ops;/struct\ net_device_ops\ \*netdev_ops;/' `find /usr/src -name netdevice.h`

第三步:安装
sudo ./vpn_install
sudo /etc/init.d/vpnclient_init start


第四步:配置并运行
把你公司的ABCD.pcf复制到
/etc/opt/cisco-vpnclient/Profiles
然后就可以运行了
vpnclient connect ABCD

我的测试环境:
Linux version 2.6.32-21-generic (buildd@rothera) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010