导读:
- 本文以论文结构为主线,站在阅读完成者的角度梳理各个概念、部分之间的联系,调整讲解顺序以便讲解易懂,并在文中给出恰当的说明。
- 论文先提出了众多概念,把握这些概念极为重要,在阅读本文前,可以先了解维度、度量、立方体的概念。关于概念的定义,是抽象且严谨的,为了便于读者理解,本文对每个概念用无序列表来说明和讲解定义。只有理解了这些概念,才便于进行后续的研究,在理解概念上花再多时间都不为过。
- 此外本文会用具体的例子贯穿全文,也是起到对概念、算法解释的作用。如果不能理解概念的定义,借助例子观看全文也能有所收获!
- 最后本文会阐明作者对前端可视化的理解,以及我们的产品中DMS数据分析对前端可视化的现有实现。
一、论文讲解
摘要
OLAP得到广泛的使用,但需要专家操作,操作前知道自己想要什么。本文尝试自动从多维(度)数据中提取top-k insights。提出了insight(洞察力)这个概念,它是经过多个步骤(例如按维度排名,按维度计算度量百分比) 的聚合结果中获得的令人感兴趣(interesting)的结果。这对非专业的数据分析师很有用,也能减轻专家的负担。
举一个insight的例子:就销售额的增长值而言,B品牌的排名(在各品牌中)逐年下降。这就是自动分析出来的结果。
既然要计算“top-k”,我们自然要借助一个评分函数对各个insight进行打分。我们面临两个挑战:结果有效性和计算的效率(effectiveness、efficiency)。
论文先提出有意义的评分函数,之后提供自动计算top-k insight的计算框架,并提出各种优化算法,最后借助真实数据和合成数据进行实验研究,验证算法的有效性和高效性。
1. 介绍
下面的例子贯穿全文
有汽车销售数据集。我们可以借助OLAP工具按照年份和品牌聚合销售额,可以看图(a),有表格和折线图。但仅仅一次聚合揭示不了太多信息(例如我们在折线图上看不到清晰的趋势)。
在摘要里我们也说了,insight是多次聚合获得的结果,现在看图(b),我们根据年份,计算年销售额增长。可以看到品牌H 年销售额增长 是逐年增加的(-5 -> 1 -> 7 -> 15)。这就是我们聚合两步获得的一个insight。
看图(c),我们在图(b)的基础上,计算品牌年销售额增长的排名。观察品牌B可以发现,品牌B的年销售额增长排名逐年下降。这是我们聚合3步获得的一个insight。
如果使用OLAP,数据分析师需要不断手动操作和评估insight的重要性,工作量巨大且过程乏味。且非专家难以使用,或者他们自己都不知道确切的需要。我们也因此提出了top-k insights问题。
这个问题有两方面挑战,结果有效性和计算的效率。结果有效性,我们设计评分函数,评分函数也面临两个个挑战,即通用性和可比性。计算的效率,涉及三方面挑战,即巨大的搜索空间、昂贵的insight计算、洞察力得分的非单调性(例如上图二次聚合H有insight,而T、F、B没有)。
论文原文各部分介绍如下:
- 2阐述了的问题
- 3提供有意义的评分函数,便于我们深入了解
- 4给出系统体系结构
- 5给出计算框架
- 6、7给出性能优化技术
- 8、9展示有效性和效率
- 10讨论相关工作,11给结论
2. 问题陈述
本节将正式定义多维数据模型、复合萃取器和洞察得分函数。最后描述了我们的洞察力提取问题,并分析了它的搜索空间。
2.1 数据模型和子空间
多维数据集(multi-dimensional dataset):
- 其中是维度列表,是度量
- 令表示维度的域
- 我们假设每一个有
子空间(subspace):
- 其中可取中的一个值或(表示取所有值)
- 表示子空间的度量,是确定的子空间上的聚集值
- 注意,
<>隐藏了里面元素是有序的这一特点!
兄弟群(sibling group):
- 兄弟群是一个集合,除的所有维度对应的值保持不变,取所有的非值组成集合
下面我们举例子加深对这些概念的印象。还是一开始的例子,汽车销售数据集
- 现在我们可以写成多维数据集:
- 其中,。,
- 子空间,
2.2 复合萃取器
引入兄弟群的概念后,结合在第一部分举的例子,可以说我们就是在多维数据集的所有兄弟群中寻找insight。兄弟群是我们处理数据的基本单位。而在兄弟群上的基本分析操作,是由萃取器来实现的。
萃取器(extractor): /ksi/
- 输入一个兄弟群,计算每一个子空间的派生度量
- 计算依靠
- ,即兄弟群中的所有子空间的度量
四个萃取器实例:
其中要求的值有序
举个例子:输入
复合萃取器(composite extractor):
- 是一步分析操作,而是多步分析操作,步骤深度为
- 是一个长度为的数组,数组元素为
- 其中数组第一项特殊,,元组第一项是聚集函数,第二项是度量
- 翻译成复合,可以联想复合函数。输入输出关系
举个例子,。这就是贯穿全文的例子
全文最难的概念来了
复合萃取器的结果集(result set of composite extractor):
- 有复合萃取器,输入兄弟群,输出
- 表示子空间经过计算的派生度量,重点是怎么计算:
- 当i=1,就是在度量上聚合的结果
- 当i>1,我们获得可以借助输入结果集
- 注意红色的地方,不是。不理解没关系,后面会有例子。也能看到复合萃取器比萃取器多了一个维度的参数
举个例子。输入
值得庆幸的是,这个例子中与中的都是年份
2.3 问题定义
我们先给出两种有代表性的insight:
- 点洞察力(outstanding):一个子空间的与其他子空间的派生度量相比格外显眼
- 形状洞察力(trend):当有序时,随着增加,呈上升或下降趋势
洞察力实例:,其中是insight类型,就是我们上面所述的两个之一
评分函数:,第3节详细说明
现在我们可以说明我们的insight问题是什么了:
给定数据集和复合萃取器深度,在兄弟群、复合萃取器和insight类型的所有可能组合中找到得分最高的top-k insights:
时间复杂度:随着维度的个数和复合萃取器的深度增大呈指数级增大。证明略
3. 有意义的评分函数
为什么这里是“有意义的”评分函数呢?首先我们的评分函数需要具有通用性(即适用于不同类型的insight)和可比性(即不同类型的insight之间的公平性)。而现有的各种文献提出的评分函数均不适用我们的问题,所以我们自己给出适合我们问题的评分函数,即“有意义的”评分函数。
3.1 insight评分函数
这就是我们的评分函数,其中衡量的作用、影响(impact)的范围。衡量从观察到的型insight的重要性(significance)
- 说白了,就是兄弟群占总立方的多少
- 归一化处理,值
:基于来制定,它本质上衡量了事件的极端程度。当用户为每种适当地设置常见情况(即无效假设)时,它还允许在不同类型的洞察之间进行公平的比较
3.2 Sig
p-value:在虚无假设为真的前提下,出现该样本或比该样本更极端的结果的概率和。数值越小,表示事件越罕见
一个求的例子
设是中的数值集合,在商业领域产品的销售额往往服从幂律分布。我们给出虚无假设::服从带有高斯噪声的幂率分布(服从幂率分布,残差服从正态分布)
接下来就是把按降序排序,将拟合为幂律分布,并估计。预测误差服从高斯分布,结合概率密度求出。我们定义:
一个求的例子
我们定义:
其中是拟合度
3.3 休息一下
看了这么多休息一下吧,可以回顾一下之前的概念:多维数据集、子空间、兄弟群、萃取器、复合萃取器、符合萃取器的结果集、洞察力两种类型(outstanding、trend)、洞察力实例、评分函数。
熟悉了这些概念,我们就可以向本文的核心,系统架构(第4节)和insight萃取(第5节)出发啦!
4. 系统架构
4.1 架构概述
- 三层
- 系统配置层。允许用户配置系统设置。例如,指定新的insight type、自定义虚无假设
- insight萃取层。枚举所有复合萃取器和兄弟群,交给计算引擎计算结果集,再交评分函数
- 用户接口层。前端展示top-k insight
4.2 可扩展性
这里不再赘述,简单的说就是我们系统可扩展。例如不只局限于一个度量,用户可以自己选择兄弟群,可以自定义评分函数,可以添加新的萃取器……
5. insight萃取器
5.1 计算框架
- 如果你对之前的概念非常熟悉了,相信这个算法不成问题
- 9行判断有效本文不再赘述,只需要知道一些复合萃取器里面可能存在相邻两个萃取器无意义
- 注意两个enumerate SG出现的地方,知道怎么枚举全部的兄弟群
- 现在算法1中我们不知道怎么求结果集
5.2 计算引擎
- 阅读前不妨回顾一下复合萃取器的概念(概念红色的地方体现出来了)
- 整个过程是递归的,自顶向下构建,数据自底向上流动
- 不妨照着算法,把本文的例子写一下
,
这个例子可能由于兄弟群表述里和深度为2的萃取器里不一样而难以理解,我们可以先看下面的简单例子。
例1:
例2:
最后我们来尝试最开始的例子,即兄弟群的变量和复合萃取器变量不同的例子(不妨回顾下复合萃取器及结果集的定义):
实际上如果理解了前面的各种概念,算法就很好理解,看到这,我们的核心算法就结束了。
5.3 时间复杂度分析
之前也说过,算法时间复杂度随着维度的个数和复合萃取器的深度增大呈指数级增大,这里给出详细的式子:
其中很像D的字母表示各维度域长度的最大值
不再证明
6. 论文其他
论文后续就是一些算法优化,以及真实的例子说明我们一开始的挑战——有效性和高效性。总之论文对top-k insight的研究是颇有成就的。此外,本文核心就是insight,相信你也对insight有了自己的理解。论文最后也再次点明了什么是insight,不妨看看是否与自己心里的理解一致:
Insight can be considered as interesting observations derived from aggregation results in multiple steps.
二、前端可视化
1. 可视化现状
看完了insight,我们再来聊聊可视化吧。目前可视化有两个主要分支。其中一个是用户知道自己需要什么,针对特定的情况设计,简化用户处理数据的过程。第二个分支就是自动化方向,但实际上研究人员也是针对特定的情况来实现自动化,例如论文中的例子都是销售额方面,评分函数的制定也是提前确定好虚无假设。
第一种分支就是早期的可视化,通常会实现用户拖拽字段生成图表这一效果。现在可视化则流行从数据出发,进行统计,和寻找有趣(interesting)的地方,这一过程是自动化的,即第二个分支。
在自动化方面,研究人员也是各显神通。除了本文介绍关于insight的论文,还有研究人员将可视化与NLG(自然语言生成)结合在一起,除了最后将数据展现成图表外,会自动添加对图表描述的话,建立起人机沟通的桥梁;还有研究人员把注意力放在了如何自动化推荐出更好的整体展示,例如数据选择什么图表展示比较好?多个图表怎么布局、各个图表大小如何设置?
2. DMS数据分析
我们产品中的数据分析(新版的可视化)也在可视化方面交出了自己的答卷。
在可视化的第一个分支上,我们提供了各种图表,用户创建数据集后可选择图表,并选择字段进行配置,将图表展现出来。第一个分支比较侧重用户体验,我们创建的图表可以调整大小、更改布局。字段也是支持拖拽添加。自己封装的图表视觉上也能给用户舒适的体验。
关于第二个分支,我们产品也是在自动化层面给出了自己的成果。在数据集和SQL窗口中,我们有一键可视化(图表推荐)按钮。点击后我们会从数据集出发,首先实现数据类型和可视化类型的自动推断,之后再自动推荐用户可能想要的图表。
总结
近年来数据可视化主流是从自动化方向发展,本文介绍了其中一个方向,即寻找top-k insight。感兴趣的同学不妨用代码简单实现一下,之后也可以阅读论文原文,看看后面关于性能优化的部分。实现的过程中也可以自己构思评分函数,归一化是实现可比性的良好办法。我们的DMS产品也在前端可视化方面做出了自己的成果,在不断提升用户体验的同时,也不断优化、新增一键可视化的推荐算法,也欢迎大家前来使用我们的产品的这部分功能。