数据科学家,还是非“野生”的比较好

作者:佚名

本文转自:大数据文摘

公民数据科学家(Citizen Data Scientist , CDS)的概念始于2017年,在2018年火爆全球。

似乎可以将CDS看作公民科学家概念的延续,这个概念背后的想法是:技术辅助工具已经非常先进,自动化调参工具的出现、各种MOOC自学平台上课程和实验室层出不穷,所以现在,如果付出足够多的学习时间,似乎所有人都可以迅速具备收集和分析数据的能力,也就是,成为一名“数据科学家”了。

似乎可以将CDS看作公民科学家概念的延续,这个概念背后的想法是:技术辅助工具已经非常先进,自动化调参工具的出现、各种MOOC自学平台上课程和实验室层出不穷,所以现在,如果付出足够多的学习时间,似乎所有人都可以迅速具备收集和分析数据的能力,也就是,成为一名“数据科学家”了。

这一概念不止激励鼓舞了大批想要成为“数据科学家”的个人,也让很多缺人的企业有了希望。

数字信息的增长已经对数据科学和分析专业人员产生了越来越大的需求。与之相对,相关人才供给远远不够。因此,供需之间的差距正在扩大。

不断增长的数据职场缺口下,雇佣这一类公民数据科学家,是许多大公司面临“人荒”困境,寄予厚望的解决方案。

大批非相关专业出身、靠着自我培训和技术工具成长起来的公民数据科学家,开始涌入这个领域。

草根公民数据科学家的特征

那么,“草根”出身的公民数据科学家有什么特点呢?

如上图,尽管是非统计等数据科学相关专业出身,我们并不否认,来自业务领域或者其他专业的公民数据科学家,本身具备以下优点:

  • 深耕业务领域,对组织机构有深刻认知,对与业务优先次序相关的问题的兴趣;
  • 对商业领域有独特视角、分析技术在商业问题中的实证应用、可以证明商业价值;
  • 参与多个分析领域和活动、有着实践经验并且有着广泛人脉。

“草根”数据科学家有风险

“草根”公民数据科学家越来越多,他们开始不止从事最基本的数据收集和分析工作,也开始承担数据的预测等核心工作。

就像耐克声称他们的Air Jordans可以让每个邻居小孩成为下一个皮蓬(Scottie Pippen)非常不靠谱一样,技术带来的辅助力量是有限的,风险也开始随之出现。

显而易见,虽然现在所有电动工具都可以在商店买得到,但并不是所有人都可以成为木匠大师;就算有很多在线炒股软件,也并非所有人都能成为百万富翁交易员。

真正的科学要通过专业训练。这是不管多少技术工具都无法取代的。

“高质量的数据仍然非常重要”,针对“公民数据科学家”,全美排名第四的CTO、天睿公司首席技术官、全球数据仓库技术专家Stephen Brobst告诉大数据文摘,现在尽管分析工具越来越智能,但他们的使用前提依然是没有偏向(bias)的数据,和懂得这些数据的专业人士。

“深度学习算法实际上非常适合处理数据质量问题。很多公司现在用无监督学习的反馈循环来解决数据质量问题,但我们还是希望,在数据搜集的过程中就尽量最小化数据偏见。数据科学没有魔法,它不是一个工具就可以解决的问题。你可以通过一些步骤来测试有偏见的数据,但这是件很微妙的事情。”

“你必须雇用那些知道自己在做什么的人。”Stephen称,业内现在存在很多只懂业务、不懂统计的“公民数据科学家(citizen data scientist),这是非常危险的。他们严重依赖技术工具进行数据搜集和分析,并不知道自己在做什么,“这很可能会导致严重破坏性的结果。”

“草根”数据科学家为什么危险?

以下几种原因可以解释:

首先,认知偏差。下边这张图可以很清楚地解释什么是认知偏差。

技术能力可以靠短期培养,但是,认知能力不行,它需要几年甚至十几年的专业训练。不同专业的人对待同一组数据和场景会有很不同的认知。

其次,研究逻辑谬误,或者说辛普森悖论。

所有技术工具的使用前提是假设你的数据首先是优质无偏差的,大多数“草根”数据科学家通过SQL入门,并直接跳入Keras和TensorFlow ……

毕竟MOOC(慕课,同为在线学习网站)的认证课程中就是这么教的。

第三,数据的民主化并不直接导致洞察力的民主化。

这一点很容易理解。eBay并没有让每个人都一夜成为零售巨头,手机也并没有提高人们的智商。尽管现在我们比以往任何时候都有着更多的健康和饮食信息,但世界上的人比以往任何时候都更加肥胖。工具速度,工具规模,正确的使用方法 – 这些永远不会取代真正的专业训练。

所以,放弃“草根”数据科学家的幻想吧!

现在坐下来脚踏实地学习一些有意义的、真正的智慧建立和验证的东西。技术工具允许我们所有人都充满渴望,只有那些投入时间和精力,拥有专业训练和教育的人才能够提升到可以提供有意义和预测性分析的水平。

咨询专栏丨信用卡App运营中的数据分析

排在“衣食住行”的首位,服装早已从遮体的生活必需,演变为个性化的态度彰显,服装行业也成为新零售的一个典型场景,不断探索新思路、新玩法。

数据显示,预计到2019年,服装消费市场规模将达到15,920亿元。市场虽大,但竞争也异常激烈,新消费时代下的市场消费结构与大众消费需求的改变,促使服装品牌纷纷踏上转型的征途。在国际大牌与快时尚品牌的夹击下,本土服装品牌该如何破局?旗下拥有六大品牌、站稳细分市场领军地位的影儿时尚集团,已经走出了成功的一步。

从以产品为核心的传统运营方式,转向以消费者为中心的新运营方式,影儿时尚集团开启了从设计到生产交付、从营销到销售、从运营到服务的全面变革,通过场景、互动、连接、体验来提高品牌用户粘性,挖掘创造新客群、新需求、新服务。

围绕消费者打造整合线上线下的数字化运营闭环,推动会员的数字化运营,实现业务价值的可量化效果是转型的关键步骤。影儿时尚集团选择与国内领先的第三方数据智能服务商TalkingData合作,以数字化运营、数字化决策为目标,构建数字资产、搭建数据平台,实现消费者数字化、产品数字化、渠道数字化,以服务业务应用。

影儿时尚集团数字化会员项目总体设计蓝

基于这些需求,TalkingData为影儿时尚集团定制了数字化基础架构、数字化平台技术、数字化平台应用、数字化业务场景、数字化运营五大部分组成的整体解决方案。

一方面,搭建数字化基础架构,提供一系列数字化平台技术,通过专业的业务咨询团队,整合一方交易数据、二方用户行为数据、三方外部补充数据。另一方面,基于影儿时尚集团自身业务特征设计相应会员、产品、渠道标签体系。此外,构建满足多品牌、多渠道、多业态用户运营的不同模型组合,满足影儿时尚集团全渠道运营、会员数字化运营、微商城数字化运营的业务诉求。

通过数字资产建设、数字化平台建设、数字化运营三大阶段,TalkingData用半年时间帮助影儿时尚集团走通了从数据到业务的闭环:

  • 数字资产建设:TalkingData对影儿时尚集团的业务形态与运营现状进行了深入调研,制定数据采集规范与会员标签体系,洞察用户价值表现和所处生命周期,预测后续购买情况,帮助影儿时尚集团优化营销资源配置,最大化营销效果。
  • 数字化平台建设:搭建数据平台、用户运营平台、商城运营分析平台,将数据整合为业务需求,并为业务部门和信息技术部门提供专业培训。同时借助线下数据收集和积累,量化分析客流趋势与不同门店客群特征,为门店渠道选择提供线索。
  • 在前两个阶段的基础上,形成数字化运营闭环体系。基于业务场景和用户画像制定营销活动策略,运用标签体系进行目标人群圈选与精准触达。同时对活动过程实现全链路数据监测追踪,实时通过数据反馈调整活动,最终分析活动整体从曝光到消费的效果转化,进而指导后续活动策略和人群运营策略的优化。

数字化活动运营流程设计

在近期的一次拉新活动中,通过TalkingData外部数据标签和影儿时尚集团会员数据进行打通,对影儿时尚集团用户的画像洞察发现客户群中有大量忙于工作的妈妈人群,同时根据线上的行为特征发现和某专业洗护品牌具有强关联性。

因此针对性设计了“减轻妈妈家务负担”活动主题,选择该专业洗护品牌作为异业合作方,最终实现单次推广公众号增粉4万多人、获新4千多人、ROI高达30倍的优异成绩。更为重要的是通过此次活动跑通了从业务场景出发、圈取人群投放、过程监测与最终效果分析的数据化运营路径,赋能影儿集团数字化运营能力,是对影儿时尚集团与TalkingData合作构建数字化运营闭环体系价值的一次最佳验证。

关于影儿时尚集团

影儿时尚集团自1996年成立以来,先后创建了YINER音儿、INSUN恩裳、PSALTER诗篇、Song of Song歌中歌、OBBLIGATO奥丽嘉朵和XII BASKET 十二篮六大品牌,成为一家集投资、研发、创意、营销、服务于一体、以时尚行业为主导、跨行业发展的大型多元化企业。

目前,影儿时尚集团拥有深圳龙华、观澜和上海松江三大产业园,在全国拥有14大区域销售分公司,1500多家门店和数百万会员,领先同侪,被业内专家认为是“中国服装业国际化的开始,将带动深圳乃至全国女装的国际化发展。”

咨询专栏丨四大步骤手把手教你做数据驱动的精准营销

随着大数据时代的到来,越来越多的行业都在大数据领域逐渐摸索到适合自己的运营与传播方式,金融行业也在逐步调整自身的营销战略。传统的粗放式营销模式缺乏场景化和针对性,不仅浪费成本,也会增加对用户的打扰。尤其信用卡客户,不当的营销策略甚至会引起客户反感。针对业务和活动信息,投其所好的精准营销,才能受到用户的青睐。

