:::: MENU ::::

TalkingData's Blog

现在开始,用数据说话。

Posts Categorized / Tech

  • Jan 19 / 2018
  • 0
Tech

锐眼洞察 | 2018年云架构趋势(翻译)

作者:Keith D. Foote 

原文:Cloud Architecture Trends in 2018

译者:TalkingData数据科学家 孙强

本译文禁止商用,转载请注明作者与来源!

人们不断想出新的智能方式来使用云。 因此,云计算架构设计和开发不断被调整和改进。 今天的企业需要灵活变通,快速行动,了解客户的期望。 为此,企业依靠云提供专用通信系统、数据存储系统和大数据处理系统。 随着云技术的发展,组织不断发现越来越多的用途。

云架构描述了用于提供云计算服务的“软件系统的组织”。 它通常涉及云中的多个元素,它们通过松耦合机制(例如消息队列)相互通信。 云的体系结构必须足够灵活,以允许各种系统访问。 可伸缩性和安全性是设计中的两个重要元素。

数据架构不应与云架构混淆,数据架构正在进行类似的演变。 这只是数据架构中更大的一个主题。

混合云

越来越多的组织将采用内部数据处理、私有云处理、公有云处理和软件即服务(SaaS)的组合来提供研究成果和商业智能。 虽然这种方法具有很大的灵活性,但它通常不是一个简单的系统,而且往往在管理上“不必要地”昂贵和笨拙。 最近的DATAVERSITY调研显示,在被调研组织中有47.7%正在使用混合系统。

混合云的体系结构涉及整合本地资源和云资源。 对于大多数具有本地技术的企业而言,云端即服务的使用需要在混合架构中运行。 某个云服务可能具有与客户的良好匹配的体系结构,而另一些没有选择具备兼容系统的云提供商的云服务商,因为无需投资设备和软件,可以将配置成本降至最低。

在调研云提供商时,考虑在云和内部部署系统上整合“信息提供应用程序”也很重要。 混合架构应该包括整合来自物联网的大数据和远程传感器的能力。 兼容的系统无需购买新硬件来支持应用程序,并且可以简化流程。

机器学习和深度学习

深度学习和机器学习都基于算法。 机器学习为计算机提供了使用重复性经验进行学习的能力。深度学习借助图形处理单元(GPU)和海量数据进一步推动了这一过程,并且经常用于训练AI实体。

许多企业领导者认为,机器学习将最大限度地从大数据获得洞察,并为他们提供竞争优势。 还有一些商业领袖还不确定机器学习是什么。 那些了解并使用它的人已经获得了有用的商业智能。 在短短的几年中,机器学习已经从实验室实验转变为非常有用的研究工具。

哈佛商业评论分析服务公司最近的一项调查显示,60%的受访者认为其组织未来的成功取决于机器学习。 许多人已经开始使用深度学习来开发模式识别、工作流程管理、预测建议以及检测欺诈行为。

AWS和微软Azure之间罕有的达成了合作伙伴关系,体现了机器学习和深度学习的重要性。 他们的合作伙伴关系是通过深度学习“开放源代码库”Gluon的方式实现的,旨在实现特定流程的自动化,从而使机器学习更加精简。 这两家公司以及IBM、Google和其他科技巨头都看到了云计算机学习的巨大潜力。

云容器

云容器(应用程序容器的版本)和容器管理平台将在2018年获得普及,因为它们是有用的、高效的和功能性的。 Forrester副总裁兼首席分析师Dave Bartoletti建议,目前有10%的企业正在生产环境使用容器,并且多达三分之一的企业已经开始对其进行测试。术语“应用容器”代表了一种提供一致性和设计效率的新技术。 基本上,它们是虚拟机和虚拟机管理程序的替代品。 容器比虚拟机更有效地使用存储资源、内存和CPU,从而可以使用相同的基础结构来支持更多的应用程序。

应用程序容器使用称为基于容器的虚拟化系统。 它是一个专为数据和处理而设计的“虚拟”存储容器,它将物理计算机环境中的所有内部元素隔离开来。 它以计算机为平台,独立运行。

这可以保护容器的应用程序和服务器,避免由于错误而损害对方。 IT专家声称,基于容器的虚拟化支持更高效的设计,无需在计算机上架设基础架构系统。 容器有自己的基础设施。

另外,云容器具有非常便携的特点。 一个容器可以很容易地上传到各种不同的服务器上。 容器可以很容易地复制,使得它们可以用于测试、开发和集成,而无需重新配置主机。 (注意:应用程序容器仍然是新的,并不总能理想的与所有服务器兼容,需要仔细检查容器的限制)。

人工智能

云提供商历来重视提供基础架构和软件。 然而,最近焦点转移到了提供智能云。仅支持自有云的 IBM Watson,已经在人工智能(AI)中处于领先地位。开发一个AI实体的主要挑战是在训练中涉及的时间和金钱。 云端GPU技术已被用于提供深度学习。

IBM最近宣布他们可以将AI实体的训练时间大幅缩短65%。 这被认为是一个重大的突破,也是迈向减少训练AI实体所需时间和金钱的重要一步。

很少有组织可以负担对人工智能的研究。 但是,主要的云供应商已经在AI研发方面投入了大量资金。 他们的目标是开发一种能够比竞争对手更快、更高效、更直观地与客户合作的云。 使用具有人工智能能力的云可以提供:

  • 廉价的人工智能研究:集成人工智能的云服务可以为企业提供人工智能研究和开发的资源,客户只需付出时间成本。 一个不成功的试点项目可以很容易地关闭,而无需处理不再需要的昂贵的硬件。
  • 易用性:云供应商一直在努力使自己的系统更加“用户友好”,并使用人工智能来实现这一目标。
  • 使用最新技术:使用AI云服务可以使企业保持技术领先的地位。面对竞争,主要的云供应商在不断提供新的AI服务。

人工智能和云的安全

为了安全目的,人工智能被期望越来越多地用于云内外。 在云中运行时,安全性是一个重要的考虑因素,AI提供了一种通过识别威胁和缩短响应时间来打击网络攻击的方法。在企业与多个系统进行交互的云中,云服务可能会受到更多的破坏,从而导致网络欺诈和对组织私有计算机的攻击。 安全性是选择云的重要因素。2017年10月,Vipre Cloud宣布使用人工智能来防止在线终端攻击。 他们正在努力通过将行为分析、众包数据收集、机器学习和统一管理相互关联的安全系统,来保护这个脆弱的区域。 Vipre Cloud不断更新最新的网络攻击信息,并在本地安装了一个配套代理,以确保端点的安全。

区块链

区块链是一种分布式账本技术(DLT),用于支持比特币和其他加密货币,可以通过使用计算机网络而不是单个本地化服务器来存储大量数据。 区块链本身不直接提供安全性,但可以创建安全应用程序。 ABI Research表示,区块链提供了三个支持安全性的基本功能:

  • 不可变性:数据创建后无法更改。
  • 透明:每个人都可以看到发生了什么。
  • 自治性:其是自我治理的。

这项技术理论上可以处理涉及金钱、货物或财产的任何类型的在线交易。 网上金融交易的潜力很大,从税收到允许移民向其他国家的家庭汇款,在这些应用场景中,银行业操作起来可能很困难。

在2017年10月,IBM创建了一个新的区块链支付平台,可以加快跨境支付。 几个国际银行在这个项目上共同合作,包括澳大利亚国民银行和Danamon银行。 10月下旬,香港和新加坡的中央银行同意使用区块链技术在跨境网络上进行合作。

数据虚拟化

数据虚拟化是一个术语,用于描述数据管理的一种方法,允许应用程序恢复和操作数据,而不需要数据的技术细节,例如数据位于何处或如何格式化。它从各种来源向多个用户提供实时的综合和抽象数据。 数据虚拟化模型被认为易于理解、易于构建和易于维护。

数据虚拟化过程涉及从不同来源传输数据。 使用数据虚拟化技术的主要目标是通过单点提供来自各种数据源的数据访问。 这允许用户访问应用程序而不需要其的确切位置。数据虚拟化最近已经适应了云计算,并将在2018年得到越来越多的使用。

  • Jan 18 / 2018
  • 0
Tech

锐眼洞察 | 不可错过的2018年Fintech趋势(翻译)

作者:Adriana Bickford

原文:Top Technology Trends to look for in 2018

译者:TalkingData市场部

本译文禁止商用,转载请注明作者与来源!

随着2017年接近尾声,我们展望新一年,制定目标并翻开新一页。这是一个沉思、想象并满怀雄心壮志进入2018年的时刻。
毫无疑问,2017年让我们认识到,科技已被证明对服务产生了颠覆。从比特币的价格冲上高峰,到人工智能的影响力日益增长,我们可以看到社会对替代性金融服务的需求是多么急切。

热门AI文章:

那么,2018年需要注意那些热门科技趋势呢?通过与行业顶尖专家、领导者与预言家的讨论,我们选出了以下三大趋势。

区块链

由于比特币的神秘性,可能会让很多公司不敢使用它,但事实上数字货币已经进入了市场。甚至进入了证券交易所。

面对比特币在2017年的高潮,我们预测,它会给像以太坊和莱特币等其他加密货币让路,以积蓄能量。已有猜测,以太坊的市值将在2018年超过比特币。

CB Insight预测,到2020年,数字货币将会成为主导货币。企业与政府已经开始聚焦协议如何将数字货币整合入他们的系统,从而不被排除在外。甚至投入更多开发自有的解决方案。在这新的一年,我们将开始看到对加密货币的更多试验和实际应用。

人工智能(AI)

我们已经看到科技如何通过机器学习、机器人科学与聊天机器人,来不断拓展科学与技术的边界。

在2018年,AI与机器学习将继续占领新闻头条。有预估,到2020年,将有85%的客户交互由AI完成。随着实验进行,我们开始看到自动化流程将消除错误并降低成本。在2018年,其将通过分析与大数据的形式来优化决策并提高服务速度,产生更大的价值

在2018年,AI将不仅仅是“可有可无”而是“必不可缺”。

数字化体验——这次针对后端

虽然,数字化转型的焦点之前都集中在前端,我们预测,2018年将借助科技来赋能后端流程与系统,从而为客户提供全面的、流畅的体验

系统必须整合从触点到渠道来提供实时的客户交互,从而提供转型的业务模型。

上面就是我对金融科技发展方向的预测。由于对数字化服务的需求的增长,我们将继续看到客户离开网点并通过他们的设备轻松进行交易。传统银行要注意这些预测,并快速向整体客户旅程从面对面服务升级到日常服务的阶段转变。

2017年已经过去,是时候聚焦2018年,并关注如何参与到即将改变未来金融大局的主流趋势中来。

  • Jan 17 / 2018
  • 0
Tech

锐眼洞察 | Apple开源机器学习框架 Turi Create 简介与实践

作者:TalkingData研发工程师 张永超

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

logo.png

日前,苹果在 GitHub 平台上公布了 Turi Create 框架,苹果表示,这个框架旨在通过简化机器学习模型的开发,降低开发者构建模型的门槛。详细说明如下:

Turi Create 概述

Turi Create简化了自定义机器学习模型的开发。你不需要成为机器学习的专家,即可为你的程序添加推荐,对象检测,图像分类,图像相似度识别或活动分类。

  • 易于使用:让你聚焦于任务而不是算法
  • 可视化:内置的流式可视化功能可以探索你的数据
  • 灵活:支持文本,图像,音频,视频和传感器数据
  • 快速和可扩展性:可在单台机器上处理大型数据集
  • 易于准备配置:模型导出到Core ML,即可用于iOS,macOS,watchOS和tvOS应用程序

使用Turi Create,你可以处理很多常见的场景:

你还可以使用基本的机器学习模型做成基于算法的工具包:

支持的平台

Turi Create支持:

  • macOS 10.12+
  • Linux(依赖于glibc 2.12+)
  • Windows 10(需要WSL)

系统要求

  • Python 2.7(即将支持Python 3.5+)
  • x86_64架构

安装

Linux不同变种的安装详细说明,参阅LINUX_INSTALL.md。常见的安装问题,参阅INSTALL_ISSUES.md

苹果官方推荐使用环境virtualenv,安装或建立Turi Create。请务必使用你的系统pip安装virtualenv。

WX20180117-182218

安装Turi Create的方法参照标准的python包安装步骤。要创建一个名为venv的Python虚拟环境,请参照以下步骤:

WX20180117-182233
要激活新的虚拟环境并在此环境中安装Turi Create,请按照下列步骤操作:

WX20180117-182243
另外,如果你使用的是Anaconda,你可以使用它的虚拟环境:

WX20180117-182306
在您的虚拟环境中安装Turi Create:

WX20180117-182315

GPU支持

