Wednesday, May 13, 2015

特征工程指南(1):去伪存真

首先声明我在特征工程工作方面有着很少的经验,实际中看到很多同学做特征工程的时候做的一些反思,而不是第一手的资料。如有谬误,敬请原谅,如果能在留言中指出更是感激不尽。本文主要是针对初涉此道的同仁。

一个典型的特征工程问题是这样的,比如要做广告的CTR预估,这是广告相关的人工智能技术中的非常重要的工作。我们先做以下一些假设:
  1. 我们拥有用户的历史浏览(Page View)和点击(Click)操作数据。这里的浏览是指浏览的页面和投放的广告;点击则专指对投放的广告的点击。可能用户并没有看到投放的广告,这里并不做区分,也就是广告只要是投放,就认为用户看到了。
  2. 我们需要预测的是当前正在发生的PV中该投放哪些广告,以使得期望收益(RPM)最高。RPM=CTR*ECPM。其中ECPM是实际发生点击时广告主向广告商支付的费用。该价格有着非常复杂的生成过程,在广告中叫做竞价机制或者机制。
  3. 所用的模型是线性Logistic Regression(LR)。
上面就是最初始的假设。其中1和2的假设是原问题假设,而3则是模型的限制,现在模型选择已经很丰富了,不同的模型选择对于特征工程的做法是有一些区别的。这里选择的LR模型是业界广泛使用的模型。

接下来需要干什么?两件事:整理训练数据和制作特征。本系列文章主要讨论制作特征的问题。

制作特征需要原始特征,原始特征是指那些数据中可以直接提取的特征,但原始特征并不是直接可以用于训练模型的,原因是模型对特征都会有一些要求。

LR是一个线性模型,p(y|x,w)=1/(1+exp(y*(w'*x)),其中w是模型参数向量,x是特征向量,y表示二分类的标号,为了使模型表达更简洁,y的取值为{-1, +1}。

那是不是说只要x是实数向量,就可以直接扔到模型进行训练了呢?答案是否定的。这里对x的分布有着严格的要求。

首先x的各个维度之间的幅度的问题,比如一个x_1取值范围是(0,1),另一个x_2取值是(0, 1000),将这样的训练数据拿去训练是肯定得不到你想要的模型的。原因是x_1和x_2的幅度差异太大,参数再加正则化约束会使得x_2对应的参数w_2的幅度偏小从而逃掉正则化约束,从而使x_2的作用不合理的偏大。当然这或许是你想要的,但概率极其渺茫。

那是不是说将x_2除以个1000,就万事大吉了呢?答案仍然是否定的。原因稍微复杂一点,就是比如原始的x_2 有0.99的概率取(0,1)之间的均匀分布,有0.01的概率是999,后果可想而知不是你需要的。

这说明,需要对特征进行深度的加工。

在深度加工之前,我们先看看作为原料,可以选择哪些原始特征吧。

我们很容易想到,历史的广告的点击率是有用的。

但这个点击率对于充分展示的广告来说或许太粗了,我们还需要考虑个性化因素,因此当前用户对该广告的点击率是有用的。

但这样太细了,缺乏泛化能力,因此需要找到介于以上两个粗细之间的粒度的特征,来提高泛化能力。我们想到了一个用户对某一类型(类目)或者广告主的广告的点击率。

在用户这段也需要做一些泛化,我们可以提前对用户提取profile,然后建立profile和广告之间的关系作为特征。

在上面的思路的基础上,还可以将profile打到广告上面,也可以对广告建立profile,作为广告的受众profile。用profile之间的联系作为特征。这种联系可以是内积(计算出来的匹配度)或者外积(具体的匹配项笛卡尔积)。

广告都是有上下文的,如投放在哪个网站,什么页面,页面的内容是什么,都可以作为特征来考虑。考虑的方式可以与用户特征类似。

现代的广告引擎一般包括两个阶段:粗选(Match)阶段和精选(Rank)阶段。本文所讲的CTR预估模型一般用于Rank阶段。

Match阶段和Rank阶段也需要结合起来。在Match阶段通常也会有如下信息:该广告是如何被选中的。比如是通过用户及网页关键词检索到的,那么有相应的检索索引及检索到的分数。这些也可以作为特征。

因此,最原始的特征可以包括:广告特征(A)、用户特征(U)、上下文特征(X)、Match特征(M)。

进一步的,对这些特征进行组合也是有意义的,比如AxU,AxX,UxX等,甚至更高阶的组合。

这就是你进行工作的原始特征的大致范围。


Tuesday, May 12, 2015

什么样的工作是一份好工作?

工作不仅仅是一个养家糊口的工具,除了获取收入之外,工作还有很多钱之外的功能。从主观上,工作(应该)可以愉悦身心,陶冶情操;工作可以提升能力,锻炼心智;工作可以让人保持和社会的深度接触,保持“社会人”的属性。
具体的讲,如果工作能让你做到以下几点,就是好工作:

  1. 找到生命的意义,让人充实有成就感。一份好的工作能激励你每天从起床到休息,保持着良好的状态,长期带来健康的提升。而一份不好的工作会让你失去人生的热情,在恐惧和贪婪的折磨中度日。
  2. 学习到更多的技能。从硬技能(做业务需要的技能)到软技能(人际关系和组织管理的技能)都应该被重视起来。
  3. 为自己积累。一份工作默认情况下是为公司和组织积累的,但这和为自己积累并不矛盾。你在工作中是否为自己积累了经验、人脉、数据、资本、甚至做事的雄心?
  4. 找到组织。一份好的工作提供的不仅仅是那把椅子,而是伟大的组织,是伟大的组织造就了伟大的个人。
自勉。