精准营销的核心方法是对数据的分析洞察。通过数据收集、数据分析,精准定位目标用户群、在哪里、做过什么、想要什么。对客户有了全方位的了解之后,才能制定差异化、个性化的营销手段。

通过精准营销,可以提升获客质量。基于各个环节的效果分析,反向指导用户筛选、模型优化、预算分配、资源采购、活动设计、渠道使用、触点优化等。在有限资源的情况下,可实现最大化客户转化,主动避开粗放式营销带来的羊毛党客户群。通过精准营销,还可以提升用户的活跃留存,提升业务转化和提高营收,促进产品功能的迭代优化,实现用户生命周期价值的最大化。

如何寻找用户:收集数据-搭建用户全维度指标体系-用户分层-用户分群-用户行为预测模型

如何执行营销:精准客群-适宜渠道-恰当时机-差异化内容-合适形式

如何评估效果:目标导向评估效果-超链接添加UTM参数

如何打造闭环:营销效果分析-指导下一轮精准营销

一、寻找用户

在进行用户分群之前,首先要进行数据收集、数据整合、建立用户数据指标体系,常见呈现形式是搭建用户层级宽表。这一环节,在数据存储环境支持的情况下需要丰富底层数据,因后面的应用场景都需要依托于上述数据进行计算、分析、建模。所以在搭建用户层级宽表时需要考虑更全面,也需要在应用的过程中不断进行丰富和迭代。

根据前述底层数据,集成了一份庞大的用户层级宽表。进而,我们需要把用户标签更为具象化,进行用户分群,为精准营销提供客群筛选。可以通过以下三个步骤进行用户分群:用户分层、用户分群、用户价值分群模型。

1、用户分层

分层维度没有统一标准,可以按照 App 产品用户旅程 AARRR 为分层逻辑,也可以按照信用卡办卡、分期等核心业务流程为分层逻辑。如下图示例:

举例:在信用卡 App 营销过程中,基于信用卡用户生命周期的分层,可对应营销的内容。

2、用户分群

用户分群是精细化运营的核心,它是基于用户分层的基础上,从每一层级用户的横向再细分,筛选出共性用户群体。

通常根据以下几类数据再进行细分:

  • 一方数据 – 企业内部数据、用户行为数据;
  • 二方数据 – 广告投放数据;
  • 三方数据 – 行业数据、第三方标签、POI 数据、黑白名单等。

在信用卡行业实际运营过程中,一方数据易获取且准确度、关联度高,使用率较高。最常使用的数据有:人口属性、积分数据、客服数据、App 行为数据、营销响应数据等。App 用户行为数据也有很大价值,分析用户的行为数据,帮助设计和完善 App 产品;分析用户的潜在行为数据,帮助建立模型挖掘,找到营销方向。

信用卡 App 行为数据,主要关注是否绑卡、是否使用激活、积分兑换,实现其自助渠道缓解人工渠道服务压力的价值。以及用户在 App 上是否进行了消费、分期、申卡等对信用卡主要指标贡献度较高的操作。App 行为数据的核心维度分别是时间、频次、结果:

  • 时间指某特定行为发生时间及持续时间,
  • 频次指发生某特定行为的次数和趋势,
  • 结果是指是否完成体验或交易。不同客群会呈现不一样的特征,可基于业务需求和行为数据统计分析,进行场景化行为数据标签的搭建。

在一方标签数据建立不完善的情况下,为了在营销过程中为进一步提高精准度和营销效果,通常会引入三方数据进行补充。例如,在营销资源与用户进行匹配的环节,为了确认用户偏好,可引入三方的标签数据,针对不同群体分别匹配不同奖励的营销资源。以及,当涉及到适用商户的电子券,在营销过程中可引入三方的 POI 数据,匹配更精准的用户群。

基于以上多方数据,结合常见业务和活动,在用户分层的基础上,运用机器学习聚类模型、RFM模型等对信用卡存量客户画像进行多维度分析,如拆分为:分期、跨境、积分、优惠券、还款、额度等多类客群,便于营销资源调配及客群精准营销。

3、用户行为预测模型

充分利用前期精准营销结果数据、活动参与数据、用户行为数据等,以此为种子,结合用户标签,借助有监督机器学习与深度学习算法预测用户行为,建立 A/B test 对比传统营销方式与机器学习预测效果,并根据实验结果不断迭代优化模型,提高客群精准度及精准营销响应率。

举例:某商业银行用户十一假期后分期预测模型。

二、执行精准营销

经过上一轮的客群分析之后,筛选出精准客群,为执行营销奠定了基础。再进一步选择推送渠道,在适当的时机,将合适的内容推送出去。下图是营销流程的简单示例:

在信用卡 App 营销过程中,营销资源不仅指奖励利益,App 功能也可作为营销抓手。在这个过程中,同一特征客群,可能感兴趣的资源有多个;而同一营销内容,也可能有多组不同特征客群感兴趣。不同客群与不同营销内容之间,可进行交叉营销。

以跨境消费客群为例,可营销的内容有:跨境消费返现、跨境消费送积分、积分兑换送里程、贵宾出行专区体验等。而以跨境消费送积分活动为例,可营销的客群有:跨境消费客群、商旅卡客群、积分兑换客群等。

在执行营销之前,可结合信用卡营销资源规划表、App 功能上线规划表、时事热点、公关日历表等,做年度、月度营销的精准营销计划表。

值得一提的是,A/B 测试是执行精准营销过程中的常用策略。不管是客群、资源、渠道、发送时机,除了基于业务经验和数据分析出的规律以外,还可以通过 A/B 测试进行验证。经过几轮验证之后,探索出最合适的组合方式,多次验证结果均理想的情况下,便可设置为自动化的常态化营销模式。

例如:针对跨行还款功能,数据研究结果显示是还款日前几天 App 注册率高。为进一步验证和确切条件,其他筛选条件一致且样本量控制一致的情况下,进行距离还款日不同天数的发送,结果是还款日前5天响应率最高。针对该结果,可再多做几轮测试,如结果仍能够不断得到验证,则该结果成立,可设定自动化短信,长期触达。

三、评估营销效果

1、目标导向的归因分析

每次进行精准营销,都有个业务目标。因此,分析营销效果需基于不同的目标导向。若目标是促注册 App,那就需要明确注册客户来源及精准营销带动注册客户的比例。目标是促 App 分期业务办理,那就需要明确营销及响应周期内营销带动与非营销带动的比例。

举例,在促信用卡 App 注册的精准营销过程中,在数据收集不完善的时候,可进行基础维度的监测数据:安排发送量-注册量-绑卡量-参与活动或办理业务量。

可进行全流程维度的监测数据有:安排发送量-成功发送量-短链访问量-应用商店访问量-安装量-注册量-绑卡量-参与活动或办理业务量。

全流程各个环节的数据监控更精准,前提是需完成埋点和数据收集。这期间,整条路径用户信息数据的打通是个关键工作。通过移动广告效果监测平台 Ad Tracking,基于终端信息、环境信息生成点击数据、激活时设备数据,即可实现应用安装前后用户信息匹配。

监控周期可设定为7或14天,不同营销活动的各个批次之间采用统一口径即可对比营销效果。依据经验,通常注册响应率不到1%的营销活动,需要再反向从营销资源、渠道、客群、时机、触点进行调优。

2、渠道效果监控

精准营销附加的超链接,可添加 UTM 参数,通过埋点追踪 UTM 访问数据。UTM 常用的参数有:渠道、媒介、名称、内容、关键字。

通过这5个可添加到链接中的参数,即可通过细分层级,明确用户是从哪一个渠道、媒介(微信/短信/EDM等)、名称、内容、关键字过来的。通过不同渠道的访问-下载-注册-参与/付费数据,可分析不同渠道的质量。通过名称、内容、关键字,可分析出客户对哪类活动感兴趣,这部分数据也是用户标签数据的重要来源之一。

下图为基础的渠道监控表:

四、搭建营销闭环

在精准营销过程中,从最初的筛选精准客群,到选择适宜渠道、恰当时机、差异化内容、合适形式进行投放,再到最后的营销效果监测,数据分析是贯穿始终的基础工作。

精准营销需实现如上图所示的营销闭环。对精准营销效果进行复盘分析,可指导下一轮的精准营销。这对客群标签沉淀、客群模型调优、营销方案迭代、App产品迭代优化、渠道拓展及触点优化、发送时机选择、标准的自动化营销体系的逐步建设,都起着至关重要的作用。

翻译 | 数据科学中各岗位的技能点应该怎么点?

本文是TalkingData University翻译自George Liu发表在towardsdatascience的一篇文章。

在之前的文章中,George给出了不同角色数据人才能力画像,本文他将通过分析Indeed网站的招聘信息进一步分析得到的结果。

如果你是数据科学方面的求职者,那么肯定希望在简历当中添加某些技能或者特别的东西,让 HR 的眼前一亮,如果您想进入这个领域,您可能想破脑袋想知道学习哪些技能才能成为更有吸引力的候选人。

来吧,我有你想要的答案。

首先,我们来看看不同岗位的技能要求。

R 与 Python 之争已经结束,Python 现在是主导者

曾经有人争论过到底Python和R谁才是数据科学的首选语言。显然,市场需求告诉我们 Python 现在是领导者。同样值得注意的是,R 甚至比 SAS 更少提到。因此,如果您正在考虑进入数据科学领域,请考虑将您的学习重点放在 Python 上。 SQL 作为数据库的语言(也可能是数据!),是数据科学家第二重要的语言。由于数据科学家职业的广泛性,其他语言也扮演着重要角色。

总结:数据科学家的主要语言是:Python,SQL,Scala,Lua,Java,SAS,R,C ++和Matlab。