Turi Create不一定需要GPU,但某些模型可以通过使用GPU加速。如果要在安装turicreate包后启用GPU支持,请执行以下步骤:

  • 安装CUDA 8.0(说明
  • 为CUDA 8.0安装cuDNN 5(说明

确保将CUDA库路径添加到LD_LIBRARY_PATH环境变量。通常情况下,这意味着将以下行添加到 ~/.bashrc文件中:

WX20180117-182326
如果你将cuDNN文件安装到单独的目录中,请确保单独添加它。下一步是卸载mxnet并安装启用CUDA的mxnet-cu80包:

WX20180117-182336

确保你安装的MXNet版本与turicreate依赖的版本相同(当前为0.11.0)。如果你在设置GPU时遇到困难,可参阅MXNet安装说明

当然,除了上述的安装方式之外,你还可以从源码构建,如果想要从源码构建,可参阅BUILD.md中的详细说明。

猫狗大战

Turi Create可以训练定制的机器学习模型。这意味着可以开发可识别不同对象的模型,只要您使用大量图像训练模型即可。

这里我们以识别猫狗为例,建立一个自定义的模型,可以识别图像是猫还是狗。

1. 下载猫和狗的图像

第一步是下载很多猫和狗的图像。这是必要的,因为我们将使用图像来训练我们的自定义模型。这里我使用的是Kaggle Dogs vs. Cats的数据集。如果你觉得在这里单独下载麻烦,可直接在Kaggle Cats and Dogs Dataset中下载全量数据集。

下载好图像数据集之后,我们解压到对应的文件夹内备用。

2. 标记数据、训练模型

在开始训练我们的模型前,首先需要对每一张图像标记其为‘cat’还是‘dog’。幸运的是Turi Create提供了标记基于不同文件夹的图像的功能,具体代码如下:

WX20180117-182352

标记完成后,可以看到数据集的全局情况:

上述代码的最后一行 data.explore(),会自动打开Turi Create的图像可视化查看工具,在这里你可以看到每张图像以及相应的标记,也是一种核查标记是否正确的方式。

数据集准备完成后,就可以进行模型的训练了。在训练的时候,会将数据集按照‘二八原则’进行训练集和测试集划分,然后进行模型训练:

WX20180117-182407

训练的过程可能会花一点时间,长短取决对机器的配置。在训练的过程中,Turi Create会打印出每一步执行的动作,如下:


……

最终我们得到的正确率为:0.986954749287,但看这个结果还不错。并且已经导出了mymodel.model和支持Core ML 的 CatsAndDogs.mlmodel

3. 移植模型到iOS应用程序

有了CatsAndDogs.mlmodel模型文件后,我们就可以将其移植到iOS应用程序中了。关于如何集成,可参考Apple官方的图像识别例子,这里不再陈述:

总结

本篇内容对Apple公开的Turi Create机器学习框架进行了简单的介绍,并实践了Turi Create在图像识别方面的一些基本用法。Turi Create不仅仅能用于图像识别,在其他方面能有很好的表现,目前Turi Create还刚开源不久,相信在社区的力量下,会带来不同的功能和体验,拭目以待。

  • Jan 17 / 2018
  • 0
Data, Tech

锐眼洞察 | 数据管理的未来:一场工业革命(翻译)

作者:Amber Lee Dennis

原文:The Future of Data Management: An Evolution of the Industry

译者:TalkingData数据工程师 孙强

本译文禁止商用,转载请注明作者与来源!

DATAVERSITY最近采访了MapR创始人John Schroeder,以了解他对数据管理领域未来发展方向的想法。 Schroeder在企业软件领域拥有超过20年的经验,专注于数据库管理和商业智能。 这样的背景使Schroeder洞察到数据管理的世界如何随着时间的推移而变化,以及现在发生的主要趋势。

人工智能的重振

人工智能(AI)现在已经回到了主流讨论中,Schroeder说,它是涵盖了机器智能、机器学习、神经网络和认知计算的一个热门词汇。

人工智能将被快速采用,使用在大型数据集上部署的简单算法来解决重复的自动化任务。他说,与传统平台相比, “谷歌已经提到简单的算法,经常执行大数据集比使用更小集的其他方法产生更好的结果。”

他补充说:“使用现代和传统的处理模式,可以处理三个V的水平可伸缩平台:速度,种类和数量可以提供10-20倍的成本效率。”我们将看到应用人工智能 到高容量的重复性任务“。

Schroeder展示了一种简单的AI使用方法,它将特定的客户购物属性分组到聚簇。 他说:“聚类是非常基本的人工智能算法之一,因为一旦你可以聚集项,那么你可以预测一些行为。 现在可以调整大量数据的算法,以便聚簇变得更紧密、更快速,这使得数据保持新鲜和相关。 当单个聚簇中的点之间的标准偏差尽可能紧时,可以在整个聚簇中进行假设,并向该聚簇内的其他客户提供报价和服务,并具有合理的成功预期。

当将聚簇建立到像亚马逊或沃尔玛这样的在线零售商的运营系统时,影响行为的潜力是显著的。 他说,在一个静态定价的在线目录中,购物车的放弃率是“走到尽头”。 但是通过使用人工智能,商店可以推荐其他产品,同时实时搜索具有竞争力的价格,动态调整价格,提供店内优惠券和价格保证,让客户感觉到自己得到了最好的产品价格可用。

“这是世界的速度。 他说:“客户在切换到另一家公司之前,要实时向每一位用户实时提供个人信息。”

大数据治理vs竞争优势

“治理与数据价值”的拔河将从前沿向中心移动。 企业拥有大量有关其客户和合作伙伴的信息,现在正面临着法规遵从所需的数据治理与免费使用数据以提供业务价值,同时避免破坏性数据泄漏或违规行为之间的拉锯战。

Schroeder表示,主数据管理(MDM)是一个大问题,一段时间内,这是一个很大的问题。 对于任何组织来说,“跟上治理,血统,安全和访问”是非常非常非常困难的,尤其是在扩大组织中使用的数据量的时候。 他说,更聪明的组织正在问:“我们的数据的哪一部分必须被管理和遵从,还有其他哪些数据源不需要这些? 所以它可以让他们摆脱世界上所有的MDM的老鼠洞。”

“如果我说:’你今天晚上为什么不回家去,把你家里每件物品的Excel表格都打上电子表格,然后记录下任何人接触,使用或吃的东西’,你什么都做不了,对不对? 所以你不得不说,有人吃了香蕉,我得去更新数据库。“

他说,领先的组织将在受管制和非受管制用例之间应用数据管理。 受管制的用例需要数据治理,数据质量和数据沿袭,因此,监管机构可以通过对原始来源的所有转换来报告和跟踪数据。 这是强制性的和必要的,但是对非实时数据以及结构化和非结构化数据混合产生更有效的结果的非监管用例进行限制。

公司专注于数据湖泊,而不是沼泽

组织正在从“构建它,其他的都会跟来”的数据湖方法转向实现业务驱动的数据方法。 Schroeder说,使用案例导向驱动了分析和操作的结合。

一些公司梦想有一个数据湖,所有的事情都是在“一个集中的,安全的,全面管理的地方收集的,任何部门都可以随时随地访问”,Schroeder说。 这听起来很有吸引力,但是往往会导致数据沼泽,无法满足实时和操作用例要求,最终看起来更像是重建的数据仓库。

事实上,今天的世界发展速度更快。

Schroeder表示,为了与当今这个快速发展的世界展开竞争,企业需要分析和运营能力来解决客户的需求,并在个人层面实时处理设备与设备的接口。

“电子商务网站必须实时提供个性化的建议和价格检查。 医疗机构必须处理有效的索赔,并通过将分析与操作系统相结合来阻止欺诈索赔。 媒体公司正在通过机顶盒对内容进行个性化处理。 汽车制造商和乘坐分享公司正在与汽车和司机进行大规模的互动。“
有一个预定义的业务用例是不够的。 这个企业必须“足够有远见,以至于能够考虑接下来的几个用例,所以他们不想仅仅为第一个用例服务就把自己逼到一个角落”。

他预测,提前定义用例的企业将会是最成功的,因为“客户在表达需求方面做得更好,他们知道价值会是什么”,这与广义的“构建它,他们会来”的想法相反 。

提供这些用例需要一个敏捷平台,可以提供分析和运营处理,以增加从后台分析到前台运营的其他用例的价值。 组织将超越“提问”方法,构建推动初始和长期的商业价值。

数据敏捷性区分赢家和输家

Schroeder表示,处理和分析模型的发展将提供与DevOps类似的灵活性,因为组织认识到数据敏捷性(理解数据和采取业务行动的能力)是竞争优势的来源。

“公司可能会犯的错误是实施一个单一的方法。 他们会说,’我们真正需要的是能够做Spark处理。 所以我们要用一种只能做Spark的技术来做到这一点,然后他们在三个月的时间里就会说:’好了,现在我们必须把这个显示给很多用户,所以我们 需要做全球信息传递[但是]我们部署的平台不会这样做。 我们现在干什么?

与其引入另一种消息传递技术,并试图找到一种在Spark和全球消息传递之间传递数据的方法,然后设置访问控制和安全角色等等,企业可以使用技术使其更加敏捷, 而不是陷入一个特定的平台,他说。

“敏捷处理模型的出现将使相同的数据实例支持多种用途:批量分析,交互式分析,全局消息传递,数据库和基于文件的模型。 当单个数据实例可以支持更广泛的工具集时,分析模型更加敏捷。 最终的结果是支持最广泛的处理和分析模型的敏捷开发和应用程序平台。”

区块链转换选择金融服务应用程序

Schroeder表示:“金融服务中将出现选择性的转型用例,这些用例对数据存储和交易的处理方式有着广泛的影响。 他说:“区块链为消费者提供了明显的效率。 因为客户不必等待SWIFT交易,也不必担心中央数据中心泄露的影响。

Don Tapscott与Blockchain Revolution的合伙人Alex Tapscott在一篇名为“区块链将改变你的生活”的文章中写道:

“大银行和一些政府正在实施区块链作为分布式账本来革新信息存储和交易的发生方式。 他们的目标是值得赞美的 – 速度快,成本低,安全性好,错误少,消除了中心点和失败点。”

Schroeder继续说,作为一个信任协议,区块链提供了“一个全球性的分布式账簿,改变了数据存储和交易的处理方式。”由于它运行在遍布全球的计算机上,Tapscott补充道。

“没有中央数据库可以破解。 区块链是公开的:任何人都可以随时查看,因为它驻留在网络上,而不是在一个负责审核交易和保存记录的机构内。

事务存储在块中,每块指向前面的块,块都打上了时间戳,数据存储在一个不能改变的格式中,Schroeder说。 “对于企业来说,区块链提供了节约成本和增强竞争优势的机会。”

机器学习最大化微服务影响

数据管理将看到机器学习和微服务整合的增加,他说。 先前的微服务部署集中在轻量级服务上,那些已经包含了机器学习,通常仅限于应用于窄带数据流的“快速数据”集成,Schroeder说:“我们将看到一个发展转向利用大数据的有状态应用程序,并且使用机器学习方法,这种方法使用了大量的历史数据,以更好地了解新到达的流数据的上下文。”

  • Jan 17 / 2018
  • 0
Data, Tech

锐眼洞察 | 大规模数据管理系统Data Tamer介绍(翻译)

作者:Michael Stonebraker、Daniel Bruckner、Ihab F. Ilyas、George Beskales、Mitch Cherniack、Stan Zdonik、Alexander Pagan、Shan Xu

原文:Data Curation at Scale: The Data Tamer System

译者:TalkingData数据产品经理 张雪渊

本译文禁止商用,转载请注明来源与译者!

注:

本文翻译自MIT关于Data Tamer的一篇论文,详细信息可查看

摘要

数据管理是发现兴趣数据源,清理、转换新的数据,在语义上将其与其他本地数据源进行整合,并删除重复数据的行为。现在有很多研究内容是针对数据管理的各个组成部分(特别是数据集成和重复数据删除)。但是,甚少有人将所有数据管理组件集成到一个端到端系统。

另外,以前大部分研究都不会扩展到我们在这个领域发现问题的规模。例如,一个Web聚合器需要管理80,000个URL,一个生物技术公司则需要管理8000个电子表格。在这样的规模下,数据管理不可能是手动(人工)工作,而机器学习方法,人工只在必要时给予协助。

本文介绍Data Tamer,是我们在麻省理工(M.I.T)、布兰代斯(Brandeis)、卡塔尔计算研究所(QCRI)建立的端到端管理系统。Data Tamer将一系列数据源添加到随时间构建的复合结构中。新数据源按照机器学习算法以执行属性标识,将属性分组到表格,转换输入数据及重复数据删除。 必要时可寻求人工帮助。此外,Data Tamer还包含数据可视化组件,个人可以随意检查数据来源或者手动指定数据转换过程。

我们已经在三个真实世界的企业管理问题上运行了Data Tamer,结果显示,相比当前使用的其他生产软件,Data Tamer降低了大约90%的管理成本。

1. 介

在数据集成方面已经有相当多的,特别是在提取,转换和加载(ETL)系统,数据联邦,数据清理,数据规格集成和实体重复数据删除。然而,我们相信未来系统将需要的但是现有方法(系统)通常缺乏以下四个特征:

  • 自动化的可扩展性

我们遇到的所有数据整合问题排除了以人为本的解决方案。下一代系统必将是自动化的算法系统,只有必要时才需要人的帮助。另外,机器学习的进步和统计技术的应用可以用来自动做出许多更简单的决定。

  • 数据清理

企业数据源不可避免地很脏。属性数据可能不正确,不准确或缺失。未来的问题需要自动化解决方案,只有在必要时才需要人工帮助。

  • 非程序员方向

当前提取,转换和加载(ETL)系统具有脚本语言适用于专业程序员。下一代问题要求非专业员工能够进行数据整合任务。

  • 数据一直增加

新数据源必须在未发现时逐步集成,数据整合任务从来没有完成的概念。

这四个问题应该在一个统一的架构中解决,我们称之为数据管理系统。 本文的目的是描述Data Tamer,基于上述需求所研发数据管理系统。 在第2节中,我们首先简要介绍Data Tamer设计要解决的三个示例数据管理问题。然后,第3节继续使用DataTamer实现的语义模型,接着在第4节中对系统的主要组件进行描述。最后,第五部分介绍了一系列关于现实世界的问题的实验。我们在第六部分总结了未来可能加强的部分。

2. 应用案

2.1 Web聚合器

这个聚合器集成了大约80,000个URL,收集有关“要做的事情”和事件的信息。事件包括讲座,音乐会和酒吧的现场音乐。“要做的事情”是指远足路线,气球游乐设施,雪地汽车出租等。层级目录概念被用来组织数据,所有的信息存储到这个结构中的某个层级。

从特定URL收集数据的决定是通过与本文不相关的手动和自动组合完成的。一旦决定,离岸“包装代工厂(etl数据处理工程师)”写代码从URL中提取数据。对于在给定的URL处发送的每个实体,封装器会输出一组键值对,例如(key1-name,value-1),(key2-name,value-2),::,(keyK -name,value-K)。不幸的是,源数据很少是web表,但通常在下拉菜单,文本字段等。 因此,网站封装是有价值的。

这个聚合器需要将这8万个数据源联合成一个语义上紧密的事实集合。80,000个数据源包含大约13M本地记录,大约有200K个本地属性名称。另外还有本地的信息可能不一致,重叠,有时不正确。因此,这个聚合器面临着一个困难的数据管理问题,他们使用一个特定的集合来解决这个问题和以人为本的技术。DataTamer的目的是以比现有解决方案更低的成本在这类问题上做得更好。

2.2 生物学

一家大型制药公司拥有8000名生物学家和化学家进行实验室实验。每个人维护一个“实验室笔记本”,通常是一个电子表格,记录他们的数据和观察结果。大多数科学家使用不同的技术和收集实验特定的数据,如浓度和密度。然而,这8000名科学家中的一些可能正在研究相同的反应,或者从同一个分子开始。整合这8000个来源是非常有价值的,所以所有的科学家都可以更好地了解所有实验研究的反应结果。

不幸的是,属性名称没有标准,没有计量单位的标准,甚至没有为文本语言标准(英语,德语等)。

这8000个电子表格总共包含大约1百万行,100000个属性名称。再次申明,问题的规模使当前的数据集成工具过于昂贵。Data Tamer的目标是比目前的软件以更低的成本做更好的工作。

2.3 健康服务应

Verisk Health为索赔记录进行数据集成,共收集了300家保险公司。他们已经为这些资源手动构建了一个全局数据格式,并正在寻找用更多的自动化手段取代他们的手动流程。 另外,他们的综合数据库包含2000万条记录,他们希望统一医疗提供者的索赔数据。 换句话说,他们希望汇总所有的索赔记录,按提供者分组。实际上,他们想要使用域的一个子集重复数据库。他们目前正在通过大量的人工干预来完成这项任务,并寻找一种成本更低,自动化程度更高的解决方案。DataTamer的目的是以比现有解决方案更低的成本获得更好的结果。

3. Data Tamer语义定义

3.1 角色

Data Tamer设置了以下人员角色:

  • Data Tamer 数据管理员(DTA)

这个角色类似于传统的数据库管理员。因此,DTA负责将角色分配给其他人,并决定在数据管理过程中采取什么行动。具体而言,DTA指定DataTamer必须设法收集的数据源。

  • 领域专家(DE)

这些领域专家可以被要求回答在数据管理过程中出现的问题。每个DE都有一个或多个专业领域,他们被组织成一个创新的众包组织,这将在4.3节中解释。

3.2 Sites and Schemas

Data Tamer假设DTA指定的网站由URL或文件名称。每个网站被假定为一个集合记录,每个记录包含一个或多个键值对。上游封装可能需要构造这种格式从网站实际存储的内容 在目前的时间,Data Tamer并不关注如何降低这类包装的成本。

Data Tamer假定每个本地数据源都有关于一个实体的信息。 因此,如果源是多方面的,则必须使用两个或更多的包装来确保每个源包含仅关于一个实体的数据。 如果每个站点都描述一个不同的实体,那么就没有整合的问题。 因此,Data Tamer的目标是将本地站点分为描述同一个实体的类。 在版本1中,没有必要确定实体之间的关系(例如可能存在于RDBMS中的外键)或者处理其他完整性约束。这些扩展留待将来研究。

对于每一类实体,都有三种可能的信息等级。这取决于数据管理是以自上而下的方式进行还是以自下而上的方式进行。在自上而下的模式中,DTA具有关于他试图实现的模式的信息。 因此,目标是部分或完全指定的。 在自下而上的模式中,这样的全球知识不见了,全球模式被拼凑在一起 从当地的数据来源,可能提示从DTA提供。 任何一个模型都可以用于某个特定的类别的事实导致了以下三个层次的信息。、

  • 等级3:完整的知识

在这种情况下,DTA使用自顶向下的方法给定类实体的完整全局数据规格。通常,DTA还将每个本地数据源映射到特定类别。 但是,如果不这样做,Data Tamer将包含自动执行此任务的算法。尽管Verisk应用程序提供了这一级别的知识,但我们发现级别3是在实践中相当罕见。

  • 等级2:部分信息可用

使用自上而下或自下而上的方法,可能会有部分信息可用。某些类别可能存在已知的特定属性的实体。 Web聚合器就是这种情况,因为它需要在其分类层次结构中为每个节点提供特定的属性。或者,可能有模板可用。模板是可能在多个实体类别中的一个中一起出现的属性的集合。例如,美国地址的模板可能是(数字,街道,城市,州,邮政编码)。请注意,模板只是一个复合类型,即通常一起出现的一组属性。 模板可以由DTA指定为“提示”,或者可以通过机器学习来识别如第4节所述。

  • 等级1:没有可用的知识

在这种情况下,类的结构信息和自下而上的整合都是不知道的。这种细节可能是真实的,例如,关于随机的HTML表格,这些表格是从网上抓取的。这就是像Web表格这样的系统的世界。虽然这是生物学应用的知识水平,但我们认为在实践中也是不常见的。

3.3 其他信息

此外,在许多领域,还有标准字典,这些字典应该被Data Tamer使用。字典是一些数据类型的数据值列表,可以填充某些数据源中的属性。 例如,美国有50个州,美国约有3万个城市等。 字典用于指定这些属性的名称和合法值。 有这么多的词典DTA希望指定。

字典被推广到权威的表格。 这些是已知具有正确信息的辅助数据表。 例如,(城市名称,机场名称,机场代码)列表可以是具有三列的权威表格。

此外,数据驯服容纳的同义词表单XXX是YYY。 例如,“工资”是“工资”或“镇“是一个”城市“。 在未来的版本中,我们可以扩展这个能力转化为更一般的本体论。

3.4 管理控制台和Data Tamer操作

网站,类别,模板,词典,权威表格,同义词可以通过一个DATA管理控制台,这是一个相当传统的图形用户界面。

这个控制台的一部分专门用于允许DTA指定Data Tamer执行的操作。 这些行动是:

  • 获取新的数据源,并将传入的数据存储到Postgres数据库中。在当前版本的Data Tamer,这个数据库存在于一个节点上;然而,把这个数据库分割到的多个节点和并行化要描述的算法是非常简单的。
  • 在数据源上执行属性标识,如4.1节所述。
  • 在数据源上执行实体合并,如第4.2节所述。

在属性标识或实体合并过程中的任何时候,Data Tamer都可以请求DE的人员帮助,如4.3节所述。 最后,如第4.4节所述,任何人都可以使用Data Tamer特定接口直观地显示任何数据集。我们可以切换到更复杂的Data Tamer可视化系统[1],从而在那个系统里支持可能的手动转换这个问题将在4.4节中进一步讨论。

在任何时候,DTA可以要求在所有站点上重新进行属性标识和/或实体合并。显然,由于Data Tamer系统中存在更多的站点,这是一个耗时的任务。 但是,更好的决定可能是基于存在的更大量的信息而可用。 因此,如果上面没有指定source-i或source-j,则Data Tamer应该运行要在所有数据源上描述的算法。

最后,Data Tamer保留了所有执行操作的历史记录,DTA可以将策展过程向后回溯到任何过去的历史点,这是通过使用不覆盖更新策略来实现的。

3.5 训练数

在我们与有企业数据管理问题的人的对话中,我们看到了Data Tamer使用两种不同的情况。 第一个适用于知识水平最低或没有先进知识的情况(即第一级和第二级以上)。 在这种情况下,Data Tamer只是最开始使用。最初是非常愚蠢的,必须定期向人们寻求帮助。 后来它变得越来越聪明,所以要求的次数越来越少。而且,由于增加了知识的好处,往往在已处理的网站上返回并运行属性标识和实体解析是很有意义的,可能更好地做出决定。 增加的知识。 因此,训练数据是由Data Tamer的众包组件随着时间的推移而积累起来。

第二个场景涉及更多信息已知的应用程序(上面的第3级)。 在这种情况下,我们观察到现实世界的应用程序通常有可用的培训数据。 具体而言,它们具有“已知重复”的实体和/或属性的集合。换句话说,它们具有已知匹配的本地标识符对的集合。不能保证他们找到了所有的匹配规则。因此,他们提供了一个匹配的属性名称或实体的集合,没有误报。我们已经注意到,提供虚假肯定的危险性在真实问题上很高,所以真实世界的DTA非常谨慎。 因此,他们提供手工收集已知的匹配。

在第一种情况下,我们开始运行Data Tamer系统,适当的时候请求人帮忙。 在第二情景,我们利用已知的重复作为初始训练数据。 我们在第4.2节中提供更多细节。

3.6 数据源更新

最后,一些数据源可能是动态的,并不断更新。在这种情况下,Data Tamer可以创建之前数据源-k的新快照。在这种情况下重新处理数据源是有意义的,因为信息已经改变了。在版本1中,没有接受实时数据反馈的概念。 这样的扩展留给将来的版本。

4. Data Tamer

Data Tamer的架构图如图1所示。图中显示的是管理控制台和规格集成的组件,实体合并,DE 支持和人的转变。 这四个子系统在本节中描述。在这里大部分描述的功能目前能够正常运行运作。

4.1 数据格集成

模式集成中的基本内部循环是从数据源中提取一个属性Ai,并以成对的方式将其与其他属性的集合进行比较。 对于每一对,我们都可以使用属性名称和值的集合。 我们的方法是使用一组算法,我们称为专家,每个算法返回0到1之间的分数。之后,将这些分数与一组权重进行合并以产生合成值。 Data Tamer配备了以下四位内置专家,可以通过简单的API插入其他专家。

  • Expert-1 使用三角余弦相似度对属性名进行模糊字符串比较。
  • Expert-2 将一列数据视为一个文档,用一个标准的全文分析器标记其值。然后,测量列之间的TF-IDF余弦相似度。
  • Expert-3 这位专家使用一种称为最小描述长度(MDL)的方法,使用类似于Jaccard相似性的度量来比较两个属性。 这个度量计算了两列数据交集的大小与它们并集大小的比值。 由于它依赖于属性之间的精确匹配值,因此非常适合分类和有限域数据。
  • Expert-4 最终专家计算韦尔奇的一对包含数值的列的t检验。 给定列的均值和方差,t检验给出列从相同分布得出的概率。

要比较的属性取决于Data Tamer可用的信息级别,如下一节所述。 此外,DTA可以为建议的映射设置一个阈值,从而可以自动采用高度的信任建议,而低的信任映射进入人员审查队列。

4.1.1 属性映射

Data Tamer将要考虑的属性映射取决于手头有哪些可用于处理问题的信息,如3.2节所述。 根据正在检查的级别,使用不同的策略。

  • level3 在这种情况下,Data Tamer知道全局模式,即所有类的实体及其相关的属性。有时,Data Tamer被告知传入数据源所属的类。 在这种情况下,它只能匹配两个属性的集合。 运行规格集成组件的结果是传入属性与全局模式中类的元素的配对。 如果 Data Tamer不确定配对,即匹配得分小于阈值,那么如4.3节所述涉及人。 在其他情况下,必须确定传入实体所属的类别。 在这种情况下,Data Tamer在所有类上运行上述算法,并计算属性的总计匹配分数。 然后选择最好的一个。当然,如果没有足够高的分数,或者如果有两个分数相似的类,那么人就参与决策过程。 应该注意每个传入的属性 该算法到目前为止所看到的属性数量是线性的。 因此,总的复杂度是二次的。 本节稍后讨论可伸缩性问题。
  • level2在这种情况下,Data Tamer可以确定属性的一个子集。 如果是这样,则运行上述算法。如果属性不匹配,则将其添加到模式中 DTA指定的类或算法标识的类。未来的数据源可以匹配更大的属性集合。 复杂性与之相同 3级。 如果模板可用,则考虑任何模板中的所有属性的集合S,以及任何字典名称和同义词.Data Tamer使用两遍算法。 首先,它将所有传入的属性与S的成员进行匹配,只保留得分最高的一个。 在第二遍中,如果其他属性与所选模板中的其他属性相匹配,则将传入属性的分数向上调整。然后,如果阈值高于阈值,则保持匹配。 此外,Data Tamer还会监视传入站点是否收集通常一起出现的属性。 如果是这样,它会自动将集合定义为新模板,并将新成员添加到模板字典中。
  • level1每个传入的属性都与以前看到的所有属性,同义词和词典进行比较。 对于所有级别来说,最坏情况的复杂度是属性总数的二次方。 第一个专家在成对的属性上运行起来非常便宜,因为它不会查看数据。另外三个专家必须检查数据列,而且要昂贵得多。 到目前为止,我们的属性识别算法的运行时间并不是一个惊人的,因为它们运行是“离线”,我们的第一个改进是将它们并行在一个计算机网络的多个节点上,方法是复制Postgres数据库,然后”分割“传入的属性。 这将产生几个数量级的改善。 之后,进一步的运行时间改进将需要两步处理,其中一个属性的子集具有便宜的第一通道和更昂贵的第二通道。 这种两步法将引入额外的专家,其运行时间与属性数据集的大小无关。现在的第一个专家比较属性名称就是一个例子。其他专家将根据属性元数据或从属性数据派生的样本进行比较。可用的元数据包括类型和描述字符串等数据集中的显式字段。尽管明确的元数据可能不可用,但总是可以计算有用的属性属性并将其存储在统计表中。有用的衍生元数据包括计数以及不同值的直方图,推断的数据类型等等。这些统计数据对于为其他专家构建样本也非常有用,例如,计算两个属性的最常用k值的Jaccard相似度的专家。这些首先通过的专家将作为高昂的通行证来处理更昂贵的二次通行证,并节省浪费的时间,几乎没有共同之处。

4.2 实体合并

实体合并有效地建模为重复消除。目标是找到足够相似的实体被认为是重复的。这个模块收到一个集合的记录,R1,: ::,Rn,来自一个或多个本地数据来源增量到达。我们假设这个属性 以前已经进行过鉴定。因此,所有记录具有来自一组属性的属性值A1,:::,Am。一般来说,数据可能会很嘈杂和稀疏的。

重复数据删除过程分为多个任务,我们在下面展示。

4.2.1 导训练过

最初,系统对重复数据删除规则了解不多。我们从已知重复和非重复的训练集中学习重复数据删除规则。我们假设重复的元组通常至少有一个具有相似值的属性。我们获得一组元组对,这些元组对可能会被重复呈现给专家用户,如下所示。设Simi表示属性Ai的值的相似性度量。对于每个属性Ai,我们将Simi的范围划分为若干个等宽分类,并且对于每个分类我们选择与属于这个分类的Simi的元组对的样本。然后将获得的对按属性相似性排序,然后呈现给专家用户进行标记。由于所呈现的对按照属性相似度从大到小的顺序排列,因此专家可以选择停止低于某一相似性阈值的标记对,并将剩余的未看见的对声明为不重复。我们用TP表示被标记为重复的一组对,而我们 用TN表示标记为非重复的一组对。

为了增加候选对中发现的重复项的预期数量,我们只考虑在获得候选项(例如标题,地址和电话)时具有相对大量不同值的属性,同时丢弃其他不太显着的属性 例如城市和州)。 原因是非独特属性之间的高度相似性不会增加重复的机会。

培训数据的另一个重要来源是已知的重复数据,可以在数据集中使用,如前所述。另外,Web聚合器还提供了几个手工制定的规则,用于高精度地识别重复数据。 再次,这是已知重复的来源。 我们使用现有的信息作为正面的训练数据(即TP)。 负面训练数据(TN)更容易找到,因为非重复数据非常频繁。 给定随机的一组元组对,专家用户只需要排除任何高度相似的非匹配对,导致负面的训练数据(TN)。

4.2.2 记录分类

记录分为多个类别,每个类别代表一组具有相似非空属性和相似属性值的同质实体。 那么可能会出现这种情况,例如如果西部的滑雪场看起来不像东部的滑雪场。 例如,两类记录中的垂直落差和基础高程显然是不同的。另外,由于强风的关闭可能通常报告为一个类,而不是另一个。记录分类的好处是双重的:首先,通过学习每个类别特定的重复数据删除规则,我们实现更高质量的规则,可以准确地检测到重复的元组。 其次,我们使用元组分类来减少重复检测算法中需要考虑的元组对的数量。 性能增益与当前用于大数据集中实体分辨率的阻塞技术(例如,[7,14])所获得的性能增益类似。

记录的分类可以使用分类器来完成。 在Data Tamer中,分类分两步实现。在第一步中,我们获得一组代表每个类别的代表性特征。 我们通过对可用来源的元组样本进行聚类来获得这些特征。 我们使用基于质心的算法,如k-means ++ [6]。 类别的数量是通过在引导阶段(第4.2.1节)获得的训练数据TP中的重复数据来确定的。

在第二步中,我们将每个元组分配到最近的类别(w.r.t.到一些距离函数,如余弦相似度)。 虽然类似于实现的性能增益中的阻塞,但这种两阶段分类与先前提出的分块算法是基本不同的,通常通过分簇来执行,索引或排序整个数据集是非常昂贵的操作,我们在分类算法中避免这些操作。

新数据集可用时,元组的分类可能会随时间而改变。我们通过添加新类别和/或在需要时合并/拆分现有类别来维护分类。例如,考虑与其他类别相比,给定类别的半径(由类别的代表性特征与类别的成员之间的最大距离测量)变得非常大的情况。 在这种情况下,我们分裂了 类别分为两个或更多个较小的类别。 有效的增量分类是我们目前的研究方向之一。

4.2.3 重复数据规则

重复数据删除规则分为两种类型:(1)属性相似性的截止阈值,它帮助修剪大量的元组对,如4.2.4节所示; 和(2)重复和非重复元组对的属性相似度的概率分布。我们从收集到的训练数据TP(这样本)和TN(负样本)中学习这些规则。 例如,一个规则表明具有相似的“Title”值的两个元组的概率是相似的,因为它们是重复的。 另一个规则表明,在重复项中具有“State”属性的不同值几乎为零。请注意,学习模块将选择忽略一些对学习重复概率无用的属性(例如,由网页聚合器收集的数据中的“用户评分”)。而且,由于它们在语义上是不同的,因此重复数据删除规则区分了缺失的属性值和不相似的属性值,我们分别了解每个事件的概率。

我们使用一个朴素贝叶斯分类器来获得元组对的属性之间相似性的概率。这个分类器聚合了所有属性的条件概率,以获得重复的边际概率(假设条件对属性的独立性)。

4.2.4 相似度

两个数据集之间的相似性连接的目标是检索所有重复的元组对。一旦获得了重复数据删除规则,如4.2.3节所示,我们执行相似性连接如下。我们获得所有候选元组对,其中每一对属于同一类别,并且至少一个属性具有超过其学习阈值的相似度。然后,我们计算候选对的属性相似度,并根据4.2.3节中学到的分类器使用这些相似性来识别重复记录。相似性连接是逐步执行的,以适应不断添加的新数据源。对于每个新源,我们首先对新源中的元组进行分类,对新元组执行自相似性连接,并在新源中的元组和新元组中进行元组之间的相似性连接。当增加新的训练数据是因为要求人类帮助解决不明确的情况时,我们更新重复数据删除规则,有效识别哪些元组受到这些变化的影响并重新分类。

4.2.5 记录聚合和合

一旦我们获得被认为是重复的元组对的列表,我们需要获得元组的聚类,使得每个聚类代表不同的真实世界实体。对元组进行聚类可以确保最终的重复数据删除结果是可传递的(否则,重复数据删除结果将不一致,例如将(t1; t2)和(t2; t3)声明为重复对,而声明(t1; t3)是不重复的。 我们依赖于[13]中引入的相关聚类算法的修改版本。给定一个相似度图,其节点表示元组,并且其边连接重复的元组对,我们执行如下聚类。该算法以所有单个聚类开始,并且重复合并随机选择的具有高于某个阈值的“连接强度”的聚类。我们将两个聚类之间的连接强度量化为跨越两个聚类的边缘的数量 即,两个群集的笛卡尔乘积)。当没有更多的集群可以被合并时,该算法终止。

当基础相似性图变化时(即,新的边和/或现有的边被删除),我们更新聚类如下。 我们确定图中所有与任何修改边相关的节点。 包含任何这些节点的簇被分割成单个簇。然后,我们在新的单个簇上重新应用相同的合并操作。

每个群集中的元组使用用户定义的规则进行整合。 首先丢弃空值,然后使用标准聚合方法(如Most-Frequent,Average,Median和Longest-String)来组合每个集群中元组的属性值。

4.3人机界面

在属性识别阶段和实体整合阶段,DTA可以要求DE(领域专家)提供输入。在属性标识的情况下,任务是确定两个属性是否相同。 在实体解决的情况下,任务是确定两个实体是否重复。 Data Tamer处理的两种情况将在后面两节中介绍

4.3.1 模式

如果需要人工干预的任务很少,或者只有几个DE,那么DTA可以手动将人工任务分配给DE。他这样做是通过使用一系列规则来规定应该发给特定个人的问题类别。或者,他可以手动分配任务。 在这两种情况下,人工请求的路由由DTA以最少的基础设施完成。

但是,如果问题很多,或者由于需要时间的差异,或者如果有很多DE来处理大量的问题,那么就应该采用更复杂的人群采购模式。 Data Tamer实现了下一节讨论的模型。

4.3.2 众包模式

大规模的数据管理可能需要招募更多专业知识较少的领域专家(DE)来帮助解决工作量。这些 DE可以被要求完成“简单”的任务,或者可以被众包来产生更高的正确性的结果,而不是任何一个人都可以假设的结果。 但是,大量多样化的DE人口需要解决以下几个问题:

  • 响应质量的确定。 当一项需要人工干预的任务被转交给一位专家时,可以认为所得出的答案是准确的。 但是一个由多个DE来解决的任务 可变的专业知识可能会导致质量变化的多重反应。 因此,由一组DE返回的一组不同的响应应该伴随着一个概率分布,它反映了每个响应中的总体置信度是正确的。
  • DE领域专业知识的确定。 对任务的每一个不同的反应的意见必须是那些给出这个回答的DE的给定任务领域的专业评级的函数。 这对如何表征和确定领域专业知识带来了挑战。
  • 有用和及时的DE响应的动机。 考虑到DE人口的多样性,个人DE的反应和反应会有所不同。 这里的问题在于如何鼓励DE成为优秀的公民来应对任务。
  • DE工作量的管理。 DE不仅具有变量领域的专业知识,而且具有可变的可用性回应任务。 因此,管理工作量是必要的,因为考虑到工作量的限制,使得DEs既没有负担过重,也没有充分利用。

我们已经建立了一个工具(Data Tamer Exchange或DTX),它作为一个基于市场的专家交换,帮助将需要人力投入的任务与可以提供它的个人或众包的DE相匹配。 DTX假定属性标识或实体解析问题的集合,必须经过验证或驳斥。 对于每个这样的任务,该工具显示一个DTA有多少个DE可用 与任务域相关联的某些特定专家类中的每一个,以及响应的成本和质量将如何根据每个类的多少DE来响应。

DTX的主要特点如下:

  • DE和响应的基于信念的度量。

DTX为每个DE都保留了一个基于信心的专业评估向量 在一组指定的领域中的每一个领域都具有专业知识的程度 由DTA。每个评级是介于0和1之间的值,表示DE对关联域中的任务产生正确响应的概率。DE对特定领域的专业评级是由其他更专业的DE和来自请求应答的DTA在该领域的每个回答所作的评估计算出来的。 使用类似的基于信度的度量来度量响应的质量(即响应正确的概率)。众包产生了一系列响应(TRUE或FALSE),并且使用贝叶斯证据收集(Bayesian Evidence Gathering)从投票选择的响应者的专业评级中收集每个投票的质量评级。更具体地,给出具有专业知识的n个响应者的问题 等级〜E和响应〜R,给定响应b的累积置信度为:

使得B和B是分别表示事件的随机变量,其中响应b分别是正确的和不正确的答案,或者是随机变量(X),使得上面的子产品是正确响应者正确的组合概率(Ri = X),不正确的响应者不正确(Ri != X)。

  • 专家类。

DTX根据DE在该领域的专业知识评级将DEs动态聚类为领域特定的专家类。例如,一个给定领域中最专业的DE可能被分配到专家级别#1的专业评级为0.9或更高。 当一个任务被提交给 DTX,工具通过呈现关于任务领域中的每个专家类别的统计信息,包括DE的数量,每个DE响应的成本(专家评级更高的类别,每个响应更多的类别)以及类别内的DE的最小专业评级。 在这个基础上,一个DTA决定每个级别,他将支付多少(如果有的话)个DE。

  • 对良好公民的经济激励。

DTX假定一个经济模型,由DE获得的回报是相称的与他的专家级。答复付款来自提供完成任务预算的DTA帐户。 系统向DE(与响应相同的速率)和DTA提供对DE响应评价的付款 (他们的工资被加到他们的预算中)。

  • 动态定价来管理工作量。

DTX动态调整每个响应所支付的价格 在每个专业水平,以鼓励选择 未被充分利用的DE和阻止选择 负担过重的DEs。

经济模式有助于解决大规模的两个问题:

1、鉴于可能会审查答复,DEs是激励 提供有用和及时的回应,以获得更高的专业评级,从而获得更高的薪酬。 2、鉴于DTA被分配了一个固定的预算来完成他们所有的任务,他们被激励尽可能少地花费在DE响应上。 通过鼓励DTA根据自己的困难对任务进行分类,并且征求最不专业(因此也是最便宜的)响应具有最低限度可接受的信心的响应,这有助于减轻专家DE的责任。

此外,对于评论的支付, 有助于确保信任评级的准确性 DE的专业知识和回应。

4.4

在任何时候,DTA或DE都可以调用我们的可视化 系统并将本地数据源传递到该系统。 它在屏幕上显示数据源(或源代码示例)。 人可以检查数据源的洞察力。

我们可能会将可视化系统切换到Data Wrangler访问他们的提取,转换和加载(ETL)运营。 这样一个Data Tamer用户可以手动应用Data Wrangler转换并转换数据类型和格式。 在这种情况下,我们可以记住应用转换并将其转换为数据图类型。 如果我们看到未来的数据类型,我们可以申请自动转换。 允许DTA “跟踪”的数据,我们总是采用一个不覆盖更新Postgres数据库中的数据策略。

或者,我们可以实现一个Data Tamer特定的可视化界面。通过这种方式,屏幕组件可以根据数据控制器的需求进行调整。 例如,实体合并系统想要显示可能的匹配簇和模式匹配器想要显示列来自可能匹配感兴趣属性的多个本地数据源。 Data Wrangler中不包含任何功能。

5. 实验验证

我们在网络使用的数据上运行Data Tamer系统在第2节中描述的聚合器。对少于50个人工标记的来源进行适度的培训后,我们的自动系统在90%的时间里成功地识别了正确的属性映射。整体成功取决于个人专家的结果。在80%的时间内,属性名称匹配成功,MDL为65%,模糊值匹配为55%。 由于汇总者的数字列(邮政编码和纬度/经度)很少,T检验专家只提供少于6%的属性的结果,但其结果在65%的案例中是正确的。 专家互相恭维:至少有一位专家为95%的属性确定了正确的映射。

聚合器 Data Tamer
总记录数 146690 146690
重复数据 7668 180445
共同重复数据 5437 5437
所有的重复数据(估计) 182453 182453
准确度 97% 100%
召回率 4% 98.9%

图2:Web聚合器数据实体合并的质量结果

我们使用一套评估我们的实体合并模块的50个数据源。 平均而言,每个数据源都包含 4000条记录,需要160秒才能进行重复数据删除并集成到中央数据库(使用一台机器)。 统计有关发现重复对在50数据源总结在图2中。我们比较了我们的结果到当前重复数据删除找到的重复对网络聚合器使用的算法。 总数数据源中的记录数是146690,Data Tamer报告了180445个重复对,而聚合者的算法只报告了7668个重复对。该聚合者报告的常见对的数量算法和Data Tamer者是5437。

我们假设两个算法均对是真实的重复。另外,我们假定这两个算法都没有报告是真实的非重复的。我们通过要求领域专家检查100对样本来评估剩余对(即一个算法报告的对,而不是另一个)的准确性。根据专家的反馈,90%的网络聚合器报告但是DataTamer 没有报告的是真实的重复,另外,所有的DataTamer 报告的重复,但是网络聚合器没有报告的数据也是真实的重复。因此,汇总者报告的真实重复(估计)数量为5437+(7668-5437)* 0.9 = 7444。报告的真实重复的数量 通过Data Tamer是5437 +(180445-5437)* 1.0 = 180445。数据集中真实重复的总数是5437+ (180445-5437)* 1.0 +(7668-5437)* 0.9 = 182453。Data Tamer的精度为180445/180445 = 100%,聚合器精度为7444/7668 = 97%。Data Tamer的召回率为180445/182453 = 98.9%,而聚合器召回率为7444/182453 = 4%。这些结果清楚地表明,我们的实体合并模块能够显着提高现有重复数据删除算法的召回率,同时保持相同的精确度水平。

我们还在2.2节讨论的生物学问题上运行了模式识别系统。Data Tamer成功映射了86%的属性。最后,我们在Verisk上运行了实体合并模块 医疗索赔数据集。 图3显示了成对记录对在成对相似性上的各种截止阈值的质量。我们将阈值范围[0,1]划分为10个等宽的子范围,并且从每个子范围获得15对的样本。我们依靠领域专家将抽样对分为真实重复和真实非重复。我们计算了每个相似性阈值(图3)的精度,召回率和F1-度量。 为了对这些结果进行透视,我们计算了Verisk使用的当前重复数据删除算法的准确性。 该算法的精度为12%,召回率为30%,F分数为17%。 另一方面,我们的算法在0.8的阈值处归档65%的F分数。

图片 1

图3:Verisk数据实体合并的质量结果

为了评估用户对我们众包交换的接受程度,我们正在对生物学数据进行两步评估之前提到。 该公司计划在他们的整个生物学问题上运行Data Tamer,拥有数百位专家作为他们的群体采购部分。作为第一步,他们想要做一个“空转”,以确保系统正常工作。 因此,他们要求33位领域专家参与系统的测试。 我们使用Data Tamer对其一部分集成问题执行模式映射。 为了验证Data Tamer的映射,我们使用DTX的专家工作者分配算法为33位专家分配了总共236个模式匹配任务。 在每个任务中,用户被要求将Data Tamer的建议匹配标记为True或False,如果是False,则建议替代匹配。 平均而言,每项任务被重复分配给2名专家。 这导致每个用户平均有7个任务分配。

在这个测试中没有给予用户经济激励,测试参与是自愿的。 在我们联系的33位专家中,有18位(54%)登录了系统。 每位登录用户都执行了所分配的任务。 总共,236项任务中有113个任务被完成,64%的任务至少收到一个响应。 自愿回应率低意味着需要通过经济激励对及时的回应给予奖励。完成指定的任务后,我们要求每个参与者以1到3分的来评估系统的可用性。用户给出的平均得分是2.6。

该公司正在在数百个领域专家的帮助下进行全面的系统测试。 我们计划按域分组数据源,然后将这些数据源中的每个用户的数据录入历史记录,来确定适当的初始域专业知识水平。 例如,如果用户是特定域中的数据源的创建者,那么在确定任务的正确答案时,该用户的响应可以比在那个域中没有输入数据的用户的响应更重。 我们期望在不久的将来报告这项研究。

6. 未来增的点

我们在本节讨论的增强功能,在论文的正文中我们指出了各种各样的未来要改进的部分。首先,我们期望并行化所有的Data Tamer算法,让它们可以运行在分裂和/或复制Postgres数据库或针对其中一个并行SQL DBMS。 鉴于许多算法都是通过SQL实现或用户自定义功能,这个扩展很简单。

格式集成模块可能需要加速通过使其成为如前所述的两步算法。 另外,我们还没有有效地考虑机制重做格式集成。由于我们的格式集成算法本质上是顺序敏感的,因此完全有可能在不同的结果下观察到不同的结果网站排序,因为这样一个有效的重做将是必需的特征。

我们的实体整合方案需要增量化,因此所有的子任务都可以在每个新的数据源被整合时和/或添加新的训练数据时被有效地运行。 而且,这个资源密集型模块的并行化将是特别理想的。

到目前为止,Data Tamer中唯一的数据清理操作是在实体合并系统中。 每当有多个记录对应一个实体时,我们都可以自动或在人工协助下生成一个干净的结果。虽然这是一项有价值的服务,但我们需要实施一个特定的清洁组件。 不幸的是,数据清理往往依靠异常值检测或清理的集合规则。 离群值不一定是错误;例如-99是通常用于指示数据丢失。 因此,找到一个在这种情况下,异常值相当于找到缺失值。另外,大多数清洁规则是非常复杂的,如果他们是有用。虽然很容易陈述年龄和薪水必须是非负面的,要说明这一点要困难得多。如果是冬天,靠近窗户的温度应该低于靠近散热孔的温度。 我们期望在不久的将来能够在这个组件上开展工作,并以用户在实践中实际发挥作用为指导。

同样,我们还没有系统地处理数据转换,例如转换本地数据相同的表示法,转换单位或将属性转换为通用含义(例如,不含销售税的价格)。我们的方法是维护Data Tamer数据类型的图表。每当用户练习可视化系统进行转换时,我们计划在图形中将其记为弧。 显然,用户应该能够用相应的代码添加弧来实现转换。 这个图可以用来在可视化引擎中建议转换。

7. 结论

本文介绍了Data Tamer的主要特点,即规格集成组件、实体整合组件、组织领域专家的众包模块及可视化组件。 将来,我们将添加更多的模块来执行数据清理和重复转换。

该系统已被证明对三个企业有价值。 目前,代码已被三家公司采用。

8. 参考资料

[1] http://vis.stanford.edu/wrangler/.
[2] http://www.compositesw.com/solutions/datafederation/.
[3] http://www.ibm.com/software/data/integration/.
[4] http://www.informatica.com/etl/.
[5] http://www.talend.com.
[6] D. Arthur and S. Vassilvitskii. k-means++: the advantages of careful seeding. In SODA, pages 1027–1035, 2007.
[7] R. Baxter, P. Christen, and T. Churches. A comparison of fast blocking methods for record linkage. ACM SIGKDD, 3:25–27, 2003.
[8] M. J. Cafarella, A. Y. Halevy, D. Z. Wang, E. Wu, and Y. Zhang. Webtables: exploring the power of tables on the web. PVLDB, 1(1):538–549, 2008.
[9] S. Chaudhuri, V. Ganti, and R. Motwani. Robust identification of fuzzy duplicates. In ICDE, pages 865–876, 2005.
[10] L. Chiticariu, M. A. Hern´andez, P. G. Kolaitis, and L. Popa. Semi-automatic schema integration in clio. In VLDB, pages 1326–1329, 2007.
[11] P. Christen and T. Churches. Febrl. freely extensible biomedical record linkage, http://datamining.anu.edu.au/projects.
[12] A. K. Elmagarmid, P. G. Ipeirotis, and V. S. Verykios. Duplicate record detection: A survey. IEEE Trans. Knowl. Data Eng., 19(1), 2007.
[13] C. Mathieu, O. Sankur, and W. Schudy. Online correlation clustering. In STACS, pages 573–584, 2010.
[14] A. McCallum, K. Nigam, and L. H. Ungar. Efficient clustering of high-dimensional data sets with application to reference matching. In KDD, pages 169–178, 2000.
[15] T. M. Mitchell. Machine learning. McGraw Hill series in computer science. McGraw-Hill, 1997.
[16] E. Rahm and P. A. Bernstein. A survey of approaches to automatic schema matching. VLDB J., 10(4):334–350, 2001.
[17] V. Raman and J. M. Hellerstein. Potter’s wheel: An interactive data cleaning system. In VLDB, pages 381–390, 2001.
  • Jan 15 / 2018
  • 0
Tech

锐眼洞察 | 脉冲神经网络——下一代的机器学习(翻译)

作者:Devin Soni

原文:Spiking Neural Networks, the Next Generation of Machine Learning

译者:TalkingData研发副总裁 阎志涛

本译文禁止商用,转载请注明来源与译者!

译者注: 现在的深度学习基本上是基于第二代神经网络的学习。第二代神经网络能够解决一些问题,不过离我们想要达到的未来还有很多的路要走,而已经有很多人在研究新一代的神经网络,也就是脉冲神经网络。让我们先对它有一个粗浅的了解。

每个对机器学习近期进展有所了解的人,都应该听说过目前用于机器学习的第二代人工神经网络。第二代人工神经网络通常是全连通的神经网络,它们输入连续的值,然后输出连续的值。 虽然其让我们在许多领域取得了突破性的进展,但其在生物学上并不是非常的准确,并没有模仿到我们大脑神经元的实际机制。 第三代神经网络——脉冲神经网络(spiking neural networks),旨在弥合神经科学与机器学习之间的鸿沟,使用接近真实的生物神经模型来进行计算。脉冲神经网络(SNN)与机器学习社区所了解的神经网络具有根本性的不同。SNN使用脉冲来进行操作,脉冲是在时间点上发生的离散的事件,而不是连续的值。脉冲的出现是由代表不同生物过程的微分方程决定的,其中最重要的是神经元的膜电位。当神经元的膜电位到达特定值的时候,脉冲会被触发,然后该神经元的值会被重置。最常见的模型是LIF(Leaky Integrate-and-fire)模型。另外,SNN通常是稀疏连接的,并且通过特殊的网络拓扑结构来实现。 乍一看起来,SNN似乎是一种倒退,我们现在的神经网络已经从连续的输出转变为了二元输出,并且这些脉冲训练不容易解释。
LIF模型的微分方程
脉冲发生时神经元的膜位
然而,脉冲训练给了我们更强大的处理时空数据的能力,而这些时空数据通常就是我们的真实世界的感官数据。 空间方面指的是神经元只与其本地的神经元相连接,因此它可以分别处理输入块的输入(类似于CNN使用过滤器一样)。 时间方面指的是脉冲训练是随着时间发生的,因此我们损失了二进制编码,但是获得了脉冲发生时间相关的信息。 三个神经元的脉冲训练
这使得我们可以非常自然的处理时间相关的数据而不需要引入RNN而带来复杂性。实际上已经证明,脉冲神经元从根本上来讲,是比传统的人工神经元更为强大的计算单元。
 
全脉冲神经网络
既然SNN理论上比第二代人工神经网络更为强大,我们自然会问为什么它们没有被广泛的使用呢?SNN目前的主要问题是如何训练。尽管我们有无监督的生物学习方法,比如Hebbian和STDP,但是还没有找到比第二代生成网络更为高效的有监督的SNN训练方法。由于脉冲训练是不可微分的,我们不能在SNN训练中使用梯度下降而不丢失脉冲的精确时间信息。因此,为了使得SNN能够应用于现实世界的任务,我们需要开发一个有效的监督学习方法。这是一个非常难的任务,因为我们需要了解人类大脑如何真正的进行学习,从而给定这些网络生物的现实性。 另外一个我们将要解决的问题是,在通用硬件上模拟SNN是非常的计算密集型的,因为它需要模拟不同的微分方程。但是类似于IBM的TrueNorth等模拟神经元的硬件通过特殊的模拟神经元的硬件可以来解决这个问题,它可以利用神经元脉冲的离散和稀疏的特性。 SNN的未来仍旧不清晰,一方面,它是我们目前的神经网络的天然继承者。但是,另外一方面,对于大部分的任务来讲,它还不是一个可以实用的工具。在实时图像和音频处理方面有一些SNN的实际应用,但是相关的实际应用的资料还非常少。SNN的大多数论文要么太理论化,要么就是比一个简单的全连接的二代网络性能还差。然而,有很多团队正在开发SNN的监督学习规则,我对SNN的未来仍就保持乐观。
1_HiorFaHQ59K0XktcGrvGyw.png
  • Jan 12 / 2018
  • 0
Data, Tech

锐眼洞察 | 如何用机器学习模型预测App用户流失?(翻译)

作者:Lisa Orr

原文:Predicting Mobile App User Churn: Training & Scaling Our Machine Learning Model

译者:TalkingData Frank Zhang

本译文禁止商用,转载请注明作者与来源!

随着获取 App 新用户的成本飞涨,保留已安装用户是最大化获客成本和用户生命周期价值的关键。Urban Airship 的数据科学小组去年花费了一年时间来开发一种方法识别和定位可能停止使用您的应用的用户。我们称之为预测流失。

在这里,我提供了基于数十亿事件的可扩展机器学习预测模型建立过程的深入见解,并介绍这些预测能力如何带来对用户行为的新洞察,如何为新的触达策略提供动力,如何影响用户留存。

开发机器学习模型

流失预测是一个简单的分类问题 ; 及时回顾用户活动,检查一段时间后谁保持活跃状态,然后提出一个模型,将活跃用户和不活跃用户分开。借助于大量的数据,我们试图寻找用户可能继续打开应用程序的最佳指标是什么?

首先,我们可以查看用户的日常使用活动。用户打开应用程序的频率如何?他们最近什么时候打开的?如果我们试图预测谁会在不久的将来打开应用,一个好的指标可能是用户是否已经打开应用程序。接收推送通知的影响呢?选择接收它们是影响用户 App 活动的首要因素吗?

回顾 60 天的用户数据,我们在累积窗口中汇总了消息发送和应用打开信息,以及一些附加信息,如设备平台和 App ID。然后,我们根据用户在未来 30 天内是否打开应用,将每个用户标记为已流失或未流失。利用为每个用户汇总的特征数据,我们使用梯度提升树机器学习算法来训练模型。

我们对流失预测进行了六个月的历史研究,对数十种特征(即可观察的用户和应用行为)进行了模型训练。我们的目标是在预测客户流失方面获得更高的准确性,并洞察影响客户流失的因素。通过研究模型,对于哪些特征影响最大,我们发现了一些有趣的模式:

  • 打开活动。到目前为止,未来是否活动的最大预测因素是从最近一次打开以来的持续时间。这是有道理的,因为这是与我们试图预测的时间方向相反的方向。在最近的时间窗口内打开的次数和最近一次打开距今的时间远近程度在预测谁将要流失方面都起着重要作用。

  • 发送活动。另一个有趣的发现是,接收推送通知对用户保留有积极影响。这又是有道理的,如果您选择接收推送通知,则表明您对该应用表现出积极的兴趣,并且表明了发现其更多价值的开放性。

    来自 Urban Airship 的数据科学和营销团队最近的一项研究说明了这一点。收到至少一个推送通知的用户与没有收到推送消息的用户相比,留存率高出 66%。我们还发现收到的通知数量和保留的天数之间的关系,用户收到的消息越多,他们继续使用应用的时间越长。与打开次数一样,通知发送的距今的时间远近和频率在模拟客户流失活动中起到了作用。

扩展模型

现在我们创建了一个可工作模型,下一步就是测试它扩展到数千个应用和数十亿用户的能力。添加更多的应用很快暴露出一个弱点:将数据从 csv(从 MapReduce 作业的输出创建我们的特征数据)重新处理为稀疏矩阵(提升树模型所需的格式)。

由于内存问题,此处理步骤导致作业失败。增加计算资源可以暂时解决问题,但是随着我们添加更多的应用,我们需要重新思考我们的策略。在开发阶段写入 csv 非常有用,因为我们可以仔细检查我们的工作。但除了人类可读,使用中间格式没有真正的好处。

我们直接在 MapReduce 作业内将特征数据重新格式化为稀疏矩阵。到目前为止,通过在 MapReduce 阶段添加更多的机器或者增加建模阶段使用的单机的大小,解决了更多的内存压力。随着格式的变化,我们能够同时训练数千个应用的模型。

模型生产

一旦我们有了一个可扩展的工作模型,下一步就是搞清楚如何最好地向客户提供这些预测。对于模型中的每个用户,我们可以得到一个打分为 0 到 1 的流失概率。分数越高,用户越可能会流失。反之,得分越低,用户越可能会留存。

如果你看一下流失概率的分布,就会发现你的应用的超级粉丝(肯定会回来的)和你的应用将要流失的用户。而在这中间,还有一些混杂的个体,对于他们将要走向哪个方面不太确定。

模型的概念使我们将用户分成三组:高风险组、中风险组和低风险组。通过预测结果来进行推送,我们的客户能够根据他们触达策略的激进程度来调整他们的受众细分。

例如,如果您试图重新接触风险较高的用户,那么如果只包括高风险受众,则可以扩大提供的奖励,或者如果同时包含高风险和中等风险受众,则可以将其缩小。

一旦用户被分类为高风险、中风险或低风险,客户可以通过实时移动数据流立即获取数据,以便在其他系统中进行分析或采取行动,DashBorad 可查看近五周的表现,通过可视化 展示为了将用户从高风险状态转移到低风险状态所做的努力效果如何。

在实际环境中预测

为了说明预测流失如何影响触达策略(反之亦然),这里有几个匿名的 Urban Airship 客户和他们各自的流失评分分布:

 

 

 

以上可视化表示 Urban Airship 三个示例应用的用户流失预测分数直方图。每个条形表示可能流失分数落在指定分数范围内的用户的百分比。颜色代表风险类别:绿色是低风险,黄色是中等风险,红色是高风险。预测于 2017 年 2 月 3 日进行。

比较这些应用,我们可以看到流失预测的用户分布。与大多数用户处于高风险组的应用 B 相比,应用 A 中大多数用户处于低风险组。对于应用 C,我们看到一个双峰分布,其中一大群用户处于高风险组,另一大群用户处于低风险组。

流失预测与应用触达策略有何关系?这三个应用都有大量的受众群体(超过 300 万个独立设备),且都使用消息推送来吸引用户。

但是,这些应用的触达方式存在很大差异。应用 A(低风险应用)有一个非常复杂的触达策略,广泛使用高级功能(即标签、生命周期列表、应用程序内通知、消息中心等),针对受众分群推送,并获得对这些消息的高度参与(通过直接或在影响下打开应用)。

另一方面,应用 B(高风险应用)在进行简单的受众细分后使用非常基本的消息推送策略,偶尔传达给有限的受众,并且几乎没有受众参与。

应用 C(流失分数存在双峰分布的应用)使用了中间策略。他们利用一些高级的参与度特征,如别名、徽章和深度链接,几乎只发送广播信息,推送了这些信息后他们观察到了大量的受众响应。

通过比较流失预测和应用触达策略,我们的客户可以找出哪些地方需要改进,这些改进带来哪些变化,并且可以比较流失分数在每周的变化情况。

对于应用程序 B,我们建议针对更多的受众群体,更频繁地进行消息推送,并将他们的消息推送策略的使用扩展到更多的方式(如应用内消息推送和消息中心), 以及通过标签和指定用户提高触达精准度。

对于应用 C,我们建议不再使用广播推送,转而明确针对高风险的受众。

下一步是什么?

预测性流失使企业能够在正确的时间,正确的渠道将正确的内容送达用户,将用户从要流失的转变为留存的。但这只是数据科学和机器学习能力的开始。不久以后,使用数据自动发送消息通知并改善用户触达效果将是公司的标配。

 

  • Jan 12 / 2018
  • 0
Data, Tech

锐眼洞察 | 零售业中的数据挖掘问题 ①(翻译)

作者:Ilya Katsov

原文:DATA MINING PROBLEMS IN RETAIL

译者:TalkingData首席数据科学家 张夏天

本译文禁止商用,转载请注明作者与来源!

零售是数据科学和数据挖掘重要的商业应用领域之一。零售领域有着丰富的数据和大量的优化问题,如优化价格、折扣、推荐、以及库存水平等可以用数据分析优化的问题。

全渠道零售,即在所有线上和线下渠道整合营销、客户关系管理,以及库存管理的崛起产生了大量的关联数据,大大增强了数据驱动型决策的重要性和能力。

尽管已经有许多关于数据挖掘在营销和客户关系管理方面的书,如 [BE11, AS14, PR13 etc.],但绝大多数书的结构更像是数据科学家手册,专注在算法和方法论,并且假设人的决策是处于将分析结果到业务执行上的中心位置。

在这篇文章中我们试图采用更加严谨的方法和系统化的视角来探讨基于数据分析的经济学模型和目标函数如何使得决策更加自动化。在这篇文章里, 我们将描述一个假想的收入管理平台,这一平台基于零售商的数据并控制零售策略的很多方面,如价格、营销和仓储。

导出图片Fri Jan 12 2018 10_56_59 GMT+0800 (CST)

我们专注在将经济学框架和数据挖掘方法的组合有以下两个主要的原因:

  • 我们可以从经济学教科书上找到上百个与零售有关的经济学模型,因为关于市场、折扣、竞争等问题在上个世纪得到了深入的研究。然而,许多模型都是高度参数化的(即严格的由带有有限参数的公式所定义)并且不能足够灵活而精确地对现实世界的问题建模。但数据挖掘提供了很多非参数建模技术,可以帮助创建灵活而实用的模型。在最近十年里,也有许多成功的平衡抽象模型和机器学习技术的文章和案例研究已经发表。
  • 快速的数据循环使得在现代零售业中可以使用相对简单的模型做出更加准确的预测,因为小规模增量式的预测一般而言要比大决策更加容易。

    例如,因为对于一个新的颠覆性产品在消费者心中的感知价值是未知的,要计算它的最优价格是很困难的。但是根据需求和库存水平实时调整促销价格则是相对容易的。有一些成功的商业解决方案对价格优化就几乎丢弃了经济学模型,简单的根据销售闭环的反馈情况来决定价格的上升和下降 [JL11]。

以上两点意味着在零售业自动化决策和动态优化具有很高的潜力,因此我们专注于研究这个领域。本文很大篇幅用于综述零售业者和研究人员发表的成果,这些成果都是他们在综合应用抽象经济学模型和数据挖掘方法构建实际的决策和优化系统中产生的。

特别的,本文主要受到 3 个案例研究的启发,分别出自 Albert Heijn [KOK07], 新西兰最大的连锁超市,Zara [CA12], 一家国际服装零售商,以及 RueLaLa [JH14], 一家创新在线时尚零售商。我们同样综合了来自 Amazon、Netflix、LinkedIn 和许多独立研究者和商业项目的结果。同时,我们避免使用那些缺乏实践支持的学术结果。

我们的研究主要着眼于与收入管理相关的优化问题,包括营销和定价等问题。更加特殊的数据挖掘应用,如供应链优化和欺诈检测, 数据挖掘过程实现的细节(如模型质量的验证)则不在这我们研究的范畴内。

本文剩余部分组织如下:

  • 我们首先引入一个简单的框架将零售商的行为,利润和数据联系在一起。此框架将作为更统一的方式来描述分析问题。
  • 本文的主体部分探讨了一系列与零售业相关的优化问题。我们将在不同章节逐个介绍这些问题。每个章节会简要描述问题,并提供一组业务案例和应用,以及详细介绍如何将问题分解成经济学模型和数据挖掘任务,使得可以通过数值优化方法来解决业务问题。
  • 然后,我们会有一个章节专门讨论这些方法在实际应用中的可期的经济收益。
  • 最后,总结部分会对这些问题之间的依赖关系进行讨论,从而阐明一般的原则和关键点。

优化框架

本文介绍了 6 个主要与营销和定价相关的优化问题,这些问题都能够应用数据挖掘技术来解决。尽管这些问题非常不同,但我们尝试建立了一般性的框架来帮助设计求解所需的优化和数据挖掘任务。

该框架的基本思想是用一个经济指标,例如毛利率作为优化目标,并将这一目标作为零售商行为(如营销活动或者分类调整)的函数。

同时计量经济学目标也是数据的一个函数,即计量经济模型应该被零售商的特性参数化,从而在其输出中产生一个数值,如毛利率。

例如,某零售商在计划一个邮件营销活动。可行的行动空间可被定义为一组对于每个客户发送/不发送决策集合,而活动的毛利率则决定于营销动作(有些人会接受激励而另一些人不会)以及给定客户的期望收入和邮件成本。这一方法可以更形式化的由如下公式表达:

WX20180112-105753

此公式里 G 是可用于分析的数据,是零售业者行为和决策空间, 是计量经济模型函数,其参数是 d 和 A,而 A是最优策略。这一框架由文献 [JK98] 整理提出。

模型 G 的设计十分依赖于问题本身。在大部分情况下,对毛利率建模和优化都是合理的。但是,有些情况下其他的目标也是有可能的,就如下一章探讨的响应建模。同时需要注意的是优化问题(1)也跟时间有关系,因为环境会随着如新产品的上架、竞争对手的行动等因素变化,零售业者自己的行为也会产生影响。

数据挖掘在这一优化问题中的角色是非常重要的,因为计量模型 G 通常都比较复杂且必须基于数据通过回归等数据挖掘技术学习确定。

在某些情况下因为复杂性太高(如用户的行为很难精确预测)或者因为无法将现有数据做外推(如对于完全新的服务),模型是无法完全确定的。这时,可以用 A/B 测试和问卷调查来获得额外的数据来改进模型的精度。

问题 1: 响应建模

问题描述

在广告或者特价优惠活动中,需要决定将一些资源投放给一些客户。而这些资源都是有成本的,如邮寄印制商品的目录的资金成本,或者一些负面效应(如使得用户取消邮通知订阅)。

同时, 这些资源将会影响用户的决策,如促使他们更多地消费或者购买更高价值的产品。其目标是找到一组最靠谱的候选客户,对他们投入资源后能够使得业绩最大化。

投入的资源可以是同质的(如所有参加的客户都得到同样的激励)也可以是个性化的。在后一种情况下,零售业者将对每个不同的客户提供不同的激励如不同产品的优惠券来最大化总体的收益目标。

应用

响应建模被广泛的应用在营销和客户关系管理上:

  • 确定特定的折扣、优惠券和特价,需要识别出客户对这些激励的反应。
  • 有这对性的邮件促销、活动和赠品(如 4S 店提供的免费太阳眼镜)通常需要识别出最优价值的客户来降低营销费用。
  • 客户挽留计划需要识别出那些可能会离开但可以通过激励来改变主意的客户。例如,电商可以向那些放弃购物车或者离开搜索会话的客户发送特价优惠。
  • 在线目录和搜索结果可以根据客户对某些商品的的喜好来重新调整。
  • 响应建模帮助优化了电邮促销来避免不必要的垃圾邮件,这些垃圾邮件可能会让客户取消邮件订阅。

求解

基于以上的讨论,我们现在可以认识到这个问题就是资源分配的优化问题,而优化问题由一个目标函数驱动。一个最基本的方法是根据每个客户的响应概率和期望净价值来对促销活动的整体利润建模。

WX20180112-105807

这里 Pr(R│u;I) 是给定客户 u 对激励 I 的响应概率,g(u|R)) 是这个客户响应的激励的净价值,而 c 则是激励的成本。公式中第一项是响应从响应用户获得的净收益,而第二项则是对应在没有响应的客户上的期望损失。目标是通过找到一组最有可能响应活动并能贡献高利润的客户子集来最大化 G。因为公式 (1.1) 可以约简如下:

