随着我们的数据采集数据存储的发展,越来越多的数据以各种Dimension的形式被采集下来了。如何在海量的数据里发现有价值的pattern,成为数据分析师/数据科学家最为繁重的工作。
QuickInsights是微软公司在2019年Sigmod上发表一篇论文。它设计了一套分析框架可以快速自动地从多维数据中发现有趣的pattern,提供有效的insights,并将系统发布到了微软Power BI。
对于这一点我是有深刻体会,当一个table有小于两位数的维度时,借助SuperSet/Looker创建一个有价值的Dashboard还算可以接受。然而,如果数据的维度有上百个的话,那么对于数据业务背景不熟悉的同学而言,这个过程就非常痛苦了,基本上是“碰运气”。Gartner也在一篇报告里提到,下一代BI(商务智能)和分析平台,应该把模型智能推测作为主要的设计需求。
先看看他们是怎么用数据符号表达Insights。
𝑠𝑢𝑏𝑗𝑒𝑐𝑡 ≔ {𝑠𝑢𝑏𝑠𝑝𝑎𝑐𝑒(𝑠), 𝑏𝑟𝑒𝑎𝑘𝑑𝑜𝑤𝑛, 𝑚𝑒𝑎𝑠𝑢𝑟𝑒(𝑠)}, subspace是
过滤条件的集合,breakdown是类似于要在那些维度上做group by,measure(s)是需要输出的metric。
举个例子:

用{{*}, ServerName, CPU Usage},{{China}, Year, Sales} 表达以上两个insights。
那么,Insights Type的类型有哪些呢?在微软QuickInsights的官网,给出这样分类。

SinglePointInsight代表一个subspace,一个metric,并在一个非数字类型dimension做breakdown。例如,疫情大数据,国外(Subspace (Country != China))确诊人数(Metric)的breakdown (By Country)。这样的insight里,那些top1/top2/No. Last 都有一定的价值。对于Attribution类型的insight,它描述了处于支配地位(比例超过50%)的发现。Evenness描述了相互之间非常接近的insight。
SingleShapeInsight类似于SinglePointInsight,它也是一个Subspace,一个Metric,但是它的breakdown是timestamp,也就是我们经常说的Time-Series Database的数据。Change Point是在某个时间点开始某个指标发生了比较大的增长或者减少。Outlier则是在一个连续的时间区间内有一个异常突出的点。例如,我的公众号的阅读量,往往只有更新文章那天才有访问量。Seasonality在ToC的应用非常常见,例如在下班期间外卖会达到一天的流量峰值。这种周期的pattern,对于理解数据而言是有意义的。单纯的Trend来说,它是指沿着某个确定的斜率变化的指标。例如,某个上市公司的净利润持续稳健增长25%(By Year),对于投资者来说这种Insight有非常高的含金量。
CompoundInsight则往往是多个Subspace或者多个Measure。Correlation代表了2个Subspace在同一个Measure上有正向或者负向的关联关系。例如,COVID-19确诊人数累计和死亡人数累计随着时间有正相关。对于Cross-Metric Corrlation则是两个metric之间有显著的关联关系。例如,广告费和月销售额之间的关系,往往会通过皮尔森相关系数(Pearson correlation coefficient)进行,如果正相关接近1.0, 负相关接近-1.0,毫无关系则接近0。显然我们在分析Insight是否有价值,也会选择有比较强相关的一对指标。2D-Clustering在描述了在同一个dimension上,两个散点图(Scatter Plot)之间的关联性。这里引用一个例子。如下是美国2个州参加SAT Test的比例和数学成绩的散点图,这里显示了参与度低的平均数学成绩反而更好。

针对以上不同的Insight Type,都可以用数学公式来计算它的Impact和significance。Impact描述了选中的subspace在整体数据集里的重要性,例如一个Trend描述一个大的市场份额,要比一个小市场份额的Trend更重要一些。Significance则描述在计算某个subspace的Aggregation Value时,表现出更强的规律性。为了更好的理解这两个概念,下面用一张图举例。

为了做公平的对比,对于Impact和Significance在不同的subspace上进行计算之后,会采用对它们的范围标准化到[0,1], 这样衡量一个Insight是否有意义,通过Score = Impact * Significance计算得来。

系统架构