机器学习工程师所需的语言更加多样化

作为机器学习的实际语言,Python 当选机器学习工程师的首选语言并不令人惊讶。而从头开始实现算法,并在大数据环境中部署 ML 模型,使得 C ++ 和 Scala等相关语言也很重要。总的来说,与其他两个角色相比,机器学习工程师对编程语言的需求似乎更加分散。

总结:机器学习工程师的主要语言是:Python,Scala,Java,C ++,Lua,SQL,Javascript,Matlab,CSS和C#。

如果你想成为一名数据工程师,SQL绝对是必备的

数据工程师始终在处理数据库,SQL是数据库语言,所以毫无疑问,SQL是首选语言。 Python很重要,但还是败给了Scala和Java,因为这些语言可以帮助数据工程师处理大数据。

总结:数据工程师的主要语言是:SQL,Scala,Java,Python和Lua。

Scala是数据科学中第二重要的语言(而不是R)

当我们查看不同的角色的语言首选时发现了有趣的事,Scala始终处于第二位或第三位。 所以我们可以说数据科学中的排名前三的语言是 Python,SQL 和 Scala。 如果您正在考虑学习一门新语言,请考虑使用Scala!

对除数据工程师之外的角色,Spark 是首选大数据技能

仅对于数据工程师而言,需要 Hadoop 的比 Spark 更多,但总的来说,Spark 绝对是首先应该学习的大数据框架。 Cassandra 对工程师而言比科学家更重要,而 Storm 似乎只与数据工程师有关。

总结:数据科学的首选大数据技术是:Spark,Hadoop,Kafka,Hive。

TensorFlow 是深度学习的王者

数据工程师职位发布中几乎没有提到深度学习框架,因此该角色似乎不需要这项技能。 提及DL框架最多的是机器学习工程师,表明ML工程师确实大量处理机器学习建模,而不仅仅是模型部署。

此外,TensorFlow 在深度学习领域绝对占据主导地位。尽管 Keras 作为高级深度学习框架在数据科学家中非常受欢迎,但它几乎与机器学习工程师角色无关,说明可能ML从业者大多使用较低级别的框架,如 TensorFlow。

总结:数据科学中最重要的深度学习框架是:TensorFlow,Torch,Caffee和MXNet。

AWS 广泛主导

计算机视觉是机器学习最大的需求来源

对于一般的数据科学家来说,自然语言处理是机器学习最大的应用领域,其次是计算机视觉,语音识别,欺诈检测和推荐系统。有趣的是,对于机器学习工程师来说,需求最大的是计算机视觉,而第二名自然语言处理远在后面。另一方面,数据工程师再次成为聚焦专家–这些ML应用领域中没有一个与他们相关。

洞察力 – 如果您想成为数据科学家,您可以根据想要进入的领域构建各种类型的项目,以展示您的专业知识,但对于机器学习工程师来说,计算机视觉是最佳选择!

对可视化来说,Tableau 是必须的

可视化工具主要为数据科学家所需,很少在数据工程师和机器学习工程师的职位中提到。但是,Tableau 是所有角色的首选。对于数据科学家来说,Shiny,Matplotlib,ggplot和Seaborn似乎同样重要。

Git 对每个人都很重要,而Docker仅有工程师需要

接下来,我们使用词云来探索每个角色最常用的关键词,并结合相应的技能为所有数据科学角色构建理想的画像!

数据科学家更多的与机器学习相关,而不是业务或分析

Data Scientist一直被视为需要统计,分析,机器学习和商业知识的全方位知识。 似乎确实如此,或者至少,数据科学家仍被广泛需要。 然而,现在看来,数据科学家们更多与机器学习相关,而不是其他任何事务。

其他主要要求包括:业务,管理,通信,研究,开发,分析,产品,技术,统计,算法,模型,客户/客户和计算机科学。

机器学习工程师是关于研究,系统设计和构建

与一般的数据科学家相比,机器学习工程师肯定似乎有一个更聚焦的技术栈,包括研究,设计和工程。显然,解决方案,产品,软件和系统是主要的。与此同时,有研究,算法,ai,深度学习和计算机视觉。有趣的是,商业,管理,客户和沟通等术语似乎也很重要。这可以在本项目的迭代中进一步研究。另一方面,数据管道和平台也脱颖而出,证实了机器学习工程师在构建数据管道以部署ML系统的责任。

数据工程师是真正的“专”家

与机器学习工程师相比,数据工程师拥有更加聚焦的技术栈。显然他们聚焦的是通过设计和开发管道来支持产品,系统和解决方案。首要要求包括技术技能,数据库,构建,测试,环境和质量。机器学习也很重要,可能是因为管道主要用于支持ML模型部署数据需求。

好了!我希望这个项目可以帮助您了解雇主正在寻找什么样的人,最重要的是帮助您做出如何定制简历和学习哪些技术的明智决策!

咨询专栏丨使用现金贷的都是哪些人?他们有什么特征?

2017年年底《关于规范整顿“现金贷”业务的通知》等一系列监管文件的出台,对现金贷业务模式做出了严格的规定,并且确定综合年化利率不得超过36%。虽然监管在思路上对现金贷的存在给予了一定的肯定,但是在监管政策上,又变得更加严厉。

在如此严格的监管情况下,根据 TalkingData 统计,2018年现金贷人群的借款类 App 月均使用频次为15.4次,月均使用时长为14.8分钟,低于银行信用卡类 App 的平均使用情况。所以,强监管、低频次、产品期限短、额度小等特点要求现金贷企业低成本高流量的有效获客才能更好的盈利。因此,了解现金贷人群画像,洞察现金贷人群的特征,对企业有效获客至关重要。

本报告抽样选取近三个月在典型现金贷App(例如:宜人贷借款、拍拍贷借款、闪电贷等)上活跃过的人群作为分析对象,将近三个月的普通移动互联网用户作为对照组进行对比分析。

总体上,现金贷人群主要来自二三线城市,且男性居多。一线城市现金贷人群多来自二三线,且流动性大。日常生活中偏好网购、娱乐至上。虽然消费能力一般,但消费需求较高。餐饮、生活服务以及休闲娱乐为现金贷人群的主要消费场景。

一、现金贷人群基本画像

1、现金贷人群的年龄结构整体偏年轻,且男性居多

约58%的现金贷人群集中在26至35岁,35岁以下人群占比81%,现金贷人群年龄整体偏年轻,且男性占比更多。

2、主要分布在广东、江苏、浙江等沿海地区,且二三线城市居多

现金贷人群主要分布在广东、江苏、浙江等沿海地区,人群多集中在二三线城市。二线城市占比约为26%,主要分布在重庆、成都、天津、西安等城市。而三线城市现金贷人群占比约为65%,例如东莞、泉州、佛山等。

3、多使用OPPO、vivo、小米等高性价比机型,移动和电信更有市场优势

现金贷人群整体消费能力一般,超过一半的现金贷人群手机价位在2000至3999元的区间,接近40%的现金贷人群手机价格低于2000元,且OPPO、vivo、小米等高性价比机型占比较大。对比三大运营商的市场份额,中国移动依然拥有最大的客户基础,而中国电信在现金贷人群中较受欢迎。

4、餐饮、生活服务以及休闲娱乐为现金贷人群的主要消费场景,高性价比的大众品牌更受欢迎

现金贷人群的日常消费需求高于移动互联网用户,尤其是餐饮、生活服务以及休闲娱乐等消费场景。现金贷人群的消费习惯也符合大众消费习惯,具体的消费品类集中在食品烟酒、零售卖场、生活用品和服务。而对健康生活的追求和精神文化的享受也渐渐成为人们新的主流消费诉求。

二、现金贷人群深入洞察

1、偏好网购、娱乐至上和经常出行是现金贷人群的主要特征

现金贷人群整体偏年轻,对移动互联网较为依赖。偏好网购、娱乐至上,出行需求也相对较高是主要特征。相比于普通的移动互联网用户,现金贷人群更喜欢影音娱乐和网络购物类App,人均多使用1.3个影音类App和0.6个网购类App。

2、现金贷人群对价格更敏感,网络购物重视搜寻信息和比价

相比于大多数移动互联网网民,现金贷人群对价格更敏感,重视搜寻商品信息和价格对比。网购更偏好网上商城、团购和比价类应用。现金贷人群TOP10覆盖率的网购应用中,淘宝、美团最受欢迎,覆盖率达到了50%以上,但拼多多、京东的用户活跃率更高。值得注意的是,现金贷人群也有一定的二手交易需求,如闲鱼和转转等二手交易平台,用户覆盖率略低但用户活跃率较高。

3、现金贷人群经常使用音乐、直播和短视频等移动App,而线下更常去网吧、足浴、茶馆等休闲娱乐场所

影音类娱乐内容例如听音乐、看直播、刷短视频已成为现金贷人群在空闲时间主要的消遣方式。爱奇艺、腾讯视频、抖音短视频、火山直播等平台颇受欢迎。咖啡厅、网吧、KTV则是现金贷人群主要的线下休闲娱乐场所。通过和移动互联网用户的对比发现,网吧、茶馆、足浴等消费场所现金贷人群的TGI指数更高。

4、现金贷人群有明显的游戏偏好,手游的安装和打开频次高于平均水平

现金贷人群比普通网民有更明显的游戏偏好,除了线下经常去网吧,约78%的现金贷人群有安装过游戏应用,其中36%的现金贷人群安装过3款以上手机游戏,并且超30%的人连续7天有游戏行为。手机游戏的安装和打开频次均高于普通移动互联网用户。

5、一线城市现金贷人群,主要来自二三线城市,且流动性高

现金贷人群的城市迁移度较高导致出行需求相应较高。广州、北京、深圳、上海等一线城市现金贷人群流动率高于80%,其中广州和深圳的现金贷人群多来自其周边的二三线城市,而北京和上海的现金贷人群来源则更加分散。

