Google Duplex 打败图灵测试了吗?是也不是。
谷歌推出了一种可以通过电话预订的人工智能。图灵测试最终通过了吗?
尽管谷歌在语音人工智能领域取得了突破性的成就,但谷歌人工智能没有通过图灵测试有两个原因(在我看来)。然而,仍然有好消息。
如果你喜欢这篇文章,想分享你的想法,问问题或保持联系,请随时通过 LinkedIn 与我联系。
什么是 Google Duplex?
上周在 I/O 期间,科技巨头谷歌首席执行官在年度开发者大会上公布了他们最新的语音技术,这是一种听起来像人类一样的人工智能。人工智能与谷歌助手一起使用,谷歌助手是亚马逊 Alexa 的竞争对手。在 7000 名与会者面前,人工智能给一名发型师打电话预约。人工智能的声音和人类的声音是无法区分的。人工智能有时会在回应前停顿一下,拉长某些单词,就好像它在为事情争取时间。它甚至使用人类的口头标记,如“嗯”和“呃”。
被叫去的理发师没有意识到她不是在对一个人说话,而是在对一个复杂的神经网络的输出说话。最终,在惊讶的观众面前,人工智能成功地完成了任命。目前,人工智能将主要用于通过电话代表你预约和预订。
什么是图灵测试?
图灵测试是评估机器智能的一种方式——要通过测试,人工智能必须以人类无法区分的方式表现。这项测试是由艾伦·图灵在 1950 年发明的。图灵提出,人类评估员将判断人工智能和人类之间的自然语言对话。人类将意识到两个对话参与者之一实际上是机器的事实。但是他不知道机器是参与者中的谁。
在谈话过程中,所有的参与者都会被分开。最后,如果评估者不能可靠地区分人和人工智能,人工智能将通过测试。应该注意的是,该测试并不检查对问题给出正确答案的能力。只是答案与人类给出的答案有多相似。
谷歌通过图灵测试了吗?不,但是…
首先让我说说为什么在我看来图灵测试没有通过。
进行测试的错误条件
如果你逐字逐句地理解测试的定义,首先我们不具备进行图灵测试的合适条件。为什么?因为观众(测试的评估者)确切地知道机器是两个对话参与者中的哪一个。根据图灵测试,评估者不应该知道这个事实。
诚然,这是一个无力的论点。一开始没有被告知这两个参与者身份的人可能看不出区别。因此,让我提出另一个相反的论点。
缩小谈话话题
人工智能和人类之间的对话被缩小到一个特定的话题——预约。人工智能可以对与预约相关的问题给出任何答案。一旦人类将对话引向完全不同的方向,人工智能就会失败。原因是人工智能只在与约会相关的真实世界对话中接受训练。AI 可以回答 AIs 用户希望约会在哪个日期和时间没有问题地进行。然而,人工智能会被一个问题淹没,比如“为什么你更喜欢我们做你的发型设计师?”。真实世界的对话可以在任何时候向任何方向转换。只要人工智能不能参与关于任何话题的普通对话,图灵测试就不会通过。
然而,…
在预约领域,我认为人工智能通过了图灵测试。考虑到人工智能所基于的神经网络仅在六年前首次实际实现,这是人工智能领域的一项巨大成就。
在未来的 10 年里,我们不可能没有一个通用的对话式人工智能,它可以用任何语言和任何人谈论任何可能的话题。
梅拉尼娅真的发微博了吗?
我的模特说。
You are what you tweet. Wordclouds formed from the most significant words in the POTUS (orange) and FLOTUS (cyan) tweet corpora. (Want to make wordclouds like these? Use this code example that shows how to do masking and custom colorization.)
M 埃拉尼亚回来了!在离开公众视线 24 天后,她于本周早些时候出席了白宫的一个仪式,或者至少她的替身出席了。;)
她的缺席引起了媒体的诸多猜测,她在 5 月 30 日的推特上对此进行了回应。
The mystery tweet.
问题是这条推文并没有平息对她行踪的猜测,因为听起来不像她的。语气异常愤怒,听起来更像特朗普。(或者至少听起来更像特朗普的人,而不是她的人。)
这让我想起了上世纪 90 年代围绕谁写了《原色》( Primary Colors)这本书的谜团,这是一部几乎不加掩饰的小说——对一些人来说太单薄了——背景设在克林顿白宫。一位自称为“法医语言学家”和“词形学专家”的瓦萨文学教授声称是专栏作家乔·克莱因写了这本书。后来克莱恩承认了。
这位教授对他推断作者身份的精确方法持谨慎态度(他的错误和正确一样多),但这与计算词频有关。(想起什么了吗?)
这一切启发我进行了一个快速的 Python 实验,试图回答到底是谁写了上面这条愤怒的推文。
第一步:获取数据
Twlets.com 让这一步变得非常容易。你安装一个 Chrome 应用程序,访问你想要的 Twitter 用户页面,点击工具栏图标下载。
在你遇到付费墙之前,你可以下载的推文数量是最大的,但它足够高,我可以下载所有官方的波多黎各和 FLOTUS 推文。
一个障碍:数据不平衡
截至几天前,梅拉尼娅在她的 FLOTUS 官方账户上只有 307 条推文,而特朗普在他的波多黎各账户上有 3259 条推文。
从图形上看(只是为了好玩),这种不平衡看起来像这样。
All POTUS/FLOTUS tweets plotted after TF-IDF vectorization and PCA dimension reduction (we’ll get to all that below).
唐纳德的橙色弹珠太多了,而梅拉尼亚的青色弹珠太少了。超过 10 比 1 的不平衡。
像这样的不平衡很难衡量开发中的模型的准确性。考虑到这种不平衡,最简单的模型是,在默认情况下,将所有输入分类为属于特朗普阶级,即多数阶级。
梅拉尼娅的所有推文都会被这个简单的模型错误分类,但你仍然会有比 91% 更好的准确率。
然后我们需要制作一个比 91%更精确的模型。我不确定我们能否完成这个小实验,但这将是我们的目标。
(更好的办法是平衡数据。如果我再次这样做,如果我没有通过 Twlets 浏览我的免费推文下载,我会将一些梅拉尼娅的个人推文与她的官方推文混合在一起,以便我们有多少梅拉尼娅样本就有多少川普样本。我将把这项工作留给未来的研究人员。)
步骤 2:清理并分割数据
在矢量化之前,我们需要从 tweets 中删除特殊字符和大写字母。我只是使用了在许多 Github NLP repos 中找到的名为 clean_str 的简单函数,例如这个。
我将 85%的数据用于训练,剩下的 15%用于测试(在这个小实验中,我没有使用开发套件)。这给了我一个包含 2769 个样本的训练集和一个包含 489 个样本的测试集,每个样本都是特朗普和梅拉尼娅推文的随机组合。
我们将从训练集和测试集中保留谁是作者的问题。在这个练习的最后,我们会要求对它进行预测。
第三步:向量化数据
我们需要将这些推文中的单词转换成数字,这样我们就可以输入某种分类器。
我尝试了两种矢量化技术,一种旧的,一种新的。
术语频率-逆文档频率(TF-IDF)
这项技术始于 20 世纪 50 年代。那位 90 年代追随乔·克莱因的瓦萨大学教授可能已经掌握了这种技术,而且几乎肯定利用了这种技术。
TF-IDF 的维基百科定义很容易理解:
tf-idf 值与单词在文档中出现的次数成比例地增加,并被该单词在语料库中的频率所抵消,这有助于调整某些单词通常出现得更频繁的事实。
因此,一个单词在文档中出现的次数越多,它的得分就越高。但是如果同一个单词在所有文档(语料库)中也是常见的,则我们从该分数中减去。这剔除了非常常见的单词(冠词、介词、动词变化等)。),让我们在给定文档中的重要单词方面得到高分。
这是在介绍中用来制作漂亮的文字云的技术。每个单词都代表特朗普或梅拉尼娅的一条完整的推文。选择这个词是因为它在推文中的所有词中具有最高的 TF-IDF 得分。
Python 中的 sklearn 库使 TF-IDF 矢量化变得非常简单。在几行代码中,我们可以将训练集变成一个大的稀疏数组,其维数等于样本数 X 特征数。这些特征中的每一个都代表出现在语料库中某处的一个单词,用 TF-IDF 分数表示。
对于大多数文档,大多数特征将具有空值,因为相关联的单词在文档中没有出现。非空特征表示出现在文档中某处的单词,根据它们在给定文档中相对于较大语料库出现的次数进行加权。
这些数组是任何模型都可以咀嚼的谷物。该模型可以是老式的支持向量机(SVM)或新式的神经网络、卷积神经网络(ConvNet)或递归神经网络(RNN)。
单词嵌入矢量化
TF-IDF 基本上是单词计数。它没有抓住意义。单词嵌入试图捕捉意思。
解释起来很复杂,但是这个帖子做得很好。要点是深度学习技术可以用于将整个单词语料库消化到低维嵌入矩阵中。这个矩阵将和语料库中的单词数一样宽,但是高度减少到 100 或 300。如果有足够多的单词,它几乎会神奇地保留单词使用的上下文。
如果我们用一个单词查询保存这个矩阵的模型,我们将得到它的 100 或 300 高的列向量。这些是模型为这个特定单词学习的嵌入。
在文档的情况下,比如我们的 tweet,我们可以查询 tweet 中每个单词的模型,然后做一些简单的事情,比如平均向量,以创建最终的输入。
警告:我们需要大量的单词来正确地学习嵌入
Gensim 库使得学习 Python 中的嵌入变得很容易。
问题是我们的训练语料库很小(7583 个单词)。这意味着它在语义上是非常愚蠢的。
如果我们问模型类似的词,比如说,“媒体”(是的,你可以用这种模型来做!),它返回给我们一些语义上不太相关的结果。
不过,最酷的事情是,我们可以加载已经输入了非常大的语料库(比如维基百科页面)的预训练模型。如果我们这样做,我们会得到语义相关的结果
步骤 5:训练几个分类模型
我们已经把单词变成了数字特征。我们可以使用这些特征来训练任何我们喜欢的分类模型。我使用 sklearn 的随机梯度下降(SGD)分类器,因为我想做一些超快速的训练,但是,同样,你也可以使用更高级的东西(比如说 ConvNet)。
让我们在 TF-IDF 稀疏矩阵和预训练的单词嵌入向量上训练 SGD 分类器。
步骤 5:测试分类模型
我们现在已经有了几个训练好的分类模型。让我们把测试样本扔给他们,看看他们表现如何。请记住,我们想要比我们的基线 91%更好的准确性。
基于 TF-IDF 的分类
我们对测试样本进行 TF-IDF 矢量化处理,将它们提供给 SGD 分类器,然后对照真实标签评估预测结果。
95.09%!不惊人,但比我们的基线要好。这是用旧的技术。
基于单词嵌入的分类
使用语义更智能的输入功能的新技术怎么样?
只有 88.75%。事实上比我们的基线还要差。特征的语义上下文对我们的分类挑战没有太大帮助。而且,如果你浏览一下互联网,你会看到相当多的帖子(比如这个这里)在这些帖子中,老式的 TF-IDF 击败了新的技术。
第六步:回答我们的研究问题:梅拉尼娅到底有没有写那条推文?
我们有一个超过基线精度的分类模型,另一个没有。让我们问问他们俩,他们认为是谁写了这条推文。
第一,TF-IDF 美联储模式。。。
我们对有问题的单个 tweet 进行矢量化,并得到预测。
注意,从输入推文的打印输出来看,它被标记为“1”,所有 Melania 推文也是如此。
但分类器预测它的标签为“0”,这意味着它认为是特朗普写的。
从打印的对数概率中,我们可以看到它说有 71.08%的可能性他做到了。
性能较低的网络呢?我们并不真正信任它,因为它的准确性低于基线,但不管怎样,我们还是要问一下。
又是特朗普,这次有 90.74%的把握。
结论
对这一切有很多警告。
- 我们的数据是不平衡的,这也许使我们的模型更有可能预测特朗普,即使是梅拉尼娅的输入。(现在是混乱矩阵的时候了,但这已经够长了。)
- 根据训练集的随机化和为分类模型选择的超参数,我偶尔可以得到预测,即梅拉尼娅,而不是特朗普,是这条推文的作者。
- 我们正试图根据一个很小的单词样本(42 个左右)来确定作者。
简而言之,这些在法庭上都站不住脚。这对数据爱好者来说意味着乐趣。
我们可以肯定的是,许多人(包括我在内)的直觉认为这条推文听起来不像梅拉尼娅的推文,一个相当准确的模型产生了支持这些直觉的数据点。
国歌抗议导致你的地区运动队输了吗?:统计分析
上周,特朗普总统在阿拉巴马州的一次集会上发表了明确的讲话,他建议 NFL 球员应该被解雇,因为他们在国歌期间跪下抗议。NFL 球员的反应非常热烈——本周末有超过 200 名球员抗议。
昨天,右倾犯罪预防研究中心主席约翰·r·洛特在福克斯新闻频道发表了一篇文章,概述了他对这些抗议活动的统计研究。他得出结论,在 2017 年 NFL 赛季第 3 周,抗议的球员数量和球队的表现之间存在“巨大的、具有统计意义的”关系。洛特先生好心地公布了他使用的数据和他的回归结果。在本文中,我将检验洛特先生的分析,并提供我自己的观点。这将不是一个关于抗议国歌的好处的帖子,而是一个关于统计意义的帖子。
Tl;dr;这种关系没有统计学意义。洛特先生的分析包含许多统计谬误。所有的 R 代码都可以在 这里 找到。
初始回归模型
洛特先生提供的数据包含了 NFL 赛季第三周的比赛。它详细列出了截至周四和周日每支球队的抗议者人数、每场比赛的比分以及每场比赛的投注线。
该分析包含线性回归模型。该模型旨在预测一个比较主队表现与价差的指标。如果一个主队以 7 比 10 获胜,这个标准将会得到 3 分。该模型使用了一个变量来比较客队和主队抗议数量的差异。如果主队有 20 名抗议球员,而客队有 10 名,这个指标将是-10。
我在 R 中复制的模型产生了以下结果:
该模型包含 0.38 的 R 平方值。这个数字应该解释为主队表现 vs 的 38%,价差可以用各队抗议球员数量的差异来解释。该指标的 p 值为 0.02。统计显著性的标准经验法则是 p 值最大为 0.05(p 值越低,统计显著性越大)。出于这个原因,洛特先生说他的结果在统计学上是有意义的。
视觉分析
进行简单回归分析(使用单个预测值的分析)时,可视化数据总是很重要的。
查看这些数据时,您可以看到有轻微的下降趋势,但这并不完全是线性关系,回归线不会与数据紧密吻合。
统计谬误
这一分析中犯下的第一个统计谬误是目标变量(相对于价差的主队表现)。在这一分析中,洛特先生指出
“我们利用特朗普发表第一次言论的前一天,即周四的点差,预测了这些球队在周日的比赛中可能会如何发挥。之所以在周五之前这么做,是因为下注者可能已经知道特朗普制造的冲突可能会如何影响球队的表现,因此在周日之前就已经出现了价差的变化。”
从表面上看,这似乎是一个非常合理的选择。
这张图表展示了几个有趣的项目。抗议球员与他们的对手匹兹堡钢人队之间差异最大的球队,在投注线方面没有变化。许多抗议的玩家没有在比赛前宣布他们的抗议意图,所以赔率制定者在设定界限时没有办法将这些抗议考虑在内。
另外两个(在我个人看来,更相关的)原因是受伤和下注。NFL 球队密切关注哪些球员将参加比赛的信息,这些信息通常直到周日才公开。如果一名关键球员被排除在外,周日早上这条线可能会移动一两个点。此外,投注线可能会因投注的数量而变化。如果一个队得到了不成比例的赌注,线将从该队移开。
这一分析中最惊人的统计谬误是样本量。这个模型只适合于十三个数据点。这是一个危险的小样本量,并且由于它对每个单独的数据点的极端敏感性而导致不稳定的模型。在洛特先生的分析中,他从未向读者展示过这个缺点,尽管作为一名经济学博士,他肯定意识到了这一点。
选择合适的目标变量
读到这里的 NFL 爱好者可能已经意识到事实上在过去的一周里有超过 13 场比赛。这个统计模型已经删除坦帕湾-明尼苏达比赛被删除,由于缺乏周四投注数据。
当对如此小的样本量进行回归分析时,建模者应该不惜一切代价避免删除数据点。出于这个原因,周日博彩线应该是目标变量。上一节中的图表表明,抗议玩家的数量和投注线的变化之间没有关系。
坦帕湾有两名抗议球员,而明尼苏达没有。坦帕湾输了 17 分,尽管他们被看好 3 分。直觉上,人们可能会认为这将支持洛特先生的结论,即更多的抗议玩家会导致更差的表现。当我使用周日博彩线作为目标变量时,模型变得相当弱:
这里的 R 平方下降到 0.30,p 值增加到 0.042,接近被认为具有统计显著性的最大值。这证明了 14 个数据点的回归模型是多么不稳定。
美国队呢?
如果没有达拉斯牛仔队,涉及 NFL 国歌的统计分析将是不完整的。达拉斯和亚利桑那的比赛在周一晚上进行,我猜洛特先生在这场比赛结束前已经完成了他的分析。在国歌响起之前,整个达拉斯牛仔队跪在地上,以示团结。虽然从技术上讲,这不是在国歌演奏期间,但这样做的决定会像在真正的国歌演奏期间跪下一样分散团队的注意力。出于这个原因,我把所有 53 名达拉斯牛仔队队员都列为抗议队员。他们的对手,亚利桑那红雀锁定武器,但他们没有跪下抗议。当添加单个数据点时,模型完全崩溃:
R-square 已经下降到 0 . 11,我们的预测变量的 p 值已经增加到 0 . 22,大大高于被认为具有统计显著性的阈值。一个不支持原始结论的单一数据点破坏了洛特先生的“统计显著”关系。
结论
当像这样的文章发表时,在考虑结论之前回顾所用的方法总是很重要的。我赞赏洛特先生以透明的名义公布数据和回归结果,我希望这一回应能够引发关于新闻业负责任的统计数据的更大讨论。
洛特先生犯了统计学中一个不幸的普遍做法,p 值钓鱼。他的样本太少,甚至无法考虑一个会减少分析数据量的目标变量。他没有让读者意识到他的模型对于新的数据点是多么的不稳定和敏感。他声称抗议的影响“巨大且具有统计学意义”,意在欺骗。限制样本量的选择没有在专栏文章中披露,只是在统计方法部分披露了。
不幸的是,福克斯新闻频道的编辑完全让公众失望了。他们没有进行任何基本的统计审查或审查,并允许这种统计上无效的分析流传。
*我为本文编写的所有 R 代码都可以在这里找到
饮食经济
在过去的几年里,我一直对食物消费的问题感兴趣。我们如何吃得健康又便宜?我决定看看我目前的饮食,看看它是如何累积的。幸运的是,我的饮食很简单。我在家坚持做 3 或 4 道菜,使用几乎相同的材料,因为多样化很贵。我的大部分膳食都是素食,以某种谷物为基础,加入蔬菜、豆类、鸡蛋和奶制品。我几乎只在 Trader Joe’s 购物,因为价格和选择都很合理,而且我很喜欢好的品牌。所以很容易计算出我的饮食是否合理和/或划算。我的目标是获得我平均每周摄入的所有营养数据,看看它与推荐量相比如何。有什么我还没看够的吗?有什么我可以不要的吗?然后:我的饮食划算吗?有没有我可以吃的东西能以更便宜的价格获得同样的营养?以及其他诸如此类的问题。
我们如何决定一个人需要多少营养?维基百科总结了由美国医学研究所(IOM)发布的推荐每日营养摄入水平的不同指标,称为膳食参考摄入量:
- 预计平均需求量(EAR ),预计可满足 50%人口的需求;
- 国际移民组织食品和营养委员会预计可满足 97.5%的人的需要的推荐膳食供给量(RDA);
- 充足的摄入量(AI),这是 RDA 的一个宽松的替代品;
对于这个练习,我使用 RDA(或 AI ),因为它更可能适用于我,并且 IOM 给出了宏量和微量营养素的 RDA/AI。
为了计算我的摄入量,我起草了一份我一周内所吃的典型食物的电子表格,并从标签上的营养成分表或从美国农业部食物成分数据库输入所有的营养信息。其中大部分是原料或产品,如蒸粗麦粉、大米、牛奶、奶酪、茄子、土豆、洋葱、香蕉,还有一些工业加工的东西,如蔬菜酱、泡菜、醋渍甜菜、辣酱,还有我非常喜欢的茄子酱。(最近,当我不能回家做饭时,我也开始每天喝一瓶Soylent——这有助于简化事情,因为 Soylent 的量正好涵盖了我们日常饮食中所需大多数营养的 20%。Soylent 上的全部营养信息在这里。)
经过几个小时无聊的数据输入,我得到了这张图表!(预览下面用红色突出显示的我缺乏的营养素。)
有几个地方的数据不是 100%干净的——例如,我不得不做一些谷歌搜索来找到某些蔬菜的几份大小或平均重量——大多数都记录在表格下面。有一些营养素没有确切的每日推荐量,或者在维基百科上列出,但似乎在其他地方没有提到——比如α-亚油酸(事实证明,在很多食物中没有发现它——但你可能知道它是一种ω-3 脂肪酸)。
但是它就在那里!我现在有了相对准确的数据,知道我每周的平均摄入量和我应该摄入的每种营养素的量是多少。我没有得到每天的量,而是取了每天的推荐量,乘以 7,得到一个不太精确但更容易与我自己的数据进行比较的每周量。所以这并不十分准确,但它足够接近于给我一个关于我一直处于低或高的事物的概念。我学到的一些东西:
- 我以为我吃得很少,但实际上我摄入的卡路里比我需要的要多 40%。
- 我没有摄入足够的脂肪(推荐量是你热量的 25-35%),但我所有的其他宏量营养素(如蛋白质、纤维、碳水化合物)都很好!
- 我真正缺少的是维生素,如 B7、B12、B5 和 E,以及其他营养物质,如氯、铜、氟、碘、钼、钾、硒和锌。
- 一些我认为营养丰富的食物,比如我用来做沙拉和蒸粗麦粉的调味汁中的甜菜罐,实际上大部分只是糖!茄子酱也几乎只有钠和卡路里。我真的很喜欢这些东西的味道,但它们可能没有以经济有效的方式给我提供我需要的营养。
那我在这里做什么?如何让我的饮食完整?获取任何特定的营养物质都有很多选择。我的朋友德瓦尔建议把这变成一个正式的优化问题,使用美国农业部数据库、预算和营养价值作为约束条件,以及像 Lindo 这样的线性优化软件。似乎是一个专门为这类问题设计的软件,我可能会在这篇文章的后续文章中介绍一下。目前,一个手动的、全面的方法就可以了:对于我缺乏的营养物质,比如钾,一个简单的谷歌搜索就会找到补充这些营养物质的廉价方法,比如香蕉、鳄梨或土豆。从那里,它只是计算每个选项的“钾的价格”:哪种食物是最便宜的补充钾的方法?其他营养素也是如此。我们还应该挑选与我所寻找的营养成分重叠或含有多种营养成分的食品,因为这意味着它可能更便宜。
所以在数据表的第二页,我列出了我所缺少的每种营养素的良好来源。我很快就做了几样东西,因为它们是肉或者我不喜欢吃。(那些是灰色的。)对于其中的大多数,我只是选择了出于某种原因而引起我注意的项目(我已经知道如何用它们烹饪,它们对一群人来说是常见的,我更喜欢它们)。绿色的项目是我决定添加到我的饮食中的项目(或者用类似的东西替换掉),以完成我的营养摄入。
我想通过钾的实际计算。所以在那张桌子下面,有另一张桌子,上面只有含钾的物品,它们的钾含量,以及我家附近的乔氏商店的价格。最后两列是价格除以钾含量,显示了每一项中的“钾的价格”。平托豆是最便宜的,每克钾 0.29 美元,尽管小扁豆、香蕉和土豆也不贵多少。所以我可以选择其中任何一种来补充我的钾摄入量。
营养学远不是一门精确的科学,即使在我这么做的时候,我发现我知道的信息使我的结果不一定准确(例如,就在昨天,我的室友告诉我,男性的推荐卡路里摄入量通常是 2500,而不是 2000)。但我要说这仍然是一项有益的锻炼,因为我的发现与常识非常一致:确保你吃得足够多,许多人倾向于节省钾和ω-3 脂肪酸等营养素。跟踪那些!如果你觉得自己没有 100%地工作,你的营养摄入很可能就是原因。
注意事项:
—我使用了国际移民组织提供的典型饮食建议,但任何人都可以做出自己的调整:增加热量摄入,如果你想增肥,就增加蛋白质,其他你可能缺乏的营养物质,等等。尽管做你的研究。
—在对富含氯化物和胆碱的食物进行研究后,我发现我很可能没有摄入足够的氯化物和胆碱,因为它们存在于很多食物中!所以这些被排除在“缺乏”营养素的名单之外。
排列和组合的区别
长话短说
排列和组合的区别在于:
密码锁应该叫排列锁;)
说来话长
在学习机器学习的同时,在 edx.org 的上,导师用高斯分布来解释有监督和无监督的学习(如果你纯粹是想知道其中的区别,请移至前面的讨论)。当事件的发生率非常大时,高斯分布近似于二项式分布,这正是我实际上想要理解差异的地方,因为二项式分布的公式包含事件发生率的多个组合。
让我们从排列和组合的基本定义开始,并举例说明:
排列:
对象的选择,其中对象的顺序很重要。
例如:集合{a,b,c}中字母的排列是:
abc acb
bac bca
cab cba
由 n 个对象组成的集合中 k 个对象的可能排列数的公式。通常写成 nPk。
公式:
组合
n 个对象集合中 r 个对象的可能组合数。
大声朗读— n 选 r。
公式:
注意:
其中 nPr 是一次取 r 的 n 个对象的排列公式。
了解基本定义和公式后,我们可以用下面的简单方法记住它们的区别:
排列听起来很复杂——因此要记住,每个细节都很重要。吉米,开心果和元帅不同于开心果,元帅和吉米。另一方面,组合很容易相处——吉米、乔利和元帅与乔利、元帅和吉米相同。
因此,排列用于列表(顺序问题),组合用于组(顺序无关紧要)。
一个著名的笑话是:一个“密码锁”应该被称为“排列锁”。你给锁编号的顺序很重要。例如,一个真正的“密码锁”会将 17–01–24 和 24–17–01 都视为正确。
结论
组合表达式是一个排列(得到所选事件的 x 次出现的方式的数量)关系除以 x!(可以选择 x 事件的不同顺序的数量,假设所有顺序都是可区分的)。我希望这能让你明白排列和组合的区别。
在 LinkedIn 这里打个招呼—https://www.linkedin.com/in/softxide/
提高训练精度的不同方法
Image 1: Emotion recognition // Source
在摆弄了一个情绪识别模型之后,我决定继续探索这个领域。有什么比训练自己的情感识别网络更好的方法呢?
构建正确的模型
使用来自的 fer2013 数据集,一个旧的 Kaggle 挑战,我在 Keras 中建立了一个通用的 CNN 模型并训练它,只是为了看看这将有多难。第一个模型有 7 个卷积层和 2 个漏失层:
经过训练,我意识到它无法达到 54%以上的验证准确率。
54%!光是看这个数字就让我对这个模型感到极度失望。
那我们试着把它弄大一点。我扩展了当前的层,并添加了一些卷积层和一些完全连接的层,使网络更深更广:
该模型达到了 58%的验证准确率。一个 4%的成就,当然,但代价是更大的计算能力。事实上,我试图在 MTCNN 人脸识别模型上运行这个模型,我的电脑崩溃了。一定会有更好的模式。
最后,我偶然发现了这个为科恩-卡纳德和 MMI 面部表情数据库设计的模型,并将其用于 2013 年 fer 数据集。该模型使用两个 FeatEx 块在卷积之间创建单独的连接。
Image 2: FeatEx block // Source
这款(惊喜惊喜!)能够达到 63%的训练准确率。此外,它将训练参数的数量减少到不到以前模型的一半。
确定正确的批量
当我搜索 FeatEx 模型时,我决定测试不同的批量大小,看看它是否对训练准确性有影响。
使用 my_newCNN 模型,我训练了两次:一次批量 32,一次批量 64。
批次大小为 32 的模型产生了 58.7%的验证准确度,而批次大小为 64 的模型产生了 59.7%的验证准确度。这是一个非常显著的差异。
每个数据集都有不同的属性。一些数据集可能需要较小的批量,而另一些数据集可能需要较大的批量。测试不同的批量大小以查看哪一个能为数据集产生最佳结果总是一个好主意。
数据扩充
由于 fer2013 数据集相对较小,我不得不进行数据扩充以获得更好的结果。数据扩充是指通过处理每幅图像来创建略有不同的副本,从而使现有的小数据集变大。因为我使用的是 Keras,所以我只是通过图像数据生成器传递我的训练图像。
因为我在训练情绪识别,所以水平翻转我的脸是有意义的,而不是垂直翻转。我设置了 10 度的旋转范围,因为在尝试的时候,总有一些人会稍微倾斜他/她的头。当运行预测时,我们总是会传入大小大致相同的人脸(每张图像首先经过人脸检测器,在将人脸传入情绪识别模型之前,该检测器会剔除人脸),这让我考虑不使用缩放功能。最后,我选定了 0.1 的缩放范围,决定这样做更安全,以防面部检测器裁剪过大或过小的区域。
生成硬数据
最大的改进来自生成硬数据。与其一遍又一遍地训练模型,为什么不选择模型错误标记的图像,并专门在这些图像上训练模型呢?当然,这将导致模型在这些错误标记的图像上过度拟合。所以,在用硬数据训练后,我不得不再次运行正常训练(用所有训练图像)来平衡它。
我让模型预测每个训练图像,并将不正确的图像传递到一个数组中。
然后我像往常一样继续训练:
一次训练后,验证准确率下降到 41%,而训练准确率飙升到 83%。现在,我只需再次平衡模型,以减少验证和训练准确性之间的差异。
再次运行正常训练后,训练准确率下降到 68%,而验证准确率上升到 66%!从 63%到 66%,验证准确率提高了 3%。
只是为了好玩,我想操纵数据集以达到更高的准确性。就像在生成硬数据时一样,我通过 model.predict()遍历了所有图像。然而,这一次,我计算了所有图片的数量和每种情绪的错误标记图片的数量。
这是我得到的(用硬数据训练前的 FeatCNN 模型):
- 愤怒:960/3995
- 厌恶:46/436
- 恐惧:746/4097
- 开心:591/7215
- 悲伤:1388/4830
- 惊喜:484/3171
- 中立:2033/4965
有一点让我印象深刻:与所有其他情绪相比,“厌恶”的图片明显较少。与悲伤或快乐相比,厌恶是一种不太常见的情绪,我们可能会将太多的模型用于识别厌恶。如果我把“厌恶”从数据集中完全去掉,会发生什么?
我也决定发泄愤怒。查看训练图像,愤怒(和恐惧)都与悲伤非常相似,模型可能会错误地将一个标记为另一个。由于我宁愿有一个能够准确检测悲伤而不是愤怒或恐惧的模型,我决定删除其中一种情绪。该模型目前错误地将愤怒比恐惧更多地归类,所以我选择了消除愤怒。
现在,当阅读 CSV 文件中的图像和标签时,我只是拒绝阅读任何“愤怒”或“厌恶”的图像。正如我对所有培训文件所做的那样,我使用这个新数据集通过数据扩充和硬数据运行了一个模型。因为这只是为了好玩,我将批量大小设置为 64,而没有测试不同的大小,假设消除 2 种情绪并没有对数据集产生太大的影响。
你猜怎么着?最终模型达到了 71%的训练准确率和 70%的验证准确率。这比有全部 7 种情绪的情况高出大约 4%。我们不仅创建了一个更少变化的数据集,我们还消除了类似的情绪,并将模型专注于识别所有情绪,而不是区分愤怒、厌恶和悲伤。
70%好吗?乍一看…不是…真的。但在将这个模型连接到我的网络摄像头后,它令人惊讶地运行得相当令人满意。当然,也有一些问题:显然,如果没有真正的皱眉或痛哭,你就不会悲伤,而且看起来,如果没有惊讶的表情,你就无法开口。然而,除此之外,该模型可以非常准确地识别我的情绪,即使当我的脸部分模糊时(感谢数据集中的各种图像)。
可能有更好的情感识别模型,以及更复杂的训练方法来最小化损失并提高准确性,但这些只是在处理数据集时可以轻松使用的一些技巧。
在这里下载我的代码并运行我的情绪识别模型:【https://github.com/reinaw1012/emotion-recognition
查看这篇文章,了解更多关于不同人脸检测算法的信息!
如果您有任何问题或意见,请在下面留下您的评论。如果你喜欢这篇文章,别忘了给它一些掌声!
在 Pandas 数据框架中迭代行的不同方法——性能比较
为什么我对迭代的性能感兴趣
如果你是一个像我一样经常处理结构化数据集的 python 用户,你可能会出于很多原因经常使用 pandas。该软件包包含大量有用的功能,这些功能已经针对其用途和目的进行了优化(例如描述性统计、分组汇总)。大多数时候,这些功能足以满足您的需求。但是当涉及到时间序列数据时,我经常需要在我的 python 代码中遍历数据框并执行特别的滑动窗口计算。
这让我思考——迭代熊猫数据框最省时的方式是什么?
让我们使用这个简单的问题来比较各种迭代方法的性能:
N = 1000
repeats = 100
a = np.repeat(1000, N)
pd_dataset = pd.DataFrame({'a': a})# Goal is compute the column b where b(i) = a(i) + 1
b = a + 1
这实际上可以通过对整列应用一个操作符来快速解决,从而生成如上所示的新列。操作在这里并不重要,我们的想法是,如果列操作不可行,比较获得相同结果的替代方法。在这个练习中,我实现了 6 个备选方法,并对它们进行了比较。
我从这篇博文中借用了 timeit 方法,通过用@ timeit 注释方法来测量每个方法的执行时间。这是我修改过的 timeit 方法——它将执行时间附加到一个作为名为 log_time 的输入变量传入的列表中:
# Credits to [Fahim Sakri](https://medium.com/@fahimsakri?source=post_header_lockup)def timeit(method):
def timed(*args, **kw):
ts = time.time()
result = method(*args, **kw)
te = time.time()
kw['log_time'].append(int((te - ts) * 1000))
return result
return timed
让我们将 a + 1 操作封装到它自己的方法中,这样它就可以计时了。以列操作为例,下面是使用给定方法获得平均执行时间的初始代码:
**def my_compute**(x):
return x + 1
@timeit
**def use_column**(dataset, **kwargs):dataset['b'] = my_compute(dataset.a)**def time_this**(func, method_name):
*""" Execute the given function 100 times and measure the execution time for each run.
Returns a dictionary containing the statistics based on the execution times
"""* N = 1000
repeats = 100
a = np.repeat(1000, N)
pd_dataset = pd.DataFrame({'a': a})
timing = []
for i in range(repeats):
func(pd_dataset.copy(), log_time=timing)
return {'method': method_name, 'average': np.average(timing), 'min': np.min(timing), 'max': np.max(timing)} results = pd.DataFrame()
results = results.append([time_this(use_for_loop_loc,'use_for_loop_loc')])
迭代行的方法
总之,我比较了 8 种基于现有列生成新的值列的方法(需要对整个列/值数组进行一次迭代)。这些都是在一个 python 文件中实现的。
前两种是在 dataframe 列上应用列方式函数的方法:
- 使用 _ 列:使用熊猫列操作
- 使用 _ 熊猫 _ 应用:使用熊猫应用功能
接下来是在 for 循环中使用 pandas 索引方法访问变量的三种不同方法:
3 。use_for_loop_loc :使用熊猫 loc 功能
还有其他不使用 pandas 索引的方法:
-
use_numpy_for_loop :从 column 中获取底层 numpy 数组,迭代、计算并将值作为新列赋给 dataframe
-
use_iterrows :使用 pandas iterrows 函数获取要迭代的 iterables
-
use_zip :使用 python 内置的 zip 函数进行迭代,将结果存储在一个 numpy 数组中,然后在完成后将值作为一个新列赋给 dataframe
以下是每种方法的平均执行持续时间(秒),使用不同的数据集大小(N=1000、10000、10000)重复测试:
N = 1000
method average min max
use_column 0.00 0 0
use_panda_apply 1.95 1 9
use_for_loop_loc 409.69 398 474
use_for_loop_at 13.01 12 14
use_for_loop_iat 13.39 13 15
use_numpy_for_loop 9.59 9 11
use_panda_iterrows 58.31 57 60
use_zip 0.02 0 1N = 10000 method average min max
use_column 0.06 0 1
use_panda_apply 1.01 1 2
use_for_loop_loc 4220.30 4182 4418
use_for_loop_at 127.79 126 130
use_for_loop_iat 134.03 132 138
use_numpy_for_loop 94.64 93 96
use_panda_iterrows 574.54 564 579
use_zip 3.00 3 3N = 100000 method average min max
use_column 0.43 0 1
use_panda_apply 6.01 4 10
use_for_loop_loc 54340.47 53415 55124
use_for_loop_at 1263.17 1238 1431
use_for_loop_iat 1326.79 1313 1365
use_numpy_for_loop 939.02 926 956
use_panda_iterrows 5676.55 5609 6184
use_zip 28.00 27 29
我的预期和结果是正确的:
- 列操作和应用都相对较快
- 使用 at()和 iat()选择比 loc()快
- 在 numpy 数组上基于位置的索引比在 pandas 数据帧上基于位置的索引快
令人惊讶的是:
- 对于小数据集,zip()相对较快——对于 N < 1000 的数据集,甚至比 apply()更快
- iat()和 at()索引比 loc()快 30 倍
- 即使使用索引进行访问,loc()也比预期慢
基于这些结果,从现在开始我会做些什么:
- 如果我不能使用列操作或 apply()实现我想要的,我将使用 zip()代替(而不是 iterrows()!)
- 我将避免使用 loc()来更新或访问单个值,而是使用 iat()和 at()
- 考虑将基础值提取为 numpy 数组,然后执行处理/分析
张量流概率分布的可微卷积
Tensorflow 中的卷积运算是为张量设计的,但也可用于卷积可微分函数
在本文中,我描述了一个均匀和高斯概率分布的卷积的例子,将它们与数据进行比较,并适合高斯的宽度参数。如果我们的数据采用基础模型(本例中为均匀分布),但每个数据点都被高斯模型随机“涂抹”了一定量(例如测量不确定性),则在实践中会出现这种情况。我们假设我们不知道分辨率,并想从观测数据中确定它。这里有一个 Jupyter 笔记本,上面有本文讨论的例子的 Tensorflow 实现。
我们首先在函数参数上定义一个网格,我们将在整篇文章中使用它。尽管对于这里给出的这个简单例子,我们可以得到卷积积分的封闭形式的表达式,但在实际应用中往往不是这样。因此,我们在这个网格上离散我们的函数,有效地使它们分段常数。然而,我们可以选择非常大的箱数,使得分段近似对于我们的目的来说足够好:
然后我们在这个网格上定义一个均匀分布:
如下所示:
我们现在可以从均匀分布中抽取一个随机数样本:
并且用从已知宽度的高斯分布中提取的随机数“涂抹”每个点:
这给了我们以下分布:
现在我们定义高斯分布。请注意,我们将宽度参数 sigma 设为tf.Variable
而不是张量或占位符,因为我们希望稍后使用最大似然拟合来确定它,并因此对其进行求导:
必须考虑如何获得正确的卷积输出范围。在这个例子中,我们使用padding='SAME'
进行卷积运算,第二张量具有奇数个面元。如果我们选择第二个张量在其中间为 1,在其他地方为零(一个“居中的狄拉克脉冲”),那么卷积输出将等于第一个张量。因此,我们将高斯核置于第二张量中间面元的中心。卷积乘积的定义域与投影到第一张量的函数的定义域相同。
还发现 Tensorflow 的 1D 卷积实际上是一个互相关而不是一个卷积。这些本质上不同于第二个函数被“遍历”的方向。通过将第二个输入镜像到围绕垂直轴的卷积运算,或者等效地,翻转函数参数的符号,我们可以得到真正的卷积。
作为卷积运算的快速检查,我们将均匀分布与其本身进行卷积:
获得:
其(忽略归一化)对应于从完全解析计算中获得的结果。
回到我们最初的问题,我们定义均匀分布和高斯分布之间的卷积:
(对于 sigma 参数的原始值)如下所示:
让我们根据卷积乘积定义上面生成的样本数据的负对数似然性。由于我们必须对卷积运算进行离散化,因此我们还需要用相同的宁滨对数据进行分类:
负对数似然函数的定义是:
在下一步中,我们绘制负对数似然函数,我们期望在 sigma 的“真实”值处看到最小值,该值以前用于抽取样本。Tensorflow 可以计算负对数似然函数相对于 sigma 的导数(如下图中的箭头所示):
现在我们有了负对数似然函数及其导数,我们可以使用它的最小值。因为我们只有一个参数要优化,所以我们使用 BFGS 方法而不是随机梯度下降法。Tensorflow 有一个到 scipy 的最小化工具箱的接口:
为了监控进度,我们定义了一个回调函数:
开始最小化:
这通常在大约 23 次迭代之后收敛,并且应该给出接近原始值 0.1 的 sigma 值,该原始值 0.1 用于涂抹从均匀分布中提取的点。
我们在本文中已经表明,在 Tensorflow 这样的框架中,我们可以对概率分布的参数求导,即使我们在卷积运算的(离散版本)中使用这样的分布。
顺便提一下,当使用大量面元时,使用快速卷积算法在计算上可能更有效。事实上,Tensorflow 依赖于 cuDNN,它支持用于执行卷积的几种不同算法,包括基于离散傅立叶变换的方法。
可区分渲染
听起来很酷,但是…是什么?
随着我开始更多地关注机器学习,可微分渲染是引起我注意的一个话题,并且以一定的频率出现。我的第一个想法是,“cooooool 这是一个生成像素的新系统,可以利用机器学习吗?”深究题目之后,这立刻是失望,但失望最终被对实际实际应用的现实兴奋所取代。那么,什么是可微分渲染呢?
反向图形试图获取传感器数据并推断 3D 几何图形、照明、材质和运动,以便图形渲染器可以逼真地再现观察到的场景。然而,渲染器被设计成解决图像合成的正向过程。在另一个方向,我们提出了一种近似可微分渲染器(DR ),它显式地模拟模型参数和图像观察之间的关系。
-OpenDR:一个近似可微分的渲染器(论文,技术谈)
OpenDR 可以将颜色和顶点作为输入来产生图像中的像素,并从这些像素中保留导数,以便可以准确地确定哪些输入影响了最终的像素颜色。通过这种方式,它可以将图像“反渲染”回颜色和顶点。
OpenDR: An Approximate Differentiable Renderer
OpenDR 是“近似的”,因为光栅化中存在不连续性,例如由于遮挡。这只是一种不同形式的渲染引擎(光栅化引擎),但也存在其他形式的 DR,包括光线行进,基于点的技术,甚至是单一的着色表面。单一阴影表面的情况(想象一个全屏四边形)可能是最容易理解的,因为它只需要通过照明和 BRDF 传播就可以回到输入端。那么这有什么用呢?
Single-Image SVBRDF Capture with a Rendering-Aware Deep Network
可区分渲染的一个用例是在训练机器学习模型时计算损失。例如,在 SVBRDF 重建论文的中,网络产生四个输出纹理图(漫反射率、镜面反射率、粗糙度、法线),但是单独计算这四个空间中的损失是不够的。问题是,目标法线(例如)和推断法线之间的比较没有捕捉到当纹理实际渲染为光照表面时可见的感知损失。使用可微分渲染器来计算渲染图像空间中的损失;然后将损失传播回四个纹理输入,并从那里应用反向传播来训练网络。
Real-Time Height Map Fusion using Differentiable Rendering
DR 在使用微分渲染的实时高度图融合中具有类似的应用。目标是从单个单目摄像机鲁棒地重建高度图。使用三角形网格和 DR,效率和鲁棒性都得到了提高。
我们的方法的一个重要元素是在标准 OpenGL 计算机图形流水线中实现的可微分渲染器,该元素能够实现高效的操作。给定当前的表面模型和相机姿态,它可以在几乎没有额外计算成本的情况下,为每个像素渲染预测的图像和深度,以及这些量相对于模型参数的导数。
初始深度估计被转换成高度图,然后被渲染成具有顶点位移的三角形网格,以产生新的深度图,该深度图然后可用于计算损失。整个过程是可微分的,这意味着可以通过深度图、通过三角形网格、通过高度图、通过原始深度估计以及通过用于训练的网络追溯损失。
结论和补充阅读
这是对可区分渲染的快速概述,如果您和我一样,对 DR 的定义和用途感到疑惑,我希望这是有用的。我没有对这些论文的质量做任何声明,这些只是我写这篇文章时发现的相关作品。
- RenderNet:一个深度卷积网络,用于 3D 形状的可区分渲染
- 使用对抗性想象先验的计算机视觉中的逆问题
- 可微分图像参数化
- 神经场景去渲染
挖掘数据科学工具:Docker
Photo by Kyle Ryan on Unsplash
Docker 是一个创建和管理“容器”的工具,容器就像一个小虚拟机,你可以在里面运行你的代码。Docker 容器就像一个小型的 Linux 操作系统,预装了运行 web 应用程序、机器学习模型、脚本或您编写的任何其他代码所需的一切。
Docker 容器就像是一个真正的轻量级版本的虚拟机。它们使用的计算机资源比虚拟机少得多,并且可以在几秒钟而不是几分钟内启动。(性能提高的原因是 Docker 容器共享主机的内核,而虚拟机运行单独的操作系统,每个虚拟机都有单独的内核。)
Aly Sivji 对码头集装箱和海运集装箱进行了很好的比较。海运集装箱通过标准化设计提高了物流效率:它们都以相同的方式运作,我们有标准化的基础设施来处理它们,因此无论运输类型(卡车、火车或船只)和物流公司如何(所有人都知道海运集装箱并根据其标准制作模具),您都可以运输它们。以类似的方式,Docker 提供了一个标准化的软件容器,您可以将它传递到不同的环境中,并相信它们会像您期望的那样运行。
Docker 如何工作的简要概述
为了让您对 Docker 的工作原理有一个真正高层次的了解,首先让我们定义三个与 Docker 相关的术语——“Docker file”、“Image”和“Container”:
- Dockerfile :你写的一个文本文件,用来构建你需要的 Docker“映像”(见下面映像的定义)。您可以将 docker 文件想象成 Linux 命令行的包装器:在命令行上用来设置 Linux 系统的命令都可以放在 docker 文件中。“构建”Dockerfile 文件会产生一个映像,该映像表示处于您所需要的确切状态的 Linux 机器。你可以在 Dockerfile 参考页面了解语法和命令的所有细节。为了了解 docker 文件的样子,这里有一个 docker 文件,您可以使用它来创建一个包含 Ubuntu 15.04 Linux 发行版的映像,将所有文件从您的应用程序复制到。映像中的/app,在映像的 Linux 命令行中运行/app 上的 make 命令,最后运行/app/app.py 中定义的 python 文件:
FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py
- 图像 :您希望容器运行的环境的“快照”。这些映像包括运行代码所需的所有内容,例如代码依赖项(例如 python venv 或 conda 环境)和系统依赖项(例如服务器、数据库)。您从 docker 文件“构建”图像,docker 文件定义了图像应该包含的所有内容。然后使用这些图像创建容器。
- 容器 :图像的“实例”,类似于面向对象编程中对象是类的实例。您从图像创建(或使用 Docker 语言“运行”)容器。您可以将容器视为运行由您的映像定义的“虚拟机”。
总结这三个主要概念:您编写一个 Dockerfile 来“构建”您需要的映像,它代表您的系统在某个时间点的快照。从这个映像中,您可以使用该映像“运行”一个或多个容器。
下面是一些需要了解的其他有用术语:
- 卷 :“共享文件夹”让 docker 容器看到你主机上的文件夹(对开发非常有用,所以你的容器会随着你的代码变化自动更新)。卷还允许一个 docker 容器看到另一个容器中的数据。卷可以是“持久的”(容器停止后卷继续存在)或“短暂的”(容器一停止,卷就消失)。
- 容器编排 :当你第一次开始使用 Docker 时,你可能一次只能运行一个容器。但是,您很快就会发现您想要多个容器,每个容器使用不同的映像和不同的配置运行。例如,Docker 的一个常见用途是将应用程序部署为“微服务”,其中每个 Docker 容器代表一个单独的微服务,它与您的其他微服务交互以交付您的应用程序。由于手动管理多个容器会变得非常笨拙,因此有一些“容器编排”工具可以自动执行一些任务,例如启动所有容器、自动重启出现故障的容器、将容器连接在一起以便它们可以互相看到,以及在多台计算机上分发容器。这方面的工具示例包括 docker-compose 和 Kubernetes 。
- Docker 守护进程/ Docker 客户端:Docker 守护进程必须运行在您想要运行容器的机器上(可能在您的本地或远程机器上)。Docker 客户端是与 Docker 交互的前端命令行接口,连接到 Docker 守护进程,并告诉它做什么。通过 Docker 客户机,您可以运行命令从 Docker 文件构建映像,从映像创建容器,以及执行其他与 Docker 相关的任务。
为什么 Docker 对数据科学家有用?
你可能会想"哦,天哪,这是我在数百万我必须掌握的其他事情之外的又一个学习工具吗?值得我花时间去学吗?这项技术几年后会存在吗?
我认为答案是,是的,这绝对是一个值得您添加到您的数据科学工具箱中的工具。
为了帮助说明,这里列出了使用 Docker 作为数据科学家的原因,其中许多原因在 Michael D’agostino 的“Docker for Data Scientists”讲座以及来自 Arthur Ulfeldt 的【Lynda 课程中进行了讨论:
- 创建 100%可再现的数据分析 :由于方法和法律原因,再现性越来越被认为是至关重要的。当你在做分析时,你希望别人能够验证你的工作。Jupyter 笔记本和 Python 虚拟环境是一个很大的帮助,但是如果你有关键的系统依赖,你就没那么幸运了。Docker 确保您每次都以完全相同的方式运行代码,使用相同的操作系统和系统库。
- 文档 :如上所述,构建 docker 容器的基础是一个“Dockerfile”,它是对需要存在于您的映像/容器中的所有东西的逐行描述。阅读这个文件可以让您(以及任何需要部署您的代码的人)更好地理解容器上到底在运行什么。
- 隔离 :使用 Docker 有助于确保您的工具不会相互冲突。通过在单独的容器中运行它们,您将知道您可以运行 Python 2、Python 3 和 R,并且这些软件不会相互干扰。
- 获得 DevOps 能力 :用米开朗基罗·达戈斯蒂诺的话说,“Docker 使 DevOps 民主化”,因为它为过去只有系统/ DevOps 专家才能获得的人提供了机会:
- 如果你不感兴趣,Docker 可以让你更容易地“回避”DevOps /系统管理,因为有人可以为你创建一个容器,你所要做的就是运行它。类似地,如果您喜欢使用 Docker,您可以创建一个容器,让不太懂技术的同事在他们需要的环境中轻松运行。
- Docker 提供了从现有容器开始构建 docker 容器的能力。你可以在 DockerHub 上找到许多这样的文件,它拥有数千个预先构建的 DockerHub 文件和图像。因此,如果您正在运行一个众所周知的应用程序(或者甚至是模糊的应用程序),通常已经有一个 docker 文件可以让您快速部署您的项目。这包括许多工具的“官方”Docker 库,例如 ubuntu 、 postgres 、 nginx 、 wordpress 、 python 等等。
- 使用 Docker 有助于您与 IT / DevOps 同事合作,因为您可以在一个容器中完成数据科学工作,并简单地将其作为一个黑盒传递给 DevOps,他们无需了解您模型的所有信息即可运行。
以下是一些与数据科学相关的应用示例,您可以尝试使用 Docker:
- 创建超便携、定制的开发工作流: 在 Docker 文件中构建个人开发环境,这样你就可以在任何安装了 Docker 的机器上立即访问你的工作流。无论你在哪里,无论你在什么机器上,只需加载图像,你的整个工作环境就在那里:你工作所需的一切,以及你想如何工作。
- 创建开发、测试、试运行和生产环境 :请放心,您的代码将按您的预期运行,并能够创建与生产环境相同的试运行环境,这样您就知道当您进入生产环境时,一切都会好的。
- 在任何机器上复制你的 Jupyter 笔记本 :创建一个容器,运行你的 Jupyter 笔记本数据分析所需的一切,这样你就可以把它传给其他研究人员/同事,知道它会在他们的机器上运行。尽管 Jupyter 笔记本在进行分析方面很棒,但它们往往会受到“它在我的机器上工作”问题的困扰,Docker 可以解决这个问题。
要获得更多灵感,请查看 Civis Analytics 米开朗基罗·达戈斯蒂诺描述他们使用的 Docker 容器(从 18:08 标记开始)。这包括专门用于调查处理的容器、R shiny 应用程序和其他仪表板、贝叶斯时间序列建模和投票聚合,以及通用 R/Python 包,其中包含员工所需的所有通用包。
更多资源
如果你真的想开始使用 Docker,我强烈推荐由 Arthur Ulfeldt 教授的 Lynda 课程学习 Docker 作为起点。解释得很好,也很简洁(总共只有 3 个小时左右的视频)。我从这个课程中创建了一套 Anki 抽认卡,你可以在这里访问。我还推荐奈杰尔·波尔顿的《Docker Deep Dive》这本书。我还根据这本书制作了 Anki 抽认卡,你可以在这里访问。
这里有一些其他有用的资源,你可能想看看:
- 数据科学家 Docker,Strata 2016,米开朗基罗·达戈斯蒂诺 (YouTube 视频)
- 使用容器的数据科学工作流,作者 Aly Sivji (YouTube 视频)
- 为期 3 小时的数据科学家研讨会 (YouTube 视频)
原载于 2018 年 10 月 1 日www.marknagelberg.comT22。要访问我共享的 Anki deck 和 Roam Research notes 知识库,以及关于间隔重复和提高学习效率的技巧和想法的定期更新, 加入“下载马克的大脑”。
数字分析数据质量和网络分析师
我想谈谈数字分析的数据质量,这让很多初来乍到的人感到困惑。
习惯于结构化数据的分析师如果不理解数字分析的动态性,一开始会感到沮丧。在结构化数据世界中,你是基于交易数据的,交易数据是确切的数字,因为数据是在交易过程中由应用程序创建的,不涉及第三方。这意味着当交易发生时,您的数据也被创建。如果你有交易,你就有数据。
在这个新的数字世界中,我们跟踪用户的点击,数据不是从应用程序传递,而是从 web 浏览器传递。网站并不直接连接到访问者,它们之间有一个媒介:像 Firefox 或 Safari 这样的网络浏览器。访问者通过这种媒介访问公司的数字资产。因此,如果你想从访问你网站的客户那里收集数据,你需要请求浏览器向你发送数据。您通常需要使用另一个第三方分析供应商来获取这些数据。
当你看这些数据的时候,这是必须知道的。
客户点击页面上的某个东西,浏览器将这个点击作为 web 请求发送到网站,网站从其服务器给出响应,浏览器拾取这个响应并显示给访问者。在此流量期间,您将通过您的网络分析供应商收集数据。正如你所看到的,在这个由许多步骤、各方和硬件组成的交易中,有许多事情可能会出错。即使你有完美的网络分析实现,你真的不能控制访问者的电脑,浏览器性能,或访问者的互联网连接。你甚至不能 100%控制你的网站。服务器可能会出现故障,最终会出现错误,页面可能会出错。
这是你所得到的,你需要看数据,记住这一点。完美的数字数据是不存在的,你只需要运用你的商业和分析技能来理解这些数据。这就是为什么优秀的数字分析专家会关注趋势来创造见解,而不是关注原始数据。
这也是你不应该让大家做分析的原因之一。当分析师没有很好地理解数字资产的产品和基础设施时,他们最终会得出许多错误的见解。最后,他们会责怪网络分析供应商或技术实现。实现可能是错误的,但是您需要那些能够在瞬间理解数据质量的人
第二种对数据差异感到不舒服的人是那些没有使用必要的分析技能的人。当你具有高度的分析能力时,你可以很容易地在不同的报告、KPI 和业务目标之间建立联系。你会认识到错误的数据,但你也会认识到,在某些情况下,这些错误的数据不会偏离你的洞察力,你仍然会从中获得一些东西。
雇佣那些能够利用现有数据创造洞察力的人。这是我们在这个快节奏的数字世界中需要的技能。
数字经济学
让我们快速了解一下数字经济是什么,以及它如何影响组织和市场 …。
在为我们关于商业分析的 2018 暑期学校课程制作海报内容时,我建议将“数字经济学”作为我们关于数据在现代经济中的首要地位的入门课程的标题。难怪当今世界上最有价值的五家公司中有四家专注于信息处理(苹果、Alphabet、微软和脸书),而第五家(亚马逊)在其商业模式的核心利用数据。【1】对于那些实践管理的人来说,“数字经济”的概念唤起了数据、商业价值和管理决策之间的相互关系。
现代经济的定义特征之一是价值是用户体验的属性,而不是供应商的产品或服务。价值链的全球化将经济主体推向更有利可图的活动,包括生产的上游和下游。如果丹尼尔·贝尔预见到现代企业将从组装产品转向聚合服务,派恩和吉尔摩强调了商业价值随后从组织服务向客户体验的转变。今天,价值被视为我们消费体验质量的同义词,无论是在休闲时间还是在职业活动中。我们感知的核心是上下文中的数据,我们用它来衡量我们的物理、增强或虚拟现实。
数据是这些人类经验的代理。尽管数据并不新鲜,但它越来越无处不在——今年创造的数据将超过之前 5000 年有记录的历史。【ii】数据是第四次工业革命的核心——互联网技术和商业分析的进步是当前可持续竞争优势的基础。【iii】数字战略超越了网站,延伸到了旨在捕捉消费者偏好、行动和动机的物联网。如果数据没有内在价值,我们将数据转化为个人和/或集体行动的能力就成为了企业和社会的支点。
数据的无处不在改变了我们看待价值的方式。收集数据不是为了简单地描述物理对象,而是为了提供多用途的算法,这些算法决定了我们对周围世界进行建模的方式。数据科学不太关心我们做什么(描述性的),而是关心我们能做什么(预测性的)或应该做什么(规定性的分析)。商业信息系统不再被设计来跟踪有形的商品,而是提供一个横向平台,利用我们作为消费者所拥有的、所知道的和所做的无形资产。数据不仅仅是数据,它已经成为现代企业的命脉。
数字经济学的课程不仅仅是对硬件、软件和自动化的回顾。数字技术不会神奇地产生将数据转化为行动的决策,而是人。卡尼曼和特沃斯基关于前景理论的工作有力地证明了人类的偏见和感知是如何影响我们看待数据的。【iv】机器学习充其量只能促进我们对价值的认知。数据科学包括理解要解决的问题的本质、手头数据的质量、应用适当的方法以及将数据转化为行动。数字经济的影响不在于产生更多的数据,而在于提高人类决策的质量。
数字经济学的研究是商业分析研究所的核心。在我们位于巴约纳的暑期学校,以及我们在欧洲的大师班,我们让分析为您和您的组织服务。该研究所专注于数据科学在管理人员中的五个应用:数字经济学、数据驱动的决策、机器学习、社区管理和可视通信。改善管理决策会对你未来的工作和职业生涯产生影响。
Lee Schlenker 是 Pau 商学院的教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschlenker.查看你可以在 https://twitter.com/DSign4Analytics的 Twitter 上关注我们
派恩和吉尔摩(1999 年)。体验经济。明尼苏达州圣保罗:高桥公司。
【ii】……(2016),【ii】数字化世界中更好的公司估值方法,Knowledge@Wharton,
【三】施瓦布,K. (2017)。第四次工业革命。第一版。兰登书屋公司。
【iv】卡内曼 d;特沃斯基(1979)。《前景理论:风险下的决策分析》。计量经济学。
数字封建主义
数据生态系统如何变得中世纪化
Queen Mary’s Psalter (Ms. Royal 2. B. VII), fol. 78v. Downloaded from Wikipedia.
不幸的是,我们的现代数字生态系统正在迅速组织成一个与我们现有的权力结构和自由并行的封建权力结构。在封建主义的普遍观念中,相对较小的食利阶级(领主)利用各种微妙和公开的政治和经济制度从生产阶级(农民)的日常生活中榨取价值,而生产阶级通常对这一制度没有什么选择或影响。用户参与平台,通常对他们提交的数据只有最起码的了解,然后这些数据被用来专门为平台所有者创造价值。但是,我们当前的数字生态系统和封建社会之间的相似之处远比粗略描述的要多得多,共同点如此惊人,以至于可以说数字生态系统,特别是社交媒体生态系统,构成了事实上的封建社会。
中世纪时期
在我们开始之前,重要的是简要讨论一下实际的历史封建主义的本质。还没完,“骑士、领主和女士们,万岁!”正如我们从大众媒体中可能想到的。这就是广义的骑士精神。更准确地说,肯定有骑士、领主和贵妇(或者任何一个特定社会用来称呼武士和贵族阶级的术语),但他们是人口中非常小的一部分,其中大部分是农奴(或者地主用来描述【乌合之众】的任何术语)。为了澄清定义,骑士精神主要包括我们喜欢在电影和书籍中看到的封建主义的所有“有趣”部分。封建主义的另一半(强迫劳动和欠贵族的农民群众)通常被称为庄园制。
正如人们对中世纪政治制度的预期,大多数封建社会主要以农业为中心。用来管理农业生产和农村生活的封建制度一般被称为庄园制。在庄园制中,领主控制着一定面积的土地,这些土地通常由更有权势的领主或国王授予他。农民居住在这片土地上,他们通常在政治上和经济上受制于领主和他的各种家庭成员和家臣的集合。更一般地说,农民可以细分为自由民,他们通常要么拥有自己的土地,要么支付某种货币租金;农奴,作为一种不自由的劳动,他们有义务为他们的主人工作土地;和奴隶,他们被视为财产,几乎没有法律权利。尽管关于从奴隶制到农奴制的转变是欧洲不自由劳动的主要形式仍有争议,但人们普遍认为,随着奴隶制在欧洲变得不那么普遍,农奴制取而代之。
在许多情况下,农奴确实拥有基本的权利,如牲畜的共同牧场和个人使用的小花园,所以他们在技术上不是奴隶。然而,农奴也被要求耕种地主的大片土地,作为一种强迫劳动,或者在更资本主义的封建制度下,支付(通常是过高的)税收。为了生活和生产足够的食物来养活自己,农奴们不得不向领主的生产要求低头。同样,由于农奴的义务与他们占有的土地直接相关,任何土地交换都意味着农奴的义务也随之转移。在许多情况下,农奴仅仅被视为土地本身的生产要素,就像一棵果树或一群鹿。
普通庄园的布局。芥末色的区域归领主所有(领地),阴影部分归教会所有(土地)。威廉·r·谢泼德,《历史地图集》,纽约,亨利·霍尔特公司,1923 年。来自维基百科。
农民,无论是农奴还是其他人,也经常被要求使用领主庄园提供的收费服务。例如,许多庄园都有谷物碾磨机,农民可以用这些碾磨机把他们的谷物产品磨成面粉,但是这些碾磨机通常也需要付费或者交出部分生产的面粉。在某种程度上,这些磨坊代表了一种地方垄断,农民的唯一选择是使用领主的磨坊并支付费用,或者根本不使用磨坊。后一种“选择”虽然在某些情况下在理论上是可能的,但在功能上是不可能的,因为面粉是少数几种容易储存的卡路里来源之一。
从司法上来说,庄园主通常负责他所有的臣民。也有一些例外(正如人们可能会从庄园制这样一个多样而悠久的制度中预料到的),中世纪封建主义的司法模式略有不同,但总的来说,领主创建并维持一个或一系列法院,裁决轻微犯罪和民事纠纷。这些封建法庭的存在也是为了执行强加给农民和领主土地的其他佃农的任何条款和条件。在领主的土地上,通常有不同的规则和条例来管理不同类型的占有者,法院通常管理这些不同的义务以及出现的任何纠纷。当然,也有更高一级的法院负责更严重的罪行,它们通常由更高层次的贵族控制。
与大多数强迫劳动制度一样,宣誓义务并成为农奴比逃离农民要容易得多。一般来说,大多数农奴被锁定在他们的社会阶层。摆脱农奴制的方法有一些,但它们因社会甚至个体领主而异。相反,不幸贫穷或遭受灾难的人往往不得不服从封建义务以求生存。这通常包括某种仪式,将个人与领主和他的庄园捆绑在一起,并可能收取某种费用来获得住所。正如所料,农奴通常缺乏机制或资源来履行他们对庄园主的义务,因此他们的家人永远被束缚在土地和庄园中,成为不自由的劳动力。
大多数庄园还居住着一定数量的自由民,他们没有义务通过强迫劳动来耕种土地,但却缴纳税款、租金和其他费用。这些自由民可以被认为是今天所谓的“下层中产阶级”的早期版本,但中世纪社会的各个阶层是如此的不稳定和复杂,以至于很难进行任何直接的比较。认为自由民的一个简单方法是,他们足够富裕,可以租赁或购买土地,但又没有富裕到让农奴为他们工作。因此,就他们从事的业务而言,他们有更多的自由,但他们仍然必须做自己的工作。这是一种过于简单化的说法,关于每个封建社会中自由和自由民的本质,已经有整本书问世,但它给出了一个关于被认为是自由民的人的体面概念。
一些读者可能已经对这场讨论的走向有了一些想法,但明确地将当前的数字生态系统与庄园制进行对比是很重要的。这场讨论将主要围绕社交媒体公司展开,这些公司是现代经济中最大、最成熟的数据技术公司。此外,更传统的技术公司经常试图在他们的许多数据实践中模仿社交媒体公司,所以这些也将受到审查。
Classes of Digital Feudalism. Lords of the manor: companies who own and manage platforms. Major gentry: companies with business models based on the manor platforms. Minor gentry: “influencers” who drive users to spend more time on the site. Serfs: people who submit to data collection for the right to exist in digital space
农奴——用户
现代社交媒体的权力结构和周围的数据科学生态系统很容易让人联想到封建社会和经济结构。除了不生产作物和牲畜,这个系统的农奴在日常生活中生产和交出数据,这个系统的主人是科技公司的高管,他们的整个基础设施都建立在收集和利用用户数据的基础上。
在我们更进一步之前,有必要解决社交媒体的“自愿参与”或同意论点。任何讨论数据科学和社交媒体生态系统公平性的人几乎不可避免地会遇到这样的论点,即参与社交媒体是自愿的。虽然这看起来像是一个很好的标准,但作为现代数字数据的范例,同意被打破并且通常无效。同意的现代方法(例如,“我们跟踪您,点击此处向我们提交您的数据,我们将对其做任何我们想做的事情,直到时间结束。”)可以看作是类似于中世纪农民“心甘情愿”地强迫自己成为农奴的方式。虽然现代社会的情况没有中世纪社会那么残酷,但在中世纪社会,几乎所有的个人和职业交流都是数字化的,不参与就是自愿排斥。在当代社会,不参与也几乎是不可能的,因为实体商店让位于在线订单,国际电话之间的任何互动都需要高昂的价格或免费的数字替代品,派对是有计划的,邀请是通过电子邮件和脸书活动发出的,在线求职申请成为唯一的求职申请。
这种表述甚至没有提到这样一个事实,即对于许多残疾人和不同能力的人来说,数字选项是唯一的选择,这使其更接近于“屈服或死亡”的境地。互联网给了许多以前孤立或依赖照顾者的人前所未有的自由。但是有了现代互联网,警告总是你点的任何东西或说的任何话都会被某人跟踪,不管它对你的生活有多必要。
如果我们接受不参与是错误的,或者至少是极其沉重的选择,那么参与这个系统就是存在的主要状态。在参与方面,中世纪庄园制和数字封建制之间的一个关键区别是,没有人必须只参与一个平台。相反,每个人都对不同的数字庄园负有义务,每一个都需要不同的数据来交换使用。对于那些关心隐私的人来说,问题就变成了他们愿意向多少个领主交出多少数据,以及他们的个人和职业生活是否能适应这些决定。
随着 Office 365 等基于云的服务大举入侵企业,这一决定变得毫无意义。传统上,你在工作中的时间不是你自己的,你的雇主一直知道你的大致时间表、产出能力和工作风格。但现在另一家第三方公司也知道所有这些事情,他们可以很容易地将它们与从其他公司收集的数据进行匹配。你的时间和工作成果可能属于你的雇主,但现在他们也为第二家公司工作,第二家公司利用他们做不属于你雇主的事情。基于云的服务对商业环境的入侵是数字空间的企业中介,因为以前的主权数字环境,如本地企业服务器,将数据存储和使用的义务和权利让给了第三方。在许多情况下,你的雇主在选择放弃他们的数据方面可能和你的情况完全一样。对于企业“云服务”客户来说,一个有用的概念框架是作为骑士或小领主,由平台的领主授予空间和访问权,并负责他们自己的农奴领地。
参与数字封建主义的社会群体之间的一个关键差异是坚持认为个人数据在功能上毫无价值,但总数据足以推动全球最大公司的估值。这种差异(或者,如果你觉得慈善的话,“规模效应”)是数字封建主义的核心,这是传统农奴不必解决的问题。农奴很容易意识到交给庄园主的谷物或其他作物的价值,而任何领主都很难合理地辩称食物毫无价值,尤其是在饥荒时期。许多革命是由干旱、价格控制和其他限制粮食供应的事件引发的,这是有原因的。饥饿是一种强大的动力,而隐私却不是。
数据收集公司利用了这些盲点,坚持认为一个人的数据除了汇总之外没有任何有意义的价值。你也可以说,在脸书 6000 多亿美元的估值中,一块钱与总体价值相比毫无价值,那么为什么不指望他们将这些“毫无价值”的钱交给创造其价值的人呢?当然,这个问题是故意有点迟钝,但它说明了数字庄园的领主和他们的用户之间的根本权力不平衡。他们决定你的数据的价值,但他们也坚持认为他们为你提供的任何好处都是同等价值的(减去他们提取的任何利润)。在数字庄园制中,平台所有者非常不愿意估计单个人数据的价值,而他们却高兴地用天文数字来评估他们的总数据。
Polish Gentry 1333–1434, Jan Matejko. From Wikimedia Commons.
贵族——企业合作伙伴和电力用户
这些权力失衡进一步加剧的事实是,数字法律体系与中世纪的封建制度也有许多相似之处。数字庄园的“低级法院”是他们选择使用的任何报告系统和工作人员,他们在其平台上监督的犯罪已经有机增长。骚扰是一种严重的合法犯罪,但对数字骚扰事件的大部分调查和惩罚权力都被交给了平台所有者。你当然可以向警方报案,但如果有人骚扰来自另一个州或国家的人,受害者除了特定平台的领主建立的那些系统之外几乎没有任何追索权。版权投诉通常遵循类似的模式,增加了一层极其严格的法律结构,要求平台所有者实施如此激进的政策,以至于数字千年版权法的撤销请求本身可能成为骚扰的工具。
正如所料,这些系统通常完全不足以捍卫“农奴”的权利,并倾向于支持数字封建结构中“同盟阶级”的权利。媒体公司花大价钱在社交媒体平台上公开或秘密地做广告,所以如果他们抱怨有人在使用他们的知识产权,那么平台肯定会扑上去。但是如果一个公司未经同意窃取了你的艺术或音乐怎么办?好吧,你最好有自己的社交媒体渠道和一大群追随者,否则他们可能会在几周后找到时间,那时他们的大客户已经获得了丰厚的利润。
在使用社交媒体平台及其数据来实现自身战略的大公司之间,隐藏着一群奇怪的“小绅士”,或“影响者”。这些人从社交媒体中获得各种津贴或收入。他们很少是媒体平台的实际员工,但他们确实通过吸引更多用户进入平台而获得报酬(通常通过“合作伙伴计划”),从而增强平台主的数据流。他们当然对托管他们的平台负有义务,但平台没有对等的义务。如果最具诱导性的内容能为他们赢得大量用户,许多平台会欣然托管这些内容,但一旦有人开始讨论抵制或广告商威胁要离开,他们就会放弃这些内容。
最成功的数字精英甚至有可能获得自己的子平台,围绕核心受众建立的网站网络,或者作为平台老板奖励的利润丰厚的全职工作。这些子平台通常用于提供一种自治感,而没有任何数据收集和利用的实际自由。通常,这涉及到额外的好处,如围绕一个“品牌”创建多个账户的能力,而大多数个人用户只能使用他们的真实身份,如果多个账户甚至是一种选择的话。许多平台明确禁止多个账户,当然,除非你在他们的平台上经营业务。当你有一个企业(或声称有一个企业)时,你对来自平台的数据的访问也增加了。但是你从来没有被给予对所有数据的完全访问权,甚至是你的子平台带来的数据,因为你的平台的主人当然“严重关注”他们用户的数据隐私。冷嘲热讽地翻译一下,这意味着亚平台所有者根本没有足够的权力或财富来保证完全的访问。
Portrait of Louis XVI, King of France and Navarre (1754–1793). Joseph Duplessis. From Wikipedia.
领主和国王——平台所有者
最后,我们来到了被广泛讨论的数字庄园主。这些人拥有并控制着巨大的平台和它们产生的所有数据。从公司实体或组织结构的角度来讨论所有权往往很有诱惑力,但这忽略了对这一群体的核心理解:他们是(大多数是白人,大多数是男性)人。他们决定自己平台的隐私和销售政策。他们从用户生成的数据中获得了惊人的收入。他们同意任何获取更多数据的新计划,或者更积极地维护自己作为数字领域主权统治者的权利。
理解数字庄园制所建立的权力结构的本质是很重要的,假设平台所有者普遍都是恶意或仁慈的是错误的。许多人试图成为好人,并可能认为自己是好人。但是他们领导公司,公司的唯一目标是创造收入。因为用户数据是他们提供的核心价值,数字领主永远被迫侵犯用户隐私并加强数据收集工作,以免他们的权力被更愿意最大限度地收集数据的人篡夺。平台所有者永远走在平衡提取数据的新方法与用户放弃其剥削性环境的风险的边缘。这与庄园主被期望向他们的赞助人或国王提供什一税、税收和征兵税,同时仍然确保他们自己的庄园繁荣昌盛是一样的。但在数字庄园制中,最终的权力不是一个国家的统治者,而是金融市场的经济力量。具有讽刺意味的是,从用户身上获取价值的组织反过来又受制于集体投资者群体,尽管它们的大多数用户永远不会富裕到拥有足够的所有权来捍卫自己的权利。
为了使这些权力失衡合法化,庄园制度几乎总是回归到某种契约忠诚机制。历史上,农奴服从或世世代代服从于由他们的领主制定的合同或协议。在现代社会,数字庄园契约是没完没了的用户协议,其中许多包含如此多的条款和剥削性条款,以至于在许多司法管辖区无法执行。用户协议很少(如果有的话)用简单的术语表述,它们通常很长,以至于需要多天的阅读,并且可能需要法律学位才能完全理解。因此,用户协议代表了另一种象征用户选择的手段。
数据共享设置是数据收集的另一个工具。表面上,这些设置允许用户手动控制他们与他人共享的数据。然而,这仅在某些情况下是正确的,并且这些设置的维护通常需要持续的警惕。在许多情况下,在更新或修改期间,用户被默认为最宽松的数据共享设置,他们必须在每次更新后手动重置他们的首选项。这些重置中最邪恶的假设是反向同意:如果您的首选项默认为共享某个特定的数据,那么平台会立即允许共享该数据的所有历史存档。这样,“隐私控制”不会阻止存储;他们只是限制这些信息的共享。
用户甚至不总是有这些虚假的同意选择。随着数据科学的发展,员工量化的新领域也在发展。不幸的是,量化工人运动只是简单的泰勒主义,表面上涂着薄薄的技术外衣,被一个过去没有劳工保护的社会所接受。但是,进行量化的服务提供商几乎总是寻找新合作伙伴的第三方数据平台,以使其数据收集策略具有强制性。制定这些政策的不再是单个雇主,而是多个有实力的雇主,甚至是政府机构,它们相互合作,最大限度地量化员工的表现。自然,这些数字企业的农奴总是被称为“用户”或“参与者”或其他一些暗示可以选择退出的术语,而他们实际上更像是主体,他们的选择是将数据交给第三方或失去工作。可以预见的是,受到这些强制性数据提取计划影响的工人可以分为成功击退这些入侵的工会工人和非工会工人,他们看到自己的生活和工作质量急剧下降,因为他们拼命努力保住自己的工作,而业绩基准却在飙升。
因此,我们不禁要问,什么样的事件会促使对用户/消费者隐私进行更严格的监管。你可能会为大规模的安全漏洞或泄密这样的事情进行逻辑论证,但这已经是一个日常问题,似乎没有公司特别担心它们。他们只是在风险管理计算中加入调查成本,然后照常进行。你打算怎么做,因为你的身份在 Equifax 事件中被盗而停止使用银行吗?你可能认为数据的安全性极其重要,但对一家数据公司来说,成功销售和安全漏洞之间的唯一区别是他们从你的数据中获得多少报酬。
前进的道路
很明显,庄园制与平等主义和自由社会是不相容的。但是,数字庄园制的趋势还相对年轻,我们有机会在它变得根深蒂固之前逆转它。越是建立的庄园系统,它们就变得越破碎,如果它们继续下去,用户可能会发现自己成为数字旧制度的主体。在不直接攻击数据科学的重大创新和机遇的情况下,有许多选项可以解决数字庄园制的问题。如果用户正在为公司创造价值,那么他们应该考虑加入工会。传统工会的大多数障碍与就业状况有关,但平台所有者非常小心地确保用户不以任何方式被视为员工。虽然各种团体试图进行社交媒体抵制或封锁,但他们往往组织不力或临时行动。持续稳定的用户联盟将提供重要的杠杆作用,以打破最恶劣的数字庄园剥削,甚至在他们开始之前阻止他们。他们还可以为受到强制性第三方数据收集的员工提供杠杆作用,并可以有意义地游说政治系统进行监管。
平台所有者和用户之间的任何持续平等都需要强有力的隐私法律和政策,这些法律和政策只能由政治机构有效制定和执行。在某些情况下(比如中国),平台所有者和政治决策者紧密结盟,如果不是同一批人的话,这代表了一种极其危险的范式。但在许多其他情况下,数据庄园的主人不同于政治机器,数字庄园主义的历史是一部政治不作为的历史。许多政治系统,特别是美国的政治系统,在技术知识方面存在重大差距,正如 2016 年选举干预丑闻后马克·扎克伯格在国会的证词所证明的那样。这使得政客们更难有效地捍卫其选民的隐私和权利,即使他们很想这样做。欧盟最近在保护用户隐私方面取得了长足的进步,出台了《通用数据保护条例》。
这种以用户为中心的政治努力的好处是,它们对那些它们没有直接保护的用户产生了连锁反应。许多数据公司都是全球性的,他们不可能在每个地区制定不同的保护措施并遵守 GDPR 和其他法规,因此他们经常采用符合最严格法规的一揽子政策。在欧盟运营的平台中出现的新通知和隐私选项中已经可以看出这一点,即使用户和公司办公室不在该管辖区。随着这些法律和政策在全球范围内激增,公司最终可能会在全面实施各种规则时变得更具选择性,但就目前而言,这些都是出色的工具,不仅可以保护一个国家的公民,还可以保护数字共享空间的所有用户。
因为这是至关重要的。互联网作为全球知识共享资源的承诺已经被分割成多个领地,而居住在这些共享资源中的用户却没有提出任何意见。如果我们现在就能改变这种趋势,在它变得根深蒂固之前,我们不仅可以提高隐私,还可以提高与数字技术互动的每个人的生活质量。
数字营销:分析优势
Photo by Marvin Meyer on Unsplash
介绍
数字营销是一个用来描述使用互联网和数字媒体来支持营销的术语。通过使用数字技术,营销团队实现了组织中定义的营销目标。随着越来越多的消费者、客户和潜在客户出现并活跃在不同的在线平台上,数字营销需要涵盖不同种类的媒体渠道。在当今市场竞争激烈且复杂的购买环境中,需要考虑付费媒体、免费媒体和自有媒体。
付费媒体是通过广告或搜索排名为访问者付费的投资渠道。挣得媒体描述了品牌倡导者在社交媒体、博客或出版商上发布的编辑内容的使用情况。自有媒体是品牌自身拥有的渠道,由社交媒体档案、网站和移动应用组成。互联网渠道上的数字营销也实现了与客户的另一种互动。传统媒体是推送媒体,营销材料从公司广播到大量观众,而互联网使客户或潜在客户能够主动接触品牌。集客营销描述了一个市场,在这个市场中,客户积极寻找有关特定品牌或商品的信息,这要求公司提供数字营销材料,以满足潜在客户对信息的需求。互动营销还可以根据从大量在线可用数据中收集和准备的情报进行个性化营销。营销团队需要采用分析和数据驱动的营销方法,以便能够向客户和潜在客户传达量身定制的个性化营销信息。
公司的营销预算仍在上升,2016 年,公司将 12%的收入用于营销活动。在高德纳 CMO 2016 年至 2017 年支出调查中,57%的受访者预计营销计划支出将会增加。此外,CMO 在营销技术上的投入有望超过首席信息官。劳动力是营销预算中最大的一块,但排在第二位的是技术。营销部门将总收入的 3.24%用于技术,而首席信息官将 3.6%的收入用于技术。此外,营销部门将大部分预算花费在网络、数字广告和数字商务上,这证明数字营销是一个组织接触客户和潜在客户的重要方法。
在本帖中,重点将是数字营销如何需要采用一种分析的心态,以便能够利用数字营销和互联网上的大量可用数据来帮助寻求接触和留住客户。提供了关键主题的概述,随后是关键发现的讨论和结论。
数字营销、消费者、数据和算法
这篇文章将详细阐述数字营销、消费者行为、大数据和机器学习。通过对这些话题的调查,这篇文章将阐述数据驱动和分析方法对数字营销的重要性。
数字营销一个品牌越来越多的潜在客户和现有客户每天都在使用数字工具。数字营销是品牌触及客户群和潜在客户的重要工具。通过利用数字技术,数字营销被用于接触活跃在平台上的客户。通过 2016 年对 CMO 的调查,Gartner 发现公司将 12%的收入用于营销活动。首席营销官在技术上的支出也将超过首席信息官,首席营销官在技术上的支出占总收入的 3.24%,而首席信息官占总收入的 3.6%。这就需要创建首席营销技术专家,或 CMT,来弥合营销和技术之间的差距,以确保技术和营销举措的良好配合。67%的营销部门表示,他们将在 2014 年至 2017 年间在技术相关活动上投入比以往更多的资金。
消费者行为成功的公司试图在市场中占有一席之地,并为目标客户群提供服务或产品。该公司必须保持独特和个性化,以获得其细分市场的竞争优势。这一前提的假设是,消费者正在根据自己的需求和愿望做出深思熟虑和理性的决定。一个好的公司战略必须找出并回应消费者决定购买特定商品或服务的潜在意识逻辑。然而,人脑不是一台基于客观数据和深思熟虑的推理做出决策的分析机器。围绕消费者的嘈杂数据没有被彻底分析,而是由个人根据经验和直觉来填充缺失的信息。
大数据大数据用三个 V 来描述:大量数据(量)、高速生成的数据(速度)或不同格式的数据(多样性)。收集的数据通常也是非结构化的,并且包含大量噪声,但是可以使用算法和分析来发现模式和知识。研究还表明,数据驱动型组织的盈利能力比竞争对手高出 6%,生产效率高出 5%。
引入能够感知其环境并将其状态报告给云的对象和产品,将会产生大量数据。消费者和公司可以利用这些数据来改善价值创造和日常生活。大数据使公司能够衡量并获得关于其运营的更深入的知识,从而改进决策。关于客户的大量数据可以通过不同的来源获得,并且可以很容易地进行整合,从而创建客户购买习惯和交易的完整资料。一家银行的一个团队将 ATM 交易、在线查询、客户投诉和其他数据结合起来,创建了一个 360 度的客户视图,以便更好地提供客户服务。
机器学习和算法算法由为解决给定问题而采取的预定义步骤组成。另一方面,机器学习试图根据数据、统计方法和计算能力来制定规则。机器学习不是告诉算法做什么和如何做,而是帮助计算机理解数据,并从模式和相关性中推导出规则。基于观察,数据被收集并馈入机器学习算法,然后该算法创建可用于处理数据的模型。机器学习的最终目标是基于数据子集来概括发现。机器学习被用于越来越多的应用中,从识别图像中的人脸,对客户进行聚类,到制造自动驾驶汽车。
机器学习是大数据时代的一个好工具,因为它擅长分析由大量行和列组成的数据集。机器学习可以生成有帮助的个性化推荐,而无需给出任何信息,例如为什么用户喜欢他们喜欢的东西,以及如何可能改变他们喜欢的东西。利用机器学习的目的是在可以提供价值的数据集中找到一致的关系,我们希望过滤掉随机发生的相关性。
讨论
利用客户的人口统计、跨国和购买信息的大数据和高级分析模型是创建营销活动的完美工具,这些营销活动旨在为公司带来短期收益。然而,从长远来看,促销活动创造的短期收入将威胁到建立品牌的投资。赛百味首席营销官托尼·佩斯(Tony Pace)指出,如果分析模型输出的促销活动不利于在不久的将来实现销售最大化,那么客户将总是获得他们购买最多的产品的促销活动。这可能会在短期内增加收入,因为促销活动很有可能导致购买,但从长远来看是破坏性的。一个品牌目录中被多次购买的产品数量与顾客对该品牌的忠诚度之间存在正相关关系。只鼓励重复顾客行为的短期促销,对公司及其品牌来说,只会是短期的成功。大数据和机器学习对营销人员来说是一个很好的补充,但只相信结果会导致与品牌及其价值观相矛盾的促销活动。有经验的营销人员需要确保公司的品牌和价值观得到保护,不会被数据驱动的模型所破坏。
Dellarocas 等人(2007)使用公开可用的数据建立了一个模型,以更好地预测电影的销售和收入。根据历史数据和知识,口碑对电影总票房的影响,Dellarocas 等人(2007)提出了一个模型,其中在线用户评论被用作模型的输入。创建的最佳模型能够每周预测收入轨迹,平均绝对百分比误差为 10%。在线评论的数量也可以用作票房早期销售的指标,并且在线评论的人口统计可以用于预测不同细分市场的需求。正如所料,Dellarocas 等人(2007)也发现了早期在线评论量与上映前几周票房收入之间的相关性。这种模式的优势在于,电影观众的在线电影评论可以在电影首映后的几个小时内在线获得,从而使电影的营销团队能够根据免费提供的数据快速采取行动。
对于能够实施分析工作的公司,组织中需要具备三种重要的能力:
(1)能够管理和整合多个数据源
(2)建立预测和优化模型
(3)管理层必须在整个组织中支持该计划,以便模型有助于更好的决策。
同样重要的是,不要从数据开始构建模型,而是从业务机会开始,并使用数据和分析来提高绩效。整合大量数据使公司能够执行统计和机器学习分析,以识别隐藏在数据中的模式和知识。然而,如果管理人员无法利用这种洞察力来提高业务绩效,大数据和分析将不会带来什么好处。企业需要以数据科学家的心态来处理大数据,而不仅仅是通过无休止地搜索数据中的故事来进行数据挖掘。
创建分析预测模型时,这些模型通常会变得复杂,因为有许多变量用于解释数据。准确性可能很高,但随着时间的推移,管理和维护大量变量是很困难的。因此,公司应该致力于构建最小化复杂性,同时最大化性能和准确性的模型。构建的模型还需要对用户透明且易于理解。一家零售商建立了一个模型来优化其广告投资回报,但却未能利用该模型,因为做出决策的关键营销人员不理解或不信任正在建立的模型。
大数据和分析数据驱动的努力也将使跨多个营销渠道衡量营销活动变得更加容易。从历史上看,不同的营销渠道,如电视、平面广告和数字营销都是孤立分析的。大数据计划支持整合多个数据源,从而更容易创建跨渠道的所有营销计划的 360 度视图。跨渠道分析还将阐明渠道之间的互动,例如电视广告发起网络搜索,再次导致潜在客户点击广告并购买产品。
据 Nichols (2013)称,数据驱动的洞察和分析还可以使公司保持现有的营销预算,同时在营销计划方面仍能获得高达 10%至 30%的更高绩效。然而,为了成功地模拟他们的业务,公司需要收集关于市场条件、竞争活动、营销活动、消费者反应和业务成果的数据。汽车制造商福特使用预测分析发现,营销预算在数字显示上分配了过多的资金,导致对搜索相关营销计划的投资减少。大数据和分析使福特能够调整其营销支出,以最大限度地利用不同的营销渠道。福特还发现,国家和地方营销预算很少一致,因此需要更好地协调,以涵盖国家和地方战略。在分配营销资金时,从以全国为重点转向以地方为重点,这种转变带来了数千万美元的收入,而没有比以前在营销上花费更多的钱。
将营销资金分配到正确渠道的能力对于营销团队的成功至关重要。大数据和高级分析通过基于海量数据的实时分析实现了这一点,这些数据可以在数字在线空间中每天、每周、每月甚至几秒钟内采取行动。
结论
今天,市场营销的很大一部分是基于品牌向顾客发送广告,试图影响他们的购买选择。广告费用于提醒顾客下次去杂货店购物时买一种特定的产品。在地平线上,机器人和智能物体正在出现,它们将接管消费者对产品的实际采购。智能冰箱会让顾客知道他什么时候需要进货,订单会被送到离顾客最近的最便宜的杂货店。当关于购物的选择留给机器人和算法时,以消费者为目标来影响他或她的购买模式的营销将是徒劳的。在不久的将来,银行可能会分析客户的银行账户,并确定他们可以通过更换能源提供商来节省资金。如果客户接受,机器人将与能源公司的机器人对话,代表客户协商更好的交易。营销的角色正在发生变化,未来市场将会快速发展。建立品牌和开展促销活动一旦付诸行动,可能会被证明是过时的。使用包含高级分析和机器学习的数据驱动计划对于公司在营销方面取得成功至关重要。
从影响客户到影响算法的转变可能是数字营销的未来。如果机器人和算法控制了采购,那么一个品牌需要成为算法中的默认选择。对品牌的忠诚度也将更难区分。购买的结果是算法忠诚还是消费者忠诚?此外,由于客户会受到偏见和习惯的影响,当购买选择由算法和机器人执行时,营销活动可能必须以不同的方式思考,这些算法和机器人对世界的看法与人类消费者不同。
营销正迅速成为一场基于数据和知识的战斗,只有通过认真实施数据驱动和分析工作才能取得胜利。
参考
巴顿 d 和 d 法院(2012 年 10 月)。让高级分析为您服务。哈佛商业评论。
布林克和麦克勒朗(2014 年 7 月至 8 月)。首席营销技术专家的崛起。哈佛商业评论。
chaffey d .和 F. Ellis-Chadwick (2012 年)。数字营销:策略、实施和实践(第五版。).英国培生教育有限公司。
达文波特、T. H .和 d .帕蒂尔(2012 年 10 月)。21 世纪最性感的工作。哈佛商业评论。
北卡罗来纳州达瓦尔(2016 年 10 月)。购物自动化后,营销会发生怎样的变化。哈佛商业评论。
Dellarocas,c .,X. M. Zhang 和 N. F. Awad (2007 年)。探索在线产品评论在销售预测中的价值:电影案例。互动营销杂志 21 (4),23–45。
多明戈斯,P. (1999 年 12 月)。奥卡姆剃刀在知识发现中的作用。数据挖掘与知识发现 3 (4),409–425。
多明戈斯,P. (2012 年 10 月)。关于机器学习需要知道的一些有用的事情。ACM 55(10),78–87 的通信。
Horst,p .和 R. Duboff (2015 年 11 月)。不要让大数据埋没了你的品牌。哈佛商业评论,第 3–9 页。
雷富礼和马丁(2017 年 1 月至 2 月)。顾客忠诚度被高估了。哈佛商业评论,第 3–10 页。
兰茨,B. (2013 年 10 月)。R 中的机器学习:学习如何使用 R 应用强大的机器学习方法,洞察现实世界的问题。伯明翰帕克特出版有限公司。
McAfee,a .和 E. Brynjolfsson (2012 年 10 月)。管理革命。哈佛商业评论。
Ng,A. (2016 年 11 月)。人工智能现在能做什么,不能做什么。哈佛商业评论。
尼科尔斯,W. (2013 年 3 月)。广告分析 2.0。哈佛商业评论,第 2–10 页。
Sorofman,j .,A. M. Virzi 和 Y. Genovese (2016 年)。Gartner 2016–2017 年 cmo 支出调查:预算攀升(再次!)随着营销人员应对更多的需求。高德纳公司技术报告。
斯威特伍德市(2016 年 10 月)。分析思维如何改变营销文化?哈佛商业评论。
约曼斯,M. (2015 年 7 月)。每个管理者都应该知道的机器学习。哈佛商业评论。
数字化转型正在从根本上改变人们寻找工作的方式,挑战公司以不同的方式寻找候选人。
如果你有时雇佣招聘供应商来填补公司的资源缺口,FTSE 100 business Paddy Power Betfair 的人才主管 Charlotte Steel 的这个 Q &将帮助你了解如何从你的 PSL 公司获得更多价值,并获得更好的合格候选人。
目前你在招聘方面面临的最大挑战是什么?
“首先要找到人才。像伦敦和都柏林这样的大城市是非常有竞争力的地点。对优秀人才的需求很大——尤其是在技术领域——我们正在与谷歌、脸书和支付高薪的银行竞争。
“此外,招聘机构在将公司的提议推向市场时,并不总是正确地包装公司的价值主张,这可能——而且确实会——通过聘用不匹配的候选人来推迟招聘过程。”
你对招聘机构有什么看法?
“行业失控了!我每天都被电话和邮件轰炸。我知道许多其他招聘主管也面临着类似的挫折。
“过去,我也对那些承诺过多、兑现不足的机构感到非常失望。
“我们做过的最好的事情是,当我们将角色外包给代理商时,清理我们的首选供应商名单(PSL)。我们对它进行了彻底的审查,现在它看起来很好,并提供了更好的合格候选人。通常,如果一个公司的内部团队没有能力雇佣专业技能,那么这个公司的招聘问题可以追溯到它的 PSL。如果代理公司不理解你公司的文化或者不能提供真正的结果,那就把他们赶走!那些坐在你的 PSL 上积灰的机构是在浪费你的时间。”
你多久检查一次你的 PSL?
“很难经常进行全面的评估,但我们会努力重新审视和调整我们的《PSL 季刊》。至关重要的是,招聘机构要保持警觉,达到你设定的关键绩效指标。PSL 绝对应该是敏捷且易于调整的。
“清理我们的 PSL 给我们带来了巨大的变化,我们现在正与科技等领域最具竞争力的机构合作,这些领域对人才有巨大的需求。”
你如何决定招聘人员是否留在你的 PSL?
“有几个因素需要考虑——寻找人才的技术,以及中介机构吸引潜在候选人的方式。
“候选人的质量显然是最重要的因素,但紧随其后的是他们能够多快地管理招聘过程并让选中的候选人加入进来。如果他们不能在所有这些领域提供出色的服务,就不要与他们合作!”
一家有着有趣价值主张的新机构应该如何与像贵公司这样的公司合作?
“以下是他们不能做的事情。不要发送与我们的业务需求无关的候选人简介。听起来显而易见,但你会惊讶这种事情发生的频率!不要试图向我们推销他们的‘神奇’,也不要浪费我们的时间。
“为了吸引我们的注意力,他们需要通过电子邮件或 LinkedIn 分享相关文章和博客来吸引我们。他们需要表现出战略性,而不是绝望!”
人们在指定招聘机构时最常犯的错误是什么?
“过于关注成本而非质量。如果你知道你会得到很好的服务和最好的候选人,那么专注于费用是没有意义的。”
你如何识别和研究市场,以确保你为自己的企业选择了正确的代理机构?
“我们与其他公司和内部网络论坛交流。然后,我们会回应那些向我们提供市场见解和有用的战略内容、展示其专业知识的机构。”
你如何从招聘机构中获取价值?
“我们始终如一地检查我们的机构是否达到了关键绩效指标。我们要求他们每季度发送一次绩效指标,这意味着他们一直在努力实现目标。最重要的是,我们会定期降级那些不合格的代理商,并提升其他代理商来取代它们。”
对于希望从招聘供应商那里获得更多价值的人,你会给他们什么建议?
“花必要的时间来识别使用现代资源方法的前瞻性思维机构,并关注每个机构能够提供的候选人的质量,而不是数量,这一点至关重要。确保你了解每个机构的专业领域,并将其与你的工作类别正确匹配。在你的 PSL 上拥有这些现代机构,将极大地提高你与能够获得合适人才的公司合作的机会。”
如果您正在寻找人才来源, 与团队取得联系 ,我们绝对可以提供帮助!
mat Roche——第三共和国董事兼联合创始人
数字化转型开启通往 GDPR 的大道
参加我们上次关于“GDPR:将义务转化为机遇”的早餐会的小组提出了一个具体的挑战。总经理、首席信息官、营销总监和数据科学家可以一起讨论哪些主题?我们建议将这一新的欧洲数据保护指令作为一项设计挑战:*GDPR 如何为提高贵组织数字资产的价值提供机会?*让我在这里简单地展开这个论点。
在我们关于 GDPR 的大师班中,我们建议您将精力集中在 GDPR 合规性上,而不是放在法律保护上,而是放在组织流程、平台、人员和实践如何塑造组织数据的价值上。组织流程决定了您的组织如何使用数据为员工和客户服务。平台代表您的组织与其员工和客户一起工作的工具。人们指的是公司的利益相关者如何看待他们与组织的关系的心态。最后,实践唤起了不同的组织利益相关者消耗组织资源的方式。
Processes, platforms, people, and practices — the 4Ps of Digital transformation
您在 GDPR 合规方面的工作如何加强您的业务流程?业务流程利用数据来丰富涉众与组织合作的经验。数据的价值与其在建立组织与其不同的内部和外部利益相关者之间的信任和信心的场景中的使用密切相关。新 DPIA ( 数据保护影响评估)的要求需要关注组织试图实现的目标。
物联网技术的发展正在产生大量关于人员、交易和流程的数据流。理想情况下,这些平台提供了多种机会,使您的组织与其内部和外部客户之间的互动货币化。它们不仅揭示了个人数据,还揭示了个人与其社会和物理环境的二次关系的质量。IOT 提出了个人隐私和安全的具体挑战:同意、可靠性和违反侵权的风险需要通过设计隐私和默认安全的概念来解决,以培养员工和客户的信任和参与。
GDPR 的最终目标是影响人们关于如何使用数据与员工和客户互动、提议新产品和服务以及监控绩效的心态。数字化转型不是以兆字节来衡量的,而是以塑造关于数据驱动决策的管理思维来衡量的。新法规的范围和义务超越了数据保护官的角色,涵盖了整个组织的信息工作者。未来对数据保护机构的检查将集中在管理层的意图和实践上。
最重要的是,与数据处理的总投资相比,可衡量的管理实践为组织的数字战略价值提供了更好的指标。组织数据的价值取决于数据如何转化为行动号召的使用场景。数据不仅仅是制造和/或服务过程的副产品,它还反映了人类决策过程中的步骤。设计客户(内部和外部)体验,而不是围绕数据的信息流程,是预测并最终影响利益相关者行为的关键。
组织如何将 GDPR 的“障碍”转化为改善其数字资产的新机遇?让我们总结一下我们的论点。您对 GDPR 的实施是一个绝佳的机会,可以将重点放在定义您的组织如何使用数据来倾听、构思、创新和评估其产品、服务和体验的流程和网络上。设计的隐私和默认的安全为您的组织提供了试验物联网部署的机会,并将资源集中在能够带来切实好处的地方。数据保护官的工作不是坐在办公桌后,而是站在他的同事和客户面前,宣传您组织的数字化转型将如何有助于信任和价值。实现 GDPR 合规的捷径是构建您的数字化转型愿景,回报不在路的尽头,而在沿途的每一次对话中。
有兴趣掌握设计和实施有效的 GDPR 合规框架的方法吗? 报名参加我们在前往 GDPR 的新一日大师班。商业分析实践是商业分析学院的核心和灵魂。我们对数字经济、数据驱动的决策、机器学习和视觉通信的关注将使分析为您和您的组织服务。
Lee Schlenker 是商业分析和数字化转型教授,也是 http://baieurope.com 商业分析研究所的负责人。他的 LinkedIn 个人资料可以在 www.linkedin.com/in/leeschlenker.查看你可以在 https://twitter.com/DSign4Analytics的 Twitter 上关注我们
作为社区努力的数字化战略
Industrial IoT and Data Science. (Image from pexels.com)
我最近写了一篇关于企业中的数字化的长篇文章,特别是大型组织中跨职能主题的挑战,如物联网或数据科学。我假设,不明确的责任、模糊的目标和组织单位之间缺乏沟通是物联网项目和整个数字化战略失败的重要原因。
最初的文章提到权力游戏和领土行为是阻碍公司数字化转型的两个问题。我们可能都同意,一些项目需要更换所有者、调整范围、被宣布不成功并关闭,或者在成功后,不得不开放以与其他正在进行的数字化计划集成或整合,这都有很好的实际原因。然而,如果他们的项目受到威胁,预计会遭到个人和团队的强烈反对。这可能有简单的个人原因(自尊心受到伤害),但这个问题也可能深深植根于一个组织问题:如果项目经理的奖金取决于这个项目的不同绩效指标,而从他的角度来看,照原样继续下去是有意义的,那该怎么办?然后,很明显,也要小心源于职业抱负和其他个人兴趣的组织理由。很容易想象,不明确的组织目标、错位的战略、筒仓式思维和部门之间的知识障眼法,是如何为令人讨厌的公司政治提供肥沃的土壤的。正如这篇 2012 年关于企业 IT 架构的有用文章所示,这些问题并不是最近的物联网项目所独有的。
“去实施一些工业 4.0 方法”
“实施一些工业 4.0”,没有一个好的经理说过,从来没有!但是我听说它被写进了年度目标协议…基于炒作和道听途说的荒谬目标对每个组织来说都是昂贵的。“我们需要区块链!”—例如,尽管任何简单的关系数据库都可以。“我们做 Hadoop 吧!”——隐含的希望是大数据可以弥补过时的台式电脑和低效的工作程序。那没有用。
良好的数字化战略基于所有可用的数据和专业知识,定义了可实现且可明确衡量的结果,理想情况下不仅仅是金钱收益和节省。产生最低可行产品(MVP)的独立、可管理和现实的项目比全公司号召“数字化”或“做一些工业 4.0”更有意义。一个或多个不协调的计划会产生不必要的重复工作,束缚大量资源,并对公司的日常运营产生负面影响,而不是一个最终变得相互关联的MVP 的马赛克,对于偶尔的失败来说更具可持续性和健壮性。
那些 MVP 是怎么规划的?从战略角度来看,物联网项目的执行有一些框架。虽然 IT 项目管理框架非常丰富,但物联网的跨学科性质保证了它们的特殊待遇。主要是由于潜在客户对物联网战略复杂性的担忧,博世软件创新公司在 2015 年发布了 Ignite 物联网方法,行业分析师玛奇纳研究公司和其他人对此做出了贡献。他们的书企业物联网以制造业、联网汽车和智能公用事业的用例为开篇,然后探讨项目经理在这些领域必须提出的商业和技术问题。重要的是,在进入硬件和软件之前,策略、机会识别和机会管理是 Ignite IoT 方法的一部分。业务案例是这一战略的核心。AgileIoT 框架(即将成为 Eclipse 项目)更加专注于以敏捷和面向开发的方式交付物联网解决方案。然而,与 Ignite 类似,他们的原型阶段也知道愿景定义和成功定义,并处理重要的战略方面,如项目失败时的撤退选项。像公司敏捷性和公司改进这样的主题总结了他们的方法。然而,Ignite 和 AgileIoT 都假定了一些显而易见的通用用例,从业者需要在他或她的应用领域中找到一个合适的类比。但是预测性维护对于石油和天然气的现场操作人员来说到底意味着什么,它与在液化气处理中寻找类似应用的人的工作有什么不同?我呼吁社区努力识别这样的用例,以建立一个强大的项目组合。
让我们绕道进入开源软件。这是以合作方式开发的软件,通常是免费的。这意味着有人投入时间和精力来实现某些功能,而没有直接的收入预期,而其他人将该软件用于他们自己的目的。令人惊讶的是,在开源运动的初期,大多数个人都为公益贡献了时间,现在越来越多的公司选择为开源开发贡献时间,有时是整个团队。原因很简单:没有人通过编写像第七代 XML 解析器这样的商业软件获得竞争优势,但是通过重用由社区共享和测试的稳定的代码库,每个人都是赢家。
我们需要在 Ignite IoT 或 Agile IoT 之上的开放框架:可以让整个行业变得更好的想法和概念,而不仅仅是偶尔的概念验证。
类似于开源,但针对特定于垂直行业的流程…
我怀疑更擅长鼓风炉空气过滤器或类似的东西的预测性维护会成为钢铁行业的竞争优势。同样,分享生物反应器的整体设备效率(OEE)可以通过监测某些形式的沉积物来提高,这并不是生物技术公司之战的决定性因素。还有其他 USP 来区分它们。然而,前述场景是在工业 4.0 的当前阶段,每个企业似乎都在思考的问题。这是软件领域已经学会避免的痛苦的商品问题。然而,对于物联网特别是垂直行业,每个人似乎都在重新发明轮子。对于一个给定的应用领域,我们应该识别并解决每个人遇到的问题(以及哪些不会泄露 USP)。
就建筑模式而言,已经有很多人在棕色地带努力简化数字化工作。以 RAMI 4.0 为例。工业 4.0 的参考架构模型非常详细地概述了技术组件(例如预测性维护解决方案)应该如何连接,以及在将运营资产连接到企业 IT 时应该遵守哪些标准。虽然我承认不可能在每个车间的使用案例中展示这种方法的效用,但 RAMI 缺少的是关于哪些制造设备将受益于预测性维护、收集相关数据的难易程度以及相应设备的业务案例的实用指导。因此,全世界可能有数百个高炉空气过滤器的概念验证或可行性研究……我认为数字化意味着做事更有效率。
我目前正在寻找物联网在化工行业特定领域的机会。如果在相似环境中工作的每个人都分享他们的发现,这不是很聪明吗?如果巧克力工厂的查理告诉我,实时跟踪 Oompa-loom pa 人通常是浪费金钱,但用传感器装备温暖的糖果室确实是一个绝妙的想法,应该在我的 OEE 优化列表中排在第一位?
像这样的交流需要一种新的心态,并接受在某些方面,甚至你的竞争对手也可以成为合作伙伴,如果我们谈论整个行业的效率提高,没有人会吃亏。这听起来像是社会主义者的白日梦,但尤其是在能源效率和减少废物方面,对整个社会的好处应该是一种激励。
建议和愿望清单
到目前为止,这实际上只是回顾了我对形势的看法,不仅仅是在我们公司,而是在我过去几年交往过的大多数组织。我的结论是:
- 组织需要非常明确地致力于数字化。你不能只是增加技术,你需要改变流程。这大概就是它被称为第四次工业革命的原因。
- 循序渐进和概念验证是好的。然而,宣布一个组织冠军(数字领导)来协调和监督这些项目。没有复制工作的意义。只有当结果被广泛共享时,组织才能从 PoC 中学习。
- 浪费是不好的。如果成功,请确保您的 PoC 可以在生产中继续运行。这也意味着你要尽早声明你的接口(技术接口和过程接口),这样组织就可以调整并从你的工作中获益。
- 有一个互补的项目组合。当真正的组织痛点仍未解决时,评估某项技术影响的三项可行性研究有何意义?这是一个自然的发展,因为每个人都在追求唾手可得的果实,而将真正困难的问题推迟到以后的阶段。
关于最后一项,我们应该如何确定项目的优先顺序?每一个优秀的经理可能都会说“追求最大的影响”,因为这能让高层管理人员和项目发起人高兴。然而,说起来容易做起来难。
了解制造业真正痛点的人是运营工程师,而不是数字化、物联网或数据科学专家。虽然也有例外,但现实是在 OT、IT 和其他技术人员之间存在着巨大的知识鸿沟。相反,如果不了解制造流程,最伟大的数据科学家也不会增加价值,事实上,他们可能能够预测某种类型的机器故障,而这在实践中很少发生…
Would it not be great if somebody already had assessed the potential for IoT and data science, and shared it across your industry?
这让我回到了特定行业内的知识共享,类似于开源。我希望有一个比 Ignite IoT 或 AgileIoT 高一级的框架告诉我:
- 如何盘点 X 行业一个新颖的制造环境?
- Y 的制造有哪些真正的痛点?
- 在 Y 的生产中我可以预期会遇到什么类型的机械,它多久坏一次,修理要花多少钱,所说的机械对生产过程有什么影响?这种信息的效用的一个例子是:
- 在预防机器 A 的故障时,是否有更好的省钱机会?在车间里通常有几十台机器 A,它们经常发生故障,但维修费用很低。或者,是否应该对机器 B 进行昂贵的改造,机器 B 很少发生故障,但一旦发生故障,就会非常痛苦?
这些问题 OT 比任何人都更容易回答,但他们可能甚至没有意识到这些是数字化团队感兴趣的相关问题。与此同时,加班是一个关键的资源,他们只有有限的时间进行他们可能认为是学术上的闲聊。因此,不幸的是,这些对话并不像人们希望的那样频繁。围绕“X”制造过程中的数字化问题,建立一个集中的访问点将真正有益!
降维——主成分分析真的能改善分类结果吗?
介绍
我遇到了一些关于降维技术的资源。这个主题无疑是最有趣的主题之一,想到有算法能够通过选择仍然代表整个数据集的最重要的特征来减少特征的数量,真是太好了。作者指出这些算法的优点之一是可以改善分类任务的结果。
在这篇文章中,我将使用主成分分析(PCA)来验证这一说法,以尝试提高神经网络对数据集的分类性能。PCA 真的能改善分类结果吗?我们去看看。
降维算法
在开始编码之前,我们先来谈谈降维算法。有两种主要的降维算法:线性判别分析(LDA)和主成分分析(PCA)。这两者之间的基本区别是 LDA 使用类别信息来发现新特征,以便最大化其可分性,而 PCA 使用每个特征的方差来做同样的事情。在这种情况下,LDA 可以被认为是监督算法,而 PCA 是无监督算法。
谈论 PCA
PCA 背后的思想是简单地找到一组概括数据的低维轴。为什么我们需要汇总数据呢?让我们考虑一下这个例子:我们有一个由汽车的一组属性组成的数据集。这些属性通过大小、颜色、圆形度、紧凑度、半径、座位数、车门数、行李箱大小等来描述每辆车。然而,这些特征中的许多将测量相关的属性,因此是多余的。所以要去掉这些冗余,用较少的属性来描述每辆车。这正是 PCA 的目标。例如,将车轮数量视为轿车和公共汽车的一个特征,这两个类别中的几乎每个示例都有四个车轮,因此我们可以看出该特征具有较低的方差(在一些罕见的公共汽车中,从四个车轮到六个车轮或更多),因此该特征将使公共汽车和轿车看起来相同,但它们实际上彼此非常不同。现在,考虑高度作为一个特征,汽车和公共汽车有不同的值,方差从最低的汽车到最高的公共汽车有很大的范围。显然,这些车辆的高度是区分它们的良好属性。回想一下,PCA 不考虑类的信息,它只查看每个特征的方差,因为合理的假设是呈现高方差的特征更可能在类之间具有良好的分割。
通常,人们最终会错误地认为 PCA 从数据集中选择了一些特征,而丢弃了其他特征。该算法实际上是基于旧属性的组合来构建新的属性集。从数学上来说,PCA 执行线性变换,将原始特征集移动到由主分量组成的新空间。这些新特征对我们来说没有任何实际意义,只有代数意义,因此不要认为线性地组合特征,你会发现你从未想过它可能存在的新特征。许多人仍然相信机器学习算法是神奇的,他们将成千上万的输入直接输入到算法中,并希望为他们的业务找到所有的见解和解决方案。别被骗了。数据科学家的工作是使用机器学习算法作为一套工具,而不是魔术棒,通过对数据进行良好的探索性分析来定位对业务的见解。牢记在心。
主成分空间是什么样子的?
在新的特征空间中,我们正在寻找一些在不同类别之间有很大差异的属性。正如我在前面的例子中所展示的,一些呈现低方差的属性是没有用的,它会使例子看起来一样。另一方面,主成分分析寻找尽可能跨类显示更多变化的属性来构建主成分空间。该算法使用方差矩阵、协方差矩阵、特征向量和特征值对的概念来执行 PCA,结果提供一组特征向量及其各自的特征值。PCA 的表现如何是下一篇文章的素材。
那么,特征值和特征向量应该怎么处理呢?很简单,特征向量代表主分量空间的新的一组轴,特征值携带每个特征向量的方差的信息。因此,为了降低数据集的维数,我们将选择那些方差较大的特征向量,丢弃那些方差较小的特征向量。通过下面的例子,我们会越来越清楚它到底是如何工作的。
让我们最终看到一些代码。
现在,我们到了这篇文章有趣的部分。让我们看看主成分分析是否真的改善了分类任务的结果。
为了解决这个问题,我的策略是在数据集上应用神经网络,并观察它的初始结果。然后,我将在分类之前执行 PCA,并对新数据集应用相同的神经网络,最后比较两个结果。
该数据集来源于 UCI 机器学习知识库,称为“Statlog(车辆轮廓)数据集”。该数据集存储了四种车辆轮廓的一些测量值,用于分类。它由 946 个示例和 18 个测量(属性)所有数值组成,您可以在此链接查看更多详细信息:https://archive . ics . UCI . edu/ml/datasets/Statlog+(Vehicle+Silhouettes)。神经网络将是一个多层感知器,具有四个隐藏节点和一个输出节点,所有节点都使用 sigmoid 函数作为激活函数,PCA 函数来自 R 包。
准备数据集
首先,我要为二元分类准备数据集。
我将只从两个类中选择例子,以便组成一个二元分类。这些例子将来自“公共汽车”和“北京汽车股份有限公司”类。“北京汽车股份有限公司”将被 0 级取代,“公共汽车”将被 1 级取代。下一步是将数据集分为训练数据集和测试数据集,分别占总类示例的 60%和 40%。
在之前的数据集准备之后,让我们一次使用所有特征来建模神经网络,然后应用测试数据集。
*# Load library*
**library**( dplyr )
*# Load dataset*
data = read.csv( "../dataset/vehicle.csv", stringsAsFactor = FALSE )
*# Transform dataset*
dataset = data %>%
filter( class == "bus" | class == "saab" ) %>%
transform( class = ifelse( class == "saab", 0, 1 ) )
dataset = as.data.frame( sapply( dataset, as.numeric ) )
*# Spliting training and testing dataset*
index = sample( 1:nrow( dataset ), nrow( dataset ) * 0.6, replace = FALSE )
trainset = dataset[ index, ]
test = dataset[ -index, ]
testset = test %>% select( -class )
*# Building a neural network (NN)*
**library**( neuralnet )
n = names( trainset )
f = as.formula( paste( "class ~", paste( n[!n %in% "class"], collapse = "+" ) ) )
nn = neuralnet( f, trainset, hidden = 4, linear.output = FALSE, threshold = 0.01 )
plot( nn, rep = "best" )
Figure 1. Neural Network MultiLayer-Perceptron
*# Testing the result output*
nn.results = compute( nn, testset )
results = data.frame( actual = test$class, prediction = round( nn.results$net.result ) )
*# Confusion matrix*
**library**( caret )
t = table( results )
print( confusionMatrix( t ) )## Confusion Matrix and Statistics
##
## prediction
## actual 0 1
## 0 79 0
## 1 79 16
##
## Accuracy : 0.545977
## 95% CI : (0.4688867, 0.6214742)
## No Information Rate : 0.908046
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.1553398
## Mcnemar's Test P-Value : <0.0000000000000002
##
## Sensitivity : 0.5000000
## Specificity : 1.0000000
## Pos Pred Value : 1.0000000
## Neg Pred Value : 0.1684211
## Prevalence : 0.9080460
## Detection Rate : 0.4540230
## Detection Prevalence : 0.4540230
## Balanced Accuracy : 0.7500000
##
## 'Positive' Class : 0
##
不含 PCA 的结果
似乎我们得到了一些结果。首先,看看混淆矩阵。基本上,混淆矩阵表示有多少例子被分类。主对角线显示正确分类的实例,次对角线显示错误分类。在第一个结果中,分类器显示自己非常困惑,因为它正确地分类了几乎所有来自“saab”类的示例,但它也将大多数“bus”类的示例分类为“saab”类。加强这一结果,我们可以看到,准确性的价值约为 50%,这是一个非常糟糕的分类任务的结果。该分类器基本上有 50%的概率将新实例分类为“汽车”类,50%的概率分类为“公共汽车”类。类似地,神经网络为每一个新的例子抛硬币来选择它应该分类到哪个类别。
让我们看看 PCA 是否能帮助我们
现在,让我们对数据集执行主成分分析,并获得特征值和特征向量。实际上,你会看到来自 R 包的 PCA 函数提供了一组已经按降序排序的特征值,这意味着第一个分量是方差最高的那个,第二个分量是方差第二高的特征向量,以此类推。下面的代码显示了如何根据特征值选择特征向量。
*# PCA*
pca_trainset = trainset %>% select( -class )
pca_testset = testset
pca = prcomp( pca_trainset, scale = T )
*# variance*
pr_var = ( pca$sdev )^2
*# % of variance*
prop_varex = pr_var / sum( pr_var )
*# Plot*
plot( prop_varex, xlab = "Principal Component",
ylab = "Proportion of Variance Explained", type = "b" )
Figura 02. Percentage of Variance from each Principal Component
*# Scree Plot*
plot( cumsum( prop_varex ), xlab = "Principal Component",
ylab = "Cumulative Proportion of Variance Explained", type = "b" )
Figure 03. Cumulative sum of Variance
stats 默认包中的本地 R 函数“prcomp”执行 PCA,它返回所需的所有特征值和特征向量。第一个图显示了每个特征的方差百分比。可以看到,第一个分量的方差最大,约为 50%,而第八个分量的方差约为 0%。因此,这表明我们应该选择前八个组件。第二张图显示了方差的另一个角度,尽管所有方差的累积和,您可以看到前八个特征值对应于所有方差的大约 98%。事实上,这是一个相当不错的数字,这意味着只有 2%的信息丢失。最大的好处是,我们从一个有 18 个特征的空间转移到另一个只有 8 个特征的空间,只损失 2%的信息。毫无疑问,这就是降维的力量。
既然我们已经知道了将构成新空间的要素的数量,让我们创建新的数据集,然后再次对神经网络建模,并检查我们是否获得了新的更好的结果。
*# Creating a new dataset*
train = data.frame( class = trainset$class, pca$x )
t = as.data.frame( predict( pca, newdata = pca_testset ) )
new_trainset = train[, 1:9]
new_testset = t[, 1:8]
*# Build the neural network (NN)*
**library**( neuralnet )
n = names( new_trainset )
f = as.formula( paste( "class ~", paste( n[!n %in% "class" ], collapse = "+" ) ) )
nn = neuralnet( f, new_trainset, hidden = 4, linear.output = FALSE, threshold=0.01 )
*# Plot the NN*
plot( nn, rep = "best" )
Figure 04. Neural Network with new dataset
*# Test the resulting output*
nn.results = compute( nn, new_testset )
*# Results*
results = data.frame( actual = test$class,
prediction = round( nn.results$net.result ) )
*# Confusion Matrix*
**library**( caret )
t = table( results )
print( confusionMatrix( t ) )## Confusion Matrix and Statistics
##
## prediction
## actual 0 1
## 0 76 3
## 1 1 94
##
## Accuracy : 0.9770115
## 95% CI : (0.9421888, 0.9937017)
## No Information Rate : 0.5574713
## P-Value [Acc > NIR] : < 0.00000000000000022
##
## Kappa : 0.9535318
## Mcnemar's Test P-Value : 0.6170751
##
## Sensitivity : 0.9870130
## Specificity : 0.9690722
## Pos Pred Value : 0.9620253
## Neg Pred Value : 0.9894737
## Prevalence : 0.4425287
## Detection Rate : 0.4367816
## Detection Prevalence : 0.4540230
## Balanced Accuracy : 0.9780426
##
## 'Positive' Class : 0
##
嗯,我想我们现在有更好的结果了。让我们仔细检查一下。
混淆矩阵这次显示了非常好的结果,神经网络在两个类中都犯了较少的错误分类,这可以通过主对角线的值以及准确度值约为 95%看出。这意味着分类器有 95%的机会正确地分类一个新的看不见的例子。对于分类问题来说,这是一个完全不差的结果。
结论
降维在机器学习中起着非常重要的作用,尤其是当你处理成千上万的特征时。主成分分析是顶级的降维算法之一,在实际工程中不难理解和使用。正如我们在这篇文章中看到的,这种技术,除了使特征操作的工作变得更容易之外,还有助于改善分类器的结果。
最后,第一个问题的答案是肯定的,事实上主成分分析有助于改善分类器的结果。
下一步是什么?
正如我之前提到的,还有其他可用的降维技术,如线性判别分析、因子分析、Isomap 及其变体。ideia 正在探索每种方法的优点和缺点,并检查其单独和组合的结果。LDA 结合 PCA 会改善分类器的结果吗?好吧,让我们在接下来的帖子里研究一下。
完整的代码可以在我的 git hub 仓库和数据集上找到。(https://github.com/Meigarom/machine_learning
感谢你花时间阅读这篇文章。我真的很感激,随时欢迎反馈。
一会儿见。
假人的降维第 2 部分:砌砖
你知道吗,我们通常取笑那些出现在电视上或其他场合的人,他们自信地谈论他们实际上一无所知的事情,却忘记了我们在头脑中做着完全相同的事情:我们处理我们无法明确定义的问题,我们试图用我们确实不知道它们如何工作的工具来解决它们,我们认为知道一个概念的名称就等于理解了它。
你不能指望在没有首先确保下面所有九层的刚性的情况下建造第十层。你不能指望在没有掌握所有基本概念的情况下就能理解一个概念。为此,我们将在本文中为我们的理解建立必要的基础。
从零开始重新发明轮子是徒劳的——那会填满厚厚的书。但我至少假设你对线性代数和统计学有基本的了解。同样,在你读完《T4》第一部之前不要继续。
你卷起袖子了吗?
楼层#1 —内部(点)产品
点积就是那条红色线段的长度。就这样。
但是最简单的事情通常有最大的影响。当我告诉你之后我们所做的一切都可以用点积来解释时,你可能会感到惊讶。这样做的一个原因是,点积可以用多种方式来看:
- 是矢量(或点) a *,*在定义的线上的投影长度单位矢量 b 。
- 沿定义的直线到 a 的距离最近。
- 它是矢量 a 包含在 b 方向中的‘量’或分量。
- 它衡量的是 a 与 b 的接近程度(就角度而言)。
甚至它的计算看似简单:如果 a =(1,2), b =(0.8,0.6),那么这个运算可以用矩阵乘法来完成:
If you don’t know where this came from, watch this.
类固醇上的点积
现在我们唯一的向量又多了三个朋友,我们需要组织一个聚会,把他们都投射到线上。如果我们用下式表示我们的矢量和单位矢量:
然后我们可以再次利用矩阵乘法**的简洁来得到每个向量对应的在单位向量b上的每个投影长度:**
其中 p 是每个点(向量)的投影长度。
地板# 2——外部产品
这一切都很好,直到你意识到点积给出的只是线段的长度,而不是表示它的向量。
为了求出矢量,单位矢量乘b)的点积:********
类固醇的外部产物
现在看看当我们注射类固醇时会发生什么,就像我们注射点积一样,也就是说,当我们有多个向量时:
我们要找到 w 1、 w 2、 w 3、 w 4。记住,它们是代表每个点在单位向量 b 上的投影长度的向量:
虽然看起来很复杂,所做的只是用每个投影长度 ( p 1, p 2, p 3, p 4),依次缩放单位向量 b ,并将这些缩放后的向量按行存储在矩阵 W 中。
现在,我们可以将代表投影长度的矢量 p 和矢量 b (我们投影的单位矢量)之间的外积定义为:
这给了我们“投影向量”,每行一个。****
第三层——翻转垫子,变成一只猫
当你遇到困难时,问问你的猫。如果它像上图那样侧着头,那么它想告诉你一些事情:
“换个角度看问题,你会发现许多有趣的事情.”
或者“喵”。无论如何,让我们看看我们能做什么。假设我们有以下由 3 个示例(天)和 2 个要素(城市)组成的微小天气温度数据集,以及它的矩阵表示和 2D 散点图:
这并不特别鼓舞人心。但是如果我们像猫一样歪着头看矩阵:
我们对数据集有了完全不同的解释。现在我们的矩阵有 2 个点和 3 个维度。看起来是这样的:
完全理解这意味着什么至关重要:
- 新矩阵将日期(示例)作为轴,将城市(特征)作为点**。旧的是反过来的。******
- 新矩阵中的每一行都是三维空间中的一个点。
- ****第一行包含每个示例(天)的 x 坐标,每列一个。这意味着第一个点的 x 、 y 和 z 坐标分别是旧矩阵中第 1 天、第 2 天和第 3 天的 x 坐标的值。同样,第二行有 y。
- 如果我们有超过三天的时间(示例),新矩阵将需要一个 4+维的图。然而,仍然只有两个点,代表它们的向量将定义一个平面,我们可以很容易地在纸上画出来:
Three points define a plane: The origin, point x and point y.
所以从现在开始,我们只画那个平面。如果我们并排绘制平面和原始散点图的图,我们就得到了所谓的双标图:********
The scatter plot is called the variable space. The plane mentioned above is in the dual space.
4 楼——一个广阔的新世界
现在我们可以探索双重空间的广阔新世界。为了更好地理解它,我们必须看到两个世界之间的联系:
Red vector x represents the x-coordinates of the examples. Blue vector, y.
权利要求#1: 数据集在x-方向的 方差 是矢量 x 与自身的点积。同样适用于 y 。**
索赔#2 :数据集的 协方差 是两个向量的点积。
哇哦。
这些说法需要严肃的理由。
五楼——焕然一新
****让我们达成共识,让我们的生活变得更轻松:我们将要处理的所有数据集都是以均值为中心的。这意味着我们从每个点减去每个特征的平均值,这样数据集将在原点居中。这根本没有改变我们数据的结构,但是简化了计算。
1.差异
**在对偶空间中,矢量 x 的分量是每个例子的 x 坐标,即 Vx =( x1,x2,x3 )。同样, Vy =( y1,y2,y3)。记住沿 x 的方差是 x 坐标与其平均值的均方差。但是因为平均值是零,它将是:
但那正是矢量 x 与自身的点积,或者,等价地,它的平方长度:
为了使事情变得简单,我故意忽略了因子 1/3,因为我们现在只对量的关系感兴趣。
2.协方差
****还记得在第一部分中,我们将协方差解释为**一种从一个变量预测另一个变量的精确度的度量。**把这个用数量术语来说,我们假设最简单的一种关系: y 是 x 的某个倍数,或者 y=mx (一条穿过原点的线)。我们的变量越忠实地展现这种关系,协方差就越大,反之亦然。
如果你仔细观察权利要求#2 上面的动画,你会发现数据偏离直线,越多,两个向量之间的角度就越大,因此的点积就越小。因此,点积是协方差的一个非常自然的度量。
一个小小的观察会让你意识到这完全有道理。记住 Vx =( x1,x2,x3) 和 Vy =( y1,y2,y3 )。如果数据遵循线性关系( y=2x ,那么 Vy =(2 x 1,2 x 2,2 x 3)=2 Vx 。也就是说,向量是彼此的标量倍数,它们共线,点积最大。****
我们现在可以通过定义以下内容来正式表述这一主张:
3.协方差矩阵
方差和协方差都只是点积,可以用一个矩阵来概括:
Obviously, cov(x, y) = cov(y, x). So the matrix is symmetric.
4.一般化
将这个想法扩展到数据集中的 3 个以上的点是简单的。我们将需要 4+维绘图来表示示例,但是对于两个特征、 x 和 y 仍然只有两个向量,并且它们将定义一个可以容易绘制的 2D 平面,并且执行点积。同样的想法仍然成立。
砖房
在这一点上,我们的地板是砖做的。你不能住在砖房里,对吗?不。我们要结束了。我们需要一个屋顶来观察我们如何将这些想法结合到一个框架中来解决 PCA 问题。
这正是我们在第 3 部分中要做的。
虚拟模型的降维第 3 部分:连接点
这是一切都到位的地方。
回到第 1 部分 & 第 2 部分,我们看到我们的最终目标是找到这些定义最大方差方向的向量。鉴于我们目前所了解的情况,这个过程现在才有意义。
我假设你知道线性变换,特征向量和特征值的基础知识,因为没有必要重复已经完全建立的东西。但是如果你需要一些洞察力,请看这个很棒的教程。
让我们开始吧。
你想要什么?
你不能解决一个你没有明确定义的问题,这就是为什么我们应该考虑我们通过寻找最大方差的方向到底意味着什么。开始问自己什么是方差是很自然的。
正如我们之前看到的,沿 x 轴的方差是该轴表示的特征的方差,即数据集的 x 坐标的方差。为了将这个概念推广到空间中的任何线,一个简单的观察是适当的:
数据点的 x 坐标仅仅是它们在 x 轴上的投影。
利用这一事实,我们可以通过将我们的点投影到代表直线的单位向量上,然后计算这些投影的方差,从而很容易地找到沿着任何直线的方差。
如果 A 是我们的( n x d ) 均值居中的数据矩阵,其中 n 是实例(点数) d 是维数(特征),而 v 是我们线的单位向量,那么
其中 p 是一个( n x 1)列向量,其中每个元素是每个点的投影长度。
现在我们有了列向量中的长度,我们可以使用 Floor #5 来求它们的方差:
突然,弹出了我们数据的协方差矩阵, C !这个非常奇怪的外观将为我们提供很大的帮助。给定我们对沿任意直线的方差的定义,我们可以通过说我们想要找到向量 v 使得 σ 是最大值来重新表述我们的问题。从上面的定义可以明显看出,这个向量仅仅依赖于 C 的值,这迫使我们仔细研究这个奇怪的矩阵。
奇怪的协方差
在上一部分中,我们了解到一个( n x d )数据矩阵有一个( d x d )协方差矩阵,即一个 2D 数据集有一个 2x2 协方差矩阵。你应该知道,一个矩阵可以看做是一个线性变换,通过剪切或者旋转将向量映射到其他向量。对于我们的协方差矩阵来说,这没有什么不同。
了解线性变换矩阵的最佳方法是查看其特征向量——这些向量不会被矩阵旋转或剪切,而只会缩放与其特征值相等的量。如果 v 是特征向量,λ是其特征值,则:
然而,协方差矩阵的特征向量具有特殊的性质。协方差矩阵是对称的,具有正交特征向量——单位长度且相互正交的向量证明。这产生了以下恒等式:
特征向量的优雅来自一个简单的事实:**空间中的任何向量都可以表示为一个矩阵的特征向量的线性组合。这种优雅背后的原因是,我们现在可以根据特征向量和特征值,计算由矩阵 *C、*表示的线性变换对任何向量 u 的影响。*这将复杂的矩阵乘法程序 C.u 转化为简单的矢量缩放。*要了解这是如何做到的,请注意,( 2 x 2)协方差矩阵有两个对应于每个维度的正交本征向量。任何向量 u 都可以用两个特征向量 v 1 和 v 2 表示为:
Where k1and k2 are scalars.
所以要找出协方差矩阵对任何向量的影响*😗
我们现在可以把我们想要最大化的量, (u^T)Cu )写成:
在最后一步中我们使用了标准正交恒等式。
大惊喜
找到最大化**【σ】=(u^t)cu***)的 u 就是找到 k 1 和k2——定义 u 的特征向量的系数。但是由于我们只关心定义最大方差线的单位向量, k1 +k2 = 1 。你现在能猜出如何最大化 σ 吗?*
关键是要注意,如果 λ1 > λ2 ,那么最大化σ的唯一方法,给定约束 k1 + k2 = 1,就是将 1 赋给 k 1,0 赋给 k 2,这样最大的特征值λ1 支配总和。
这让我们大吃一惊:
最大方差的方向是具有最大绝对特征值的协方差矩阵的特征向量。
因为如果 k 1=1 并且 k 2=0,那么u变成:
**即 u,方差最大的方向,是具有最大特征值的特征向量 v 1 本身。**对此的一个直接结论是,第二大的方差方向对应于具有第二大的特征值的特征向量,以此类推。
另一个大惊喜
更有趣的是,如果你看我们的问题陈述:
并结合 v 为特征向量的事实,则:
即
特征向量方向上的方差是它们的特征值。
现在怎么办?
好吧。我们终于找到了我们都想要的向量。现在怎么办?
如果您还记得第 1 部分中的内容,我们通过将点投影到方差最大的线上,将 2D 数据集简化为一条 1D 线。现在我们已经有了我们需要的所有量,即数据矩阵 A 、协方差矩阵 C 及其定义我们的线的特征向量 v 1 、 v 2 ,我们可以执行投影:
**
推广到更大的维度只是用额外的组件来扩充我们的矩阵。如果我们在 3D 中,协方差矩阵有 3 个特征向量, v 1, v 2, v 3 ,从最大到最小 λ 排序。但是为了更灵活地组织我们的问题,我们使用矩阵乘法的性质。我们的问题现在可以表述为:
其中 E 是方差(特征值)的对角矩阵,而 V 是特征向量的标准正交矩阵,按列排列。取任意数量的具有最大特征值的主成分(特征向量),并将我们的数据投射到它们上面以降低维数。如果我们选择 v 1 和 v 2,最大方差的平面现在由它们定义,将这些点投影到平面上相当于投影到 v 1 和 v 2 上,然后组合这些分量:
This is just an extension to projection on a line (p = Av), where v is now a matrix V of column-wise vectors.
一般程序
求协方差矩阵的特征向量的过程称为协方差矩阵的特征分解,是求解 PCA 的方法之一。这个名字来源于这样一个事实,如果我们把我们的问题陈述重新组织成:
Using the identity V^T = V^-1 for orthonormal matrices
然后矩阵 C 被分解成它的特征向量 V 和特征值 e。
我们应该选择多少个特征向量来投影我们的数据?经验法则是选择第一个 n 个特征向量,使得它们的方差(特征值)之和大于总数的 95%。
我们现在可以总结使用 PCA 降低维数的过程:
- 平均值-通过从平均值中减去每个要素来确定数据的中心。
- 求中心数据 C =(A^T)A.的协方差矩阵
- 对 c 应用特征分解。
- 按照特征值降序排列特征向量。
- 选择解释总方差 95%的第一个 n 个特征向量。
- 创建一个矩阵 V ,其中每一列都是 n 个选择向量中的一个。
- 将数据投影到由 V 定义的子空间上:
下一步是什么
*另一个非常有趣的解决 PCA 的方法是**奇异值分解(SVD)。*它类似于特征分解,但在实践中更通用、更广泛。但是这已经足够了,所以我把它留给下一部分。
降维:方法和直觉
Photo of Jupiter by NASA 360 on Facebook
在大数据应用变得无处不在后,维数灾难变得比预期的更严重。因此,对于这种高维空间,可视化和分析变得更加困难。此外,我们来自 2D 和 3D 世界的洞察力和直觉(例如,距离)不再适用。另一个问题是,当预测器的数量很高时,预测模型更有可能具有高方差,这使得模型易于过度拟合。
ّThis 的文章是关于降维技术的,这是我作为数据科学硕士生第一学期学到的。对于每一种技术,我将尝试提供直觉、标准和用例,并支持 Python 中的插图。为了简单起见,我不会深入这些技术的底层数学,但我会回顾一下我第一次研究它们时想到的问题。
主成分分析法:
主成分分析是降维技术中最流行和最广泛使用的方法之一。PCA 是一种无监督的方法,这意味着它不需要对您的数据执行任何标记。首先,您应该知道数据集中的每个要素都有一些可变性(即方差),这表明您的数据围绕平均值分布了多少。PCA 是做什么的?它得到一些线性独立的分量(即,每个分量之间的相关性为零),而每个分量是原始特征的线性组合,同时尽可能多地保留数据的总方差。因此,如果您的目标是在执行降维的同时保持数据的方差,那么 PCA 是一个不错的选择。
import numpy as np
from sklearn.decomposition import PCA
*# Generate random Data of size (n x 5).* X = np.random.uniform(size=(20, 5))
*# Number of component wanted. X after reduction will be (n x 3).* pca = PCA(n_components=3)
X_reduced = pca.fit_transform(X)
*# Portion preserved from the total variance.
# If 1, means we didn't lose any variance.* print("Portion preserved from the total variance", np.sum(pca.explained_variance_ratio_))
你也可以指定想要的最小变化量,它会为你决定组件的数量。
pca = PCA(n_components=0.90)
X_reduced = pca.fit_transform(X)print("Number of components =", pca.components_)
线性判别分析— LDA:
LDA 是一种受监督的方法,这意味着您的数据需要在降维优化函数中进行标记。为什么使用标签?LDA 旨在找到最佳方向,即投影,以减少类内可变性并增加类间可变性。换句话说,LDA 最大化了类别之间的可分性。所以在高维分类问题中,可以先对数据进行 LDA,在保持可分性的同时降低维数,然后在降维后的数据上安全地建立预测模型。需要注意的是,如果你的类的数量是 C,那么你不能把维数减少到超过 C-1 维。为什么?在优化过程中,我们处理 C 个质心点,这些质心点最多位于 C-1 维空间中,因此我们可以得到的最大投影是 C-1。
**import** numpy **as** np
**from** sklearn.discriminant_analysis **import** LinearDiscriminantAnalysis
*# Generate random Data of size (n x 5), with labels (n x 1).* X = np.random.uniform(size=(200, 5))
y = np.random.randint(low=0, high=5, size=(200, ))
*# Number of component wanted. X after reduction will be (n x 3).
# Number of classes C = 5, so max number of n_components = 4.* lda = LinearDiscriminantAnalysis(n_components=3)
X_reduced = lda.fit_transform(X, y)
因子分析— FA:
在 FA 中,有带假设的建模,有建立这个模型的标准。FA 认为在我们观察到的特征背后有隐藏的因素。每个因素都会在一定程度上影响这些特征。这种假设从一个角度来看待特性,即每个特性都有自己的可变性,可以表示为一组三种类型;普通方差、特定方差和误差方差。公共方差是几个特征之间共享的方差(即同一组因素的结果)。当特征高度相关时,这种普通方差很高。特定方差是只对特定特征有贡献的因素的影响。误差方差是在观察期间由误差源产生的方差(例如,人为误差、测量误差)。)
Factor 1&2 are the source of the common variance between features. While the others are the source of the unique variance for each feature which is divided into specific variance and error variance.
FA job 是什么?找出最大化原始特征之间已解释的公共方差的因素。
**import** numpy **as** np
**from** sklearn.decomposition **import** FactorAnalysis
*# Generate random Data of size (n x 5).* X = np.random.uniform(low=0, high=100, size=(20, 5))*# Number of factors wanted. The resulted factors are (n x 3).* fa = FactorAnalysis(n_components=3)
factors = fa.fit_transform(X)
独立分量分析— ICA:
对 ICA 最好的描述不是降维技术。最好将其描述为卷积/混合信号的分离/解混技术。ICA 的一个典型用例是“鸡尾酒会问题”,其中有独立的声源(例如扬声器)和几个用于录音的麦克风。使用麦克风的录音,可以通过 ICA 单独获得对原始声音的估计。
ICA 假设源是非高斯独立的,并且依赖于 CLT,独立随机变量之和的分布趋于高斯。在每一步,ICA 改变基向量-投影方向-并测量所获得的源的非高斯性,并且在每一步,它使基向量更接近非高斯性(主要使用梯度下降)。在一些停止准则之后,它达到原始独立源的估计。
**import** numpy **as** np
**from** sklearn.decomposition **import** FastICA
*# Generate random Data of size (n x 5).* X = np.random.uniform(low=0, high=100, size=(20, 5))
*# Number of sources wanted. The resulted sources are (n x 3).* ica = FastICA(n_components=3)
sources = ica.fit_transform(X)
多维标度— MDS:
如果您想在缩减后保留数据点之间的距离,那么 MDS 应该是您的选择。如果两个数据点在原始数据集中很接近,它们在缩减的数据集中也会很接近,反之亦然。这种方法只需要物体(点)的成对距离矩阵。所以,如果你只有这个距离矩阵,MDS 可以用来恢复你想要的维数的原始物体。
MDS 可用于在 2D 或 3D 空间中可视化您的对象,以尽可能保留原始对象之间在更高维度中的距离。
import numpy as np
**from** sklearn.manifold **import** MDS
*# Generate random Data of size (n x 5).* X = np.random.uniform(size=(20, 5))
*# Number of component wanted = 3\. X after reduction will be (n x 3).* mds = MDS(n_components=3)
X_reduced = mds.fit_transform(X)
要恢复数据的 2D 表示,请执行以下操作:
*# The recovered X will be of size (n x 2).* mds = MDS(n_components=2, dissimilarity=**'precomputed'**)# D is the pair-wise distance matrix.
X_recovered = mds.fit_transform(D)
总结:
PCA 不是唯一的降维方法,还有其他的。每一种都有其用途和目标。选择哪一个取决于应用程序。
资源:
- 英格·科赫。*多元高维数据分析。*澳洲阿德莱德大学。
- 走向数据科学:LDA 是降维技术还是分类器算法?
- stack exchange:线性判别分析如何降维?
- 因子分析实用入门。数字研究与教育研究所。
- Aapo Hyvä rinen 和 Erkki Oja。 独立成分分析:算法与应用 *。*赫尔辛基理工大学。
识别数据仓库:数据库和仓储导论
在我作为数据科学顾问的新工作中,我立即需要学习大数据系统结构。这是我的研究中的一本入门书,可以让你对关键术语有一个基本的了解和快速的掌握。
什么是数据仓库?
一、什么是广义的仓库?这是一个很大的储物空间。举例来说,数据仓库(DWH)不是亚马逊仓库,而是存储数据的数字空间。
更具体地说,创建 DWH 的过程可以看作是通过提取-转换-加载(ETL)操作将原始数据输入移动到整合的存储系统中以用于分析。
DWH 是:
- 面向主题:数据按业务主题而不是应用程序进行分类和存储。
- 集成:从不同的来源收集给定主题的数据,并存储在一个地方。
- 时变:数据存储为一系列快照,每个快照代表一段时间。
- 非易失性:通常数据仓库中的数据不会被更新或删除。
DWH 是由什么组成的?
嗯,是的,数据,但具体来说,它保存的是遗留数据或历史数据。有了这些历史数据,战略问题就可以用趋势和可视化来回答(因为人类在很大程度上非常不擅长解释表格形式的数据)。
DWH 可以通过源遗留数据将多个数据库联系在一起,从而创建这些关系模式。有了模式,DWH 将会更快更准确。
图式到底是什么?
最简单形式的模式仅仅意味着数据库中记录的定义,例如,模式可以说记录将由以下内容组成:
- PersonID(唯一索引号),
- FamilyName (40 个字符),
- 名字(40 个字符),
- 出生日期
如果您知道模式,那么您的编程就会变得容易得多,因为您确切地知道在查询数据库时应该使用什么格式。但是,千万不要将单独托付给数据库查询返回。每次都通过代码验证返回。
本质上,模式是你在数据库中定义的东西,与数据库软件本身无关。创建数据库时,必须定义表的名称、这些表中的列、这些列将保存的数据类型,以及表和列之间的关系。这是一个模式。**
什么是数据库视图?
视图很方便,原因有几个。理解视图、的最简单方法是将其视为一个普通的 select 语句(例如,SELECT NAME FROM EMP WHERE ID>3 AND CITY = " OTTAWA "),使其看起来像一个普通的表。
任何视图的基础都是 SELECT…这就是视图的创建方式。视图允许您获取复杂的 select 语句,并将它们转换成对其他用户来说看起来很干净的表格。
一个适当设计的视图还允许一个熟练的开发人员(通常是 DBA)优化一个特定的查询供其他人使用……而不需要确切地知道查询是如何进行的。最重要的是,创作者可以调整那个视图(让它更快或者修正它),现在任何使用它的人都不必改变任何东西。
视图还可以用来限制来自不同用户组的某些信息…您可能有很多数据,只有一些用户可以看到全部,而其他人只需要看到特定的信息。为这些团队中的每一个创建视图允许他们只看到他们需要的数据,而不依赖于构建许多额外的表。把这些想象成预定义的过滤器…非常方便。不过要小心!正如我提到的,视图实际上只是在引擎盖下选择的…所以对视图的构造很差的查询(因为它们看起来像普通的表!)会导致性能不佳。
*CREATE VIEW PopularBooks AS
SELECT ISBN, Title, Author, PublishDate
FROM Books
WHERE IsPopular = 1/* an example of a SQL View creation */*
Visualization of how a View is constructed from a query.
在 DWH,物化视图可用于预计算和存储汇总数据,如销售额。这些环境中的物化视图通常被称为汇总*,因为它们存储汇总的数据。它们还可以用于预先计算有或没有聚合的连接。物化视图用于消除与大型或重要查询类的昂贵连接或聚合相关的开销。*
在分布式环境中,物化视图用于在分布式站点复制数据,并使用冲突解决方法同步在几个站点完成的更新。作为副本的物化视图提供了对数据的本地访问,否则就必须从远程站点访问数据。
两者的区别在于:
- 普通视图是一个定义虚拟表的查询——表中实际上没有数据,而是通过执行动态创建的。
- 物化视图是一种视图,查询在其中运行,数据保存在实际的表中。
当您告诉实体化视图刷新数据时,它就会刷新。
示例:
- 假设您在数据仓库中有一个事实表,其中包含从图书馆借过的每本书,以及日期和借书人。工作人员经常想知道一本书被借走了多少次。然后构建一个物化视图
select book_id, book_name, count(*) as borrowings from book_trans group by book_id, book_name
,设置它的更新频率——通常是仓库本身的更新频率。现在,如果有人针对某本书对book_trans
表运行这样的查询,Oracle 中的查询重写功能将足够智能地查看物化视图,而不是遍历book_trans
中的数百万行。
通常,出于性能和稳定性的原因,您会构建物化视图——脆弱的网络,或者在非工作时间进行长时间的查询。
OLTP 与 OLAP
通常,数据每月、每周或每天从一个或多个联机事务处理(OLTP)数据库流入数据仓库。OLTP 传统上与关系数据库(RDB)相关联,而 OLAP 通常与 DWH 相关联。
在添加到数据仓库之前,数据通常在一个暂存文件中进行处理。数据仓库的大小通常从几十千兆字节到几兆兆字节不等,通常大多数数据存储在几个非常大的事实表中。
OLTP vs OLAP examples
OLAP 倾向于对大量数据(如 X 地区的销售总额)进行更多的汇总操作。我们也可以有 OLAP 模式:
Star Schema vs SnowFlake Schemas for OLAP
什么是事实或维度?
事实是你的衡量标准。(例如,如果我们为一家娱乐公司使用 DWH,您的事实可以是座位数、剧院数、售出的门票等)。维度就像你的对象或分类信息。(如剧场名称、剧场城市)。
重要的是要记住:数据库中的任何东西都是对象。
业务用户发送查询时的 DWH 高级流程:
从运营系统获取数据->集成来自多个来源的数据->标准化数据并消除不一致->以适合于在任何时间轴上从集成的来源轻松访问和分析的格式存储数据。
Example DWH Architecture / Process Flow
More detailed DWH process
什么是数据性能调优?
性能调优是非常主观的,也是一种非常开放的说法。性能调优的第一步是回答这个问题,“我们真的需要对我们的作业进行性能调优吗?”。SQL 索引是最有效的调优方法,但是在开发过程中经常被忽略。
在 ETL 阶段,大量数据被加载到 DWH 中。DBA 应该在数据库设计过程中考虑到这一点。
DBA 可以使用键聚集来确保插入的行不会在数据中创建热点。一种常见的方法是根据一个按顺序升序排列的值(比如一个标识列或一个序列)给新记录分配一个键,然后根据这个键对表进行聚集。结果是新插入的行被一起添加到表的一个部分中。
这些选项必须与索引设计相协调,因为表的物理聚集可能依赖于将其中一个索引指定为聚集索引。因为向表中添加一个代理键来聚集它必然意味着为该键创建一个聚集索引,所以这可能会影响表的索引总数。
不过,数据性能调优有点超出了本文的范围。有关 SQL 索引性能调优的更多信息,请查看https😕/use-the-index-Luke . com/
他们是处于物理记忆还是短暂记忆?
瞬态数据是在应用程序会话中创建的数据,在应用程序终止后不会保存在数据库中。
而物理内存实际上保存在 RAM 或硬盘上。
什么是数据集市?
一个数据集市包含对特定业务单位、部门或用户群有价值的公司数据的子集。通常,数据集市源自企业数据仓库。(例如,一个数据集市用于财务数据、销售数据、营销数据、社交媒体数据,另一个用于运营数据)。
Data Mart vs DWH
有很多东西需要考虑,
但是我希望这对那些刚刚接触数据库、数据仓库和系统设计的人来说是一个很好的入门。在“大数据”时代,理解数据库和 DWH 对于当今的数据科学家来说至关重要。
用深度学习发现系外行星
TWiML Talk 117
本周早些时候,我有机会与谷歌大脑团队的高级软件工程师 Chris Shallue 谈论他的项目和论文“用深度学习探索系外行星”。
订阅:iTunes/SoundCloud/Google Play/Stitcher/RSS
这是一个伟大的故事。克里斯受到他正在读的一本书的启发,一时兴起联系了哈佛天体物理学研究员,开始了一项合作和附带项目,最终导致了太阳系外两个新行星的发现。在我们的对话中,我们讲述了克里斯寻找这两颗系外行星的整个过程,包括他如何作为局外人研究该领域,他如何获取和处理他的数据集,以及他如何构建和发展他的模型。最后,我们讨论了他的项目的结果和他在这一领域未来工作的计划。
这个播客与谷歌发布 Chris 开发和使用的源代码和数据同时发布,我们将在下面链接,所以如果你听到的东西激励你深入这个领域,你已经有了一个很好的开端。这是一次非常有趣的谈话,我很高兴能与你分享!
TWiML 在线会议
查看我们的 youtube 页面,youtube.com/twimlai,,在线聚会三月版的回顾!肖恩·德夫林(Sean Devlin)对强化学习和谷歌 DeepMind 论文进行了深入的回顾,用深度强化学习玩雅达利。前往 twimlai.com/meetup了解更多信息或注册参加下个月的活动。
关于克里斯
采访中提到
- 开源寻找系外行星
- 开源寻找系外行星——代码
- 【Loon 项目
- 图像字幕神经网络
- 机器人
- 美国宇航局开普勒望远镜数据集
- 约书亚·布鲁姆——面向明星的机器学习&产品化 AI
- 在这里报名参加人工智能大会!
- 看看@ShirinGlander 的伟大 TWiML 速写!
- TWiML 呈现:系列页面
- TWiML 事件页面
- TWiML Meetup
- TWiML 简讯
Lee Rosevere 的“稍后再谈”由 4.0 版 CC 授权
原载于 2018 年 3 月 8 日 twimlai.com。
使用数据、聚类和可视化发现我的 Spotify 音乐的相似之处
音乐品味是一个人非常独特、奇特和有特色的品质。在现存的数以百万计的歌曲和声音中,我认为许多人决定发展对一种特定风格、流派或音乐“子集”的喜爱并非偶然。我们喜欢的歌曲背后是什么?他们有什么相似之处吗?它们之间有什么相似之处?更重要的是,有没有一种方法可以根据它们的发音把它们收集起来?
这篇文章描述了我第二次尝试回答这些问题。
相当一段时间以来,我一直对我在 Spotify 中收藏的歌曲感到好奇。此外,我有兴趣通过数据研究我的播放列表对我的音乐品味有何影响。幸运的是,Spotify 的 API 提供了一种叫做音频特征的东西,顾名思义,就是一首歌的特征或特点,比如声音有多大或多大声,通过它们,我探索、研究、了解了我的音乐。
在我之前的作品《T2》中,我的 Spotify 音乐很无聊吗?,我重点回答以下三个问题:
- 我的 Spotify 保存的歌曲有多多样?
- 他们有多大作用?
- 他们有多无聊?
而且我得出的结论是,我的歌确实种类繁多,很多都是器乐化的,很枯燥(基于我推导出的一个公式)。在同一个项目中,我还训练了一个监督学习模型,目的是预测一首歌是属于我的播放列表还是朋友的播放列表,准确率达到 82%。
作为这项工作的后续,我将继续探索我的播放列表的可变性概念。使用聚类算法 k-medoids 、聚类分析和我的数据集的低维表示作为工具,我使用我的 Spotify 保存的所有歌曲来研究其聚类趋势,并确定是否有可能根据音频特征将类似的歌曲分组在一起。
这个实验分为四个部分,也代表了我要研究的主要课题。
- 我应该使用的最合适的集群数量是多少?
- 数据的聚类和查看几个聚类统计的值,例如轮廓系数和聚类之间的差异。
- 聚类有多好?每个聚类中的歌曲有多相似?聚类有意义吗?
- 聚集的数据看起来怎么样?
我们开始吧!
工具
这项工作是使用 R 和 Python 完成的。聚类部分是使用 R 和包 caret 和 cluster 完成的。Python 用于通过库 Spotipy 获取数据,并通过 Hypertools 可视化数据。报告末尾提供了代码的链接。
数据
音乐数据是使用我编写的 Python 脚本获取的,该脚本获取特定播放列表中的所有歌曲及其音频特征。在清理数据集并删除不必要的东西后,我留下了一个由 563 行(每行代表一首歌)和 5 列组成的数据集,这是音频特征。这些音频功能包括:
乐器性:该值代表歌曲中人声的量度。越接近 1.0,歌曲的器乐性越强。
声音度:这个值描述了一首歌曲的声音度。1.0 分意味着这首歌最有可能是一首原声歌曲。
Liveness :这个值描述了歌曲被现场观众录制的概率。根据官方文档,“高于 0.8 的值提供了该轨道是实况的很大可能性”。
语速:“语速检测音轨中是否存在口语单词”。如果一首歌曲的语音度高于 0.66,它可能是由口语词组成的,0.33 到 0.66 之间的分数是一首可能同时包含音乐和词的歌曲,而低于 0.33 的分数意味着这首歌曲没有任何语音。
可跳舞性:“可跳舞性描述了一首曲目在音乐元素组合的基础上适合跳舞的程度,包括速度、节奏稳定性、节拍强度和整体规律性。值 0.0 最不适合跳舞,1.0 最适合跳舞”。
*该描述是从官方 文档 中复制/粘贴而来。
确定聚类的数量
当使用基于划分的聚类算法(如 k-medoids)时,找到正确的聚类数,也称为“ k ”,不知何故,是一个模糊且关键的步骤。一方面,低的 k ,例如 k=2 ,意味着数据集的所有观察值将被聚类成 2 个簇,导致大量的误差,并且很可能是难以解释的聚类结果。第二个选择,一个更大的k将会减少误差,代价是将所有的观察结果分成许多组。因此,需要一种平衡,引用维基百科“最佳选择 k 将在使用单个聚类的最大数据压缩和通过将每个数据点分配到其自己的聚类的最大准确性之间取得平衡”。
在所有已知的检测集群数量的技术中,我使用了 轮廓系数 和 间隙统计 。
剪影系数衡量的是数据观测值与其自身聚类(内聚力)的相似程度,以及与其他聚类(分离)的观测值的相似程度。剪影的值范围从-1 到 1,其中 1 表示良好的内聚性,而-1 表示对象可能位于错误的簇中。使用这种方法,我所做的是使用不同的 k 对我的数据集进行几次聚类,然后计算并平均所有观察结果的轮廓,并选择我发现最合适的 k 。
下图显示了使用 k=2 到 k=10 对数据进行聚类时的平均轮廓。
Average silhouette coefficient for different k’s
虽然图中显示 4 的 k 值产生了最好的轮廓,但是我决定选择 k=5 的轮廓,因为我有兴趣分析更多的聚类。
对于使用的第二种方法,gap statistic,使用不同的 k 对数据集进行不同次数的聚类,每次都从所谓的预期类内平方和中减去围绕类中心的类内平方和(如果您发现术语“预期”令人困惑或含糊不清,不要担心,这个词背后涉及大量的数学知识,其解释超出了本文的范围)。这种减法的结果是差距统计,一旦我们对每一个 k 都有了差距统计,并对它们进行绘图,代表绘图的“ 【肘点】 ”的那个就对应于最佳的 k 。
*下图显示了从 k=2 到 k =10 的所有间隙统计数据。喜欢剪影评分,根据差距, *k=3 或者 k=4,是最好的 k ,然而我再一次决定选择 k=5 。
Gap statistic for different k’s.
*因此,我的问题"*的答案是,我应该使用多少个集群最合适?是 5 。
现在我们已经选择了一个 k ,下一步就是对数据进行聚类。
聚类及其分析
用于聚类数据的算法是 k-medoids 。对于那些以前使用过 k-means 并且以前没有听说过或使用过 k-medoids 的人来说,我认为它们之间的主要区别在于前者可以用于任何相似性度量,而不是像 k-means 那样最小化平方距离。除此之外,在 k-medoids 中,数据集的实际数据点被用作聚类的最中心项,这与 k-means 不同,k-means 使用特征空间中的一个点来表示聚类的中心,从而使前者对异常值更加鲁棒。
下图是聚类结果的直接输出。每一行代表一个分类,每一列是关于它的一条信息。从左边开始,第一列“大小”是每个聚类的观测值数量,“ max_diss ”是最大相异度,即距离聚类的 medoid 最远的数据点之间的距离,“ av_diss ”是平均相异度,然后我们有“直径,这是同一聚类的两个点之间的最大相异度,最后,“分离”,即
Several scores about the cluster
就大小而言,簇 4 是最大的,总共有 143 首歌曲,而由 60 首歌曲组成的第三个是最小的。该聚类也是显示最高最大相异度和平均相异度的聚类。这说明,如果与其他星团相比,这个星团的内容与它的中间体或中心是完全分离的;该集群还显示了最大的分离值,这意味着它离其他集群最远,直径也最大,使其成为距离上“最大”的集群。相反,聚类 4 是具有最低最大和平均相异度、直径和分离值的聚类。
之前,我引入了轮廓系数来使用它作为一种找到好的 k 的方法。现在,我将使用它作为一种方法来检查集群的良好性。下图显示了按分类分组的每个数据点的轮廓。
Silhouette score of each cluster
图像右侧的数字是每个集群的平均轮廓。聚类 2 具有较低的轮廓(0.27),而聚类 4 具有最好的轮廓(0.55)。分类 2 也是轮廓小于 0 的观测值最多的分类,理论上,这意味着这些案例可能属于另一个分类。
根据本节介绍的所有指标,聚类 4 似乎是最好的一个,因为它具有最好的平均聚类内距离和直径,以及最高的轮廓。因此,这是我将在下一节中使用和剖析的集群之一,以实际验证该集群是否确实是好的
聚类有多好?
了解群集是否良好的最佳方式是深入其中并查看内容,看它是否相关以及是否有某种模式,例如,属于同一张专辑、同一位艺术家、相似声音或相同风格的歌曲。在这一节中,我将呈现聚类 3 和聚类 4 中的一些歌曲,此外,我将使用聚类 4 的内容进行新的聚类,以尝试找到进一步的相似性。
在上一节中,我提到了集群 4 由 143 个观察值组成,是最大的一个。在下面的列表中,我会显示属于这个集群的一些专辑,歌曲的数量,在某些情况下,我会做一个关于专辑的说明。
- 魔戒—王者归来—完整录音(限量版) : 38 首歌曲
- 星际:电影原声带(豪华版) : 12 首歌曲
- 光明之子 : 10 首歌曲;这是一个电子游戏的配乐。
- 星际:电影原声(是的,我有这张专辑的普通版和豪华版,所以有一些重复): 10 首歌
- 《疯狂的麦克斯:狂暴之路》——电影原声带 : 9 首歌曲
- 遥远世界 II:更多来自最终幻想的音乐 : 7 首歌曲;另一个电子游戏。
- 质量效果 3 : 7 歌曲;电子游戏。
- while(1 < 2) ,bydead mau 5:7歌曲;电子音乐。
- 血源性:5;受血源视频游戏启发的音乐。
- 晶体管 : 5 歌曲;电子游戏。
其余的歌曲包括坎耶西*、星球大战、一首星际歌曲的翻唱、一首来自机器人先生(一部电视剧)火星人(一部电影)缪斯、霍比特人等等。*
这组歌曲的主要音调和风格是器乐;几乎没有任何人声的歌曲。你可能注意到了,很多都是来自电影(星际、指环王)和电子游戏(最终幻想、质量效果)的原声配乐;即使是坎耶·韦斯特的那首歌,也是没有人声的器乐插曲。
让我们看看最小的集群 3。同样,我会列出专辑和歌曲数量。
- 声,由以上&超越 : 12 歌曲组成
- 音响二、由以上&超越* : 11 的歌曲*
- 巴勃罗的一生,由坎耶西 : 6 歌曲组成
- 堡垒 : 4 首歌;一个电子游戏。
- 星际:电影原声带(豪华版) : 3 歌曲
- 魔戒—王者归来—完整录音(限量版) : 3 歌曲
- 星际:电影原声带 : 2 歌曲
- 晶体管 : 2 歌曲
乍一看,这个集群似乎比前一个更加多样化(这可能是为什么它是最不相似的一个),它有一些视频游戏音乐,更多的星际,指环王*,以及一些嘻哈和说唱。但亮点在于它包含了以上&Beyond**原声专辑中的 23 首歌曲。给一点背景,这两张专辑是 Above and Beyond 的一些最著名歌曲的原声版本,我觉得奇怪的是,尽管它们是两张不同的专辑,在不同的年份发行,但根据音频功能和集群,它们遵循相同的风格。值得一提的是,第一张专辑包含 12 首歌曲,第二张专辑包含 13 首歌曲,因此集群能够捕获几乎所有的歌曲(25 首中的 23 首)。*
由于集群 3 有一点多样性,我在一个新的模型中对其内容进行了聚类,以验证该算法是否可以检测到这种多样性。我特别感兴趣的是,看看声学专辑中的歌曲,嘻哈和说唱歌曲,以及电影和视频游戏中的歌曲,是否被分配到不同的集群中。和上次一样,用的是 k-medoids,这次用的是 k=4 。
前面的图形是新簇的轮廓图。平均轮廓宽度是 0.29,比上一次的 0.40 更低更差。而且,这次还有一个得分 0.10 的真的很差的集群。下面是集群的摘要。
- 集群 1:
— 以上&超越声学专辑: 6 歌曲
—说唱: 2 歌曲
—器乐: 3 歌曲
—流行音乐、电子音乐、西班牙民谣: 1 歌曲各一首
—弗兰克·辛纳特拉(爵士): 1 歌曲 - 集群 2:
— 以上&超越声学专辑: 15 歌曲( 16 ,如果算上一张从另一张专辑复制过来的)
— 魔戒带人声的歌曲:1
— 堡垒带人声的配乐歌曲:2
— 晶体管带人声的配乐歌曲:1 - 第三组:
—说唱: 6 首歌曲
—电音: 2 首歌曲 - 集群 4:
— 星际 : 5 歌曲
— 魔戒 : 2 歌曲
我对第二组取得的结果非常满意。首先,超过一半的歌曲来自原声专辑,其他的有一些相似之处(相信我)。例如, Bastion 和 Transistor 中的歌曲是轻松的歌曲,声音柔和,带有吉他的音响效果(两张专辑也出自同一位艺术家)。《指环王》中的这首歌比前几首更欢快一些,但我认为它符合主题。
总的来说,我对聚类模型的结果感到满意。虽然聚类有时看起来很复杂,令人困惑,但我相信它能够抓住我音乐多样性的本质。在所讨论的集群中,我能够识别出几种模式,例如在一个集群中有高度器乐和管弦乐(来自视频游戏和电影),而在其他集群中有声学感觉的歌曲(吉他、一些管乐器)。关于我没有写的三个集群(来自第一个模型),其中一个显示了对说唱、嘻哈和电子音乐的关注,其余的都是垃圾(他们有所有流派和艺术家的音乐)。
形象化
当使用聚类(以及一般的数据)时,我总是想知道数据看起来是什么样的。在最后几段中,我已经谈了很多关于星团、直径、分离和一堆其他的东西,这些东西有些模糊,很难在一个人的头脑中想象出来。因此,本实验的最后一部分致力于可视化数据集和聚类。
这个项目的数据集由 5 个特征组成,如果我想制作一个所有特征的图表,我需要考虑这样一个事实,即对于我们人类来说,不可能(据我所知)体验超越三维领域的事物。一种选择是只选择 2 或 3 个特征并绘制它们,但是,我们会丢失大量信息,因为我们会丢失其他特征。老实说,在这种情况下,这并不是一个糟糕的想法,因为数据集只有 5 个维度,但是,有由数千个要素组成的数据集,在这种情况下,绘制 2 或 3 个要素不会给你一个良好的数据可视化表示。那么,我们如何解决这个问题呢?
幸运的是,有一种叫做降维的算法,它的目的是将高维数据投影到低维数据中,让我们可以做一些事情,比如将其可视化。在这些算法中,我选择使用 t-分布随机邻居嵌入(t-SNE)和主成分分析(PCA)。遗憾的是,由于它们的复杂性,我不会深入细节,老实说,我并不完全理解它们(特别是 SNE 霸王龙),所以我肯定我的解释会有所欠缺(如果有人有关于这方面的好资源,请在评论中添加它们)。
前两个图像是主聚类的 t-SNE 和 PCA 表示。
**
这两个图像显示了聚类的定义有多好,以及它们之间的重叠有多少,除了聚类 5 的一些内容似乎在聚类 2 中。在前面的章节中,提到了星团 3 的直径较大,这可以在图像中观察到,特别是在 t-SNE 星团中。如果你看一下图像的最右边部分,聚类 3 中有一个点显然在聚类 1 中,还有一个点在聚类 4 的顶部,另一个点在聚类 2 中,因此聚类 3 实际上是分散的。作为奖励,我将添加第二个 t-SNE 表示,但这次是 3D 的,虽然在 2D 有点难以理解,但它可能有助于增加对集群的额外了解。
关于对聚类 3 的数据进行的聚类,这是 SNE 霸王龙的样子。
该图的主要注释是聚类 3 的数据是如何分散的;其中 4 首歌曲在聚类 2 之上,其余的在聚类 2 之下,您可能会从讨论中回忆起,聚类 3 有 4 首来自指环王的歌曲。这 4 个点会是那些歌吗?也许吧。此外,该聚类的平均轮廓分数(0.10)是该模型中最低的一个(它具有几个负分数),因此在某种程度上期望观察到这种稀疏性。
总结这一部分,我想说的是,尽管这些图表是通过将数据从五维空间转换到二维空间(而不是用于聚类的原始数据)而创建的,但它足以产生前面部分中讨论的一些结果,并帮助我更好地理解模型中发生的事情。
结论
在这篇文章的开始,我介绍了一个好奇心,或者说是一个关于我的音乐的问题。这个问题是:“有没有可能根据音乐的音频特征在集群中找到相似的音乐?”为了回答这个问题,我把这个问题分成了 4 个不同的步骤。首先,使用轮廓系数和间隙统计,我能够确定一个合适的值 k 。随后,使用 k-medoids 对数据进行聚类,并对聚类的结果(例如,每个聚类的直径、分离度和相异度)进行解释。然后,在所有集群中,选择其中的两个来手动验证其内容。其中一个主要是由视频游戏和电影配乐组成的。第二个更多样化;它有说唱歌曲、原声歌曲、器乐歌曲和更多来自电子游戏的音乐。使用第二个聚类中的所有音乐,创建了一个新的模型来研究是否有可能将上面提到的每种音乐风格放在单独的聚类中。结果是积极的。大多数原声歌曲属于同一类,而说唱音乐则属于另一类。最后,聚类被可视化,让我们清楚地了解它们的样子,除此之外,我还能够指出在聚类分析部分观察到的一些模式。
我对这个项目取得的成果感到满意。首先,这是一件有趣的事情。我能够更多地了解我的音乐模式,回答我脑海中的一些问题,并重新发现一些我很久没有听过的歌曲。我相信集群本身是一个好的集群(我从来没有期待一个完美的集群),从某种意义上来说,它不是那么混乱,而且每个集群的内容之间似乎有一些相关性。这种观点可能有点偏颇,因为我是确定这些歌曲肯定相似的人,但这是基于我的音乐品味,我的耳朵,以及我想从中获得积极结果的愿望。如果我决定继续从事这项工作,我想尝试不同的算法,特别是基于网格的聚类算法,如团*或基于密度的算法,如 DBSCAN。*
这个项目使用的代码,包括数据集,可以在我的 Github 上找到:https://Github . com/juandes/audio-features-unsupervised-learning
我希望你喜欢这个,并学到一些新的东西。如果您有任何问题,澄清,或发现任何不一致的地方,请留下评论。
感谢阅读:)
利用面板数据发现创新和技术对经济增长的影响
在当前快速变化的世界中,创新和技术推动经济增长的观点是不可否认的。众所周知,创新是通过引入新的东西来创造价值。在不同的环境和行业中,创新的定义可能会略有不同。例如,业务创新可能是寻找一种新的流程来提高绩效和增加产出;医学和药学的创新可能会发明新的疫苗,拯救百万人的生命;技术创新可以是设计新的机器来提高生产率。有大量的研究关注创新和技术对特定行业或领域的影响。在这篇文章中,我将利用 10 年间 84 个国家的数据来评估创新、技术和经济增长之间的关系。数据和 Rcode 可以在 my github 上找到!
这是游戏计划:
- 创建面板数据
- 描述性分析和数据可视化
- 诊断学
- 回归
创建面板数据
对于那些不知道的人来说,面板数据是时间序列和横截面的组合(例如:10 年内不同国家的数据)。所有数据均取自 2007 年至 2016 年词库公开数据集。原始数据集包含超过 195 个国家。然而,由于一些国家缺少数据,这项研究将只关注有可用数据的 84 个国家。在实践中,人们通过仔细调查这些国家在缺失年份发生的事情来填补缺失值,甚至根据可用数据建立模型(例如:时间序列)来预测缺失值。
GDP per capita
选择了三个变量来表示创新和技术水平,即专利申请(居民)、专利申请(非居民)和固定宽带用户。
专利申请是指居民或非居民在本国申请的专利数量。
固定宽带订阅数是互联网订阅数(包括高速和固定电话)。
自变量是人均 GDP 增长,即国内生产总值除以年中人口。
为了在 R 中创建面板数据,我使用了 reshape 包来融合 4 个宽数据集(4 个变量)并将它们合并在一起。
# use reshape package
install.packages("reshape")
library(reshape)# melt data from wide format to long format
melt.data <- melt(raw.GDP, id.vars = c("country.code", "country.name"), value.name = "GDP")
最终数据集如下所示:
描述性分析和数据可视化
这是 10 年间 84 个国家的面板数据。专利申请和固定宽带都有一些缺失的价值。因此,面板是不平衡的。
Figure 1: Descriptive Statistics
然而,如果没有问题的话,也就是说,在这个时期的中期,我不会忽略遗漏的观察。大部分缺失的数据要么是前两年(2007 年和 2009 年),要么是最后一年(2017 年)。在专利申请(居民)方面,中国在 2017 年申请的专利数量最多(1,204,981 项专利),而其他一些低收入群体国家每年仅申请一项专利。
Figure 2: Correlation plot on raw data and Correlation plot on data after a log transformation
根据图 2(左),固定宽带用户和人均 GDP(0.8)之间明显存在强正相关关系。然而,专利申请(居民和非居民)之间的相关性几乎为零。由于人均 GDP 通常呈指数增长,所以记录人均 GDP 可能有助于平滑数据。此外,其他变量的对数变换也有助于模型解释,因为系数基本上是弹性的。图 2(右)还显示,人均国内生产总值和其他独立变量之间存在正相关关系(见取对数后相关性如何变化)
诊断学
有几种计量经济学模型可能适用于面板数据集,如普通最小二乘法、混合模型(OLS)、带有虚拟变量的 OLS、组内固定效应(贬低)、和随机效应。
Figure 3: Heterogeneity across years of GDP per capita
请看图 3,在整个 10 年期间,人均国内生产总值有很大的波动和起伏,这表明数据集可能存在异质性。
常规汇总 OLS 回归不考虑国家组或多年时间段的异质性。通过将不同时期的不同国家混为一谈,Pool OLS 掩饰了上述国家间可能存在的异质性(个性或独特性)。所以这个模型不仅有偏差,而且不一致。
OLS 假人模型有几个缺点。首先,由于 OLS 虚拟引入了太多的虚拟变量,它失去了自由度。其次,由于模型中有许多虚拟变量,因此总是存在多重共线性的可能性。
Figure 4: Stationary test on log transformed data
由于面板数据是横截面数据和时间序列数据的组合,在这种类型的数据上建立经济模型时有几个假设。Dickey-Fuller 检验检查数据是否平稳,该检验的 p 值为 0.01,因此我们可以拒绝数据不平稳的空值。
回归
所以这里我只报告固定的和随机的影响:
固定效果
日志[PC。gdp]𝑖𝑡=𝛽1log[patent.res]𝑖𝑡+𝛽2log[patent.non]𝑖𝑡+𝛽3*log[fixed.broadband]𝑖𝑡+𝜇𝑖𝑡
library(plm)
fixed <-plm(log.GDP ~ log.patent.res + log.patent.non + log.fixed.broadband, data=data.final1, index=c("country.name", "year"), model="within")
summary(fixed)
Figure 5: Fixed Effects (demeaned) results
组内固定效应模型考虑了 84 个国家之间的异质性,不是通过虚拟变量方法,而是通过对样本均值周围的样本观察值进行差分来消除异质性。这种方法的好处是它返回一致的斜率估计值。
根据回归结果,保持其他变量不变,平均而言,专利申请量(居民)每增加 1%,人均 GDP 增加 0.0657%。同样,固定宽带用户数每增加 1%,人均 GDP 增加 0.1449%。这两个系数都具有统计学意义。然而,专利申请变量(非居民)并不显著。R 平方为 0.28,相对较低。但是,对于面板数据,R 平方通常不高。
随机效应
日志(PC。gdp)𝑖𝑡= 𝛽0+𝛽1log(patent.res)𝑖𝑡+𝛽2log(patent.non)𝑖𝑡+𝛽3*log(fixed.broadband)𝑖𝑡+𝜔𝑖𝑡(𝜔𝑖𝑡=𝜇𝑖𝑡+贵阳)
random <-plm(log.GDP ~ log.patent.res + log.patent.non + log.fixed.broadband, data=data.final1, index=c("country.name", "year"), model="random")
summary(random)
Figure 6: Random Effects results
如果附加误差项与模型中包含的任何解释变量都不相关,则随机效应可能是一个很好的模型。由于εi 是 wi t 的一个组成部分,因此误差项可能与解释变量相关。根据 Hausman 检验,如果随机效应中的附加误差项与解释变量相关,它将在给定的应用中告诉我们,随机效应模型是不一致的。因此,在这种情况下,固定效应是更好的模型。
# Hausman test
phtest(fixed, random)
Figure 7: Hausman Test
现在,我们继续固定效应模型。还有一些假设我们需要验证。
Figure 8: Breusch Godfrey/Wooldridge test
首先,Breusch Godfrey/Wooldridge 检验指出数据中实际上存在自相关或序列相关。
Figure 9: Breusch-Pagan test
此外,固定效应模型基本上是线性回归的扩展版本,因此确保数据的同质性是很重要的。我使用了 Breusch-Pagan 测试来检查同质性(线性模型假设),结果数据是异方差的。如果我们继续使用固定效应模型(贬低),自相关和异方差是需要注意的两件事。
Figure 10: The result of Robust covariance matrix estimation (Sandwich estimator)
我们仍然可以执行我们的回归分析来修正自相关和异方差的问题,以便我们的区间估计和假设检验是有效的。我们通过使用**鲁棒协方差矩阵估计(三明治估计器)**或简单的鲁棒标准误差来做到这一点。这里值得注意的是,系数在处理前后没有变化,但是标准误差和 p 值变化显著。
总之,固定效应(贬低)模型是这个面板数据集的适当模型。根据回归结果,经济增长(人均国内生产总值)与创新(居民专利申请)和技术(固定宽带用户)之间存在正相关关系。但是,模型本身和模型设置可以通过某些方式进行改进。首先,由于价值缺失和资源有限,这些数据并不完整。除了丢弃观察值之外,还有更好的方法来处理缺失值,例如输入中值或平均值。其次,自变量的选择也可以改进。R&D 支出和科学期刊数量等指标可纳入该模型。第三,不同收入群体的创新程度可能不同。创新可能有助于推动高收入国家的经济,但对低收入国家可能没有帮助。
Figure 11: Magnitude of innovation among different income group countries
图 11 表明,四个收入组的系数和截距实际上是不同的。最后,应该对专利申请制度进行更仔细的调查。一些国家实行“专利箱”政策,对专利或许可证等知识产权减税,因此高收入国家的大公司在“专利箱”国家申请大量专利。然而,这些公司实际上在本国比在申请专利的国家获益更多。
离散化。这不是一个词,但知道它的价值可以彻底改变你的决策。
决定,决定
分析的全部目的是为我们提供信息,让我们尽可能做出最佳决策。不幸的是,有时数据并不能使前进的道路变得清晰。这些困难的决定需要时间在利益相关者之间进行分类。
例如,假设你负责一个组织的营销部门,你正在测试一个特定的新活动。您选择一部分位置来展示广告,然后跟踪结果。在试用结束时,你会发现营销活动每花费 1 美元,就能为你的公司带来 4.5 美元的收入。这场运动值得推广吗?
这些类型的决策经常出现在使用分析的过程中。对于如何前进,很少有明显的答案。很明显,试验活动奏效了,但是它的效果是否足够来证明一项更重大的投资是合理的?一方面,它赚了钱!每美元 4.50 美元是一个稳定的回报,在你的业绩评估中不太可能被视为一个糟糕的决定(假设当你扩大规模时,它会显示类似的结果)。
另一方面,不仅仅是在更大的样本中表现不佳的风险,你还需要考虑如何更好地利用你的营销预算。如果你现有的营销策略每投入 1 美元就能产生 6 美元的收益,那会怎样?现在 4.50 美元的回报看起来不太好。
做决定的困难不仅仅是情绪上的负担;它耗费你公司的时间和金钱。此外,违背一个决策者的偏好以满足另一个决策者的偏好会带来政治上的复杂问题。我们如何避免做出艰难决定的漫长过程?
离散化!别费劲去谷歌了,因为你会一无所获。然而,不要因为字典里没有这个词,而让你变得更加果断。在讨论“离散化”的含义之前,让我们回顾一下两种基本的数据类型。
离散与连续数据
毫无疑问,你以前听说过这些术语,但是让我们提醒你一下,以防万一。
离散数据只适合不同的类别。这类数据的一个很好的例子是一周中的每一天。尽管星期一晚上 11:59:59 和星期二上午 12:00:00 相差一秒钟,但这几秒钟是在完全不同的日子里。其他例子包括血型、国家和流派。
连续数据是从一个值流向下一个值的度量。温度是一个很好的例子,因为有些人可能认为华氏 90 度是“热”的,而其他人认为 20 度是“冷”的,温度读数之间没有绝对的差异。
商业中永远存在的一个例子是。。。钱!说到底,无论我们做什么决定,都归结到底线,这必然是一个持续的衡量。一般来说,从离散数据中做出决策更容易。每一类都可以导致一个特定的行动过程,需要更少的讨论。
不幸的是,因为我们大部分时间都在评估投资回报,所以在做决策时,我们很可能会处理连续的数据。改变我们看待数据的方式肯定会解决这个问题,这就把我们带到了。。。
“离散化”的含义
该是笑点的时候了。
“离散化”是将连续数据离散化的机制。
如果你真的理解了这个概念,你可能会想“等一下,我们收集的数据类型本身就是离散的!数据可以是离散的,也可以是连续的,不可能两者都是!”你是对的。
但是,如果我们沿着连续的度量手动选择值,并声明它们属于特定的类别,会怎么样呢?例如,如果我们宣布 72.0 度及以上为“热”,35.0-71.9 度为“适中”,任何低于 35.0 度的为“冷”,我们就有了“离散化”的温度!我们的读数曾经是连续的,现在可以分成不同的类别。
那么,我们在哪里划分这些类别的界限呢?是什么让 35.0 度“冷”,35.1 度“中”?正是在这个关键时刻,做出了真正的决定。以这种方式应对挑战的好处在于,它是以数据为中心的,而不是以概念为中心的。让我们先在不使用离散化的情况下浏览一下我们的营销示例,然后再使用它。
您已经完成了对一项新营销活动的研究,每投入 1 美元,它就会产生 4.5 美元的收益。这个活动是你的老板营销总监的创意,他们对活动本身和结果感到自豪。
你、营销总监和营销副总裁之间召开会议,以确定该活动是否需要立即投资。您的主管敦促副总裁为该活动开绿灯;这是他们的项目,他们的鲜血、汗水和泪水表明这将有助于该组织。副总裁面临着提高营销费用利润率的压力,鉴于其他渠道的 6 美元回报,他们倾向于将资金投向其他地方。
最终,他们决定由你来决定。如果你继续这个项目,你可能会让副总裁觉得你做决定不是为了公司的利益,而是站在你的经理一边。否决这个想法,你就破坏了你和那个对你是否升职最有发言权的人的关系(更不用说每天和他们一起工作了)。
可以理解,你想尽可能小心。你需要一两周的时间来研究其他营销理念,如果资金没有投入到扩大试验活动中,这些营销理念可以用这些资金来实现。你认识的其他专业人士也会参与进来,努力帮助你做出最好的选择。
你最终决定。。。这真的重要吗?无论如何,你都在损害与关键利益相关者的关系,做出决定的过程需要时间,而时间就是金钱。
现在让我们看看,如果你把你的结果离散化,这个故事会如何发展。
在进行试验之前,你召集你、你的经理和营销副总裁开会。议程的首要任务是确定你们都同意需要达到的最低回报,以证明扩大活动规模的合理性。副总裁要求 6.50 美元,以确保这表明该部门正在提高盈利能力。你的经理平静地指着正在试用的地点,那很可能比其他人表现得更差。你的经理能够将副总裁的价格一路降到 5.75 美元作为分界点。
毫无疑问,你可以看到这将走向何方。结果显示,每一美元的花费只有 4.5 美元,远低于最低值。你只需发送一封电子邮件,通知主要利益相关者事实,并根据之前的协议停止追求新的营销策略。不需要额外的时间来考虑。
虽然你的经理可能会感到失望,但这个决定并不反映他们、他们的想法或他们的工作。它仅仅基于收集到的数据。这就是以数据为中心和以概念为中心的区别。这让所有相关人员免受政治纠纷的困扰。这是一个客观的决定,得到了所有关键利益相关者的支持。
这个过程中有一个重要的变量,它不仅对节省您和您的组织的时间和资源至关重要,而且还有助于改进决策本身!
时机决定一切
也许你听说过一个著名的实验,他们现在给孩子们一块饼干,或者在 15 分钟内给他们两块饼干。选择抑制自己追求直接回报的冲动的孩子更有可能在职业生涯中取得成功。
延迟满足对我们有益,这不是秘密。但是,它与将我们的数据离散化以帮助我们决策有什么关系呢?
将这种方法与延迟满足联系起来的基本概念是时间。几年前,科学家们创建了一个函数,该函数可以根据结果发生所需的时间来捕捉人们如何评价不同的结果:
前额叶皮层和冲动决策。金,素云,李,大韩。生物精神病学 2011 年 6 月 15 日;69(12):1140–1146
这里的要点是,人们倾向于错误地低估预期对他们影响越大的结果的价值。在我们的例子中,当研究的结果出来并且必须做出决定时,该选择的影响将在不久的将来显现。根据图表,如果你在权衡是否推进新的营销策略,你更有可能给它开绿灯。你期待很快看到回报,这意味着你更重视这个结果,而不是花时间去寻找更好的营销途径,这些途径的好处在一段时间内不会被感受到。
通过提前划定如何离散化数据的界限来做出决策,您就不太容易产生这种偏见。即使你最终为活动开了绿灯,你也会在预期直接影响之前做得很好。较少倾向于这种偏见意味着更多的客观性,因此,更好的决策。
最后让我们看一个更简单的例子来说明这个概念。在热门电视节目《一掷千金》中,参赛者会得到一个公文包,里面装着数目不详的钱。基于他们面前的箱子的价值,他们不断地被给予选择是否要卖掉他们的公文包(可能从 0.01 美元到 1,000,000 美元不等)。
一个简单的例子:还剩两个公文包,其中一个是他们自己的。其中一个箱子价值 10 美元,另一个价值 20 万美元,但参赛者不知道哪个是哪个。“银行家”为他们的案子出价 95000 美元。他们接受交易了吗?
在节目中,很多娱乐来自于观看参赛者戏剧性地考虑他们的选择,并接受他们朋友和家人的建议。因为这些参赛者将立即获得奖金,赢得这些奖金的前景会影响他们的决策。也许他们会更好地接受一笔重要的交易,但他们在想,如果他们的案子有不太可能的百万美元,那该有多好?也许这是值得的,但他们担心做出错误的决定,把钱留在桌子上,当着数百万人的面?
当我们更接近于感受这些决定的影响时,这些让我们偏离客观决策的想法很可能会影响我们。如果参赛者走进游戏时知道他们会同意的金额,这将保护他们不失去客观性。
把所有的放在一起
我们现在知道,我们不仅必须离散化我们的数据以使我们的决策更容易,而且这样做的时间和方式也是至关重要的。让我们回顾一下这个过程应该如何工作。
1.识别目标
每个组织都有具体的、可衡量的目标(或者应该有)。无论你做出什么样的决策,这些数据都应该让你的团队做好实现这些目标的准备。任何不足都不值得你付出宝贵的资源。
2.提前获得关键利益相关方的认可
最重要的决定将会受到最严格的审查。与高管团队(或任何必要的人)就如何以及为什么做出决策进行明确的沟通,不仅能让所有人达成一致,还能在事情变糟时保护你。
3.收集数据
你知道你的目标,现在是让数据说话的时候了。
4.分析并展示结果
向你的团队汇报发现了什么,提醒他们你之前设定的目标。
5.执行决定
这是现在最容易的部分。鉴于从您的数据收集中获得的洞察力,每个人都同意采取行动,剩下的只是简单地坚持到底。
如果在进行“交易或不交易”之前,参赛者认真考虑了将显著改变他们生活的金额,他们可以酌情处理提供给他们的潜在交易。他们不会被聚光灯或观众、朋友和家人的催促而动摇。他们会冷静地打开案例,立即拒绝低于目标的交易,并在交易足够时立即接受交易。
这种快速、客观、不带偏见、不带感情色彩的决策过程会让这一集变得相当无聊。也许这就是为什么没有基于决定性数据分析师的真人秀节目。
本文原载于www.strataquant.com