SubjectSearcher&AutoImpact来负责Subspace的Impact的计算,并经过Functional Detector Checker(图中Trival Insights Checker),生成的task会按照Impact的高低在一个优先级队列中排队等待调度。每个task是按照参数计算所有的聚合指标,例如
“SELECT Aggr1(measure1), Aggr2(measure2), ... GROUP BYbreakdownDimension where filter = subspace”.
Insight Evaluator对根据这些指标计算它的significance,并最终选出最有意义的insights。在QuickInsights项目设计之初,就以时间效率,方便集成通用的查询引擎,以及在不同Insight Type的扩展性作为设计目标。在这其中,尤其重要的是时间效率,那么如何缩短整个输出有价值的Insights的时间?QuickInsights给出这样的优化。
降低计算task的个数,提供了3种类型的Pruning方法。第1次进行prunning的时候,实际上是控制搜索subspace的范围和个数。第2/3次pruning用来减少计算开销。在第1次裁剪的时候,低于threshold的subspace直接裁剪掉。对于每一种insight类型,采用一个top-k的buffer来记录前k个insights,无需计算Sigifiance,较小的impact可以直接裁剪掉。第3次裁剪,是如果一个subspace包含了所有的数据,没有区分度,会直接丢弃该Subspace的计算。
使用BatchQuery&Cache提高执行task的效率。由于计算Impact是需要具体subspace和dimension breakdown下的metric以及它的impact,这个过程中会提交重复的query。因此,预取所有subspace的条件枚举下所有的可能,是其中的一个解决方案。如下就是通过subspace指定的{Country=China}做了一个扩展,将Country变成expanding dimension,执行 “GROUP BY expandingDimension, breakdownDimension”.

提高Cache的效率。虽然存储所有的dimension的metric和impact很有必要。但是考虑到一个table有很多的dimension,并且一个dimension有很大的基数(Cardinality)的时候,预计算仍然需要很大的负担。例如,City是一个dimension,假定City的基数是1000,它可以生成1000个不同的subspace,根据鸽笼原理,最多有100个subspace,他们的impact>0.01,也就是说剩下超过90%的subspaces实际上是没有效果的。对于这样的case,prefetch和cache反而带来更多的计算代价,使用ondemand去计算占有主导地位的subspace的metric反而性能更好。
剔除逻辑关系可推测的insights,提高选出insight的质量。这里就不得不提它的Functional dependency的定义。X->Y, Y的结果可以根据X推断出来,X,Y代表了dimension或者measure的集合。下面的table里列举出这5中可以被剔除的insight,s代表Subspace,d代表Dimension,m代表measure。

系统评测
在系统评测环节,重点介绍了各种优化方法开启之后,如何验证方法的有效性。为了保证测试环节真实有效,选取了447份有真实数据,数据规模和数据特征有比较好的区分度。Subspace里dimension个数最大为2,使用COUNT作为Impact的measure。这里重点给大家分享的是它的做评测的思路。

在很多系统优化过程中,如何量化评估系统改进带来的收益,往往是比较困难的一件事情。这篇文章从它design的目标出发,把响应时间(TimeBudget)作为考察的变量,实验结果获得最优结果的覆盖率作为评价指标。在实验的过程中,不仅可以进一步优化策略,而且还能保证设计目标(低延迟输出)更好达成。这一部分具体测试结果,我就不在这里赘述了,感兴趣的同学可以直接看论文。
评估价值
自动化BI构建模型,需要用户对于结果有一个客观的分析。这涉及到一个工作带来的实际效果是什么样。如果在做ToC/ToB的产品或者公司内部产品的时候,这种方法可以借用,相当于量化评估。
Q1: How interesting do you feel of this insight?
Q2: How helpful is this insight for you to understand the data characteristic, such as distribution, anomaly or correlation, etc.?
Q3: To what extent do you feel interested to take follow-up actions, such as sharing with others, pinning to a dashboard, or conducting drill-down analysis?
对于测试用户也要做好分类,可以从不同用户群体得出不同的评测结果。然后就是QuickInsights生成Insights的打分模版。

通过评测,有几个发现:
对于非领域专家,QuickInsights提供了非常好的视图,帮助用户快速获得有价值的知识和规律。
对于领域专家而言,特定的insight类型可以带来可执行的信息。例如,ChangePoint Type的insight可以帮助IT工程师发现闲置的服务器。
Insights需要明确的文字/可视化进行解释。这一点来说,仅靠算法产生有信息含量的Insights还欠缺的。QuickInsights解决了如何在数据集里发现可能有价值的数据pattern,但是还不能以更直观的文字和图表进行描述它。
花絮
这篇Paper是我花了整个周末时间认真读完的并总结出来的,为啥花时间给大家做个分享呢?我想这有2点原因:
探索式构建BI对于领域业务小白而言,是一个快速积累业务知识的过程。这一点,我们经常谈的data driven,很多情况是,我们数据仓库构建好了,我们却不会挖掘它的价值。
量化构建BI的方法论。这是一个系统工程,不仅有算法分析,还要有系统架构优化的考虑。这篇文章,无论从评估现有insight的价值,还是从系统优化的设计,都有非常可取之处。
欢迎大家关注译数据公众号。从一个大数据从业人员的角度去看最新的科研成果。






