认知迭代整理(2021)

在这篇文章中,我将对过去一年来在数据挖掘与应用方面的一些思考和实践进行整理。主要的背景和动机是,在之前的一段时间内,由于路径依赖等原因,我更关注在给定一个决策问题时,如何通过技术手段提高决策效率;而近期的一些实践经验表明,在实际业务场景中,如何找到数据、并从数据中挖掘出有价值的决策问题,其实也很重要。

下面的讨论将分为三个部分。首先,我们讨论在给定一组数据集的情况下,如何更好地挖掘有价值的信息。其次,我们讨论在给定多组(可能相关的)数据集的情况下,如何针对不同的应用场景对数据进行提炼。最后,我们讨论如何在现有数据集的基础上,寻找更有价值的增量数据。

数据挖掘 Data Mining

通常的数据挖掘工作,会从技术的角度出发,针对一组类似的场景寻找通用的解决方案。一种常见的思路,是根据数据集的特性,选择或设计相应的建模组件,从而提高特征提取的效果。例如,对于用户历史行为数据,由于其具有较强的时序关联性,通常考虑通过RNN(LSTM)与注意力机制结合的方式进行建模;对于时空或路网上的统计数据,由于相邻时空或路段上的事件通常会有强相关性,使用CNN或者GCN等基于局部相似性的结构进行建模会更高效;而对于各类treatment的实验数据,由于影响因变量的基础值和增量效果的特征往往有所差异,使用DML等双塔结构、并叠加IPM等正则化方法,往往能够得到更准确的估计。

在技术视角下的另一个热门方向,是在不考虑具体场景的情况下,直接通过自监督学习/表示学习对数据进行变换和压缩,得到具有泛化价值的中间特征,然后应用到不同的下游任务中。这种预训练的方式有以下好处:首先,当原始数据的特征数量大时,对各下游任务进行单独建模的成本会比较高;通过预训练对特征进行压缩,能够有效降低计算和存储成本。其次,当数据源本身非平稳时,不同周期数据存在分布漂移、可直接复用的比例不高,此时通过在预训练中引入正则化方法,可以更好地捕捉到数据中平稳的部分,从而得到泛化性能更好的特征。例如,在最近的一个应用场景中,我们通过对比学习,将不同时段的用户行为样本映射到同一个embedding上,以缓解行为特征波动造成的预测结果突变问题,在一些下游的小样本学习任务中取得了明显的收益。

在更多的现实应用中,从业务视角出发设计特征往往更容易取得好的效果。这种基于业务理解先验的做法可以看成是一种高度定制化的迁移学习方法:从某些数据集中抽象出来的业务理解,可以通过特征的方式迁移到其他任务上。例如,我们近期的一个工作尝试根据司机的驾驶行为习惯推断其社会经济学属性,而后者可以帮助我们更好地理解司机的其他行为,包括出车习惯等等。在实践这种思路时,业务理解先验既可以从与一线员工的讨论或亲身体验中获得,也可以通过调研方法从业务对象处直接获得。

数据提炼 Data Distillation

在实践中,我们通常可以接触到大量未经处理的原始数据。通过一些方式对这些数据进行加工提炼,得到的高质量数据集将有助于前述数据挖掘和建模工作。

一类常见的数据加工场景是对同一任务下的不同数据源进行融合,从而对该任务的客观状态进行更准确的描述。在控制类问题中,这类任务通常称为状态估计(state estimation);针对这类任务,滤波方法(filtering)是比较成熟的解决思路,有很多开源工具可以应用。而在更一般的应用里,这类任务的难点并不在于设计出好的估计方法,而在于识别出不同数据集所对应的相同的数据生成场景,以及其中可能存在的一致性问题。例如,一个用户在一个app内可能会同时留下状态切换动作和所处状态两类信息,如果将两类信息独立存储,然后分别统计状态持续时长,结果很容易对不上,长期会为下游应用造成一定的理解成本。如果能够在收集数据的过程中近实时地对数据结果进行交叉校正处理,则可以缓解上述一致性问题。

另一类常见于机器学习应用中的场景,是如何构造合理的数据集对模型进行评估。由于历史数据集中通常混杂着很多不同context下得到的数据,直接使用全量历史数据来评估模型可能会引入一些偏差,造成线上线下效果不一致。在比较极端的场景,例如treatment effect估计任务中,使用包含多组不同A/B流量比例实验的数据集来对增量模型进行评估,会受到辛普森悖论的影响,有可能得到完全错误的结论。例如,假设对于一个策略的测试,在第一次A/B实验中使用了5%的流量,而在第二次A/B实验中使用了10%的流量,那么直接混合两次实验的数据来作为模型的评估数据集是有问题的。而真实的数据集可能混合了多种treatment在不同人群中以不同流量比例测试的数据,情况更为复杂。因此,对于这种情况,有必要通过匹配方法,对一组treatment找到它们在相似场景下的样本,并组合构造出评估数据集。

数据获取 Data Acquisition

最后,在实际业务场景中,除了利用现有的数据源,我们也可以、或者必须要通过开拓新的数据获取渠道来取得业务成果。

首先,我们考察treatment effect估计这一场景。在理论上,对treatment effect的估计依赖正值假设(positivity):如果数据集中不包含某个treatment的相关数据,那么该treatment的效果将无法被准确估计。但是在实际的生产环境中,考虑到不同时期的context差异,被动收集到的treatment样本数据往往是不均衡、甚至缺失的。例如,某一策略全量后,后续将无法收集得到其他策略的效果数据。因此,直接根据观测数据建模存在一定的局限性;要突破这种局限,需要主动地收集(缺失的)数据。一种常用的方法是epsilon greedy,即留出固定比例的流量来进行随机探索,其余流量维持现有策略。另一种相对进阶的思路是使用TS(thompson sampling)或IDS(information directed sampling),动态地根据目前信息量增益最大的方向去执行随机探索。不过,这种方式虽然在理论上更高效,但是依赖假设较多,而且在工程实现上更难模块化、误差控制方面短期的负向影响更不可控,目前较难应用于实际生产环境中。

其次,更一般地,从定义业务决策问题的角度,现有数据源通常会受限于历史决策者所拥有的先验信息,不够全面和及时。例如,对于用户端业务,业务改进点通常对应用户体验的问题点,但线上收集到的数据往往只能反映出用户针对当前业务动作的被动反馈行为,是高度有偏的。在这种场景下,通过问卷调研等主动反馈方式来获取数据会是很好的补充。近期,我们正尝试对数据获取与数据挖掘这两部分工作进行结合:首先,根据已有的人工先验知识,通过数据挖掘深化认知并开展应用,在应用过程中收集潜在问题点;然后,针对这些潜在问题点通过调研收集用户反馈,并根据反馈结果更新先验信息。我们预期这一标准化流程能够在动态变化的业务环境中更快速地捕捉到迭代方向,从而提供增量业务价值。