WX20180112-105817

这里 E{g|u;I} 表示对给定客户在假定他会接受激励的情况下的毛利率的数学期望,而客户的选择标准则要符合以下条件:

WX20180112-105825

同时,最优的客户子集 U 可以定义为最大化毛利率的子集:

WX20180112-105833

我们也可以以随机分配激励为基准的净值最大化。为此,我们假设参与该次营销活动的客户数固定为 |U|。首先,我们将公式 (1.2) 展开,显示的包括对于随机选取的 |U| 个客户的营销活动的期望毛利率。

WX20180112-105843

此处 E{g|I} 是所有客户上的平均净价值。这一平均净价值是常数,因此在 |U| 确定的情况下在目标函数中可以被略去。因此,公式(1.2)在固定 的情况下同样可以得到(1.3):

WX20180112-105852

然而,文献 [VL02] 提出这一模型存在一定的缺陷,因为该模型偏向于易于接受激励的客户,而没有考虑那些有没有激烈都会贡献同样利润的的客户。为解决这一 缺陷,我们需要根据以下四种情况来计算客户集合 U 的毛利率:

  • G1 – select U according to the equation (1.2) and send incentives to everyone in
  • G2 – select U randomly and send incentives to everyone in
  • G3 – select U according to the equation (1.2) but do not send incentives at all
  • G4 – select U randomly but do not send incentives at all
  • G1 – 根据公式(1.2)选择 U 并向中所有客户发送激励
  • G2 – 随机选择 U 并向 U 中所有客户发送激励
  • G3 – 根据公式(1.2)选择 U 但是不发送任何激励
  • G4 – 随机选择 U 但是不发送任何激励

