adaboost

使用机器学习方法解决问题时,有较多模型可供选择。 一般的思路是先根据数据的特点,快速尝试某种模型,选定某种模型后, 再进行模型参数的选择(当然时间允许的话,可以对模型和参数进行双向选择)
因为不同的模型具有不同的特点, 所以有时也会将多个模型进行组合,以发挥‘三个臭皮匠顶一个诸葛亮的作用’, 这样的思路, 反应在模型中,主要有两种思路: Bagging和Boosting
Bagging
Bagging 可以看成是一种圆桌会议, 或是投票选举的形式,其中的思想是:‘群众的眼光是雪亮的’,可以训练多个模型,之后将这些模型进行加权组合,一般这类方法的效果,都会好于单个模型的效果。 在实践中, 在特征一定的情况下,大家总是使用Bagging的思想去提升效果。 例如kaggle上的问题解决,因为大家获得的数据都是一样的,特别是有些数据已经过预处理。
以下为Data Mining Concepts and Techniques 2nd 中的伪代码
基本的思路比较简单,就是:训练时,使用replacement的sampling方法, sampling一部分训练数据k次并训练k个模型;预测时,使用k个模型,如果为分类,则让k个模型均进行分类并选择出现次数最多的类(每个类出现的次数占比可以视为置信度);如为回归,则为各类器返回的结果的平均值。
在该处,Bagging算法可以认为每个分类器的权重都一样。
Boosting
在Bagging方法中,我们假设每个训练样本的权重都是一致的; 而Boosting算法则更加关注错分的样本,越是容易错分的样本,约要花更多精力去关注。对应到数据中,就是该数据对模型的权重越大,后续的模型就越要拼命将这些经常分错的样本分正确。 最后训练出来的模型也有不同权重,所以boosting更像是会整,级别高,权威的医师的话语权就重些。
以下为Data Mining Concepts and Techniques 2nd 中adaboost伪代码:
训练时:先初始化每个训练样本的权重相等为1/d  d为样本数量; 之后每次使用一部分训练样本去训练弱分类器,且只保留错误率小于0.5的弱分类器,对于分对的训练样本,将其权重 调整为 error(Mi)/(1-error(Mi)) ,其中error(Mi)为第i个弱分类器的错误率(降低正确分类的样本的权重,相当于增加分错样本的权重);
与测试:每个弱分类器均给出自己的预测结果,且弱分类器的权重为log(1-error(Mi))/error(Mi) ) 权重最高的类别,即为最终预测结果。
在adaboost中,  弱分类器的个数的设计可以有多种方式,例如最简单的就是使用一维特征的树作为弱分类器。
adaboost在一定弱分类器数量控制下,速度较快,且效果还不错。
我们在实际应用中使用adaboost对输入关键词和推荐候选关键词进行相关性判断。随着新的模型方法的出现, adaboost效果已经稍显逊色,我们在同一数据集下,实验了GBDT和adaboost,在保证召回基本不变的情况下,简单调参后的Random Forest准确率居然比adaboost高5个点以上,效果令人吃惊。。。。
Bagging和Boosting都可以视为比较传统的集成学习思路。 现在常用的Random Forest,GBDT,GBRank其实都是更加精细化,效果更好的方法。 后续会有更加详细的内容专门介绍。
参考内容:
Data Mining Concepts and Techniques 2nd
Soft Margin for Adaboost
也可关注我的微博: weibo.com/dustinsea
或是直接访问: http://semocean.com

分类模型在关键词推荐系统中的应用