6、现金贷人群,对新闻资讯较为敏感

至少68%的现金贷人群均有安装新闻资讯类App,且受政策新规和负面新闻影响较大。从2017年12月发布《关于规范整顿“现金贷”业务的通知》之后,现金贷类App月均活跃率持续下跌,至2018年2月才逐步回升。同时,科技、娱乐、财经类资讯也是现金贷人群日常比较关注的领域。

三、银行系和互联网系现金贷客群对比

目前市场上主要有五大类现金贷主体,分别是商业银行、消费金融公司、互联网巨头、助贷服务方以及P2P公司。根据其业务模式、用户来源、产品类别、资金成本等特征可以将他们划分为银行系和互联网系两大类。银行系现金贷主体对风险容忍程度较低,采用传统征信模式,且资金成本较低。而互联网系现金贷主体对风险容忍程度高,多采用线上多数据风控,且资金成本较高。不同类别的现金贷主体可能存在对现金贷人群的逆向选择,进而导致人群特征产生差异。

经过两类现金贷人群的对比分析发现,银行系现金贷人群中有车一族更多,且消费能力更强。但总体来说,二者行为偏好差别不大,一方面说明两种类别的客群重复度较高,另一方面说明部分用户可能存在多头借贷的现象。

四、获客建议和策略

企业通过大数据了解目标客群的用户画像,洞察用户的媒介偏好(尤其是移动端App偏好),就能挑选合适的媒介渠道进行广告投放,降低成本,提升获客效果。根据艾瑞咨询的相关报告,基于用户画像的广告投放渠道筛选有三大原则:

差异化选择:

选择TGI较高的App,即在目标人群中安装率、使用率很高,但在普通人群中较低,在此类App上投放针对目标客户的广告可能会有较高的性价比。

垂直媒介筛选:

一般来说,头部App(微信、淘宝、QQ等)安装率和活跃率都较高,属于优质广告位,但成本也较高。安装率较高,但活跃率不高的App,一般偏工具属性,用户用完即走,转化率不会太高。安装率不高,但活跃率较高的App,一般属于垂直领域,用户群相对小一些,但更加聚焦,选择人群相关度较高的垂直领域,预计会收到比较好的效果。

潜力型媒介筛选:

可以从目标群体偏好的App列表中,筛选近三个月时间增长较快的腰部App。此类App当前体量较小,广告投放费用尚低,如果提前以较低的价格签订一段时间的广告合约,可能会在未来收到超出当前预期的收获。

根据TalkingData的应用统计数据发现,针对现金贷客群来说,覆盖率和活跃率更高的安卓应用分发市场第一梯队是OPPO软件商店和腾讯应用宝。其次是360手机助手、百度手机助手、vivo应用商店和PP助手。

现金贷客群在网络购物、影音娱乐、出行服务等方面TGI较高,因此更有效的差异化媒介为:手机淘宝、爱奇艺、腾讯视频、高德地图。用户覆盖率不高但相对活跃的垂直媒介有:OPPO音乐、58同城、王者荣耀、京东金融和汽车之家。根据TalkingData数据中心计算推荐,更符合现金贷用户特征的广告投放渠道为:新数DSP、BiddingX、品友互动和今日头条。

TalkingData通过对现金贷用户群体的深度洞察,从第三方数据智能服务商的角度客观的展示了现金贷人群的基本特征和行为偏好。希望报告中所提及的用户群体的地域分布、人群画像、消费偏好和行为习惯,能帮助企业更好的了解现金贷客户的特征,通过精准的获客渠道选择以及媒介合作策略,降低获客成本,提高获客效率。

注:本文章中出现的第三方商标及图标,仅为替代文字表达用以辅助说明本报告的内容,而非商标性使用,商标权归原权利人所有。

凛冬将至?不,是个性化新消费时代的来临

近日,TalkingData 副总裁高铎在“2018实现可持续发展目标中国企业峰会”上发布了主题为《新消费时代开启,消费升级显活力》的行业报告,并从新消费在国内的兴起、新消费的国民理念以及新消费在生活各领域的表现这三大方面,分享了对新消费的最新行业洞察与观点。

一、新消费在国内的兴起

1、新消费兴起的前提和核心

从改革开放基本国策确定和实行以来,我国开始全面深化改革,不断释放发展动力,经济社会发生了翻天覆地的变化,居民消费结构得以不断改善、升级,以消费者为核心,满足其美好生活需求的个性化升级的新消费时代正在来临。

现在所谓的消费降级概念其实是由于以一二线城市的角度看待问题,而对于五六线城市和乡镇的消费者来说,现在能够买到之前买不到的相应产品,体验的更多是消费升级。所以准确来说,应该是很多线上业务开始下沉,走向消费分级,或者说是“个性化消费升级”,以满足消费者愈加多样化的消费需求。

中国经济发展处于健康稳定态势,第三产业继续对经济增长发挥主导作用;同时,中国社会消费品零售总额保持平稳较快增长,国民消费活力吸引各行各业拓展商机。

而通过近30年的大力发展,充分调动与发挥了人在城镇化的主动性和创造性,促使中国城镇化率提升2.3倍、中国城镇居民人均可支配收入水平提升39.7倍,这两个大环境支撑了不同时代的消费升级。

消费结构、消费需求、消费理念、消费渠道是新消费以人为本的四大核心。新消费是一个持续发展演变的过程,在以消费者为基础的准则上,不断满足其需求,利用时代新技术或新模式重构“人-货-场”的关系,进而带动商品创造和服务升级,最终实现对消费结构、消费需求、消费理念和消费渠道的深刻变革。

2、居民需求层次升级,数字化提质增效

通过上图可以看到,虽然生活刚需仍占最大比例,但与前两年相比,医疗保健、教育、文化、娱乐、交通类的消费多了起来。

数字化技术加速落地,并广泛应用于生产、物流、售卖、展示等社会消费品产业链各个环节,打通各环节的信息流通,增加各个环节的协同效应,提升整个消费链条的效率和消费者的消费体验。正是技术的进步,支撑了前端消费场景的变化。

说到数字化,就不得不提移动智能终端的发展。截至2018第二季度,我国移动智能终端规模已经突破15亿台,移动互联网对人民生活充分渗透。根据TalkingData数据统计,国民在移动智能终端的日均活跃时长达3.5小时,日均打开19.8款移动应用。移动智能设备已在社会生活中占据重要位置,并改变了人们的生活方式。

也正是依托移动互联网、大数据和人工智能等新兴技术,传统企业开始转变发展理念,整合线上、线下渠道,丰富和利用数据资产,实现对消费者的精准触达和友好服务,线上线下深度融合的新型消费模式应运而生。

3、三大群体支撑新消费时代

新消费群体有三类:相比之下,70后与80后群体更注重品质;90后群体更追求个性、独立和新潮;同时也不应忽视更关注健康的60后消费群体,他们的占比达到了16%。

不同群体在消费渠道上也有着比较明显的不同,譬如很多90后通过“网红”来了解和购买商品,70后与80后倾向于通过电商平台购买,而60后很多都喜欢电视购物等。

因此,面对不同的消费群体,意味着品牌商的营销也要采用不一样的策略、不一样的渠道、不一样的触达方式。

二、新消费国民理念

城镇化率、居民收入、数字化技术落地和移动互联网飞速发展,推动着国民消费理念的逐步转变。如今,新消费理念可分为5大方向,分别是:

  • 追求品质化生活:在中国经济发展的新常态阶段下,人们的消费需求开始从模仿型排浪式消费向多样化理性消费转变,无论是刚需、非刚需,还是基础生活、品质生活,整个消费主体越来越重视对美好和品质生活的追求。
  • 追求互动体验:技术演进催生出日新月异的消费互动体验,例如VR、AR、无人驾驶/便利店、智能机器人、线下体验店等技术或商业形态,通过虚拟、跨界、人工智能化的体验等带来更为丰富、立体和享受的空间及氛围。
  • 追求个性化定制:由于受到审美喜好、教育文化、身份场合、生活习惯等影响,以及人们越来越注重个人价值和自我内涵的体现,潮牌、轻奢、设计师品牌、DIY、私人定制等开始满足了不同人群的个性化消费需求。
  • 追求便捷高效:便捷和高效是每个时代的一致追求,供给侧和需求侧同样需要便捷高效的有力支撑,高铁、共享单车、外卖、移动应用、手机支付、智能家居等的发展,创造了更加高效、便捷的消费和生活环境。
  • 追求绿色健康:绿色健康正在成为人们的一种生活方式,从低碳出行,到有机食品,再到运动健身,无不折射出人们的绿色环保、健康养生的生活志趣,亦将赋予此种生活方式以新的意义。

三、新消费在五大生活领域上的表现

国民生活,永远离不开衣、食、住、行、娱这五大领域,那么新消费在这五大生活领域中的表现如何?人们的消费理念有哪些转变和趋势呢?

衣:

通过上图可以看到,线上时尚品牌消费用户增长率和购买次数正不断增加。面对线上消费快速发展和居民对网购习惯养成,时尚品牌不仅巩固线下市场,而且拓展线上渠道,并通过触网洞悉市场潮流、把握消费者心理和商品需求。

食:

“互联网+”与餐饮业正在加速融合,形成对餐饮业各个方面全面渗透和拓展,目前四分之一的移动互联网用户使用餐饮类移动应用,近6成餐饮结帐方式来自移动支付,移动互联网发展红利导致餐饮业的线上拓客、用户服务以及商业运营等更加精准高效透明。

住:

近年商旅住宿业态不断创新,迎合用户家庭感、体验感、个性化以及主题特色等需求的住宿资源、平台和休闲旅游场所逐年增加。而租房市场主导因素不再是价格为王,用户开始综合考虑交通便利度、社区环境、周边配套以及房屋品质等细节,追求品质生活环境。