公式(1.2)是最大化 之差即相较于随机投放的提升度。另一种方法是优化,这一目标函数不仅仅度量相较于随机投放的提升度同时还考虑去除掉在同样的客户集合上不做任何激励的提升度。在此情况下,公式(1.2)变为如下形式:

WX20180112-105900

此处最后一项对应的是未被激励的客户的期望净价值。这一方法被称为差分响应分析或者提升度建模由文献 [BE09] 提出。

值得注意的是,公式(1.2)和(1.4)都不是通过最大化营销费用来优化的。考虑如下情况,每个响应的用户可以贡献 100 美元的净利润,而激励费用为 1 美元。如果一个客户组有 100 万客户,其中有 0.5% 的潜在响应者,则花费最大的营销活动是对每个客户都做触达则最终将损失 50 万美元(总的响应者贡献的 50 万美元净价值减去活动费用 100 万美元)。

公式(1.4)对于各种类型的价格折扣特别重要(优惠券、临时价格折扣、特价)。考虑如下问题:“一个零售商应该向每天都买苹果的人提供苹果优惠券吗?” 根据公式(1.2),回答是肯定的。因为这个人很有可能会使用优惠券。

然而,更可能的是这个客户用更低的价格购买了同样数量的苹果,根本上这会降低零售商的利润。公式(1.4)考虑了默认的客户行为从而消除了这一问题。我们在下一节将继续讨论价格区分问题因为这一是个复杂的问题远超了公式(1.4)范畴。

