FeatureTools是2017年9月上线的github项目,是一个自动生成特征的工具,应用于关系型数据。
github链接:
项目官网:
API doc:
最近看了一下这个开源工具,对生成关系型特征有一些帮助,把这个项目简单总结一下。
这个项目起源于Deep Feature Systhesis 这篇文章,链接是 ,官网上也有类似资料,但是没有文章介绍的详细。
Feature Tools是 Deep Feature Systhesis (DFS) 算法的开源实现,实现原理如下。
假定我们有四个Entity,即四张表(Table):Customer, Order, Order Product 和 Product。他们之间的关系是这样的:
1个Customer对应多个Order,其余的以此类推。
我们的目标是给Customer建立特征。
DFS方法把特征分为两类:
1. Entity feature, 仅依据Customer表中的数据计算特征,计算出的特征简称efeat;
2. Ralated feature, 依据Customer表和其他表的关系计算特征,relation又为两类,一是forward relation, 即一对一的关系,比如 一个Order只对应一个Customer,二是 backward relation,即一对多的关系,比如 一个Customer对应多个Order。
假设我们不是对Customer计算特征,而是对Order计算特征,这时Customer和Order是forward relation,可以直接把Customer的字段加到Order表中,然后再计算各种特征,这样计算得到的特征简称 dfeat;
如果是针对Customer计算特征,Customer和Order是backward relation,此时就需要先计算相同Customer的不同Order的特征值(比如 sum, max, min, mean, std等),计算得到的特征简称rfeat。
DFS把Entity之间的关系称为parent-child关系,比如 Customer和Order是一对多的关系,所以Customer是parent,Order是child。这是FeatureTools的输入参数之一。
上面的概念都搞清楚了,就能自然理解DFS计算特征的过程了:根据parent-child关系,计算rfeat和dfeat,把rfeat和dfeat合并到parent表中,计算parent的efeat,以递归方式执行这些操作即可,也就是自底向上累积计算特征。
附上文中给出的伪代码:
文中提到了一个注意点:一般先计算rfeat,后计算dfeat,同一个Entity一般只使用一次。
一般来说,rfeat包含的信息量更多,也更常用,所以rfeat相比dfeat更重要一些,这是我的理解。
featureTools的使用比较简单,可以参考5-minutes demo实操一下:
要把这个工具的所有api都了解清楚,可以参考上面的api链接,下载数据,跑demo,把所有特征都计算一遍。
p.s. 这个工具有两个弱点:
1. 使用这种多层全排列的方式容易造成特征维数过多,实践中必须做特征筛选,降低特征维数。
2. 这种暴力搜索得到的特征,可解释性可能偏弱,需要深入研究那些优质特征的可解释性。懂业务的人搞出几个解释性强的特征,可能秒杀暴力搜索得到的所有特征。所以,实际应用时,可以用暴力搜索法作为特征挖掘的辅助算法。
3. 从官网文档看,FeatureTools只有单机版,处理的数据量有限。