行:

出行领域与互联网的融合力度不断增加,各客运市场通过商业、技术创新提升运作效率、服务品质,探索行业发展新商机。社会经济发展推动了出行方式改善,移动化、智能化、共享化等则共同提升出行体验。

娱:

现今,消费者在物质生活方面已得到极大满足,开始更多关注精神方面多元需求,吸引了游戏、影视、传媒、互联网等企业通过核心IP内容拓展其在核心、优质、长尾等流量层的行业布局。

旅游市场方面,一方面定制游、品质游成为旅游消费新热点,另一方面旅游消费者越来越看重旅游的文化体验、精神熏陶。

四、总结

综上所述,中国居民消费结构正在加速改善、升级,整个社会开始进入以消费者为核心的消费升级时代,消费理念呈现品质生活、互动体验、个性定制、便捷高效和绿色健康,并反映在衣、食、行、住、娱等领域。

解惑丨如何在边缘设备上适配大型神经网络?

原文作者:Bharath Raj

译者:TalkingData 赵磊

原文地址:http://t.cn/Rkofy1e

对于任何想要创建可扩展服务的人来说,部署有内存限制的深度学习算法都是一种挑战。从长远来看,相比昂贵的云服务,在边缘设备上离线部署模型更为便宜,而且还有其他好处。唯一的缺点是它们缺乏内存和计算能力。

本文探索了一些可以用来在内存受限的设备中适配神经网络的技术。因为“训练”和“推理”阶段用到了不同的技术,所以将把它们分开来讨论。

训练

某些应用程序需要在线学习。也就是说,模型要根据反馈或额外的数据进行改进。在边缘设备部署这样的应用程序会给您的模型带来一个切实的资源约束。这里有4种方法可以减少此类模型的内存消耗。

梯度检查点像 TensorFlow 这样的框架需要消耗大量的内存用于训练。在前向传播过程中,计算图中的每个节点的值都会被计算并保存在内存中,因为在反向传播时计算梯度时需要用到。

每个节点的值在前向传播后保存,以便在反向传播中计算梯度。源码:

https://github.com/openai/gradient-checkpointing

通常情况下,这是可以做到的,但当模型变得越来越复杂时,内存消耗会急剧增加。一个巧妙的回避解决方案是在需要时重新计算节点的值,而不是将它们保存到内存中。

重新计算节点值用以计算梯度。注意,我们需要分别做若干次前向传播来完成一个反向传播。源码:

https://github.com/openai/gradient-checkpointing

然而,如上所示,计算成本将显著增加。解决办法是在内存中只保存一些节点,而在需要时重新计算其他节点。这些保存的节点称为“检查点”。这极大地减少了因深层神经网络而积累的内存消耗。如图所示:

左边的第二个节点是检查点节点。它在减少了内存消耗的同时提供了合理的时间成本。源码:

https://github.com/openai/gradient-checkpointing

以速度换内存(重计算)根据上面的想法,可以重新计算某些操作用以节省时间。Memory Efficient DenseNet 实现就是一个很好的例子。

DenseNet 的一个 dense 块

原文:https://arxiv.org/abs/1608.06993

DenseNets 具有很高的参数效率,但内存效率也很低。之所以出现这种矛盾,是因为拼接和批标准化操作造成的。

为了使卷积在 GPU 上更高效,必须连续地设置这些值。因此,在连接之后,cudNN 在 GPU 上连续地排列这些值。这涉及到大量的冗余内存分配。类似地,正如本文所解释的那样,批标准化涉及到过多的内存分配。这两种操作都会造成内存以二次增长。DenseNets 有大量的拼接和批标准化,因此它们的内存效率很低。

将原始的拼接和批标准化操作

与它们的高效内存实现相比较原文:

https://arxiv.org/pdf/1707.06990.pdf

上述问题的一个简洁的解决方案涉及两个关键的观察。

首先,拼接和批标准化操作不是时间密集型的。因此,我们可以在需要的时候重新计算这些值,而不是保存所有冗余内存。其次,我们可以使用“共享内存空间”来转储输出,而不是为输出分配“新”内存空间。

我们可以重写这个共享空间来存储其他拼接操作的输出。也可以在需要的时候重新计算拼接操作来进行梯度计算。同理还可以将它扩展到批标准化操作。这个简单的技巧节省了大量的 GPU 内存,通过增加少量的计算时间来换取。

减少精度在一篇优秀的博客中,Pete Warden 解释了如何用8位浮点值训练神经网络。由于精度的降低,出现了一些问题,其中一部分如下:

如本文所述,“激活值、梯度和参数”有非常不同的范围。一个定点表征并不理想。这篇论文声称,一个“动态的固定点”表征将非常适合于低精度的神经网络。正如 Pete Warden 的另一篇博客所述,较低的精度意味着更大的偏差。通常,如果错误是完全随机的,那么它们很有可能相互抵消。然而,0被广泛用于 padding、dropout 和ReLU,在低精度浮点格式中,0的精确表示也许是不可能的,因此可能会在性能中引入总体偏差。神经网络的架构工程架构工程涉及到设计准确率、内存和速度最优的神经网络结构。有几种方法可以在空间和时间上优化卷积。

将 NxN 的卷积分解成 Nx1 和 1 xN 卷积的组合。这可以节省大量的空间,同时也提高了计算速度。在 Inception 网络的更新版本中使用了这种方案以及其他一些优化技巧。更详细的讨论,请查看这篇博客:https://towardsdatascience.com/a-simple-guide-to-the-versions-of-the-inception-network-7fc52b863202在 MobileNet 和 Xception Net 中使用深度可分离的卷积。关于卷积的类型的详细讨论,请查看这篇博客:https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d使用1×1卷积作为一个瓶颈来减少传入通道的数量。这种技术已经在几种流行的神经网络中使用了。

谷歌的 AutoML 的描述,视频:

https://www.youtube.com/watch?reload=9&v=Y2VF8tmLFHw

一个有趣的解决方案是让机器为特定的问题确定最佳的架构。神经架构搜索使用 ML 来为给定的分类问题找到最好的神经网络体系结构。当在 ImageNet 上使用时,它生成的网络(NASNet)是迄今为止创建的最佳性能模型之一。谷歌的 AutoML 也遵循同样的原则。

推理

为边缘设备推理拟合模型相对比较容易。本节将介绍可用于优化边缘设备神经网络的技术。

去除臃肿像 TensorFlow 这样的机器学习框架,消耗了大量的内存空间来创建计算图。这个额外的空间对于加速训练过程是很有用的,但是它不用于推理。因此,专门用于训练的计算图部分可以被删除,我们把这部分称为计算图的“臃肿”。

建议将模型检查点转换为冻结的推理图。这个过程会自动删除消耗内存的“臃肿”部分。当转换为一个冻结的推理图时,从模型检查点抛出“资源耗尽的错误”的计算图有时可以被适配进内存中。

修剪特征在 Scikit-Learn 上的一些机器学习模型(如随机森林和XGBoost)会输出一个名为特征重要度(feature_importance)的属性。这个属性代表了分类或回归任务的每个特性的重要性。我们可以简单地删除那些最不重要的特征。如果您的模型有大量的特征,而且不能通过任何其他方法来减少,这将非常有用。

一个特征重要度可视图的例子:

https://machinelearningmastery.com/feature-importance-and-feature-selection-with-xgboost-in-python/

类似地,在神经网络中,许多权重值接近于零。我们可以简单地删除这些连接。然而,删除层间的单个连接会形成稀疏的矩阵。创建高效推理引擎(硬件)方面的工作正在进行,它可以无缝地处理稀疏操作。然而,大多数 ML 框架都是将稀疏矩阵转换成密集的形式,然后再将它们发送到 GPU 上。

去掉一个无关紧要的过滤器,原文:

http://machinethink.net/blog/compressing-deep-neural-nets/

相反,可以移除无关紧要的神经元,并稍微对模型进行重新训练。对于 CNNs,也可以删除整个过滤器。研究和实验表明,通过使用这种方法,可以保留大部分的精确度,同时获得大规模的缩小。

权重共享为了更好地说明权重的共享,参考一下这篇深度压缩论文:https://arxiv.org/pdf/1510.00149.pdf中给出的例子。一个4×4的权重矩阵。它有16个32位浮点值。我们需要512位(16*32)来表示这个矩阵。

我们将权重值量化到4个级别,但是保留它们的32位性质。现在,4×4的权重矩阵只有4个唯一的值。4个唯一的值存储在一个单独的(共享)内存空间中。我们可以分别给这4个唯一值一个2位地址(可能的地址值为0、1、2和3)。

可以通过使用2位地址来引用权重。因此,这里获得了一个新的4×4矩阵,其中包含2位地址,矩阵中的每个位置都指向共享内存空间中的一个位置。这个方法需要160位(162+432)来表示整个矩阵,得到了3.2的大小减少因子。

不用说,这种规模的缩小伴随着时间复杂度的增加。但是,访问共享内存并不会消耗太多的时间。

量子化和更低的精度(推理)回想一下,在本篇文章的“训练”部分中提到了精度的降低。对于推理来说,精确度的降低并不像训练过程那么麻烦。权重可以被转换成更低的精度格式,并发送到推理过程中。但是,可能需要轻微的权重调整来防止精确度的急剧下降。

编码修剪和量子化的权重可以通过编码进一步优化。Huffman 编码可以用更少的位表示最频繁的权重值。因此,在比特级别上,一个 Huffman 编码的字符串比普通字符串占用更小的空间。

深度压缩探讨了使用无损压缩技术的编码,如 Huffman 。然而,研究也探讨了有损压缩技术的使用。这两种方法的缺点是翻译的开销。