公式(1.2)和(1.4)中净收入的数学期望能够基于过去客户对激励是否接受的历史数据用分类或者回归模型来确定。这一问题可能是非常有挑战性的,特别是当需要评估的激励与过往出现过的都存在某种程度上的差异。

在这种情况下,全规模的活动上线之前需要在一个客户测试组上进行测试。另外,对于零售业者而言毛利率并非唯一的关键指标。在公式(1.2)和(1.4)中使用的毛利率度量关心的是第一次付款后即时的汇报,从客户关系管理的角度看这是非常简单的视角。

零售业者还会关心其他不同的度量,度量上的多元性是如此巨大以至于有一门专门研究这个问题的经济学分支 – 倾向性建模[SG09, LE13] – 这一学科发展了不同的模型来预测用户未来的行为。最重要的倾向性模型包括:

  • 生命价值预测。生命价值模型是估计一个客户在其生命周期内可以贡献的收入或者利润总额。这一指标对于那些目标为获取新客的营销活动而言是很重要的。

  • 钱包份额预测。钱包份额模型用来估计用户对于某些类型商品,如杂货或者服饰,在某一零售商及其在各竞争对手那花钱的比例。这一度量能够揭示哪些客户具有贡献高收入的潜力,因为这一模型能够用在忠诚计划和提升使用的营销活动中。

  • 类型扩展倾向。该模型估计首次购买某一类型的商品后,从休闲产品转换到奢侈品的可能性。这一模型能够帮助设计目的是获得使用扩展的活动。

  • 流失倾向。这一模型估计客户从给定零售商流失并转换到竞争对手的可能性。如果客户具有较高的流失倾向则可以定向进行挽留活动。例如,一个零售商可以识别出那些放弃了在线购物车或者退出了搜索会话但是提供一定折扣或者赠品后会改变主意的客户。

  • 购物习惯改变倾向。每个客户的购物习惯最终确定了其对一个零售商的价值,即客户的购买频率、购买什么产品、购买什么类型的产品等等。这些习惯通常是稳定的,一旦零售商改变一个客户的分层,这个分层将会持续。