以下内容均基于百度关键词推荐系统进行讨论
本文内容主要集中在使用机器学习方法判断两个短文本的相关性为基础构建商业关键词推荐系统。 为方便读者理解, 会先介绍该技术的具体应用背景及场景。
广告主在百度或google上进行广告投放时, 需要选择关键词, 以向搜索引擎表述自己想要覆盖的有商业价值的网民搜索流量。 在选择关键词后, 还需要设定具体的关键词匹配模式, 以告诉搜索引擎选择的关键词以何种方式去匹配网民的搜索。 举个例子: 网民在百度上搜索 ‘鲜花快送’, 假设商家A是卖花的, 搞鲜花速递业务的, 则A可以在百度凤巢系统中选择‘鲜花快送’这个关键词,同时设定匹配模式为精确匹配(即网民搜索和A在凤巢系统中选择的关键词完全一致时才出A的广告, 更多细节参见:http://yingxiao.baidu.com/), 假设B在凤巢中未选择‘鲜花快递’, 但选择了‘鲜花速递’, 假设B选择了广泛匹配(语义近似即匹配,具体参见http://yingxiao.baidu.com/), 则B的广告也会被触发(具体是否会展现, 还和出价, 质量度等诸多因素有关)
此时会面临一个问题: 广告主在凤巢系统中选择关键词时, 仅凭自己去想, 很难完全想到所有符合自己需求的关键词(网民的搜索query千奇百怪), 故需要提供工具, 帮助凤巢客户快速找到和自己推广意图一致或相近的关键词,即: 关键词推荐工具。
从交互上来看,可以将关键词工具看成一个搜索引擎,凤巢客户输入一个种子词(种子query),返回一个和种子query意图相近的推荐词list。
当然作为推荐系统, 其中还会包括属性披露, 推荐理由, 关键词行业分类, 关键词自动分组等支持, 这些内容会在接下来的其他博文进行介绍。
整个推荐流程大致如下
整个推荐流程, 大致分为5步:
  1. 基础日志,数据清洗即预处理
  2. 候选词触发: 根据输入种子query触发得到系统性能支持的最大关键词候选(供后续流程进行筛选过滤及排序),当然为保证性能, 该过程中会保留触发关键词的各种基础属性,例如PV, 行业, 主题等; 一般业界的检索,推荐系统会有较多触发逻辑逻辑,故触发出的关键词会比较多
  3. 相关性过滤:因为触发出的推荐关键词较多,故需要判断推荐关键词与种子query的相关性;既要保证召回,又需要保证准确性。
  4. ranking
  5. 使用业务,商业规则对最终结果进行排序调整及过滤(最经典的, 黄赌毒必须过滤删除)
对于相关性过滤,很早以前我们也是使用规则进行过滤,但随着规则数量的急剧增加,一方面导致系统架构性能下降,另外一方面也使系统策略越难约维护,故最终决定使用机器学习方法进行相关性过滤。
涉及到机器学习方法解决问题, 就会涉及到3方面的问题: 用哪些数据,准备哪些数据,如何处理数据? 使用哪些特征? 选用何种model ?
数据
一般来说,如果数据选择有问题, 那基本可以说后边无论再做多少努力, 这些努力都会付诸东流, 公司里这样的机器学习相关的项目也不少见: 几个人全情投入几个月或是1年多,效果总提不上去,回过头来发现数据就有问题,哭都没有眼泪。
所以一开始我们选择数据就比较慎重,还好关键词推荐工具隐性和显性反馈数据都还算比较丰富(推荐系统中都需要有这些信息, 将整个数据流形成完整的迭代闭环): 我们可以认为用户输入一个query并选择了这个query返回的某个候选推荐词的pair,就是一个正例(即模型是判断是否相关,相关为正例,不相关为),而输入一个query后,用户将返回的某个词放入垃圾箱(关键词工具交互上支持该操作),则query及被放入垃圾箱的关键词组成的pair,即为负例。
获得数据后, 很快就发现一个问题: 客户操作得到的正例, 就是毫无疑问的正例;但用户的负反馈(用户使用种子query搜索得到返回结果后,被扔入垃圾箱的的case)很多时候并不一定和query不相关, 甚至是很相关,只是因为用户个性化的原因导致客户认为这个case 不适合自己。
比如: 一个客户主要卖各种花茶, 像菊花茶, 桂花茶等,但他不卖茉莉花茶,此时如果用户输入花茶, 从相关性来说, 推荐‘菊花茶’,‘茉莉花茶’, ‘桂花茶’其实都是OK的,但用户将‘茉莉花茶’放入垃圾箱,因为他不卖该产品。其实并不能说明花茶和茉莉花茶不相关。
为了消除因个性化带来的负例不准的情况,我们人工标注了1.5W非个性化的负例。 并进行随机sampling, 使正负例数量基本相当。
最终使用1/10数据作为测试样本,9/10作为训练样本。
特征
数据准备就绪后,下一步就是如何选择合适的特征了。 因为整个关键词推荐系统所能触发的关键词各式各样, 各种类型千奇百怪, 所以如果直接使用各种地位特征(例如字面,或是ID类)的话,会导致特征空间较大而数据比较稀疏,导致完成分类基本上变成不可能完成的任务; 所以我们不能直接使用字面, ID作为特征进行分类,而是要使用更加泛化,高维的特征。
在特征选择过程中,我们也充分贯彻了站在巨人的肩膀上远眺的方式,充分利用手头的资源,例如短串核心判断,同意变化扩展等基础工具进行特征设计。更详细的特征此处不便于列出,仅列出两个有代表性的特征供大家参考。
  1. 推荐词与种子query经过切词后的相同term的长度之和与种子query经过切词后的term的长度之和的比值;类型为double类型。
  2. 推荐词基本切词后切词顺序包含 query, 特征值为1,默认值为0;类型为double类型。
  3. 推荐词,种子query的topic向量相似度。
  4. 。。。。更多高维特征。。。。。
利用多个类似的高维特征,就能很好地覆盖推荐词与种子query; 当然特征的设计会直接影响关键词推荐中相关性的定义,例如如果字面(重合)相关特征较多, 则推荐主要表现为字面相关,如特征主要为语义特征, 则推荐结果反映为语义相关。如果特征中有用户的历史行为信息特征(例如用户已经选择的关键词),则可以认为相关性模型就已经实现了个性化处理。
 模型
很多项目因为周期比较赶, 所以小步快跑的起步阶段并没有太多时间去做模型和参数的双向搜索,所以综合效率和时间的代价,选择了部分模型及在经验参数下的效果,进行模型的初选。
最终综合考虑性能,准确性和召回诸多因素下,选择了adaboost,在adaboost ratio 和 弱分类器数量上进行了参数实验。 准确性/召回 效果如下:
具体adaboost算法参见: adaboost介绍
WLRatio 300 500 1000 1500
0 0.87/0.89 0.87/0.91 0.87/0.9 0.86/0.91
-0.1 0.81/0.95 0.79/0.96 0.8/0.96 0.8/0.97
-0.2 0.74/0.98 0.73/0.98 0.73/0.98 0.73/0.98
-0.3 0.66/0.99 0.64/1 0.65/1 0.64/1
评估
以上内容均属于线下模型优化部分,所有的指标均可以线下获得, 但最终需要用线上的效果说话, 最后说服力的, 还是线上A/B Test, 因为是后台策略的升级, 故这样的实验在成熟的A/B test框架下比较容易做; 线上实验的最终效果也比较符合预期, 保证准确性的情况下召回大为提升(此处就不贴具体数值)
后文:后来将adaboost直接替换为Random Forest,在未改变模型的基础上效果立刻提升非常多,可见模型选择也较为重要。
参考文献:
百度凤巢关键词工具: www2.baidu.com
Data.Mining.Concepts.and.Techniques.2nd.Ed
也可关注微博: weibo.com
或是直接访问: http://semocean.com

使用impurity选择树模型拆分节点

在近期的项目中经常会使用到连续值模型以提升模型效果。 例如在项目初期, 训练数据准备OK后,就会使用原有的LR模型初步训练model看实际的效果, 同时因为连续值模型, 特别是树类模型已经在其他项目中应用并取得较好的效果, 所以我们也会将离散特征进行变换处理后, 使用GBDT, RF看下实际效果。
虽然GBDT, RF都有现成的model训练环境,直接用就可以,在项目过程中还是顺便复习了一下与树类模型相关的impurity度量标准;就像侯捷在《STL源码剖析》中说的,开飞机的人不一定需要了解飞机的原理,但参观飞机制造厂也是一种乐趣。
常用的使用impurity选择树模型拆分节点的度量有以下几类,他们都来自于信息论:
  1. Information Gain
  2. Gain Ratio
  3. Gini Index
以上三种根据impurity进行拆分的度量方式各有优缺点, 一下具体介绍
Information Gain
首先要定义概念熵(entropy)可以理解为定义一个分布的信息量, 具体定义如下:
其中D为数据集合, pi为第i类在数据中出现的概率。之所以使用以2为底的对数, 是因为我们默认使用bit进行编码。而该处的info/entropy即描述分布不纯的程度。 而我们可以将树模型看成是对接点进行分裂, 之后根据拆分条件节点的建立使整棵树的叶子节点尽快达到较纯的状态。
假设现在有A,B,C作为拆分feature的候选,且假设我们选择使用featureA进行拆分, 则拆分后的信息为:
其中A为选择的feature,Dj为feature A的值为j的集合,而Information Gain,即表示在原分布上,确定待拆分的feature A 后, 所带来的信息增益(减少的信息量), 拆分时使用贪心算法, 信息减少量越多越好。故:
每次拆分时,贪心地选择Gain最大的feature A进行拆分即可。
最经典的Decision Tree算法ID3中即使用Information Gain作为节点拆分的标准。ID3算法具体描述参见:http://link.springer.com/article/10.1023/A:1022643204877
Gain Ratio
Information Gain在节点拆分时是有倾向的, 倾向于拆分属性值较多的feature,一个极端的例子,假设feature是具体的ID值,即每条instance的ID值都唯一,则对该feature进行一次拆分后,则每个节点都达到纯的状态,Information Gain值最大。为了解决该问题,在ID3的升级版Decision Tree中引入另外的拆分标准,Gain Ratio。
定义:
因为某feature的属性值越多, SplitInfo就会越大,故可以使用SplitInfo在一定程度上消除Information Gain倾向于多属性feature的偏好。 具体Gain Ratio如下:
在此:属性值越多Gain越大,但SplitInfo也会越大,这样就中合了Information Gain带来的偏向。
P.S. 做策略算法中,类似的操作都是互通的,例如在推荐引擎中,用户打分可能偏好不一样,有些习惯打高分,有些习惯打低分,则我们可以使用打分的均值去中和这种偏差;而有些人打分分值比较集中,有些人则分布比较广泛,则我们可以使用z-score,即处于标准差去一定程度上消除这种分布。
Gini Index
Gini Index在CART(Classify and Regression Tree)中使用,定义:
其中D为数据集, pi为类Ci在D中出现的概率, 可以直接使用|Dci|/|D|预估。
假设我们在feature A上进行拆分, 并且是进行二分类拆分,拆分得到D1,D2数据集
则拆分后的Gini Index如上。
同样, 我们使用Gini稀疏的减少量选择拆分的feature。
这里需要注意,CART中仅进行二分拆分,如果A为多属性, 则需要转化为二分类拆分。
细心的同学可能会发现,除了gini和entropy的定义不一样外,其余的计算Gain的方式都是相似的
reference:
induction to decision tree,  J,R,Quinlan
Data Ming: Concepts and Techniques
 也可关注微博: weibo.com/dustinsea
或是直接访问: http://semocean.com

经典聚类算法及在互联网的应用

此处并不会列举每一种聚类(Clustering)算法,因为学术界Clustering算法如果真要细分,还真有很多变种。此处只会介绍几种在我近几年互联网工作生涯中实际碰到的具体问题, 以及如何使用Clustering算法解决这些问题。
一般来说,我们可以将Clustering认为是将出现的数据进行Data Segmentation,也就是经常说的哲理: 物以类聚。 从机器学习的观点来看, Clustering算是Unsupervised Learning,或者叫做Learning by Observation,根据观察到的情况进行Clustering。 因为形成簇的数据都被聚到一起,所以Clustering 方法也可以用来发现噪音或是异常点。
Clustering 算法大致可以分为以下几类(参见Data Mining Concepts and Techniques):
  1. Partitioning Methods:这是一类经典的,最简单的聚类方式,就是直接按照类内的点距离最近,类间距离足够远的原则进行数据Clustering。该类方法比较经典的方法有K-Means 和K-Medoids。下文中会以广告分段问题来具体介绍K-Means的实现(K-Medoids类似)
  2. Hierachical Methods:层次Clustering算法,又大致分为bottom-up和top-down两种思路,bottom-up为自底向上,逐渐合并离得比较近的类以形成更大的类,top-down为一种divisive的思路,逐渐对离得比较远的类进行分裂。下文中会以如何合并搜索引擎中的同意,近义词词形成簇的的方式具体介绍bottom-up hierachical methods。
  3. Density-based Methods:以上两种方法基本上都是在高维空间中将数据聚成球形的多个类的方法,却不能处理非球形的聚类,Density-based Methods就是解决非球形数据的聚类方法。
  4. Model-based Methods:对数据进行建模,之后使用观察到的数据预估模型参数,比较经典的使用EM方法,先假设数据服从某种分布(例如k个高斯分布),并且这k个高斯分布由一系列隐随机变量决定。之后在E步预估这些隐随机变量,而在M步固定这些隐随机变量后,使用最大似然估计迭代得到最优参数。
文章以下内容将介绍3种聚类方法解决3个问题:
  1. 使用K-Means方法对广告受众网民进行Data Segmentation。
  2. 使用Bottom Up Hierachical Clustering方法对搜索引擎query进行聚类以进行流量推荐。
  3. 使用EM方式寻找数据中的隐藏主体。
 使用K-Means方法对广告受众网民进行Data Segmentation
K-Means是一种球形的聚类,在二维空间中,类别会被聚成以圆心为中心的圆,三维空间中则会被聚成以球心为中心的球状簇(当然,这与选择的相似度度量有关,例如使用cosine计算归一化后的两个向量长度,就会变成计算二向量的夹角)
在K-Means算法运行前,有两个因素比较重要: 数据预处理和距离度量方法。具体距离度量参见博文相似度度量 ,数据预处理则包括数据归一化, 去除噪音等操作。
因为K-Means算法本身较为简单,此处直接给出Andrew Ng机器学习公开课教案中的伪代码:
其中uj为第j个簇的中心点,ci为第i条数据的簇类别。基本步骤就是遍历数据,每一轮迭代,先计算当前数据与哪个类中心最近,该条数据属于距离最近的簇,之后根据新计算出来的每条数据的类别,更新类中心。下图给出在指定数据上给出2个类的4轮迭代情况:
使用distortion function度量分类的好坏情况, distortion 越小越好,当然,一般distortion大小需要和类别 k 的数量间进行权衡。
应用: 虽然k-means堪称最简单的算法,但之前在实习时,在前东家还是用了一把,应用场景是使用MSN用户的注册信息(年龄,喜好,性别),以及MSN用户在 msn.com上经常访问的导航类别,搜索关键词等数据,使用决策树选出区分度较大的特征构成特征向量,使用L1-Norm进行归一化后,对特征向量进行Clustering。之后按Clustering向广告主售卖这些用户的pv。 该模式的优势是具有一定的兴趣定向作用。
右侧即为MSN展示广告。当然,该方法已经是2007年所使用的方法,现在相信MS已经使用更精准的方法了 。
该过程中尝试较多的是如何选择合适的类别数量k值,以及如何初始化初始类中心。当时迫于项目进度,k值最后根据经验并进行了粗略的搜索选择,初始类中心则使用在相同k值得情况下进行多次随机初始化Clustering
使用Bottom Up Hierachical Clustering方法对搜索引擎query进行聚类以进行流量推荐
例如在搜索引擎中, 很多网民的query意图的比较类似的,对这些query进行聚类,一方面可以使用类内部的词进行关键词推荐; 另一方面, 如果聚类过程实现自动化, 则也有助于新话题的发现;同时还有助于减少存储空间等。
例如:
训龙记国语  训龙记2 寻龙记  训龙记博克岛的骑手  驯龙记电影
骂人大全    骂人不带脏字的顺口溜    骂人带脏字越毒越好  骂人脏字的狠话
要设计层次聚类,就需要考虑一下几个因素及环节:
  1. 使用何种聚类算法: top-down 还是bottom-up 还是其他
  2. clusting的合并策略
  3. 使用哪些特征
  4. 如何度量距离
  5. 使用何种评估标准对效果进行评估
确定以上5个因素后,聚类算法也就确定了。
聚类算法:考虑到实现的复杂度, 一开始我们就确定使用bottom-up的方式作为聚类策略;后续也就没有尝试top-down的方式。
clusting的合并策略:
一般有两类合并策略: 选取最相近的两个clustering进行合并;求连通分量。 因为寻找相近cluster的方式, 时间复杂度会达到O(n^2), 所以最后决定使用连通分量。
特征: 我们使用字面特征及query在session中的共现特征; 例如, 对字面进行切词后的term(做适当过滤降维:idf太小则过滤)
距离函数, 尝试过cosine和jaccard后, 最终使用jaccard作为距离度量。
 也可关注微博: weibo.com
或是直接访问: http://semocean.com

使用NDCG评估关键词推荐系统的相关性

对于传统推荐策略, 我们在验证其效果的时候, 一般会采用以下流程验证其实验效果:
  1. offline 的评测: 思路基本和传统机器学习的思路类似, 例如在推荐算法中我们直接使用AUC,F2等评估模型效果一样, 线下使用测试数据就能知道算法的初步效果。
  2. 用户调研实验: 该方式需要人的参与, 例如招一批人, 不告诉他们新老算法的界面或是使用的算法, 然后看用户的行为, 之后使用他们的最终交互, 或是选择判定算法/交互方案的优略。
  3. 线上实验: 最真实的尝尽, 例如小流量进行A/B test
具体关于评测后续会用专门的文章介绍,此处略去。 此处仅考虑一种特定的评估:关键词推荐系统的相关性评估。
因为baidu 关键词推荐系统是关键词的推荐,所以在很大程度上, 该推荐系统和传统的IR系统有着非常紧密的联系, 评估标准也较为相像。
对于一次推荐,用户进入百度关键词推荐系统交互界面: 关键词推荐系统会主动向用户push推荐的关键词,同时用户可以输入种子query进行查询:
如果将种子query看成是搜索引擎上的query,返回的关键词看成doc, 则问题就转换为搜索引擎的结果评估问题, 一种常用的方式为:NDCG(Normalized Discount Cummulative Gain)
CG
要介绍NDCG,我们首先介绍CG(Cummulative Gain), 其思想比较简单, 就是将相关性的分值累加后, 作为某个query/ 请求结果的分值。
reli 为处于位置i的推荐结果与query的相关性, p代表我们要考察前p个结果。
DCG
CG的一个缺点是CG没有考虑结果处于不同位置对结果的影响,例如我们总是希望相关性高的结果应排在前面,相关性低的结果排在靠前的位置会严重影响用户体验, 所以需要在CG的基础上引入位置影响因素,即DCG(Discounted Cummulative Gain)
即相同的相关性rel,排在对整次检索结果的正向影响,相较于放在后边更大。
NDCG
DCG仍然有其局限之处,即不同的query之间,很难进行横向的评估。例如, 我们评估百度关键词推荐系统, 或是搜索引擎的时候,都不可能仅使用一个query及相应结果进行评估, 一般都是是使用一批query及结果进行评估。 不同的query的评估分数就需要进行归一化。 也即NDCG。
例如我们定义:
其中DCG的定义如上, IDCG为特定query返回的最好结果, 即假设返回结果按照相关性排序, 最相关的结果放在最前面, 此序列的DCG为IDCG。因DCG的值介于 (0,IDCG],故NDCG的值介于(0,1]
具体操作方式
在具体操作中, 可以事先确定query和结果的相关系分级, 例如可以使用 0,1分别表示相关或不相关, 或是这是0~5分别表示严重不相关到非常相关。 相当于确定了rel值的范围。
之后对于每一个query的返回结果给定rel值,然后使用DCG的计算公式计计算出返回结果的DCG值。
使用根据sort后的rel值得序列计算IDCG值, 即可计算NDCG
参考文献:
百度关键词系统评估
 可关注微博: weibo.com/dustinsea
也可直接访问: http://semocean.com

google的商业产品之路

之前公司从google总部招了一位经验非常丰富的PM。入职后就请他给大家为大家布道google的商业产品推进的方法。 听了之后感触颇多, 在此与记录并与大家分享(因为自己也是学习别人在google的经验, 当中会加上一些自己工作中的感受, 其中有疑问的地方欢迎讨论)

        像google这样的公司, 做出的产品基本上能够直接影响到全球, 或者说是全人类的生活。 而它的商业产品, 也能够为这个公司成为你全球最大互联网公司提供收入保障。那google在进行商业产品的推进上,思路流程是怎样的呢?
        从系统产生, 项目开发的生命周期来看, 比较自然地就分为三个阶段: 提出想法, 设计, 执行/实现(即inspiration, design,   excution)
        首先是想法的提出(inspiration), google在提创意的原则是:‘ think big, start small’,作为世界级的公司,google 的产品都是直接影响全球的, 所以一般很多想法, 创意都是冲着改变整个产业去的(to change industry, to change world)。 例如google 比较成功的商业产品adwords,现在google大部分的收入, 都和这个产品有关; 又如百度的凤巢,贡献了百度绝大部分的变现。 当然不积跬步无以至千里, 一口也吃不成个胖子。 在一开始的时候虽然有着美好的憧憬和无端的自信, 做事的时候也是以某个具体的点入手, 开始逐步推进。
        然后是设计阶段(design)。  我们经常讲, 网民, 广告主, 搜索引擎三者参与商业产品的游戏, 三者相互关联, 获取自己想要的利益。  网民需要的是信息,  广告主进行自己信息的推广并希望在有限的支出下获取到最大的转化, 而搜索引擎希望从广告主获取最大化的利益。    而google 相较于通过搜索引擎从广告主获取最大利益, 更注重广告主的收益(至少我感觉跟国内搜索引擎公司相比), google的原则更像是: 'make customers happy, and I'm happy'。 同时google认为advertisering is a repeat bussiness,让客户玩爽了, 客户才会持续地投入更多的钱, 从长远来说, 让客户爽就能挣更多的钱。 所谓细水长流, 才能天长地久; 但很多企业为了追求短期漂亮的财务报表, 不惜杀鸡取卵。
        另一个design阶段让我感触比较深的原则, 就是enpower users。 google(包括baidu等其他搜索引擎公司)其实是在做平台, 例如baidu未来的目标是成为全球第一大媒体平台, 全球有一半的人都在用baidu的产品。。。 而用户/客户才是平台上的主角, 平台的目的是让之上的参与者更高效, 所以google会有意地为客户提供各种提升效率的工具(self-help system and material helps customers),例如各种API, Batch工具,分析工具, 让客户随时随地能够满足自己的需求。 毕竟人民才是真正的用户,  PM,工程师的力量再大, 也大不过人民的群体智慧。
        在执行阶段, google 使用data driven的方式, 其实这个方式在很多策略型项目中都在使用:  dash board线性开发, 快速上线, 线上数据说话并根据效果的分析结论快速,持续迭代。 就算是失败, 也能从失败的数据中定位失败的原因, 然后迅速纠正。 总结起来就是: persistence(持续迭代优化), fail and learn(正确看待失败并从失败的经验,数据中进行改进), data driven(数据平台的建设)。  我是策略RD, 所以这方面感触比较深, 很多时候我们做的都是策略的优化,  最常见的情况是策略上线后效果不明显,甚至是负面效果, 此时对上线后的效果数据进行分析, 一般都能发现一些之前策略设计实现的时候没有碰到的问题, 之后策略中有针对性地对这些问题进行解决, 几次迭代后, 一般都能取得比较好的效果。
        当然google商业产品的思路, 远远不止这些, 而且各个公司的具体环境也不一样。种子只有在合适的突然才能发芽。此处也只记录了自己粗浅的理解及感受。
        写在最后,这位Google的PM大牛,就是现在力美的CTO梁信屏