推理优化器到目前为止,我们已经讨论了一些很有建设性的想法,但是若从头开始实现它们需要相当长的时间。这就是推理优化器发挥作用的地方。例如,Nvidia 的 TensorRT 包含了所有以上这些想法。并提供了一个经过训练的神经网络的“优化推理引擎”。

TensorRT:

https://developer.nvidia.com/tensorrt

此外,TensorRT 可以优化模型,使其能够更好地利用 Nvidia 的硬件。下面是一个使用 TensorRT 优化的模型更有效地利用了 Nvidia 的 V100 的例子。

在 Nvidia 的 V100 上使用 TensorRT 优化的模型:

https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/

知识蒸馏我们可以“教”较小的模型来模拟更健壮、更大的模型,而无需花哨的优化技术。这项技术被称为“知识蒸馏”,它是谷歌“ Learn2Compress ”的重要组成部分。

Teacher-Student 模型:

https://ai.googleblog.com/2018/05/custom-on-device-ml-models.html

通过使用这种方法,我们可以强制使用更小的模型,这些模型可以适配在边缘设备上,以达到大型模型的性能水平。据统计,精确度的下降是最小的。

更多信息可以参考Hinton的论文:

https://arxiv.org/pdf/1503.02531.pdf

TalkingData-2018年8月移动游戏Benchmark

2018年8月移动游戏Benchmark解读

付费率:2018年8月,移动游戏用户的付费率分别在Android和iOS平台出现微降和微升的状况,其中,角色扮演类移动游戏的付费率在Android和iOS平台略有下降,降幅分别为0.4%和0.3%;

用户活跃度:2018年8月,Android平台移动游戏用户的活跃情况延续下滑态势,而iOS平台移动游戏用户的活跃情况则有所好转,其中,iOS平台休闲类移动游戏的周活跃率和月活跃率分别环比增长4.8%和1.0%;

用户留存率:2018年8月,Android和iOS平台移动游戏用户的一日玩家比例整体略有增长,且Android平台增幅高于iOS平台,其中,Android平台动作类移动游戏的一日玩家比例环比增长0.3%,其次日留存率环比增长0.2%,而7日留存率则环比下降11.8%;

使用时长&次数:2018年8月,Android和iOS平台移动游戏用户的游戏习惯较为平衡,未出现较大波动,其中,iOS平台动作类移动游戏的日均游戏次数环比上月下降1.1%,平均每次游戏时长则下降4.2%。

技术专栏丨Fabric 和 Sawtooth 技术分析(下)

在前一篇文章(Fabric和Sawtooth技术分析(上))中,我们着重跟大家分享了 Fabric 相关的内容,在本篇文章中,我们将围绕着 Sawtooth 进行一些分析和探讨。

Sawtooth 结构及分析
Sawtooth 是 Intel 公司推出的企业级区块链,2018年 Intel 将其贡献给 Hypherlegder 项目。本文中笔者主要从 Sawtooth 的存储结构、数据结构、网络结构方面做简要介绍。

Sawtooth

Sawtooth 的存储结构

Sawtooth 使用名为 Radix Merkle Tree 的存储结构,它融合了 Radix Tree 和 Merkle Hash Tree 的功能,先看看这两种结构:

  • Radix Tree

Radix Tree 概念比较拗口,简单地说就记住在这个树上,任何一个叶子节点的位置和一个 01 串唯一对应,因此我们可以根据一个 01 串组成的地址确定叶节点是谁。

下图是一个 Sawtooth 所使用的 Radix Tree 对应的字符串,由70个16进制字符组成,前6位称为命名空间前缀(Namespace prefix),后边的是该前缀所对应的空间内可分配的地址范围。

我们以 Sawtooth 预定义的一个 Transaction Family-IntegerKey 为例,注意 Sawtooth中 的 Transaction Family 相当于 Fabric 中的 chaincode 或者 Ethereum 中的 Smart Contract 。IntegerKey 的前缀(prefix)计算法方法是:hashlib.sha512(‘intkey’.encode(‘utf-8’)).hexdigest()[0:6],运算结果是 ‘1cf126’。那么,存储该 transaction family 中一个 block 的地址就是:

address = “1cf126” + hashlib.sha512(‘name’.encode(‘utf-8’)).hexdigest()[-64:]

当然,地址的构成也可以更复杂一些,比如,有个自定义 Transaction Family 的前缀是 prefix = “my-transaction-family-namespace-example”。命名空间可以进一步划分为 object-type 和 unique-object-identifier 。其中,object-type = “widget-type”,unique-object-identifier = ”unique-widget-identifier”。那么,对应的字符串就可以计算如下:

hashlib.sha256(“my-transaction-family-namespace-example”.encode(‘utf-8’)).hexdigest()[:6] + hashlib.sha256(“widget-type”.encode(‘utf-8’)).hexdigest()[:4]

+ hashlib.sha256(“unique-widget-identifier”.encode(‘utf-8’)).hexdigest()[:60]

最后得到下面的地址:

‘4ae1df0ad3ac05fdc7342c50d909d2331e296badb661416896f727131207db276a908e’

众所周知,2的10次方是1K,20次方是1M,30次方是1G,40次方是1T,对于一个名字空间,Sawtooth 为其保留64位,从存储空间需求上讲,即使有一些位被用来做子空间划分,应该也够用了。在查找时,完全可以根据 Transaction 的名字找到它的存储位置,所以检索速度也会非常快。

我们可以认为,Sawtooth 就像一个原始的区块链,每向后一层都可以分叉,以树的形式组织数据存储,而不再是以线性的方式来组织数据存储。也可以把原始的比特币区块链理解为只有一个Transaction Family 的 Sawtooth。在完整的分析过 Sawtooth 以后,最应该记住的就是 Sawtooth 的存储结构,它其后的所有设计都是基于这一结构。

  • Merkle Hash Tree

Merkle Hash Tree 的特点是所有节点的值都是哈希值,每个哈希值是根据其子节点的哈希值计算出来的,所以任何一个节点和哈希值出现变化,它的上层节点的哈希值都会跟着变。

Sawtooth 采用 Radix Merkle Tree 结构做数据存储的好处就是给定 Block 名及类别,直接计算哈希值,就找到它的存储位置了。而且存储空间是隔离的,每个 transaction family 的存储空间和其它的都是分开的,互不影响。所以,从存储结构来看,基于 Sawtooth 的区块链天生是多条连的(Forked),很容易去解析它的分叉。

Sawtooth 的数据结构

Fabric 没有去严格定义数据结构,Sawtooth 的数据结构也没有什么值得特别提出的亮点。只要知道 Sawtooth 定义了 Transaction 包括Header 和 Payload 两部分即可,而 Sawtooth 要求不管是一个还是多个 Transaction 必须被封装在 Batch 中才可以提交给 Transactio n的 Processor ,或者说 Transaction Processor 只接受以 Batch 为最小单位的 Transactions 。同样地,Batch 也包括 Header 和 Payload 两部分,其关系如下图所示:

Sawtooth 的网络结构

如下图所示,Sawtooth 的一个节点可能由如下几个部件组成:Validator、Transaction Proc essor、REST API、以及 Client。Validator 是 Sawtooth 的核心部件,主要功能包括接收 Transaction 请求,并将其转发给相应的 Transaction Processor 来处理,根据 Transaction Processor 的处理结果,决定如何生存新的区块,如何给 Client 回显。Validator 还要与其他的 Validator 协同,以保持 Sawtooth 网络的全局状态一致。Transaction Processor 顾名思义就是用来专门处理某一类型 Transaction Family 的 Transactions 的 Processor 。

Client 需要按照 Transaction 和 Batch 规定的数据结构生成请求,REST API 则是标准化的网络传输数据格式。之所以说可能由这几部分组成,是因为对 Sawtooth 来说,只有 Validator 属于其固定结构,比如图中有 Validator1 和 Validator2 ,而 Validator2 就没有连接其他部件,而是只与 Validator1 相连。从构成角度看,一个 Sawtooth 网络可以只由一个 Validator 构成。从网络方面看,其他的 Validator 可以动态加入网络。从部件方面看,Transaction Processor 可以动态注册到 Validator ,然后 Client 提交相应 Transaction 就有对应的 Processor 来进行处理。网络节点和部件可以分别使用不同的端口来区分。这样,Sawtooth 网络就变成完全动态的了,每个组成部分都可以动态插拔。

接下来,我们先看看 Validator 的组成结构,Validator 的软件实现部分称为 Journal,如下图。从功能上看,Journal 包括 Completer、ChainController 和 BlockPublisher 三个主要部分。

当 Batch 被提交给 Validator 后,先被交付到 Completer ,它先检查是否 Batch 的所有依赖项都得到了满足。完整且满足依赖的 Batch 会被提交给 ChainController 。Sawtooth 的这种设计可以支持串行和并行的 Batch,注意这已经不是进程级并行了,而是线程级并行。接下来再看看 ChainController 是干什么的:

ChainController 需要完成4个工作:

  • 1)确定块的头在哪
  • 2)确定当前块在哪-先去 BlockCache 里找,再去 BlockStore 里找。
  • 3)验证块有没有损坏
  • 4)把新块写进区块链

写入新区块链后的发布工作则是由 BlockPublisher 完成。从图中可以看到,ChainController 和 BlockPublisher 本质上都是接口,具体的实现由更下层的共识(Consensus)机制完成,共识机制向上提供 BlockVerifier,ForkResolver 和 BlockPublisher 三个功能。