因此,零售业者通常对找到那些对改变习惯比较开放的客户感兴趣, 如那些从一个城市迁移到另一个城市的人群, 从学校毕业的学生, 刚刚结婚的人群等等。一个典型的例子是预测客户是否在怀孕早期 [DG12] 因为新生命的诞生会显著的改变客户的购物行为。

以上模型都能够嵌入类似公式(1.4)的公式来代替毛利率目标。我们在后面的小节中将针对讨价格差异化的情况下对折扣的响应倾向建模的情况仔细探讨倾向性建模。关于倾向性建模的更多细节可以参考 [FX06] 和 [SG09] 两本书。

这一框架也能够扩展到在多个可能的激励方案中选择最优的方案。例如,一个零售商可以估计对于两个激烈方案 A 和 B(例如巧克力冰激淋和香草冰激淋)的期望表现然后对于给定的用户可以根据以下标准[WE07]来选择最优的选项:

WX20180112-112023

最后,值得注意的是响应建模是与客户分群紧密耦合的:

  • 响应建模能够用来检验通过聚类行程的客户分群的可行性。一个分群应该对特定的营销计划有持续的响应。

  • 倾向性模型是基于客户数据训练得到的回归和分类模型。客户分群可以参考对于主要回归量的分析结果。另一方面,从聚类结果中也可以发现合理的倾向性模型。

 

  • Jan 11 / 2018
  • 0
Data, Tech

锐眼洞察 | 2018年数据管理趋势(翻译)

作者:Paramita Ghosh 

原文:Data Management Trends in 2018

译者:TalkingData数据工程师 孙强

本译文禁止商用,转载请注明作者与来源!

近年来,业务数据的数量和种类空前增加,使得所有业务部门都需要更好的进行数据管理实践。 2018年的数据管理趋势将继续以数据治理为中心,通过数据治理确保数据质量的提升,从而改善决策制定。 随着流式数据不断从各种数据通道中输出,企业数据治理团队正在加紧研究和评估其内部框架与数据架构,以实现更好的数据管理。

企业数据管理市场的持续增长,来自于全球各地的组织对改善数据治理的需求的增长。良好的数据治理需要许多不同类型的应用程序以无缝方式一起工作。

2018年数据管理总趋势

2018年预测的技术趋势表明,“智能数字网格”将很快被许多企业采用,无论是全数字还是部分数字。 “全能数字”与人工智能赋能的技术的迅速普及,将很快在全球商业生态系统中显现出来。 未来五年,企业对人工智能技术的选用将成为一个重要的战场。 正在逐渐改变现有业务模式的人工智能趋势将在2025年前实现巨大回报。

根据福布斯的文章“为什么两种趋势的融合将改变企业管理数据的方式”,数据安全和数据治理问题已经开始融合,以降低与企业数据相关的风险。 随着这两个趋势朝着共同的目标努力,企业将不得不采用更高效的数据收集、数据管理和数据安全平台。 例如,具体的旅行服务提供商将被置于更严格的客户数据隐私审查之下。不同规模的组织都在忙于实施GSPR战略,以保护他们的高级资产——业务数据。

“在Gartner发布的2018年度十大战略技术趋势中,读者可以查看关于“事件处理和持续适应性风险和信任评估(CARTA)”的讨论,CARTA将在2020年成为企业业务80%的一部分,以实现基于风险的评估与信任的实时决策管理。

针对数据保护:通用数据保护法规(GDPR)

这将很会变成现实。 通用数据保护条例(GDPR)的基本操作原则与数据保护法(DPA)的基本操作原则类似,它为业务中的数据管理趋势和实践掀开新篇章。 英国信息专员伊丽莎白•德纳姆(Elizabeth Denham)认为,全球的企业应该学会处理GDPR法律中不必要的“威胁”,因为这只是向现有数据保护法律迈进的一步。标题为GDPR的文章将改变数据保护(以下是您需要了解的有关英国GDPR框架的讨论),旨在“协调”整个英国的数据隐私。 根据GDPR,每个国家都将受到监管机构的监督,任何披露、修改或破坏人民数据的行为都将被报告给监管机构。

  1. GDPR给数据收集机构增加了更多的义务。
  2. 对数据曾受到任何损害的个人,GDPR承诺将提升其数据权限。
  3. 在GDPR下,数据收集机构在分享数据之前必须征得个人的同意。

“电讯报”在题为“欧洲数据保护法”的文章中表示,个人数据监管法规将于2018年实施,企业需要从现在开始准备面对这个从DPA到GDPR的转变。 2018年的数据管理趋势似乎表明,到2025年,每年将产生180 ZB的数据。 这一预测暗示了大数据和先进的数据分析市场的发展,新的平台和工具可用于改进数据管理。

新的重点将是经过治理的数据质量,而不是数据量。

2018年数据存储趋势