从整体上看,Validator 的结构比较简单。接下来再看看 Validator 之间是怎么连接起来的。Sawtooth 的 Validator 的网络连接方式如下图,可能会有点乱,同时解释地也不是很清楚,这里笔者的理解是:把它看做一个 Ad Hoc 网络,组网的过程完全就是模拟 Ad Hoc 网络路由节点发现的。开始的时候有初始(生成 Genesis block 的)节点,它可以发出广播包,问谁在它边上,可以按照设定的规则加入网络,如果有人应答就可以加入,然后这些节点继续广播,每个广播包只传播给距离自己1跳的 Validator 节点,这样网络很快就组成了。有新节点想加入也是这样,发广播包,看看自己周围有没有可以直连的节点,退出就无所谓了,反正少一个节点不影响网络。我们知道 Ad Hoc 网络的健壮性和灵活性都是非常高的,所以 Sawtooth 的 Validator 网络中任何节点都是可以动态加入或退出的,只要网络规模足够大,理论上,网络的健壮性是有保障的。

这里有两个关键问题其实没有说清。

  • 1)哪些 Validator 可以加入该网络
  • 2)Validator 接受哪些 client 提交的 Batch

这两个问题就构成了访问控制和隐私保护功能的核心,而 Fabric 花大力气实现的体系结构也正是为了回答这两个问题,稍后会详细说明,核心网络介绍完毕以后,会想到 Client 提交了 Transaction,那Transaction 执行与否?所以,还差一个事件机制来实现消息传递和回显功能。这里的事件机制要确定这么几件事:

  • 1)谁应该被告知事件—(广播?还是根据注册情况组播单播)
  • 2)事件应该包括什么—(消息格式-收据(Transaction Receipt))
  • 3)事件在什么情况下,或什么时候才算有效—(放在 Transaction Receipt Store 中,通知发起 Transaction 的 client 来拿)

下图是 Sawtooth 的事件机制示意图,它把技术实现和组件名称混到一起,看起来也比较乱。大体的意思是左上部是事件子系统用 Zero message queue 的技术实现,其特点是在需要的时候可以随时创建,右上部是写好的类库,注册后,只要满足约束就可以调用它。下部说的是 Transaction Processor 调用具体的 Handler 处理 Transaction 后会告诉 ChainController 的 Scheduler 和 Executor 执行 Transaction 的结果情况,ChainController 除了把新的 block 写到它应该在的地方之外,还会把 Transaction 的 Receipt 放到一个叫 Transaction Receipt Store 的地方,这时候 ChainObserver (Client 注册后产生的一个部件)就会告诉 Client, Transaction 执行完了,来拿收据吧。

下面是一些事件的例子,可以帮助我们理解事件的格式:

 1Example events generated by BlockEventExtractor:
 2Event {
 3  event_type = "sawtooth/block-commit",
 4  attributes = [
 5    Attribute { key = "block_id"value = "abc...123" },
 6    Attribute { key = "block_num"value = "523" },
 7    Attribute { key = "state_root_hash"value = "def...456" },
 8    Attribute { key = "previous_block_id"value = "acf...146" },
 9  ],
10}
11
12
13Example events generated by ReceiptEventExtractor:
14// Example transaction family specific event
15Event {
16  event_type = "xo/create",
17  attributes = [Attribute { key = "game_name"value = "game0" }],
18}
19
20// Example sawtooth/block-commit event
21Event {
22  event_type = "sawtooth/state-delta",
23  attributes = [Attribute { key = "address"value = "abc...def" }],
24  event_data = <bytes>
25}

Sawtooth的访问权限控制

Sawtooth 的权限(Permissions)机制应该参考过 Fabric。主要功能包括网络权限的设置(哪些 Validator 可以加入这个网络),和 Transaction 权限设置(哪些 client 提交的 Batch 可以被 Validator 执行)两种。和 Fabric 一样的是,Sawtooth 也需要配置文件,如果所有功能全部用配置文件完成则称为 Off-Chain transactor  Permission,通常来说小规模网络,极限情况下,只有一个节点的网络完全可以使用 Off-Chain 的方式实现。在 Off-Chain Permission 中,权限是静态设置的。在配置文件 validator.toml 中,直接配置:

[permissions]

ROLE = POLICY_NAME

Policy file:

PERMIT_KEY <key>

DENY_KEY <key>

这里的 ROLE,POLICY_NAME 暂不解释,key 一般是一个公钥,PERMIT_KEY 和 DENY_KEY 就将它理解为一个 bool 值,一个是1,一个是0,含义就是允许不允许。

和 Fabric 不一样的地方是,Sawtooth 还有一种配置方式叫 On-Chain transactor Permission 。就是在区块链上直接设置访问权限,还专门为此设置了一个叫 Identity 的 Transaction Family 。这样 transactor Permission 就有自己的存储空间,其当前值也好,变化也罢,所有节点都可以同步过去,不会存在各个节点配置文件不一样导致系统出错的可能性。

接下来具体看下 Identity。Identity Namespace 以 key-value 对的形式存储 roles,key 是 role name,value 是 policy。所有的 role 都以 transactor 为前缀。比如下面:

transactor.SUB_ROLE = POLICY_NAME

首先,第一个问题是开始谁可以设置访问权限。和 Fabric 例子中类似,机构 R4 通过网络配置文件设置访问权限一样。在 Sawtooth 中,理所当然的应该由创始区块的生成者来设置初始权限。它执行如下命令来设定允许给别人授权的人的公钥:

sawset proposal create sawtooth.identity.allowed_keys=00000

这里的00000是创始区块的生成者自己的公钥,那现在就它自己可以给别人授权。这个类似于 Fabric 里设定,公钥设定以后可以利用 identity-tp 进行授权,也可以继续用 sawset proposal create 命令让其他 Validator 有权做网络或者 Transaction 授权。proposal 这个子命令其实就能猜到 Sawtooth 设计访问权限的时候肯定是参考了 Fabric 的。

具体的 Transaction 授权命令的例子如下:

sawtooth identity policy create policy_1 “PERMIT_KEY *”,这个的意思是创建一个叫 policy_1 的策略,对所有人都是允许的,也就是谁都可以提交 Transaction ,注意这仅仅是个策略,还可以定义其他的策略,相当于 Fabric 里的 Deploy 而不是 Invoke 。可以调用 sawtooth identity policy list,查询当前有哪些策略,比如在执行了刚才的命令后,会得到如下回显:

$ sawtooth identity policy list

policy_1:

Entries:

PERMIT_KEY *

接下来执行如下命令:

$ sawtooth identity role create transactor policy_1

就会把 transactor 的策略设置为 policy_1。换句话说,这时,就真正让 policy_1 生效了,类似于 Fabric 里的 Invoke。然后可以调用sawtooth identity role list,查询当前角色的状态:

$ sawtooth identity role list

transactor: policy_1

上边我们都用 transactor 为例子,其实 role 可以有如下几种:

default、transactor、transactor.transaction_signer、transactor.transaction_signer.{tp_name}、transactor.batch_signer。

意思其实从字面上能看出来,这里 transactor 可以是 organization,一个 transactor.batch_signer 可以是一个 organization 下边的部门,transactor.transaction_signer 可以是该部门的一个用户,如果有好多 tp 的话,该用户可以只具有其中某些 tp 的执行权限。

比如,我们现在自己写了一个新的 tp 叫 supply_chain,新定义了两个用户,一个的公钥是12345,另一个的公钥是23456,我们希望这个 tp 只有这两个新用户可以运行,这时我们就可以执行命令:

sawtooth identity policy create policy_2 “PERMIT_KEY 12345” “PERMIT_KEY 23456”

sawtooth identity role create transactor.transaction_signer.supply_chain policy_2

网络权限设置和 tp 执行权限设置差不多,比如有个 Validator 对外的公钥是00001,然后执行如下命令,它就不能加入网络了:

$sawtooth identity policy create policy_3 “DENY_KEY 00001”

$ sawtooth identity role create network policy_3

$ sawtooth identity role list

network: policy_3

Fabric 和 Sawtooth 的比较

相信看完了 Fabric 和 Sawtooth 的介绍,大家对这两个项目都有了自己的认识。笔者再谈一下个人对这两个项目的理解。

首先,从背景上看,Fabric 是脱胎于 Ethereum 的,或者说能在 Fabric 上看到 Ethereum 的影子,而 Sawtooth 已经看不到 Ethereum 的任何痕迹了。反而,个人觉得 Sawtooth 更加纯粹一点,它就是一个有共同起点的 比特币区块链,只是比特币没有不同 Transaction 的概念,而 Sawtooth 把 Transaction 按照用途分类,且允许用户根据需要自己定义新的 Transaction (这个概念是 Ethereum 提出来的)。

从体系结构角度看,我认为 Sawtooth 明显优于 Fabric 。Fabric 像是针对特定问题的一个专用解决方案,而不像一个通用架构。Sawtooth 可以认为是一个通用架构,然后根据需求变为一个专用解决方案。从访问控制角度看,Fabric 像是根据实际情况建设了一套管网,让涉及隐私的数据只能在其中运行。Sawtooth 则更像是在一套管网上加装了阀门,通过阀门来控制数据的流向。这可能和 IBM 以及Intel 的业务特点和公司文化息息相关。我的印象中,IBM 是一家咨询公司,专门针对企业级用户设计解决方案。Intel 是处理器公司,不管你的业务是什么样的,它提供通用中央处理器,让你能根据自己的需要配置成自己的专用解决方案。

当然,二者也有一些具体的差异:Fabric 中,多个节点收到相同的输入后分别独立执行,以期得到一致的结果。Sawtooth 的 SGX 和基于 SGX 的 PoET 验证的是在一台机器上的执行结果,没有再让每个节点都去执行一遍,而是一个执行完了以后去和别的同步结果。二者的假设不同,效率上也有差别。Fabric 的权限控制依赖形成 channel 这种体系结构,Sawtooth 的权限控制通过 Transaction 本身进行设置。或者说,Fabric 只有特定的人能看,但能看到特定范围内的全部。Sawtooth 所有人都可以看,但 Transaction 的 Permissions 限制了能看什么。Fabric 的 orderer 完成 Transaction 排序,可以实现进程级并行。Sawtooth 的排序是在 batch 里指明依赖关系,通过Completer 排序实现线程级并行。