以下是2018年数据存储实践的趋势预测:

  1. 闪存收入将在2018年保持高位,因为转换技术不仅得到持续优化,价格也有下降。可靠的闪存将减少对服务器的依赖。
  2. 闪存技术将升级以提升系统性能。
  3. 2018年的闪存市场突然扩大,可能会导致原料急剧短缺。建议企业采取必要措施提早购入,以避免后续遇到严重供应紧缩。
  4. 机器嵌入式存储呈倒退趋势,例如HCL的出售。通过HCL或戴尔,客户可以直接将存储嵌入在硬件基础架构中,从而不再需要单独的存储设备。
  5. “五步”分析解决方案将可以嵌入到存储系统中,供用户快速识别和解决问题。
  6. 软件定义存储(SDS)的出现,可以减少数据重复并提高存储效率。详情可阅读文章后面的“超融合基础设施”。
  7. 混合云存储解决方案——公有和私有云存储系统的混合使用可以提高存储效率,同时降低数据丢失的风险。

详细了解2018年顶级数据存储趋势请看这篇文章:Top 5 Storage Trends for 2018: What You Should Know.

利用大数据进行数据货币化

企业已经意识到“数据”是最重要的资产,所以现在已经考虑利用大数据等技术来资产化。随着企业不断收集大量设备数据、网络数据或客户行为数据,他们现在正在考虑通过在数据采集、存储、分析和部署运用相关先进的大数据技术,将这些数据转化为盈利的收入来源。大数据所带来的高级客户分析有望在未来帮助企业增加收入。阅读KD Nugget的文章“2018年大数据公司如何将数据货币化”?可了解详情。

DATAVERSITY的标题为“在数据货币化之路上需要注意的五件事”的文章中,作者进一步扩展了“大数据货币化”的概念,他指出,像Reltio这样的数据应用供应商,通过减少耗费在MDM上的时间和精力来增强数据可视化和数据分析能力,使得服务供应商可以通过这些平台来提供数据即服务(DaaS),这也是大数据货币化的另一个来源。

2018年大数据隐私实践趋势

  1. 由于有各种各样的流入渠道,大数据将在2018年构成重大隐私风险。
  2. 云计算供应商将在进行大数据项目之前接受审核。
  3. 虽然成本高昂,但私有云的使用可能仍然是企业的首选,因为数据相对安全。
  4. 将增加部门间孤岛中大数据治理,以确保满足适当的数据隐私级别。

请阅读以下文章以了解2018年上述大数据隐私实践的紧迫性:6 Big Data Privacy Practices Every Company Should Adopt in 2018

2018年数字营销趋势

客户数据是企业数据资产中最有价值的部分之一。 在2018年,商业用户会发现使用数字营销来管理客户数据有这样的主要趋势:

  1. 市场分析将更多使用人工智能赋能的解决方案。
  2. 机器学习指导的客户分析工具将用于客户细分。
  3. 内容营销的兴起是营销策略的核心区别。
  4. 用于理解客户的物联网分析兴起。

一篇题为“7大数字营销趋势2018年”的文章指出,2018年内容营销将处于业务活动的前端,主要用于个性化客户体验。 企业认为,通过阅读智能内容,客户在他们的记忆中保留了对“品牌的感知”。

2018年数据库管理趋势

由大数据、云、社交、移动数据和其他非结构化数据组成的复杂数据生态系统,使得数据库供应商需要增加诸如“制作数据图”之类的可视功能,使主数据管理(MDM)更加友好。 将社交或大数据与MDM整合将有助于更好地“对客户的360度观察”,一篇名为“主数据管理中的当代趋势”文章详细解释了这一点。 仍在努力将数据库迁移到云端? 可以查看DATAVERSITY的文章“在云中管理数据库:您需要知道的信息”一文,以帮助您规划迁移流程。这篇文章的目的是帮助您了解云服务提供商提供的典型迁移服务,使迁移过程顺利且成本低廉。

  • Jan 05 / 2018
  • 0
Tech

锐眼洞察 | Java 8 年度实践总结

作者:TalkingData架构师 赵志刚

本文为TalkingData原创,未经授权禁止转载。申请授权请在评论中留言联系!

 

Java 8 自 2014 年发布至今已有 3 个年头,但直到今年初才真正开始使用某些特性,之前最多是指定其为运行时环境。2017 年关将近,决定写篇文章记录一下近一年的实践历程,主要涵盖一下内容:

  • Lambda 表达式
  • Stream
  • 并发包
  • 集合

在开始引入新特性前,做个规划是少不了的,由于 SDMK 是微服务的架构,且每个服务支持灰度发布,因此影响全局的风险小很多,至于选择引入的服务模块,最终我选择了负责服务配置的 Console 和服务调用接入的 Gateway。

选择 Console 是因为它本身是基于 Java 8 的环境,但是随着演进,单元测试(UT)已经远远滞后,正好可以在 UT 中引入 Lambda 和 Stream,这样既不影响功能又可以踩坑,待熟悉后即可应用到功能开发或重构中。

选择 Gateway 是因为相比其他稳定的服务,Gateway 还有大量的新功能和性能重构需求。

接下来进入正题,以下内容涵盖了这一年的实践过程中用到的一些新特性总结。

1. Lambda 表达式

因为 Java 8 其他的特性几乎都是依赖 Lambda 实现的,因此本节会先介绍一下 Java 8 中的 Lambda 表达式,目的是为了让还不熟悉的同学能够对 Lambda 有个初步了解。

提起 Java 8 的特性,首先肯定是 Lambda。那么什么是 Lambda 表达式,我的理解就是一段程序代码,是引入函数式编程的一种实现,基于这样的特性,Java 实现了对行为的抽象。

让我们来看一个 Lambda 表达式:

  1. s-> System.out.println(s)

-> 右边是函数定义(描述行为的代码),左边是传递给这段代码的参数。接下来再看看具体调用:

  1. List<String> list = new ArrayList<>();
  2. …… //other operation
  3. list.forEach(-> System.out.println(s)); //打印集合中的每个元素

上述代码虽然没有实际作用,但是足以用来说明 Java 提供的函数式编程的特性了:

  • 减少模板代码,提高可读性:可以看到传递给 List 的 forEach 方法的是行为而不再是变量或对象(参数行为化),这样可以使开发人员只关注具体业务,不必再写循环或使用匿名类了。

  • 延迟执行:System.out.println 不是在传递给 forEach 的方法时立即执行,关于这点的优势在下面的并发包会有详解。

那么 Java 是怎么实现 Lambda 的执行呢?先来看一下 forEach 方法声明:

  1. public void forEach(Consumer<? super E> action)

它的参数是一个接口,但是 Oracle 的 JVM 并没有在编译时把 Lambda 表达式简单地变成匿名类,而是在字节码中使用了 InvokeDynamic 指令,Lambda 表达式只有在运行时才会动态被编译成字节码,参数和返回值都会从调用上下文中进行推断。

而且如果 Lambda 表达式是无状态的话,在内存中只会有一个对象对应该表达式。

上面简单介绍了一下 Lambda 表达式,在实际工作中我是如何使用的呢?举一个在 Console 中重构的例子,由于业务的需要,Console 中的代码存在大量校验逻辑,如下图

01.png

02.png

这些方法的逻辑除了生成和返回的业务实体不一样以外,其他完全一样,因此在重构后我提供了一个公共方法:

03.png

而原来的方法都重构为:

04.png

可以看到少了很多模板代码,清爽了许多,可读性也提高了,而且由于抽象到一个公共方法中,非常有利于代码及早进行 JIT 优化。

通过 Jacoco 的统计分析,在重构后,相比应用 Lambda 表达式之前,Console 的代码减少了 20% 左右。

2. Stream

Stream 是 Java 8 提供的另一个重要特性,为集合数据提供了一种基于流式的处理机制,从我实际使用的感受上来看,它屏蔽了数据集的底层处理细节,通过 Lambda 表达式让开发人员更多地关注业务处理而非迭代。下面是在 SDMK 中的几个 Stream 例子:

  1. counters.stream().mapToLong(-> NumberUtils.toLong(s, 0l)).sum();
  2. receipts.stream().filter(receipt ->MAIL_VALIDATOR.matcher(receipt).matches()).collect(Collectors.toList());
  3. assertFalse(records.stream().mapToInt(SimpleServiceEntity::getStatus).anyMatch(-> s != SERVICE_STATUS_ONSELL));

可以看到,没有了以往迭代的模板代码,通过 fluent 式的叠加完成数据的业务操作,使用起来都非常简单和直观。

如果需要对集合进行并行化处理,Java 还提供了创建或者转化为并行流的 API。通过将执行细节进行屏蔽,不仅简化了集合的处理代码,更重要的是,开发人员再也不用编写复杂易错的并行代码了,同时对于执行机制也可进行单独优化。

例如,现在使用 ForkJoinPool 执行并行流,将来可能会使用更高效的处理框架,但是这些对上层业务代码是透明的。

另外,在使用 Stream 时虽然简单,还需要几点注意:

  • 使用 Stream 时请摒弃循环或迭代的思想

  • 所有的操作不是按调用顺序分步执行的,而是延迟到流“启动”后同时执行的。比如上面实例 3,不是先对集合先映射完再查找匹配,可以理解之前都是在攒组合大招的每个招式(中间操作如 map,filter),直到最后一个方法才出招(终止操作如 sum),流一旦执行完毕(终止操作执行完)就不再可用了

  • Stream 的操作不会改变原始集合

  • 并行流的处理简单但不是没有代价,它要求所有操作都是无状态的或者是线程安全的,而且尽量与顺序无关(提高并行效率)

  • 虽然串行流和并行流可以随时互转(sequential () 和 parallel()),但是在流执行时的最终类型是以终止操作前最后一次指定的类型为准

3. 并发包

3.1 ConcurrentHashMap

Java 8 对 ConcurrentHashMap 大量增强,包括 long 型的 mappingCount 代表 map 的大小;使用树形结构取代链表,在 Key 实现了 Comparable 接口时更有效率;支持 Lambda 的原子操作等。

在实际使用时我用的较多的新特性是 computeIfAbsent,在 Java 8 之前如果要创建多个线程使用的缓存需要使用 putIfAbsent,但是比较繁琐,具体如下:

  1. public static AtomicLong createTableAuditInfo(String table) {
  2.    AtomicLong newAudit = new AtomicLong();
  3.    AtomicLong temp;
  4.    if ((temp = audits.putIfAbsent(table, newAudit)) == null) {
  5.      return newAudit;
  6.    } else {
  7.      return temp;
  8.    }
  9.  }

由于 putIfAbsent 操作的 Key 如果在 Map 中不存在时会返回 null,所以这个代码非常变扭,更重要的是每次执行的时候都不可避免地要创建一个新对象!(TDU 注:全文少有的感叹号表达了志刚同学对太多新对象的苦恼)

虽然可以在调用前用 get 判断,但如果 Key 不存在时还是会创建一批不需要的对象!(TDU 注:again,哪位缺对象的同学赶快来帮忙分担一下吧)在 Java 8 中可以使用如下代码:

06.png

一行代码搞定,而且由于创建对象的 Lambda 是延迟执行的,加上操作本身是原子的,所以就保证有且只有一个对象被创建。当然,在高并发下为了避免 computeIfAbsent 每次读时都会进入同步的机制,同样可以在调用前使用 get 进行一次判断。

3.2 ConcurrentHashSet?

这个一直就不存在,但是可以使用 ConcurrentHashMap 的 keySet 方法创建一个等价的 set,只不过在 Java 8 前创建的 set 没有 add 方法。

Java 8 增加了一个 keySet(V mappedValue)方法,这样用该方法创建的 set 就可以添加元素了。

注意的是用 keySet 创建的 set 不能独立存在,所有操作都最终反映到对应的 ConcurrentHashMap 上。

3.3 AtomicLong

主要用的是它提供的支持 Lambda 表达式的原子操作,如 getAndUpdate(LongUnaryOperator),getAndAccumulate 等,这样可以避免自旋使用 CAS 操作的模板代码。

3.4 LongAdder

AtomicLong 和 AtomicInteger 虽然支持原子操作,但是在高并发下更新由于需要不停的自旋重试,极大的降低性能,因此在 gateway 流控计数器中选用了 LongAdder,它的思想就是空间换时间,通过将数值分散在多个内存空间,减少并发修改的几率来提高性能。

当然这样做也有代价,就是 sum 和 sumThenReset 方法不保证是原子的,也就是在调用这些方法时如果存在并发写的话,可能会不符合操作预期。当然由于 Gateway 的流控计数器不需要精确的计数,因此在使用上没有问题。

与 LongAdder 类似的还有 LongAccumulator,它可以执行更通用的累进式运算。

4. 集合

在 Java 8 中,集合类除了支持 Stream 外,最大的增强就是提供了大量的支持 Lambda 表达式的方法了,在我实践的项目中用得最多的就是 forEach(Consumer),主要是用来避免使用迭代的模板代码。

5. 总结

在近一年的实践中,由于工作和时间的关系,我并未能尝试所有的特性,包括 Stream 中的收集方法(用于将流转换为其他类型,如 List)和 Collector,集合中大量支持 lambda 的方法,新的日期时间对象,以及其他(字符串、数字、文件等等)一些增强。

但就已经实践的内容来说,Java 8 提供的这些特性还是非常强悍与实用的,在提高编码效率和代码性能方面会非常有帮助,另外对于固有的设计模式,我想也会有一定的影响,例如策略模式、模板模式等等。

总之,放心拥抱 Java 8 的新特性吧,当然,如果是旧系统迁移,请做好单元测试!

页面:123456789
随时欢迎您 联系我们