对 Fabric 来说,要设计它时,大家认可的网络结构就是 Ethereum 了,怎么能稍作修改,实现隐私保护和访问控制是它的设计目标。Sawtooth 没这种包袱,可以重新设计网络。所以,我感觉 Fabric 更像是一个过渡性的产品。从我的角度看,Sawtooth 的结构设计的比较精巧,可扩展性强,这是它比 Fabric 强的地方。但它还可以借鉴 Fabric,增加类似 CA 的机制确保用户可以被识别,也应该增加权限配置的灵活性,比如引入 ABAC,等等。不过,现在这样就已经非常不错了。

推荐阅读:

技术专栏丨Fabric和Sawtooth技术分析(上)

技术专栏丨基于Core ML的通用性机器学习开发框架探索

干货分享丨研发代码质量管理技术最佳实践

技术专栏丨Redis分布式锁的小坑踩一踩

举个例子丨什么是量子计算机?比常规计算机强在哪里?

作者:YK Sugi

译者:赵磊

原文链接:http://t.cn/EZAElk0

本文作者访问了加拿大温哥华的一家名为 D-Wave System 的制造尖端量子计算机的公司,并在那里学习了很多关于量子计算机的知识。

在这篇文章中,作者将通过一个简单地例子让没有物理或计算机科学知识地小伙伴也能搞懂什么是量子计算机,欢迎分享~

1什么是量子计算机

量子计算机是一种使用量子力学原理进行计算的计算机,它能比常规计算机更有效地执行特定类型的计算。

听的是不是有点云里雾里?不是说好了没有物理学或计算机科学知识也能听懂吗?别急,这里将通过一个简单的例子来告诉大家,它到底是什么。

为什么解释什么是量子计算机,首先就需要解释一下常规(非量子)计算机。

2存储信息方式有何不同

一台普通的计算机以 0 和 1 的 序列存储信息,不同类型的信息,如数字、文本和图像都可以使用这种方式表示,这种由 0 和 1 组成的序列中的每个单元都被成为比特位,所以,比特位可以设置为 0 或 1。

量子计算机不使用比特位来存储信息,相反,它使用一种叫量子位的东西,每个量子位不仅可以设置为 1 或 0,还可以设置为 1 和 0。那这到底意味着什么呢?这里用一个简单的例子来解释这个问题:

假设我们在经营一家旅行社,需要把一群人从一个地方搬到另一个地方。

为了简单起见,假设现在只需要移动3个人—— Alice、Becky 和 Chris。我们为此预定了两辆出租车,但想知道谁上了哪辆出租车。另外我们也得到了关于谁和谁是朋友,谁和谁是敌人的信息。

这里我们假设:

  • Alice 和 Becky 是朋友
  • Alice 和 Chris 是敌人
  • Becky和 Chris 是敌人

我们的目标是把这3个人分成两组并实现以下两个目标:

  • 最大限度地增加共享同一辆车的朋友对的数量
  • 最大限度地减少共享同一辆车的敌人对的数量

这是这个问题的基本前提。我们首先考虑如何用常规计算机解决

3用常规计算机去解决问题

要用普通的非量子计算机解决这个问题,首先需要弄清楚如何用比特存储相关信息。

我们把这两个出租车标记为出租车 1 号和出租车 0 号。

然后,可以用3个比特位表示谁进入哪辆车。

例如,我们可以通过将这3位设为0、0 和 1 来表示:

  • Alice 在 0 号出租车
  • Becky 在 0 号出租车
  • Chris 在 1 号出租车

因为每个人有两种选择,所以有 2x2x2 = 8 种方法将这群人分到两辆车上。

这里列出了所有可能的情况:

A | B | C

0 | 0 | 0

0 | 0 | 1

0 | 1 | 0

0 | 1 | 1

1 | 0 | 0

1 | 0 | 1

1 | 1 | 0

1 | 1 | 1

使用3个比特位,就可以表示这些组合中的任何一种。

计算每个配置的得分:

现在,使用常规计算机,我们如何确定哪种配置是最好的方案呢?

为此,我们需要定义如何计算每个配置的得分。这个分数将代表每个解决方案达到我前面提到的两个目标的程度:

  • 最大限度地增加共享同一辆车的朋友对的数量
  • 最大限度地减少共享同一辆车的敌人对的数量

我们简单定义分数如下:

给定配置的分数 = 共享同一辆车的朋友对数 – 共享同一辆车的敌人对数

例如,假设 Alice、Becky 和 Chris 都乘坐出租车1号。用三个比特表示为 111。

在这种情况下,只有一对朋友共用一辆车—— Alice 和 Becky。

但是却有两对敌人共用一辆车——Alice 和 Chris 以及 Becky 和 Chris。

所以,这个配置的总分为 1 – 2 = -1。

解决问题:

有了这些,我们终于可以着手解决这个问题了。

对于一台普通的计算机,要找到最好的配置,需要遍历所有配置,看看哪个达到了最高分。

构建的表格如下:

A | B | C | Score

0 | 0 | 0 | -1

0 | 0 | 1 | 1 <- 最佳解决方案之一

0 | 1 | 0 | -1

0 | 1 | 1 | -1

1 | 0 | 0 | -1

1 | 0 | 1 | -1

1 | 1 | 0 | 1 <- 另一个最佳解决方案

1 | 1 | 1 | -1

这里有两个正确的答案——001 和 110,都达到了 1 分。

这个问题相当简单。但是随着越来越多的人参与到这个问题中来,用一台普通的电脑很快就会变得难以解决。

可以看到如果是3个人,需要遍历8种可能的配置。

如果有4个人呢?我们需要遍历 2x2x2x2 = 16 个配置。

对于n个人,我们需要通过遍历2的n次方个配置来找到最佳解。

所以,如果有100个人,我们需要遍历:

2¹⁰⁰ ~= 10³⁰ 个配置

因此这是常规计算机根本无法解决的问题。

4用量子计算机去解决问题

那么如果我们用量子计算机来解决这个问题呢?

让我们回到把3个人分到两辆出租车的例子。

正如我们前面看到的,这个问题有8种可能的解决方案:

A | B | C

0 | 0 | 0

0 | 0 | 1

0 | 1 | 0

0 | 1 | 1

1 | 0 | 0

1 | 0 | 1

1 | 1 | 0

1 | 1 | 1

用一台普通的计算机,用3个比特位,一次只能表示其中一个解——例如 001。

然而,使用量子计算机,通过3个量子位,我们可以同时表示所有8个解。

关于这个说法的确切含义存在争议,但作者的看法是这样的:

首先,来看这3个量子位中的第一个量子位。当将其设置为 0 和 1 时,就好像创建了两个并行世界。

在其中一个平行世界中,量子位被设置为 0,而在另一个平行世界中为1。

现在,如果再把第二个量子位也设为 0 和 1 呢?就像是创造了4个平行世界。

在第一个平行世界中,两个量子位被设置为 00,第二个平行世界中是 01,第三个平行世界中是 10,第四个平行世界中是 11。

类似的如果将这三个量子位都设置为 0 和 1 ,就会创建8个平行世界——000、001、010、011、100、101、110 和 111。

虽然这是一种奇怪的思考方式,但它是解释量子比特在现实世界中的行为的正确方式之一。

现在,当对这三个量子位进行某种计算时,实际上是在同时对这8个平行世界进行同样的计算。

因此,我们可以同时计算所有解的分数,而不是按顺序遍历所有这些可能的解。

有了这个特殊的例子,理论上量子计算机可以在几毫秒内找到最好的解——001 或 110,正如我们之前看到的:

A | B | C | Score

0 | 0 | 0 | -1

0 | 0 | 1 | 1 <- 最优解之一

0 | 1 | 0 | -1

0 | 1 | 1 | -1

1 | 0 | 0 | -1

1 | 0 | 1 | -1

1 | 1 | 0 | 1 <- 另一个最优解

1 | 1 | 1 | -1

实际上,要解决这个问题只需要让量子计算机去做两件事:

  • 所有可能的解都用量子位表示
  • 将每个可能的解转化成分数的函数。在本例中,这个函数计算共享同一辆车的朋友对和敌人对的数量。

具备了上述两个条件,量子计算机将在几毫秒内给出其中一个最好的解决方案。在本例中,分数为 1 的是 001 或 110。

现在从理论上讲量子计算机每次运行都能找到最好的解。

然而,实际上在运行量子计算机时有可能存在错误。所以,它可能会找到次优解,次次优解,等等。

随着问题变得越来越复杂,这些错误变得越来越突出。

因此,在实践中可能需要在量子计算机上运行相同的操作数十次或数百次。然后从结果中选出最优解。

量子计算机的改进之处:

即使有一些缺陷,但量子计算机也不会遇到常规计算机那样的计算规模问题。

当有3个人需要分到两辆车上时,需要在量子计算机上执行的操作数是1。这是因为量子计算机同时计算所有情况的分数。

当有4个人的时候,操作的次数仍然是 1。

当有100人的时候,操作的次数仍然是 1。仅仅一次操作,量子计算机就能同时计算出2¹⁰⁰ ~ = 10³⁰ 种情况的分数。

而正如之前所说,在实践中最好运行量子计算机几十次或几百次,然后从得到的结果中选出最好的结果。

5总结

D-Wave Systems 最近推出了一个与量子计算机交互的云环境。

如果你是一名开发人员,并且想使用量子计算机,可以尝试这种简单的方法:

  • 名称:Leap
  • 地址:https://cloud.dwavesys.com/leap

可以免费使用它来解决很多问题,并且在注册后还可以看到很多关于量子计算机的相关教程。

备注:在本文中,作者使用术语“常规计算机”来指代非量子计算机。然而,在量子计算行业中,非量子计算机通常被称为经典计算机