大学需要教授的关于数据科学/分析的 4 件重要事情
从数据收集、预处理到非技术交流,这些都是专业人员处理数据的重要技能。
Photo by Pang Yuhao on Unsplash
如果你在阅读这篇文章时遇到任何困难,你可以通过下面的链接访问我的网站,绕过 Medium 的付费墙
数据分析师
www.bobbymuljono.com](https://www.bobbymuljono.com/)
尽情享受吧!
问题是
我记得我在本科时做的分析和机器学习项目,教授们希望我们通过在学期的最后几周实施课堂上教授的统计和机器学习概念来制作演示文稿和科学报告。这些项目有一个共同点:我们要选择容易获得的数据集。通常来自卡格尔。不要误会我的意思。Kaggle 是一个极好的公共数据来源,也是一个展示数据科学技能的竞赛网站。但这些数据是为您准备的,只需要最少的预处理,更多的是为了完善您的算法,以达到排行榜中的前 N 分。在数据科学/分析领域寻找工作的应届毕业生最有可能具备扎实的编程技能,也许有一些实习和多个在校项目经验。他们写了一份简短而甜蜜的简历,更新了他们的 Linkedin,可能还有他们的 Github 知识库,开始像发传单一样发出去,参加了几次面试,却收到了多次拒绝。
对于任何积极找工作的人来说,被拒绝是再正常不过的事情了。但是他们需要反思这些拒绝,并从中成长。为此,我向你们展示了邓宁-克鲁格效应。
邓宁-克鲁格效应是不言自明的,但请允许我把它放在数据科学和分析的背景下,以帮助那些在这个领域寻找工作的人比其他人更有优势。
数据收集
所有数据科学家和分析师都受雇于各自的公司,提供统计见解和商业智能。有些公司会有一大堆 excel 电子表格,里面有成千上万的观察数据,随时可以为你提供任何形式的可视化或预测性分析。有些人对他们想要的东西有明确的要求,但有些人没有。问题是:
许多学校没有训练我们制定与数据相关的业务问题,并为现有产品或服务提供解决方案。我们如何提出从头开始解决业务问题的数据收集方法?
Photo by Milan Seitler on Unsplash
想象一下,你被告知你的客户对你公司的服务感到不满意已经有一段时间了。你打算如何解决这个问题?解决你的问题需要哪些数据?你打算怎么跟你的老板说?这是应届毕业生的问题。我们太习惯于被填鸭式地提供现成的数据,以至于我们往往会忽略作为数据分析师/科学家的一个最重要的部分:**能够从零开始制定多个变量,并提出收集方法来帮助您的数据后处理工作。**这个例子有很多角度。从简单的以自然语言处理(NLP)的自由文本形式收集客户反馈,到多个定量变量,如评级、投诉时间、客户年龄等。
在数学专业,重点在于你对统计测试或模型拟合的理解。因此,提供被设计成具有一些高度相关的变量以便于推断的数据是有意义的。
以曾经流行的波士顿房价数据集为例。它们让您感到满意,因为您的模型具有很高的预测能力。
**我的建议:**开始一个自己的小型个人项目,包括为自己收集数据。也许你对通过提取多个航班的价格来预测机票价格感兴趣这里。也许您对使用 NLP 将您自己的电子邮件收件箱分成多个类别感兴趣。您可以将数据科学应用到日常生活中,这有无限的可能性。不要局限于你学校提供的材料。现实世界的问题需要现实世界的数据。最后但同样重要的是,与公众分享你的项目!你永远不知道潜在的雇主是否会挖走你的工作!(附:我正在做一个涉及数据科学的个人项目!敬请关注!)
数据预处理
假设您可以访问公司的数据集市,将数据作为数据帧导入 R 或 Python 脚本。你有 X 个变量,由你决定执行任何你想要的分析或机器学习。在学校,分析要求很可能已经为你准备好了,数据不需要任何预处理。学生们如此习惯于被提供学习资料,以至于他们可能没有意识到真实世界的数据是多么不完善。人类收集的数据可能会出现错误。某些缺失条目是不可避免的。自由文本中必然会出现拼写错误。来自不同数据源的日期可能采用不同的格式。不胜枚举!
你的数据对于分析或机器学习的价值取决于它的质量。删除那些异常值,根据您的判断删除/替换那些丢失的数据,创建您认为可能对您的项目有帮助的新变量,确保数据集在需要时是标准化的,等等。始终假设您最初看到的数据需要清理!
我的建议:【Kaggle 的某些公共数据源提供尽可能原始的数据集。以波士顿 Airbnb 数据为例。他们有一个包含 95 个变量的 csv 文件!有些缺少数据,有些变量看起来没有用,这取决于你要回答的是什么样的商业问题。因此,将该数据集作为预处理练习,同时磨练您的商业意识!
数据管道
如果您的代码以下列开头:
# For python
import pandas as pd
df = pd.read_csv(“dataset.csv”)# For R
df <- read.csv("dataset.csv")
然后——就像我一样,您从数据集市中手动提取数据,并在脚本中完成所有的数据处理/转换。这是对数据分析师的基本要求。当您需要从多个来源检索数据时,从数据集市中手动提取 CSV 文件的任务可能会令人望而生畏。
数据科学家超越了仅仅读取 CSV 文件的概念,他们不仅在脚本中花费了大部分数据预处理时间,而且还与数据工程师一起建立了一个可靠的 ETL 数据基础架构,用于从多个来源高效导入干净和标准化的数据。
Traditional ETL Process (Source: Panolpy)
一个好的 ETL 基础设施的重要性是如此重要,以至于数据库系统的知识和 SQL 数据库查询的熟练程度对数据科学家来说是如此重要,也许对他们的机器学习知识同样重要。
Deeper look in the ETL Process (Source: Panolpy)
学校通常有关于数据库系统的独立课程,这为学生提供了一个很好的机会来磨练他们的 SQL 技能,并用基本的关系数据库概念设计数据库系统。但是同样,设计数据库的场景是在任务或项目中提供的,对“客户”想要什么有明确的要求。在现实世界中,有时候提出问题比解决问题更难。您的业务或客户需求可能非常模糊,设计符合他们需求的数据库取决于您的创造力。这个表模式需要哪些变量?数据库系统需要哪些表来满足客户的需求?哪些变量需要清理和标准化?我如何将我的脚本与数据库集成,以提供移动分析和机器学习解决方案?
从您自己的数据库中检索数据可能不是您需要做的唯一导入工作。学习如何从 API 中检索数据是非常重要的,因为这是解决任何业务问题所必需的。
只是一个简短的免责声明,我不是一个有经验的数据科学家来提供关于数据管道的准确信息,所以我为这部分的任何错误信息道歉。
**我的建议:**即使你刚开始是一名数据分析师,也要掌握一些关系数据库和 SQL 技能,这样你就可以跳过为项目手动打开 CSV 文件的过程。我受过这方面的正规教育,但我建议任何 SQL 新手和希望掌握这一技能的人去 Coursera 或 Udemy。我目前注册了 Udemy 的 完整的 SQL 训练营 课程,只要我想为任何即将到来的项目更新我的基本 SQL 知识。最重要的是,问问自己如何将脚本与 SQL 数据库集成,以实现无缝数据导入。
沟通
不管你是数据分析师还是数据科学家。如果别人看不到你的工作的价值,你的工作就几乎毫无意义。在学校,我们被教导通过 p 值来解释假设检验的重要性。如果你在进行假设检验后的第一反应是:“由于 p 值小于 0.05,我们拒绝零假设并得出结论,那么不管你是在进行卡方检验、克鲁斯卡尔沃利斯检验、威尔科森符号秩检验还是任何其他假设检验。”,那你就有坏消息了。事实是,如果你的顶头上司没有技术倾向,他/她就不会关心 p 值或假设检验。他/她不在乎你使用什么统计测试或机器学习算法,只要你能够用正确的推理回答他们的商业问题。
Photo by You X Ventures on Unsplash
是的,他们可能会感谢你通过使用你的统计和机器学习工具箱所付出的努力,但如果他们不理解你的解释的意义或看到你的发现中的任何价值,他们可能不会充分利用你的工作来改善他们现有的产品或服务。
如果你能揭开你的工作的神秘面纱,让一个十几岁的孩子能够理解它的意义,那么很有可能你的顶头上司也会这么做。
让我们看一个简单的例子。假设您的任务是确定商场 X 中商店 A 和商店 B 之间的顾客流量,这两家商店都专营运动服装。自然,您会想要确定流量的分布并检查其正态性,然后对您的假设进行适当的统计测试。现在你要向你的顶头上司汇报你的发现。
统计学专业的应届毕业生可能会说:“我发现商店 A 和 B 的客流量呈正态分布,在进行了 5%显著性的简单 t 检验后,我得出结论,两家商店的平均客流量不同。看条形图,A 店客流量比 b 店高。”
另一方面,一位经验丰富的分析师将简化调查结果,并进一步增加陈述的价值,“从统计上来说,商店 A 在大多数时间比商店 B 有更高的流量。但是,我们需要理解为什么 A 店比 b 店吸引更多的顾客,是鞋子的设计吗?是店铺的室内设计还是提供比 B 店更有吸引力的促销优惠?我们和市场部讨论一下这件事,收集一下他们的想法。或许他们能给我们一些启示,告诉我们如何将 A 店的某些成功之处融入到我们的产品中。”
看出区别了吗?一个有经验的分析师知道如何根据产品经理想要听到的来说话,而不是用技术术语来迷惑他们。许多产品经理希望对你的发现有简短但有价值的见解。如果需要,只解释你的工作流程。
我的建议是:尽可能在工作之外以课程的形式学习沟通方面的软技能。如果你还是大学生,找些销售工作或者教书的工作。这些工作需要你把信息咀嚼成小块,这样你的客户/学生才能理解你的解释。
结论
邓宁·克鲁格效应是一个真实的现象,不管他们学的是什么专业,在应届毕业生中普遍存在。你的学校为你进入职场提供了充足的资源。然而,你的学习并没有在你大学生活的最后几天停止。参加外部会议,参加在线课程,与志同道合的人交流。你会惊讶自己有多不知道!
这可能是为什么大多数数据科学家的职位要求至少有硕士学位和至少 5 年的工作经验。
保持对知识的渴望!
从潜在数据战略家身上学到的 4 条经验
数据科学的革命总是基于数据作为战略决策者的力量。有趣的是,无论我盯着我的 SQL 表看多长时间,它都听不到它告诉我该做什么。这打破了一个基本的误解,即数据本身是某种能够告诉我们需要做什么和如何做的先知。
对于任何普通的数据科学家、统计学家或工程师来说,这似乎很直观。尽管如此,许多期待消费基于数据的信息的人对其价值做出了许多错误的假设。虽然这些假设通常是无害的,但当数据本身被视为权威来源时,它们会产生焦虑。这种考虑忽略了一个事实,即数据的解释者和传播者与数据本身同样相关,如果不是更相关的话,并产生了一种错误的精神气质,认为结果是“数据驱动的”,而不是由那些使用数据的人驱动的。
事实是,数据本身就是信息。数据是“背景现实”的表示,它解释了在观察环境的背景中的环境的某些因素。数据之所以有价值,是因为它帮助我们做出更明智的决策,因为我们对决定“好决策”的因素有了更好的理解。
最终,不是数据告诉我们该做什么,而是那些解释和交流数据以及从中得出的见解的人。换句话说,**数据具有潜力,最终必须由数据战略家来发掘。**分析背后人的因素的重要性吸引我开始了数据分析师和数据战略家的职业生涯。在这个过程中,我有机会成为公司战略、咨询和投资管理方面的分析师。
随着我探索从大学水平的实习和合作到数据分析职业的跳跃,我试图更好地理解什么是完整和有效的数据战略家。以下是我发现对数据战略家来说很有价值的技能和特质:
1。理解你的分析中的数学可以大大提高它。
数学在加强特定分析方面有着巨大的效用。从简单地应用膨胀和缩放数据到理解两个变量之间的理论关系,理论数学在揭示关系方面提供了背景和效用,否则很难发现和找到更有见地的方法来呈现数据。能够理解与您正在执行的特定分析相关的数学有双重好处:提高分析的质量,并显示对行业特定因素的深入了解。例如,理解资产价格的一阶和二阶衍生追踪工具的效用可以帮助开发领先指标,并在向经理演示时,从财务和行为角度展示对购买/出售压力和资产价值之间关系的深刻理解。此外,深入理解分析中潜在的数学知识有助于你以一种没有数学专业知识的人也能理解和欣赏其用途的方式来解释它。
2。考虑你的研究的战略意义,使它独立存在。
每个潜在的数据战略家在开始一个项目时都相信知道结果最终会带来战略利益。困难的部分是在整个项目中保持对潜在利益的清晰认识。在任何具有战略效用的项目中,观察结果可以用于行动和后续步骤,无论是直接行动还是收集更多信息。能够预见这些行动和你的发现的潜力,让你有动力超越数据和分析,想象更大的图景。在你的工作潜力中找到令人兴奋的地方可以激发你想得更大,这通常会让你产生更有影响力和相关性的工作。毕竟,如果你不相信自己工作的重要性,你怎么能指望你的经理相信呢?然而,另一方面是知道什么时候你的结果不再导致不能转化为行动的观察。很难不过度依赖,但能够认识到效用是生产与瘫痪的区别。有什么比展示一个项目,而你的唯一反应是“那又怎样?”?
3。提供基于上下文的解释为那些消费你的分析的人产生更多的价值。
当我第一次开始为雇主做严肃的数据分析项目时,我尽最大努力保持我看待数据的客观性。我努力尝试把数据点当作数据点,忽略我的变量运行的环境。在这样做的时候,我认为我可以以某种方式分离出这些变量之间真实的、量化的关系,而不是追逐预期的关系。我很快发现,描述真空中的变量的抽象术语对于那些打算将结果转化为对变量代表什么的全面理解的人来说毫无用处(这些方面正是我努力忽略的)。我认识到,最终,相关性和趋势之类的东西只对那些观看我的作品的人重要,因为我的作品为他们提供了更多关于他们所处理的因素的知识。我面对的现实是,数据分析的能力取决于它所提供的背景知识,反过来,我变得更善于迫使自己将自己的工作与某人的观点联系起来,这些人将我的结果视为有关财务和企业战略的信息来源,而不是有关抽象描述的数据点的信息。
4。在交流结果和建议时掌握热门话题可以提高你的可信度。
在大多数分析项目的结尾,是时候展示结果和建议了。我已经提到了提供背景、解释战略观点以及解释分析中使用的数学和分析概念的重要性。但是,我学到的东西(我没有提到)是我对我正在分析的主题的了解,无论是债券、公司、公司战略、投资等等。,决定我的分析在我要介绍的人眼中的合法性。简单来说,如果我不能展示出对听众话题的把握,听众会怀疑我对分析的把握。虽然不幸,但这是有道理的。听众的目的是评估你作为演讲者的可信度,对他们来说,最简单的方法就是评估你对他们专业领域的理解。这巩固了第 2 课和第 3 课的重要性,因为研究和学习意味着上下文和战略理解,呈现出专业知识的光环。
虽然我对数据分析和策略职业的尝试才刚刚开始,但我发现这些课程对我作为分析型思考者的成长和发展是最重要的。我当然希望继续学习,并不断完善我未来从事的每个项目的方法。
感谢阅读!
4 从向领导层展示指标中吸取的经验教训
促使领导层采取行动
风险投资公司红杉资本(Sequoia Capital)在他们在媒体上的数据科学出版物中,将数据科学定义为“一门使用数据提取知识和见解的科学和求真学科。没有定义和跟踪好的度量标准,很难获得有意义的见解。然而,“s 意味着只有统一的标准是不够的。如何使用它也同样重要。它必须由高层领导部署,以确定并告知哪些目标和指标是重要的。换句话说,指标需要是可操作的。
但是我不想写另一篇关于创建可操作的度量而不是虚荣度量的文章。相反,我打算分享我个人在展示指标方面的进步,让领导层相信数据,并对他们做出基于数据的决策感到放心(甚至自信)。
Photo by You X Ventures on Unsplash
为什么要做出基于数据的决策?我们都有自己的偏见,而偏见让我们的直觉不那么值得信任。你的直觉很容易出错,在很多情况下,它并不比随机选择好多少。如果没有能力做出基于数据的决策,我们通常会选择最响亮的(或最具表现力的,或最资深的,或最有经验的,或最顽固的,等等)意见。)房间里的人,这相当于从一顶装满所有潜在决策的帽子里随机抽出一个决策。
以下是我学到的四条重要经验,可以让领导得出有意义的见解,做出基于数据的决策。
TL;博士
- 数字很难;许多数字令人震惊
- 指标是时间序列数据
- 没有目标,度量就没有洞察力
- 没有细节的见解是不可行的
第一课——数字很难;很多数字让人应接不暇
A snapshot of my initial list of metrics. So many numbers…
我从每个企业客户的结果列表(当时只有 60 个)这一理论出发,开始了我的度量工作,这是一个很好的起点,可以精确定位有流失风险的客户。当我向产品、客户成功和领导部门的代表展示结果电子表格时,我认为每个人都会快速地对电子表格进行排序和过滤,以评估哪些客户做得“很差”。然而,现实情况是,从来没有人打开过这个电子表格。
我个人认为度量是迷人的,并喜欢思考它们如何代表业务或产品性能。事实证明,大多数人并不认同我的观点。我的同事想听一个容易理解的故事,并指出任何已经发现的缺陷,而一个充满数字的电子表格不能提供这一点。
因此,在我下一次演讲之前,我做了一些调整:
- 我从电子表格转换到数据可视化来交流结果。
- 我将尽可能多的指标转换成百分比,使数字更直观。
第 2 课-指标是时间序列数据
This metric is 80%. Cool story bro. 🤷
在我的第二个演示中,我升级到了一个在臭名昭著的环形图中显示为整体的一部分的指标。您可以看到上面的指标产生了 80%的值,但是该指标中包含了哪些数据呢?这是否代表了过去的一周、一个月或一年?例如,即使你知道数据覆盖了过去一个月,如果不与其他结果进行比较,一个结果本质上是没有意义的。领导层需要了解指标是如何随着时间的推移而变化的。该指标应随时间绘制,以便了解每日、每周、每月、每季度或每年的变化。
此外,应该尽可能接近实时地呈现数据。如果你计算这些数字,然后在两周后提交给领导层,你的见解很可能已经过时且不相关。自动化数据流和实时仪表板的开发解决了这个问题,但请记住,仪表板的创建非常耗时,并且需要维护以确保数据管道不会中断。
第三课——没有目标的衡量标准是没有洞察力的
My data visualization displaying the metric’s quarterly change. But no goal…
现在,我有了一个图表,显示了过去一年各季度指标的变化情况。太好了!但是这些结果是好是坏呢?随着时间的推移,这一比例似乎在下降——我们应该恐慌还是庆祝?
为了从这些结果中获得洞察力,利益相关者需要就该指标的目标达成一致。对于这一指标,我们一致认为目标应该是超过 60%。这意味着我们去年在 Q1、Q2 和第三季度成功实现了目标,但最近几个季度(第四季度和 Q1)的表现远低于我们的目标,需要采取行动。这是一个很好的见解!
第四课——没有细节,洞察力是不可行的
This chart demonstrates that Type 2 and Type 3 are specifically not meeting the goal to exceed 60%.
我们现在了解了最近几个季度的指标绩效没有达到目标的事实,但是我们如何知道要采取什么措施来提高整体指标呢?将指标数据分解成类别、存储桶或组有助于确定需要重点改进的特定领域。上面的可视化演示表明,将指标分解为子类型(类型 1、类型 2 和类型 3)揭示了类型 1 每个季度都达到了目标,类型 2 没有达到目标,而类型 3 远低于目标。有了这些额外的细节,领导层就可以将精力集中在某个特定的小组上,以提高整体的指标绩效。
请注意,我还在图例中包含了样本大小,以了解每种类型在总体指标中的权重。
结论
总之,度量是没有用的,除非它们向领导层揭示了当前的不足。为了揭示缺陷,度量标准应该以简单的数据可视化形式显示,显示随时间的变化以及目标是否达到。度量标准应该分成小组,以确定需要改进的具体领域。
使用 Python 的 4 种机器学习技术
4 使用 Python 的机器学习技术
机器学习技术与算法
虽然本教程致力于使用 Python 的机器学习技术,但我们很快就会转向算法。但是在我们开始关注技术和算法之前,让我们看看它们是不是一回事。
T2 技术是解决问题的一种方式。这是一个非常通用的术语。但是当我们说我们有一个算法时,我们的意思是我们有一个输入,我们希望从它那里得到一定的输出。我们已经清楚地定义了实现这一目标的步骤。我们会不厌其烦地说,一个算法可以利用多种技术来获得输出。
既然我们已经区分了这两者,那就让我们来了解更多关于机器学习的技术。
使用 Python 的机器学习技术
Python 机器学习技术有 4 种类型,我们来讨论一下:
a.机器学习回归
字典会告诉你,倒退就是回到以前的状态——一个通常不太发达的状态。在统计学书籍中,你会发现回归是一个变量的平均值和其他值的对应值如何相互关联的度量。但是让我们谈谈你将如何看待它。
Python 机器学习技术—机器学习回归
一.回归均值
查尔斯·达尔文的同父异母的表兄弗朗西斯·高尔顿观察了几代人的香豌豆大小。他的结论是,顺其自然会产生一系列的尺寸。但是如果我们有选择地培育大小合适的香豌豆,它会变得更大。随着时间的推移,大自然掌握着方向盘,甚至更大的豌豆也开始产生更小的后代。我们有不同的豌豆大小,但我们可以将这些值映射到特定的直线或曲线。
二。另一个例子——猴子和股票
1973 年,普林斯顿大学教授伯顿·马尔基尔在他的书中提出了一个主张。畅销书《漫步华尔街》坚持认为,一只被蒙住眼睛的猴子在选择投资组合时,可以像专家一样出色,向报纸的金融版面投掷飞镖。在这样的选股比赛中,猴子打败了专业人士。但这只是一两次。事件足够多,猴子的表现就会下降;它回归到平均值。
Python 机器学习技术——猴子和股票
三。什么是机器学习回归?
在该图中,直线最符合由点标记的所有数据。使用这条线,我们可以预测 x=70 的值(有一定程度的不确定性)。
使用 Python 的机器学习技术——什么是机器学习回归
作为一种机器学习技术,回归在监督学习中找到了基础。我们用它来预测一个连续的数字目标,并从我们已经知道的数据集值开始工作。它比较已知值和预测值,并将预期值和预测值之间的差异标记为误差/残差。
四。机器学习中的回归类型
我们通常观察到两种回归-
- 线性回归-当我们可以用直线表示目标和预测值之间的关系时,我们使用线性回归-
y=P1x+P2+e
- 非线性回归——当我们观察到目标和预测值之间的非线性关系时,我们不能将其表示为直线。
b.机器学习分类
一、什么是机器学习分类?
分类是一种数据挖掘技术,让我们预测数据实例的组成员。这使用预先标记的数据,属于监督学习。这意味着我们训练数据,并期望预测它的未来。“预测”是指我们将数据分类到它们所属的类别中。我们有两种属性-
- 输出属性-又名依赖属性。
- 输入属性-又名独立属性。
二。分类方法
- 决策树归纳——我们从标记为元组的类中构建一棵决策树。它有内部节点、分支和叶节点。内部节点表示对属性的测试,分支表示测试结果,叶节点表示类标签。涉及到的两个步骤是学习和测试,这些都很快。
- 基于规则的分类——这种分类基于一组 IF-THEN 规则。规则表示为-
如果条件,则结论
- 通过反向传播进行分类-神经网络学习,通常称为连接主义学习,建立连接。反向传播是一种神经网络学习算法,是最流行的算法之一。它反复处理数据,并将目标值与要学习的结果进行比较。
- 懒惰学习者-在懒惰学习者方法中,机器存储训练元组并等待测试元组。这支持增量学习。这与早期学习者的方法形成对比。
三。ML 分类示例
我们举个例子。想想我们在这里教你不同种类的代码。我们向您展示 ITF 条形码、Code 93 条形码、QR 码、Aztecs 和数据矩阵等。一旦完成了大部分的例子,现在轮到你来识别我们展示给你的代码的种类了。这是监督学习,我们使用两者的部分例子——训练和测试。注意每种类型的一些恒星是如何在曲线的另一边结束的。
使用 Python 的机器学习技术— ML 分类示例
c.使聚集
聚类是一种无监督的分类。这是一个探索性的数据分析,没有可用的标记数据。通过聚类,我们将未标记的数据分成有限且离散的数据结构集,这些数据结构集是自然且隐藏的。我们观察到两种聚集现象
- 硬集群——一个对象属于一个集群。
- 软聚类——一个对象可能属于多个聚类。
在聚类中,我们首先选择特征,然后设计聚类算法,然后验证聚类。最后,我们解释了结果。
a .示例
回想一下 b.iii 节中的示例。您可以将这些代码组合在一起。二维码,阿兹特克,和数据矩阵将在一组,我们可以称之为 2D 代码。ITF 条形码和 Code 39 条形码将归入“1D 代码”类别。这是星团的样子-
使用 Python 的机器学习技术——聚类
d.异常检测
异常是偏离其预期路线的东西。有了机器学习,有时,我们可能想要找出一个离群值。一个这样的例子是检测牙医每小时 85 次补牙的账单。这相当于每个病人 42 秒。另一种方法是只在周四找到特定的牙医账单。这种情况会引起怀疑,异常检测是突出这些异常的好方法,因为这不是我们要特别寻找的东西。
所以,这都是关于 Python 的机器学习技术。希望你喜欢我们的解释。
结论
因此,在本教程中,我们学习了 Python 的四种机器学习技术——回归、分类、聚类和异常检测。此外,如果您有任何疑问,请随时在评论框中提问。
你也可以参考-
我在用 Firebase 远程配置运行 A/B 测试时犯的 4 个错误
大约一年半以前,我学习了 Firebase 远程配置和实验,并开始在我当前的产品 CricPlay 中使用它,一旦我们达到了有意义的 A/B 测试的适当规模。Firebase 提供了一个健壮的低成本(免费使用,但开发人员需要花费一些时间来设计远程配置的应用程序)框架,以在实际用户的生产应用程序中测试您的假设。根据代码定制的级别,它可以处理相当简单(CTA 颜色、复制)到复杂(备选业务逻辑)的用例。
十几次实验之后,我列出了我的一些错误(这样你就不会犯这些错误了)。
这篇文章假设一个初学者到中级平台的理解。如果你刚刚开始使用 Firebase 进行 A/B 测试,你应该浏览这个视频系列来开始:https://www.youtube.com/playlist?list = PLl-k 7 zzesylnt 1-3 lfiy 89 ytafqzlzo-O
1.目标不正确
Firebase 是一个移动应用套件。处理新的配置值需要对应用程序进行更改。如果您重新设计了应用程序商店屏幕,以便从远程配置中读取购买按钮的颜色,则需要更新应用程序。当运行一个实验时,重要的是只针对那些实际处理被测试的配置值的应用程序版本。这很重要,因为在总共 100 个用户中,可能只有 20 个更新到了最新版本。
在 20 个用户的基础上可能具有统计显著性的%改善(或恶化)对于更大的基础可能显得无关紧要。
统计显著性表示 2 个变异体(或更多)的转化率之间的差异不是由于随机机会而出现的可能性。在 A/B 测试中,我们执行的是零假设测试。零假设表明变化对转化率没有影响。除非有证据表明事实并非如此,否则它被认为是真实的。如果一个结果不能用零假设来解释,并且需要另一个假设,那么这个结果就具有统计学意义。
在上面的例子中,替代假设适用于 20 个用户,但是零假设适用于其他 80 个用户——配置值的变化对以前的版本没有影响。
此外,如果新更新的采用速度较慢,则实验需要运行更长时间,以便获得足够大的样本来代表总体基础。更重要的是,快速更新到最新版本的现有用户可能会表现出与一两周后更新的用户略有不同的行为。
除了应用程序版本,Firebase 还支持其他几个目标标准。用户可以通过受众细分、属性、地理和语言来定位。如果设计了一个实验来优化多语言应用程序的英文行动号召,它必须针对设备语言设置为英语的用户。
要了解所有可用的瞄准功能,请参考文档。
2.不使用激活事件
激活事件是针对实验的正确部分的扩展。考虑一个旨在优化游戏入门体验的实验,以便让更多用户参与游戏(通过事件“游戏性”捕获)。为了获得有意义的见解,实验应该仅限于新用户。设置激活事件有助于这一点。
与目标定位不同,它不会在采样时过滤用户。在测试样本中,测试变量既提供给新用户,也提供给现有用户。然而,将“注册”设置为激活事件确保了只有新用户(执行“注册”事件的用户)被分析用于实验。
不设置激活事件会稀释结果,因为现有用户也会触发“游戏性”事件。
3.仅依靠 Firebase Analytics 来分析结果
Firebase 控制台提供了许多关于正在运行的实验的见解:关于实验状态的摘要,对主要目标事件以及其他实验目标的影响的概述,以及对每个变体相对于任何目标的性能的详细理解。
对于大多数简单的实验(UI 更改,添加新功能),仅控制台结果就足以验证假设并推出最佳变体。但是,复杂的问题可能需要额外的分析,而 Firebase 控制台可能无法做到这一点。
其中一个实验是为了了解“欢迎奖金”对游戏经济的影响。欢迎奖金使用户能够在注册时获得一些虚拟货币,以体验“高级”功能。对虚拟货币的高需求通过 IAP 和奖励广告推动了货币化。因此,受欢迎的奖金应该会在短期内减少新用户的收入,目的是让更多的用户迷上优质功能,以促进长期的货币化。
在 Firebase 控制台中,很难分析一个在游戏中到处都是水龙头和水槽的经济体,尤其是在事件模式设计得不太好的情况下。
这个问题有两个解决方案:
使用 BigQuery 进行分析
通过将 BigQuery 链接到 Firebase,可以访问所有与 A/B 测试相关的分析数据。对于每个变体,Firebase 都添加了一个用户属性 firebase_exp_ <实验号> ,值为 <变体索引> ,可以用来跟踪在 BigQuery 中暴露给每个变体的用户。
将实验数据传递到其他分析平台/您的数据库
这可以通过创建一个虚拟配置值来实现(比如说 firebaseExperimentId )。默认值是一个空字符串。应用程序被配置为如果为空则忽略该值,并在用户配置文件更新时传递非空值。在配置实验变量时,这个虚拟值用于将变量信息传递给应用程序。
这个用户配置文件值可用于创建漏斗、分析屏幕流以及在分析工具(在我的例子中是 CleverTap)中为变量执行高级分段。它有助于利用您的高级分析工具的功能(相对于免费的 Firebase analytics)。
作为扩展,这个虚拟值也可以用于实现服务器端实验。应用程序将该值作为 API 头传递。API 可以根据远程配置值提供备选业务逻辑。
4.管理重新安装和多个设备
这也是 Firebase 实验的局限性之一。如果您的应用程序有很多重新安装和/或用户从多个设备访问同一个帐户,那么同一个用户可能会接触到一个实验的两个测试变量。A/B 测试使用 Firebase SDK 生成的实例 ID 来识别唯一的设备/用户。如果用户卸载应用程序并再次安装,SDK 将生成一个新的实例 ID,因此将该用户视为新用户。如果同一用户在不同的设备上登录应用程序,也是如此。
同样,对于大多数简单的实验,如 UI 优化或测试新功能,这并不重要。然而,对于复杂的任务,比如测试可选的业务逻辑,它可能会影响结果,或者更糟的是会让一些用户感到困惑。特别是在像印度这样的市场,很高的重新安装率是很常见的。
解决方案是要么切换到另一个 A/B 测试解决方案,要么构建一个相同的定制实现。两者都有其局限性——添加另一个工具并传递所有事件以执行有意义的分析的成本,与开发统计模型以对用户进行采样并分析实验结果的成本。
也可以有一条中间道路(我选择了这条道路)。它需要在应用程序的后端创建远程配置值和实验的副本,并通过 API 公开它们。这可以用来针对登录用户“锁定”远程配置值,即使 Firebase 在稍后阶段(重新安装后或从另一个设备访问)为同一用户提供了不同的值。当实验结束,获胜者被推出时,建立一个解锁机制是很重要的。
重要的是要注意,根据重新安装或多个设备的百分比,这可能会导致 Firebase 控制台上的实验结果出现显著差异。Firebase 不知道应用程序正在覆盖这些用户的远程配置值。因此,需要在 BigQuery 或其他分析工具中通过传递被覆盖的配置值来分析结果。
不是最佳的解决方案,但是有效!如果您正在管理一个分析平台,请将此视为一个功能请求。
你从 Firebase 实验或 A/B 测试中学到了什么?请在评论中告诉我。
2020 年作为首席信息官要避免的 4 个错误
您是否在考虑迁移到云、实现定制应用的现代化以及投资数据科学计划?
作者:蒙特·兹韦本,赛义德·马哈茂德
首席信息官们正在最终确定他们 2020 年的战略计划,这些计划不可避免地涉及到向云迁移、定制应用的现代化以及对数据科学计划的投资,这里列出了在这一过程中需要避免的失误。
- 没有明确的计划,不要迁移到云。
Cloud migrations can be disappointing
作为一名首席信息官,如果您没有迁移到云的计划,您可能会感到错失良机。毕竟,云是未来的潮流,它承诺企业可以更快地将其应用程序上线,而不必担心建设数据中心的资本支出。通过迁移到云,您的组织还将能够灵活地调整他们消耗的计算资源,包括按需和独立调整,因为云架构允许存储和计算分离。这是双赢,对吗?。不完全是这样,这取决于您通过将基础架构迁移到云来实现的目标。
首先,要意识到一旦你迁移到了云端,计价器就会一直运转。冲向云的公司完成了项目的第一阶段,并意识到他们的运营费用增加了,因为人工操作员的节省被通常在线的应用程序的云计算资源的成本超过了。过去在内部部署时会被资本化的资源现在会进入云中的 P&L。通常这个数字要高得多。
这让我们想到了您的组织试图通过迁移到云来实现的目标。如果您的目标是通过整合新的数据源(如传感器、物联网设备和社交媒体)或向其中注入人工智能和机器学习来丰富您的任务关键型应用程序,那么仅仅迁移到云是不够的。这是因为集成各种技术以构建统一平台的重担仍然落在 IT 部门的肩上。在这种情况下,构建一个集成的横向扩展基础架构(可以利用不同的数据源并在云中使用机器学习(ML)做出智能决策)所需的工作与在内部构建基础架构没有明显的不同。换句话说,简单地将您的基础设施迁移到云中不会使您的遗留应用程序变得敏捷、可伸缩和智能。云是获得敏捷性的一个很好的举措——但还不足以获得一个更好的可以利用数据和使用 ML 的应用程序。
2。不要从头开始重写您的遗留应用程序。
Rewriting applications is unnecessarily destructive
您面临着来自企业的压力,要求您对一些任务关键型应用程序进行现代化。根据您所在的行业,这些应用可能是核保或欺诈检测、需求规划或预防性维护。这些曾经是公司皇冠上的宝石的应用程序现在已经成为“遗产”它们变得缓慢是因为需要处理的数据量急剧增加。此外,它们从未被设计为对正在成为规范的多样化和非结构化数据进行操作,包括从传感器、物联网设备和社交媒体生成的数据。最重要的是,在线交易的数量和速度要求这些应用程序是智能的,并在没有人工干预的情况下实时采取智能行动。
毫无疑问,考虑到业务对敏捷性、可伸缩性和智能性的要求,您认为除了在现代平台上完全重写这些应用程序之外别无选择。如果你采取这种行动,你就部分正确了。是的,您确实需要在一个平台上重新构建这些应用程序,该平台可以随着数据量的增长而横向扩展,能够存储和分析各种数据,并可以将人工智能注入到应用程序中,但您不必重写应用程序本身。在这种情况下,一个恰当的类比是旧金山的维多利亚时代的老房子,它们对所有者的价值与遗留应用程序对企业的价值相同。为了保护这些房屋免受地震,他们必须根据最新的建筑技术进行改造,包括提升房屋并用螺栓将其固定在地基上。通过这样做,土木工程和建筑公司保存了房屋的建筑外观和历史,同时保护它免受地震破坏。
A database migration can be as effective as an earthquake retrofit
同样,通过保持应用程序完好无损并将其置于现代基础之上,您将保留熟悉的界面和业务逻辑,这是您公司的秘密武器,同时适应大数据的数量和多样性,并通过人工智能和机器学习使应用程序变得智能。通过采用这种方法,您还可以使您的组织免于着手一个昂贵、冗长且有风险的项目。
3。不要为了 NoSQL 数据库而放弃 SQL 应用程序。
The power of SQL is clear as NoSQL systems rush to put in SQL layers
许多首席信息官已经考虑使用 HBase、Cassandra、Dynamo 和 MongoDB 等 NoSQL 数据库构建他们的下一代运营应用程序。这种方法的主要理由是现代应用程序必须管理的数据的数量、多样性和速度。DB2、Oracle、SQL Server、Postgres、MySQL 等传统 SQL 数据库在 web 应用程序、物联网设备和传感器生成数据的环境中苦苦挣扎。这些数据库没有提供扩展或存储半结构化或非结构化数据的实用方法。
但是,您应该认识到,当用 NoSQL 数据库替换后端 SQL 数据库来更新应用程序时,您可能会招致巨大的风险和项目范围的扩大。NoSQL 数据库缺乏完整的 SQL 支持,这使得大量的应用程序代码需要重写。此外,找到具备所需 NoSQL 专业知识的开发人员比大量已经精通 SQL 的开发人员要难得多。另一个增加 NoSQL 数据库平台迁移风险的因素是数据模型经常需要完全重新设计。修改后的数据模型会导致显著的数据反规范化和重复,这需要公司编写大量的新代码来确保重复的数据在其所有定义中保持一致。最后,NoSQL 数据库的性能可能无法与传统数据库相媲美。NoSQL 系统通常擅长短期运行的操作查询,但是它们在分析查询上的性能通常很差,不能满足应用程序的需求。
出于上述考虑,如果您正在考虑在 NoSQL 数据库上移植一个遗留应用程序,请考虑市场上现有的一些横向扩展的分布式 SQL 平台。这些平台提供了 NoSQL 数据库的好处,但不存在上面讨论的问题。
4。不要将数据科学归为幕后活动。
Break the silos on projects and include the business
数据科学是数学家和统计学家的领域,他们构建了凡人难以理解的复杂算法。数据科学家目前花费大量时间等待数据工程师从大量内部和外部数据源获取数据。然后,数据科学团队会经历一个严格的实验阶段,创建可能包含预测信号的功能集,并对这些功能进行分析。这种培训和测试工作流程冗长而复杂,需要跟踪应用程序来帮助数据科学家组织和审核他们的实验。一旦模型被构建和训练,它就被移交给一个应用程序开发团队,以注入到一个应用程序中,并将其投入生产。这就是问题所在,组织目前有一个“数据科学团队”、“数据工程团队”和“应用程序开发团队”,但每个团队本身都没有准备好完成从定义业务需求到将应用程序部署到生产中的工作。数据科学、数据工程和应用程序开发团队根本没有足够深入的业务知识。数据科学是一项团队运动,需要来自数据科学家、数据工程师和应用程序开发人员的代表,与了解业务流程的人员并肩工作,构建能够交付切实业务成果的智能应用程序。
如果将人工智能和机器学习作为任务关键型应用程序的一部分进行操作是您的首要任务,那么您必须打破组织孤岛,建立由数据工程师、应用程序开发人员、数据科学家和主题专家组成的多学科团队,以构建能够推动业务发展的应用程序。
要了解有关如何在 2020 年实现业务转型的更多信息,请下载我们关于应用现代化的白皮书以及 it 在数字化转型中的重要作用。
每个 Python 初学者都应该学习的 4 个 NumPy 技巧
Python 初学者
编写可读代码的技巧
Photo by Pierre Bamin on Unsplash
NumPy 是 Python 中最流行的库之一,鉴于它的优点,几乎每个 Python 程序员都用它来进行算术计算。Numpy 数组比 Python 列表更紧凑。这个库也非常方便,许多常见的矩阵运算以非常高效的计算方式实现。
在帮助同事和朋友解决数字问题后,我总结了 4 个数字技巧,Python 初学者应该学习。这些技巧会帮助你写出更加整洁和可读的代码。
在学习 numpy 技巧之前,请确保您熟悉以下文章中的一些 Python 内置特性。
超越 lambda、map 和 filter 的 Python 技巧
towardsdatascience.com](/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4)
1.参数函数—位置
对于数组arr
、np.argmax(arr)
、np.argmin(arr)
和np.argwhere(condition(arr))
,分别返回最大值、最小值和满足用户定义条件的值的索引。虽然这些 arg 函数被广泛使用,但我们经常忽略函数np.argsort()
,它返回对数组排序的索引。
我们可以使用np.argsort
到根据另一个数组对数组的值进行排序。下面是一个使用考试成绩对学生姓名进行排序的示例。排序后的名称数组也可以使用np.argsort(np.argsort(score))
转换回原来的顺序。
它的性能比使用内置 Python 函数sorted(zip())
更快,并且更具可读性。
Photo by Kamen Atanassov on Unsplash
2.广播-形状
广播是一个初学者可能无意中尝试过的事情。许多 numpy 算术运算在逐个元素的基础上应用于具有相同形状的数组对。广播对数组操作进行矢量化**,而不会产生不必要的数据副本**。这导致了高效的算法实现和更高的代码可读性。
例如,您可以使用arr + 1
将数组中的所有值递增 1,而不考虑arr
的维度。还可以通过arr > 2
检查数组中的所有值是否都大于 2。
但是我们怎么知道两个数组是否兼容广播呢?
Argument 1 (4D array): 7 × 5 × 3 × 1
Argument 2 (3D array): 1 × 3 × 9
Output (4D array): 7 × 5 × 3 × 9
两个数组的每个维度必须是等于,或者其中一个是 1 。它们不需要有相同的维数。上面的例子说明了这些规则。
3.省略和新轴——维度
分割 numpy 数组的语法是i:j
,其中 i,j 分别是起始索引和停止索引。比如上一篇文章中提到的——5 个我希望早点知道的 Python 特性,对于一个 numpy 数组arr = np.array(range(10))
,调用arr[:3]
给出[0, 1, 2]
。
Photo by Daryan Shamkhali on Unsplash
当处理高维数组时,我们使用:
来选择每个轴上的所有索引。我们也可以使用…
选择多个轴上的所有指标**。展开的轴的确切数量是从推断出来的。**
另一方面,如上图所示使用np.newaxis
在用户定义的轴位置插入一个新轴。此操作将数组的形状扩展一个单位的维度。虽然这也可以通过np.expand_dims()
来完成,但是使用np.newaxis
可读性更好,也更优雅。
4.屏蔽阵列—选择
数据集是不完美的。它们总是包含缺少或无效条目的数组,我们经常想忽略那些条目。例如,由于传感器故障,气象站的测量值可能包含缺失值。
Numpy 有一个子模块numpy.ma
,支持带有掩码的数据数组**。被屏蔽的数组包含一个普通的 numpy 数组和一个掩码指示无效条目的位置。**
np.ma.MaskedArray(data=arr, mask=invalid_mask)
Photo by Nacho Bilbao on Unsplash
数组中的无效条目有时用负值或字符串标记。如果我们知道屏蔽值,比如说-999
,我们也可以使用np.ma.masked_values(arr, value=-999)
创建一个屏蔽数组。任何以掩码数组作为参数的 numpy 操作都会自动忽略那些无效的条目,如下所示。
相关文章
感谢您的阅读。你可以注册我的时事通讯来接收我的新文章的更新。如果您对 Python 感兴趣,以下文章可能会有用:
超越 lambda、map 和 filter 的 Python 技巧
towardsdatascience.com](/5-python-features-i-wish-i-had-known-earlier-bc16e4a13bf4) [## Python 3.8 中针对 Python 新手的 6 项新特性
请做好准备,因为 Python 2 不再受支持
towardsdatascience.com](/6-new-features-in-python-3-8-for-python-newbies-dc2e7b804acc)
最初发表于edenau . github . io。
4 个参数查询功能,使您的数据可视化互动
在数据可视化中,除了可视化的呈现,还有一个核心要素就是人机交互。
对于高维多元数据可视化系统,交互是必不可少的元素之一。这体现在两个方面。一是高维多元数据导致的数据过载,使得有限的可视化空间无法呈现所有数据,也难以表达高维复杂结构。所以需要交互技术来弥补。第二,交互是操作者与操作界面之间的交流,用户可以有选择地获取自己想要的信息。对用户理解数据,发现模式很有帮助。
比如想查看每个月的销售额,一般的方法是每个月做一个报表,然后放在一起对比。但是查找和对比数据很麻烦,很容易出错。如果使用交互式可视化,可以使用过滤功能随意查询数据,非常方便。
但是我们如何在图表或仪表板中实现可视化交互呢?这时,我们需要使用参数查询。接下来我给大家介绍四个基本的参数查询功能以及它们可以适用的交互场景。
(注:本文所有图表均采用 FineReport 制作,个人下载完全免费。这个可视化工具本身就有很多参数查询功能,不需要写代码。所以我用 FineReport 创建了一些图表,向大家展示如何用参数查询实现交互可视化。)
1。参数过滤
它是交互式可视化的基本功能,即可以根据不同的条件过滤不同的数据。
例如,在下面的存货核算表中,在点击该报表中的“查询”按钮之前,系统会根据参数的默认值检查并显示数据。在此报告中,仓库复选框的默认选择是仓库 1 和仓库 3。我们可以自由选择时间段和仓库来查询我们想要的数据,也就是多值查询。
当然,在使用参数过滤时,也可以将表格改为图表。
在下面的图表中,您可以很容易地查询任何月份和年份的每个客户的销售额、每个雇员的销售额或每个销售人员的销售额。
又如,通过下图所示的交互式图表设计,管理人员可以及时了解每个分公司每月的人员变动情况。可见参数过滤在交互式可视化中的应用非常广泛。
2。参数联动
链接两个或多个组件,实现数据之间的自动关联,即关联图表。
如下图,左上角的图表显示了不同销售区域的分店数量和利润贡献率。使用图表链接功能,当您单击第一个柱形图中的一个区域时,接下来的三个图表将显示所选区域的客户订单帐户、订单历史记录和季度订单预测。
下面是 10 大销售人员的数据分析报告。
很抱歉,我写的一些报告是中文的。我给你简单解释一下。只看参数联动的效果。
单击第一个直方图中的任何销售人员姓名,以及订单金额、销售额、客户质量等。会自动与员工的数据相关联。
此外,参数联动还可以用于产品分析报表、现金流量表等多种场景。
3。下钻联动
这是动态图表的一个共同特点,主要是实现数据在无限多个图层上的扩展,查询更高维度的明细数据。
简单的钻孔功能如下图所示。在此图中,我们钻取从国家到省以及从省到市的销售。我们还可以根据右边的滑块过滤数据。
现在我们在地图下钻的基础上增加联动功能。只需点击左侧的一个区域,该区域的详细表格和图表数据就会显示在右侧。地图目录链接到相应的级别。
下钻联动也广泛应用于交互式可视化,常见于旅游信息展示、商场财务分析等。
Tour Information Display
Analysis of Comprehensive Indicators of Shopping Malls
Analysis of the Financial Management of Stores
4。参数面板的动态显示
在很多情况下,当我们使用参数查询功能时,某些查询条件只有在满足一定要求的情况下才会显示出来。例如,在下面的报告中,当您在该报告中选择“按天”时,它将显示“开始日期”和“结束日期”。如果选择“按月”,将隐藏日期控件,显示“年”和“月”。如果选择“按年”,只会显示“年”。
那么,通过这篇文章,你学会了一些交互可视化的技巧了吗?请记住,让您的表格或图表动态化并在不同的图表之间创建关系是非常重要的。
您可能也会对…感兴趣
初学者如何设计酷的数据可视化?
仪表板设计的 4 个原则
设计仪表板似乎是一件容易的事情。通常,它将从将数据导入可视化工具开始。然后,将挑选出精美的图表,看看它们是否与数据相符。经过几分钟的反复试验,我们希望我们能从随机选择的图形中得到启发。不,你不会得到你想要的洞察力。
从我的观察来看,如果你不知道想象什么,你最终将从你的仪表板上什么也得不到。这意味着您需要首先从数据中提取洞察力。构建仪表板是数据分析的最后一个阶段。
如前所述,构建一个好的仪表板是一个将数据扔进可视化工具并希望魔法出现的过程。
这是我构建一个好的仪表板的框架。
1)用户
首先,你需要了解你的用户是谁。为了深入了解用户的真正需求,我们将应用设计思维的概念。设计思维的关键概念是理解用户的需求和洞察力。设计思维鼓励我们超越用户需要什么,进入用户为什么需要它。
我们需要深入了解用户或者“为什么”这个问题。那么,用户为什么需要仪表盘呢?
我对此的回答是,他们希望使用仪表板来执行某个操作;例如,做出决策、监控业务绩效等等。
你的工作是了解用户将如何使用仪表板。一旦你真正理解了它们,你就会更好地知道仪表盘上应该显示什么。
Icons made by Freepik from www.flaticon.com is licensed by Creative Commons BY 3.0
2)内容
您需要确定哪些度量和维度最能支持您的用户。度量和维度是我们希望向您的用户显示的内容,以便他们发现问题、确定问题的原因并采取措施解决问题。
度量是您想要分析的关键数字。
维度是分类字段,用于将度量值分解成更小的细节。
应该选择一些措施来方便用户处理信息。我发现许多仪表板要求用户计算总数的百分比、比率或总计。如果用户显然需要这些信息,应该在仪表板上显示出来。
3)演示
清楚地定义了所有重要的度量和维度后,选择正确的图表类型至关重要。根据我的观察,图表是根据熟悉程度来选择的。应根据数据类型选择图表。例如,折线图适用于呈现时间序列数据。
饼图被认为是无效的可视化差异,尤其是当差异是微不足道的。此外,饼图不应有超过 5 个切片,因为。阅读和理解会很困难。
4)导航
最后,将图形和图表结合在一起创建一个仪表板涉及到位置和定位。具有相同数据集或相似主题的图表应放在一起。仪表板不应该要求用户在图表之间来回跳转。
此外,图表应该基于它们的视觉层次来定位。显示概览数据的图表应位于顶部。详细信息通常显示在下面的区域。
良好的导航将允许用户从仪表板中提供的图表构建一个故事。
这一原则提供了作为仪表板设计基础的主要组件,旨在帮助将仪表板用于实际操作。它强调需要了解开发 dashboard 的整个过程,从使用用户移情技术了解真实用户的需求,到选择和放置具有正确组合的图表。
人工智能路线图的 4 个产品驱动步骤
如何教会产品做决策
人工智能到底有什么变革性?
人工智能(AI)正在定期开辟新的领域,从 DeepMind 的 AlphaGo Zero 自学围棋并击败人类冠军,到文本生成算法如此强大,以至于它们在 OpenAI 的创造者因担心恶意使用而决定不公开发布它们。
虽然这些成就理所当然地产生了巨大的轰动,鼓舞了企业家和投资者,但其中大多数都缺乏具体的商业应用。如果人工智能事实上是一项变革性的技术,这就提出了一个大问题:你的公司如何利用人工智能创造实际的商业价值今天?
大多数人工智能商业应用侧重于自动化和个性化。但是自动化什么?如何个性化?技术已经使许多以前的劳动密集型过程自动化了。AI 的特别之处在哪里?
要理解这个问题,首先要回答一个更根本的问题:有了 AI 你能造出什么样的产品,而没有它你就造不出来?
答案很简单。有了 AI,你就可以造出做决策的产品。
决定,决定
很多产品都是用规则来做决策。但是规则只是其他人做出的让产品遵循的决定。这没什么错,尽管随着时间的推移,许多基于规则的产品变得越来越令人沮丧:你试过给航空公司或银行打电话吗?
大多数有意义的决策都不能用一套简洁的规则来概括。人工智能产品很特别,因为它们可以做出如此复杂的决定。以下是一些例子:
- “警报:安全摄像头检测到可疑物体”
- “尽管信用评分低于正常要求,我还是建议批准这笔贷款”
- “这是根据您的目标和近期表现制定的今天健身课程计划”
这里的变革性部分是,没有人工智能,产品无法做出这些决定,所以人类必须做出这些决定。这意味着它不是一种产品,而是一种服务。上面的例子分别是保安、信用分析师和健身教练提供的服务。
你如何在实践中将这一点应用到你的公司中?自然,任何人工智能产品都涉及许多技术方面,包括数据收集、处理和建模,这些都是数据科学和机器学习专家的领域。但是构建一个人工智能产品的商业和产品管理方面同样重要,也同样棘手。这里有四个步骤来指导你完成这个过程。
1.绘制决策图
因为人工智能产品是关于决策的,所以从围绕你的产品的决策开始。它们是由规则制定的还是由人类制定的?制作它们需要哪些信息?产品自己做出这些决定的价值是什么?
还要考虑当前而非正在做出的决策。这些都是产品平等对待的情况,即使可能有个性化或细微差别的空间。
这些考虑将引导你对你的人工智能机会有一个面向产品的理解。
2.制定自动化计划
接下来,考虑你可以用 AI 自动化哪些决策,自动化到什么程度,按照什么顺序。同样,虽然这些问题取决于许多技术方面,但让我们把重点放在产品方面。
想想获得决策权的另一个过程:职业成长。一线厨师如何成为行政总厨?当然不是某天宣布他们是厨师。同样,你也不能部署一个开箱即用的人工智能解决方案,然后期望拥有一个“智能产品”。
另一方面,一个厨师不会因为擅长切生菜而成为一名厨师,即使你让他们决定切得多细。同样,如果你的人工智能用例局限于一些增量的、孤立的应用,你将不会从人工智能中实现有意义的价值。
开发人工智能路线图就像为你的产品规划学徒期。它应该描绘出一个中间地带,从做出或支持简单的决定开始,逐渐发展到更复杂的决定。
3.实现成功的人工智能学徒
任何成功的学徒都需要导师来树立榜样。人工智能应用还需要大量的例子,包括各种决策及其完整的背景。理解如何捕获这些示例是数据获取和管理的产品方面,这在许多组织中可能是一个重大的痛点。
一个好的导师会以理性的方式做出决定,即使这些决定无法用简单的考虑或规则来完全解释。人工智能也是如此。举个例子,一个人工智能解决方案可以自动化员工的一些工作。如果一个繁琐的过程可以迫使员工做出错误的决定或采取措施回避它,结果将是糟糕的或部分的数据和不成功的人工智能产品。这是一个常见的挑战,需要在开发人工智能解决方案之前更新流程和工作流,无论您当前有多少数据。
4.为错误和不确定性留出空间
学徒期最重要的部分是犯错误并从中吸取教训的能力。人工智能产品还必须通过实现工作流和缓解措施来处理糟糕的决策,从而为错误和个人决策质量的不确定性留出空间。
更广泛地说,尤其是在企业组织中,这一原则适用于商业文化:企业能否容忍人工智能转型道路上的一些增长阵痛?例如,当你的人工智能出错时,一些重要的性能指标最初可能会下降。你的组织能处理吗?你能解释一下为什么这是一个值得冒的风险吗?
底线
认识到人工智能允许产品做出决策有助于指导你的人工智能路线图:在你的产品中映射决策,并用产品思维来思考它们。而且,虽然这是开发成功的人工智能产品的一个要求,但这种方法实际上并不需要任何人工智能。事实上,对于任何产品经理来说,它都是一个有用的工具。训练自己识别决策,建立工作流程以改进决策,减少错误并从中学习。
本文一个版本先前出现在 头脑产品
更好的数据可视化的 4 个快速技巧
数据可视化是任何数据科学家工具箱中最重要的技巧之一。我们的大脑是视觉化的:当我们把数据视觉化时,我们让它更容易消化——对我们自己,对决策者和利益相关者都是如此。因此,它是 EDA(探索性数据分析)和演示的重要工具。
这里有 4 个快速简单的技巧来提高数据可视化。
1.使用 KDE 图进行密度检查
这是 Seaborn 的一个被大大低估的特性。KDE 代表核密度估计,而 KDE 图相当独立地解决了无法看到密集散点图的问题。考虑这个例子,有一个华盛顿州金县房价的数据集…
plt.figure(figsize=(9, 9))
plt.title("Price vs Square Feet", fontsize=32)
plt.xlabel("Square Feet", fontsize=20)
plt.ylabel("Price (in $1000s)", fontsize=20)
plt.scatter(df["sqft_living"], df["price"]/1000);
正如你所看到的,100 万到 200 万美元的购房者几乎和下图一样多——但是直觉上,很明显,我们知道这不是真的。对于这种情况,通常的权宜之计是应用 alpha 透明度——它有时会起作用——但它在这里对我们没有太大帮助。
plt.figure(figsize=(9, 9))
plt.title("Price vs Square Feet", fontsize=32)
plt.xlabel("Square Feet", fontsize=20)
plt.ylabel("Price (in $1000s)", fontsize=20)
plt.scatter(df["sqft_living"], df["price"]/1000, alpha=0.1);
我们的数据现在很难看到,但至少我们可以更好地告诉它的密度。100 万到 200 万美元的买家似乎不再那么多了,但 100 万美元左右的买家似乎和其他价位的买家一样普遍。但是再一次,KDE 的阴谋独自解决了这个问题。
plt.figure(figsize=(9, 9))
plt.title("Price vs Square Feet", fontsize=32)
plt.xlabel("Square Feet", fontsize=20)
plt.ylabel("Price (in $1000s)", fontsize=20)
sns.kdeplot(df["sqft_living"], df["price"]/1000, shade=True);
通过绘制一系列颜色梯度而不是所有单个数据点,KDE 图向我们展示了数据的密度估计。现在,我们终于可以看到我们一直以来都知道的事实:绝大多数买家购买的是 2000 平方英尺以下的房屋。英尺和 50 万美元。在我们没有预先了解我们的数据的情况下,这种洞察力将是无价的,也是非常容易被忽略的。现在,如果我们通过在代码中添加plt.ylim(1000)
来放大…
plt.figure(figsize=(9, 9))
plt.title("Price vs Square Feet", fontsize=32)
plt.ylim(1000)
plt.xlabel("Square Feet", fontsize=20)
plt.ylabel("Price (in $1000s)", fontsize=20)# Setting the ylim oddly flips the axis upside down
# in this case, so we have to flip it back.
ax = sns.kdeplot(df["sqft_living"], df["price"]/1000, shade=True)
ax.invert_yaxis();
经过所有这些变化,我们现在能够更清楚地了解数据内部的情况。
2。给你的坐标轴贴上标签,让它们可读
我的一位非常明智的导师曾经建议说,如果你要和另一位数据科学家约会,而你不是那种会给你的 x 轴和 y 轴贴标签的数据科学家,约会不会很顺利。推而广之,毫无疑问,用极小的字体标注坐标轴会导致平庸的日期。抛开厚脸皮的幽默不谈,让别人清楚地看到你实际想象的 是非常重要的。接下来的两个数字很好地说明了不应该做什么:
始终标记您的轴并设置您的fontsize
。
3.整理你的输出
这只是生活质量的一个小问题,但是如果你像我一样热衷于细节,那么你可能会非常欣赏它。当你在 Jupyter 笔记本或实验室中使用 Matplotlib 和 Seaborn 时,不言而喻,你希望你的图形出现在你实际的笔记本中;然而,直到第二次运行第一个图形单元时,它们才开始工作。这是因为 Matplotlib(以及 Seaborn 的扩展,因为它是一个 Matplotlib 包装器)并不是专门针对 Jupyter 的,所以它不确定您是想在不同的窗口中查看图形,保存它,还是什么。所以你要明确。加入这行代码(最好是在您的导入中的某个地方),然后再也不用担心它了:
%matplotlib inline
此外,无论何时运行绘图功能,都会得到一个非常多余的小读数,如下所示:
<matplotlib.collections.PathCollection at 0x1a23ccacf8>
这里有一个有趣而鲜为人知的事实,Python 有分号!它们完全是可选的,但是如果你愿意(出于某种原因),你可以像在 Java 等其他语言中一样使用它们。如果您在任何绘图单元格的最后一行代码的末尾添加 1,读数就会消失。瞧啊。
4.使用小提琴图和箱线图进行分布检查
直方图对于了解单个变量的分布非常有用,但是如果您想要比较多个变量呢?或者更精确地了解数据的中位数和百分位数分布?在这些情况下,盒子情节和小提琴情节是你的朋友!
plt.figure(figsize=(15, 8))
plt.title('Distributions of Scores by Genre', fontsize=32)
sns.set(font_scale=2)
sns.boxplot(x='genre', y='score', data=genre_scores)
plt.tight_layout();
该图描绘了各种风格歌曲的 Pitchfork 评论分数的分布。genre_scores
是一个只有两列的数据帧:每首歌曲的数字分数,以及由分类字符串变量表示的流派(例如:"jazz"
)。通过方框图,您可以很容易地看到中位数(彩色方框中心的线)、第 25 个和第 75 个百分位数(彩色方框的边界)以及每个分布的尾部。甚至离群值也被描绘出来!
但是,虽然箱线图非常精确地显示了这些界限,但我们在查看每个点的数据的确切分布时却失去了粒度。不仅如此,每当出现长尾和/或大量离群值时,我们的可视化就会变得混乱。小提琴的剧情解决了这两个问题,做的时候看起来很惊艳。
plt.figure(figsize=(15, 8))
plt.title('Distributions of Scores by Genre', fontsize=32)
sns.set(font_scale=2)
sns.violinplot(x='genre', y='score', data=genre_scores)
plt.tight_layout();
水平部分越宽,y 轴上出现的特定值就越多。更重要的是,中间带点的黑色粗线为我们做了之前盒状图所做的事情:向我们显示中间值以及第 25 和第 75 百分位标记。小提琴的情节是我最喜欢的视觉化作品之一:它们很美,并且在一张图片中告诉你很多东西。然而,它们可能有点难以完全消化,所以有时像箱线图这样更简单的替代方法实际上仍然有很多价值。有时候少即是多。
结论
我希望这些提示能在您探索数据和解释发现时对您有所帮助。感谢阅读!
开始参与数据科学黑客马拉松的 4 个理由
我的黑客马拉松参与之路始于大约一年半前。我设法参加了 20 多个不同规模和主题的活动,这些活动分别在莫斯科、赫尔辛基、柏林、慕尼黑、阿姆斯特丹、苏黎世和巴黎举行。在所有这些事件中,我一直从事各种形式的数据分析。我喜欢访问新的城市,建立新的联系,提出新的想法,快速实施旧的想法,以及在演讲和结果宣布时感受肾上腺素。
这篇文章是三篇文章中的第一篇,专门讨论黑客马拉松话题。我要告诉你关于黑客马拉松的概念,以及参加黑客马拉松的原因。第二个帖子将显示组织者的错误及其进一步的结果。第三篇文章将提供关于黑客马拉松最受欢迎的问题的答案。
什么是黑客马拉松?
黑客马拉松持续几天,它的目标是解决某些问题。通常,黑客马拉松解决几个问题,每个问题都是一个单独的赛道。发起公司提供任务描述、成功指标(指标可以是主观的,如新颖性和创造性,也可以是客观的,如延迟数据集上的分类准确性)和实现成功的资源(API、硬件、数据集)。参与者应阐明问题,提出解决方案,并在一定时间内展示他们的产品原型。最佳解决方案将同时获得奖项和进一步合作的机会。
黑客马拉松赛段
一旦宣布了任务,黑客马拉松参与者就被团结成团队:每个孤独者都得到一个麦克风,并谈论所选择的任务、他的背景、想法以及他需要合作来实现它的专家。有时一个团队可能只由一个人组成,这个人能够在足够高的水平上独立完成所有的工作。这与数据分析黑客马拉松相关,但对于产品活动来说,这通常是被禁止或不被推荐的——活动组织者旨在公司中进一步的项目开发延续;与那些希望独自创造产品的参与者相比,之前组建的团队有几个优势。最佳团队成员数量为 4 人,即一名前端、一名后端、一名数据科学家以及一名商人。
最佳团队成员数量为 4 人,即一名前端、一名后端、一名数据科学家以及一名商人。
顺便说一下,数据科学/产品黑客马拉松的区分非常简单——数据科学黑客马拉松意味着有一个具有明确指标和排行榜的数据集,或者有机会通过 Jupiter 笔记本中的代码获胜,而产品一则意味着所有其他内容,即需要它来制作一个应用程序、网站或其他有吸引力的东西。
通常,该项目在周五晚上 9 点开始,而截止日期是周日上午 10 点。应该留出一定的时间睡觉(睡觉是强制性的,连续 30 个小时编码肯定会失败,我亲自检查了一下),这意味着参与者开发高质量产品的时间太少了。公司的代表和导师可以帮助参与者。
睡眠是强制性的,连续编码 30 小时肯定会失败,我亲自检查过。
项目运作始于与公司代表的沟通,因为他们更好地认识到任务的细节、标准,并且很可能会对你完成的工作做出判断。当前的沟通目标是认识到哪些领域是最相关的,以及要关注的主要方面。
一个黑客马拉松设定了以下任务:对一个有表格数据、图片和清晰指标——RMSE——的数据集进行回归。当我与该公司的数据科学家交谈时,我意识到他们需要一个分类,而不是一个回归——事实是有人认为最好的问题解决方案是那个。此外,它们需要分类,以便在做出决策时认识到哪些参数是最重要的,然后手动处理它们,而不是获得货币指标的增长。即初始任务(用 RMSE 回归)变为分类;评估优先级从获得的准确性变为结果解释机会。这拒绝了使用堆叠和黑盒算法的机会。简单的对话节省了我很多时间,也增加了我获胜的机会。
简单的对话节省了我很多时间,也增加了我获胜的机会。
一旦你清楚地认识到任务,一定要着手工作。您需要设置检查点,即完成任务所需的时间;此外,继续与公司代表和技术专家等导师交流也是一个好主意,因为这有助于在项目开发期间及时做出修正。重新审视这个问题可能会提出一个有趣的解决方案。
组织者过去经常举办讲座和大师班,因为许多新人都参加黑客马拉松。像往常一样,讲座的数量为 3 个,即关于产品形式中自己想法演示方式的讲座,关于技术主题的讲座(例如,在机器学习中使用 open APIs 以避免自己的 speech 2 文本开发两天,但使用现有的代替),关于推销的讲座(介绍自己产品的方式,如何在公开演讲时使用自己的手以避免观众感到厌烦)。有各种方法鼓励参与者,即练习瑜伽、乒乓球和网球或游戏机。
有各种方法鼓励参与者,即练习瑜伽、乒乓球和网球或游戏机。
你需要在周日早上向陪审团提供你的手术结果。好的黑客马拉松意味着一切从专业技术开始,不管你声称的东西真的有用吗?当前的测试目标是将那些只得到漂亮演示而不是真实产品的团队与那些真正成功开发出东西的团队分开。不幸的是,并非所有的黑客马拉松都意味着技术专长,这有时会导致那些获得超过 12 张幻灯片演示而不是真实产品的团队获胜。这样的先例并不常见,但因为它们最容易被记住,这导致了一个事实,即许多人确信一个好的演示是黑客马拉松 99%的胜利。事实是陈述,相当重要,但其贡献不超过 30%。
事实是陈述,相当重要,但其贡献不超过 30%。
一旦参与者发言完毕,评审团将决定授予获奖者。那么,正式的黑客马拉松部分就完成了。
参与黑客马拉松的动机
1.经验
就获得的经验而言,黑客马拉松是一项非常独特的活动。事实上,有几个地方可以在两天内实现自己的想法,并获得即时反馈。批判性思维、团队合作技能、时间管理、在压力下工作的能力、以可理解的形式展示自己的运营成果、演示技能以及其他许多方面都在黑客马拉松中得到了提高。因此,对于有理论知识的人来说,黑客马拉松是一个获得真正有价值经验的好地方。
2.奖赏
通常情况下,黑客马拉松奖金第一名约为 15k-10k 欧元(在俄罗斯为 10-30 万卢布)。可以使用一个简单的公式来计算预期的参与值:
**EV = Prize * WinRate + FutureValue — Costs**
其中**Prize**
是奖金的大小(我们假设只有一个奖金);
**WinRate**
—胜利概率(新手团队的当前值上限为 10%,有经验的团队超过 50%;我遇到过这样的人,他们每次参加黑客马拉松都会获奖,但这是个例外,因为他们的胜率低于 100%)。
**FutureValue**
是展示未来参与收益的一种:它既可以从已获得的经验形式中获利,也可以从已建立的关系、收到的信息等中获利。当前值几乎不可能准确确定,但必须记住;
**Costs**
—交通费、住宿费等。
是否参加的决定是在 hackathon EV 和 activity EV 比较的基础上作出的,这是你想做的,而不是 hackathon:如果你打算整天躺着看电视,那么你应该参加 hackathon;但你的计划是花时间和你的父母或女朋友在一起,然后可能成为你的团队参加黑客马拉松(开玩笑,你自己决定),如果你打算做自由职业者——只要比较一下美元-小时。
根据我自己的计算,我可以肯定地说,参加俄罗斯黑客马拉松与普通初级-中级数据科学家通常工作日的货币利润是相称的,但是有一些重要的特征(团队规模、黑客马拉松类型、奖金等。).因此,今天的黑客马拉松可能会令人愉快地增加你的个人预算,但不是一个真正的黄金机会。
3.在公司和网络工作
黑客马拉松是公司招聘新员工的方式之一。这是一个很好的方式来表明你是一个合格的人,并且知道如何在黑客马拉松上工作,这与在黑板上旋转二叉树的面试形成对比(这并不意味着它对应于你在工作时要完成的任务,但传统必须得到尊重)。这样的战斗条件测试可能会取代整个测试日。
由于参加了黑客马拉松,我找到了第一份工作。我展示了一个从数据中获取更多资金的绝佳机会,以及我将采取的方式。所以,我赢了,然后继续实施那个项目,同时在赞助公司工作。那是我人生中的第四次黑客马拉松。
4.唯一数据集
对于数据科学黑客马拉松来说,这是非常重要的一点,但不幸的是,并不是每个人都意识到它的重要性。通常,赞助公司会在活动期间提供真实数据集。目前的数据是私人的,受到 NDA 的保护,这并不妨碍在真实的数据集而不是玩具泰坦尼克号上展示概念证明。这样的结果将极大地有助于申请某家公司、竞争对手公司的工作,或证明未来类似项目的合理性。显而易见,在其他条件相同的情况下,完成项目并获得积极反馈是一件好事。总的来说,这种实施的项目与 Kaggle 上的奖牌和地位起着类似的作用,但它们对行业的价值更明显。
技巧
参与黑客马拉松是一个相当多样化的背景,很难制定规则列表。不过,在这里我想提供观察清单,能够帮助一个新人:
即使你没有背景或团队,也可以参加黑客马拉松。想想能带来什么好处。也许你有一个有趣的想法或者你精通某个领域?你有一个很好的机会在阐述一个问题的时候运用你的领域知识,并找到有价值的解决方案。或者你可以谷歌一下最好的?如果你能在 GitHub 中找到现成的实现,你的技巧将会节省很多时间。还是你很擅长 Lightgbm 参数调优?在这种情况下,一定要在 Kaggle 比赛中证明这一点,而不是参加黑客马拉松。
**战术比机动更重要。**黑客马拉松设定了解决问题的任务。有时,为了解决问题,需要揭示问题。检查你发现的问题是否真的与公司相关。请务必检查您的解决方案是否符合问题,并问问自己解决方案的最优性。在评估您的决策时,紧急性问题和建议的解决方案的充分性是最重要的。你的神经网络架构不重要。
尽可能多地参加黑客马拉松,但不要参加组织得不好的活动。
将你的 hackathon 操作结果添加到你的简历中,并随意公开写下它。
Very true for hackathons Minimum Viable Product (MVP)
作为数据科学家在科技公司和银行工作的 4 个理由
Photo by Franki Chamaki on Unsplash
小心你的愿望。
我们都知道数据科学是当今的热门话题。每个人都想成为数据科学家,一旦有机会,他们就会投身其中。如果你正在读这篇文章,很可能你正在寻找/对这个领域感兴趣,并且仍然在寻找那个可能有一天
“改变世界”的完美数据科学角色。好吧,让我告诉你一个小秘密,它可能没有你想的那么有趣。
大数据就像青少年性行为:每个人都在谈论它,没有人真正知道如何去做,每个人都认为其他人都在做,所以每个人都声称自己在做。— 克里斯·林奇,Vertica 系统公司
根据一篇数据科学文章,几乎 20%的数据科学家在金融行业工作,而 37%的数据科学家受雇于科技行业。金融行业报酬丰厚,我们中的一些人被它所吸引,但金融行业真的充分利用了他们拥有的数据吗?
在完成你的学位/训练营/工作后,是时候开始实践并决定机会了。如果你像我一样雄心勃勃(并且不顾一切),只是想把你的脚放在门里,你会抓住任何可能呈现给你的机会,只要它有名字数据在里面。
我今天的工作,就是在为时已晚之前阻止你。
#Hold Up
作为一名数据科学家,我今天将重点关注银行与科技公司,因为我可以从个人经验出发。随着各地与数据相关的职位空缺的增加,我在这里分享我的一些经验、角色、环境,以及为什么我认为作为一名数据专业人员,从事科技行业比银行更好。
(免责声明:我仅从个人经验来说,每个人的情况可能不同。我也仅代表我国马来西亚发言。我知道许多外国银行正在充分利用他们的数据。)
你是说科技公司的世界
是真的。目前,我在一家科技公司(不具名)工作,我们在那里运营一个网站/应用程序,连接人们买卖东西。我必须说,他们非常珍惜他们的数据,我们(数据团队)被视为数据的守门人。以下是我头顶的几点:
- 每个部门做出的所有决定都必须有某种数据支持
- 数据是新产品/功能的主要驱动力
- 数据访问仅限于数据团队。因此,我开始与所有其他团队沟通,了解他们如何处理他们请求的数据。
最高管理层通常也关心数据及其使用方式。请记住,这是非常重要的,因为它决定了你将得到什么样的任务。一家拥有数据驱动型管理的数据驱动型公司可以带来惊人的成就,例如:
- 想出各种方法将你拥有的数据货币化
- 探索如何利用数据改进他们的网站/产品/应用程序的可能性(比如数据产品)
- 鼓励你在他们要求的数据中提供见解和建议,他们认为这是你的技能之一
- 探索机器/深度学习的正确用例
此外,我还负责将多个来源的数据加载到我们的数据库中。当我的代码被部署来获取最终在一天结束时用于分析和支持的数据时,我感觉我实际上是在让世界运转,让公司活着。我们曾经有一周没有将数据加载到我们的仓库中,公司的大多数人都感到很痛苦。他们仍然在运作,但是他们没有一个安全网来支持。
Photo by Ben White on Unsplash
对面的可以说是银行。我在两家不同的银行工作了 7 个月。第一个是数据团队的实习生职位,另一个是数据团队的数据分析师(或者他们称之为决策管理)。请注意,我工作过的银行中,有一家在我所在的国家的行业中占有最大的市场份额。换句话说,我在我国最大的银行之一工作过。
首先,您不需要根据收到的数据请求提供任何额外的内容。
你找到有意义的东西了吗?一个想法?或者某种改进他们产品的建议?他们并不在乎。
他们只要求你做报告,通常,你只报告已经自动生成的 excel 数字,你只需要在那里仔细检查它。他们甚至不需要图表、可视化或你的输入。
只是摘录。不要想。
有几次我觉得受到了挑战,那就是当这些数字与其他部门的一些数字不匹配时,那时我必须进入脚本并修改一些代码。但即使那样,我最后也只是报了正确的数字,没有人真正关心我做了什么。
你可能会说,你是一个新手。因为你是新来的,他们不会把更重的任务交给你。嗯,我独自全权负责个人贷款&分期付款购买组合。我也和我的同事谈过这件事,他们提到他们在做类似的事情,但形式不同。基本上,你会学到更多的是银行知识,而不是数据,这不是一件坏事,只是这不是我想要的。
我遇到的最有趣的任务是由我的上司提出的,是对一个人购买某种产品的概率进行统计。基本上,它是这样的——收入高于 X 美元的顾客购买该产品的可能性增加 X%。我发现这在当时非常有意义。然而,回想起来,我甚至没有机会执行这样的任务。此外,与我现在为公司所做的贡献相比,它似乎没有那么大的影响力。
在我看来,我认为这仅仅是因为银行业务的性质。他们的商业模式的设计方式限制了他们产品的改进/创新。贷款和存款总是贷款和存款,没有任何令人兴奋的产品要实现(或者有吗?).由于这是一个稳定的业务,我们大多数人都会以这样或那样的方式遇到银行,他们并不真正认为有必要实施高端人工智能/机器学习模型/探索性分析来帮助他们开展业务。只是不值得他们花费时间和精力。
对你们有些人来说可能不同,但在马来西亚,我可以代表大多数银行。
与一家不断想方设法改进其产品的科技公司相比,无论是推荐算法、图像和语音识别、预测趋势的机器学习模型,还是实时数据产品,我觉得成为那个世界的一部分更令人兴奋。
Photo by Riccardo Annandale on Unsplash
科技公司鼓励创新
数字时代。
让我们想一想,公司是如何获得他们的数据的。这是通过技术——网站、应用程序、本地程序。如果没有它们,我们将会把所有的数据都存储在储藏室的纸堆上,当我们需要的时候就翻翻它们。
关于技术的事情是——它总是在进化。
随着大量新网站和应用程序的开发,人们迷失在数据中。坦率地说,他们不知道该拿它怎么办。对于少数这样做的人来说,他们可能只是触及了表面。这是许多利益相关者不敢投资数据科学的原因之一,他们不信任数据科学。
谷歌、facebook 和 twitter 等几家最大的科技公司正在引领我们了解数据能做什么,以及它有多强大。这鼓励了一些较小的科技公司跟随他们的脚步,试图在数据领域实施最新技术。并非所有的公司(尤其是非科技公司)都有勇气(或头脑)去探索新技术,他们只是专注于用传统的商业模式盈利。
在我工作的公司,我们将数据存储在谷歌云中, bigquery 。这可能比你想象的更重要。如果你的公司正在花钱投资他们数据中的好技术,这意味着你有机会探索/实现仅限于你能学到的新东西。
这里有一个例子,我的公司最近从 redshift 迁移到了 bigquery,因此他们需要数据工程将所有数据管道从之前的位置迁移到 bigquery。经过多次讨论,该公司已经决定使用由 Google Cloud Composer 管理的Apache air 流来创建管道。由于这是谷歌的一个相对较新的软件,除了它擅长做什么之外,互联网上没有太多关于这个产品的信息。以此为契机,我跳进了气流,以最快的速度学习一切,并向我的上级展示了管道。一件事导致另一件事,部署到 airflow 上每天获取数据的生产代码确实是由您的编写的。
我也是每小时数据提取的先驱。在我之前,该公司只实施日常提取。
这是巨大的。
不是每个人都有这样的机会。这很说明问题。我为公司做出了巨大的贡献,在未来的努力中,我也有一个项目要展示(这让我胜过了我的竞争对手)。公司也更看重我,因为当管道出现问题/需要改进时,我是关键人物(看我为什么提到我是个大人物?).总而言之,在一家科技公司,每天都会有新的东西要学。如果你跑得快,这就是展示你的技能的地方,也许作为回报,你会得到你一直渴望的好的评价。
另一方面,银行也是如此。
在我工作的第一家银行(也是我国最大的银行),甚至连计算机都是古老的。他们仍然使用电脑显示器作为他们的显示器,而我现在在工作中使用 Macbook Pro。他们的数据存储在 prem 和 SAS 代码中,这使得迁移到其他技术更加困难。你还会注意到,管理层没有兴趣投身于深度/机器学习领域。他们在没有这些技术的情况下也取得了成果,如果他们看不到潜在的收益,他们也不会改变。如果当前的系统已经在运行,没有人愿意做出改变。
你在银行学得慢的原因之一是,他们限制了你的互联网。努夫说。
你不能登录 Youtube。
您无法登录 Udemy。
你不能登录任何东西。如果我甚至不能进入堆栈溢出,我该如何调试我 Python 代码呢?我不能。这对员工学习新技能、创新和创造任何变化都是一个巨大的障碍。在我现在的公司,我们有一个 Udemy 的公司账户,允许我登录 Udemy 并免费注册任何课程。
你想从一个著名的付费课程学习 Python 吗?你可以在这里。
另一个需要注意的重要事情是,如果你在银行工作了 3-4 年,你必然会学习 SAS 作为你的主要数据编程语言。据我所知,SAS 广泛应用于银行和保险行业。技术行业主要使用 Python 和 R 来处理数据,因为它们是开源的(免费的),易于阅读,并且与许多技术兼容(AWS,Google 等)。他们也不使用 SAS,因为它非常昂贵。因此,你有可能把自己锁在 SAS 的世界里。
如果你喜欢也可以。但是仔细想想。
如果你要为一家科技公司招聘,你会选择一个有 4 年 Python 经验和成熟项目的人,还是一个有 SAS 知识的银行业的人,记住你的公司不会购买 SAS 许可证。答案很明显。
你可能会说,既然你对 python 感兴趣,你可以通过一些个人项目来学习 python。但这不是重点。如果你那么聪明,有那么多时间,你可能会从科技行业开始。然而,如果你的梦想是从在银行工作开始,那么你可能应该忽略这篇文章。
科技公司有更好的工作环境
Photo by Nastuh Abootalebi on Unsplash
一个工作场所的文化,一个组织的价值观、规范和实践对我们的幸福和成功有着巨大的影响。—亚当·格兰特
你曾经梦想过在传说中的谷歌工作空间工作吗?免费的食物和饮料,了不起的人,舒适的椅子,你明白了。嗯,我们这里没有。
但是我们已经很接近了。
首先,我工作的公司有一个开放的空间环境,在那里我可以随时找到任何人,问任何我想问的问题。这对你来说可能没那么重要,但相信我,它很重要。一旦你开始热身,你就会和来自不同背景和团队的人交往。工作也完成得更快。例如,营销团队经常从我这里请求数据,用于他们的运营。如果我愿意,我可以直接走到他们面前,问他们这些数据是做什么用的。作为回报,他们会从头到尾向我解释这些数据的背景和用途。
这提高了我工作的质量和效率,因为我确切地知道他们想要什么。
在银行,我们通常通过电话来做这件事。你可能会争辩说这没多大关系。这是我给你的另一个例子。
我最近启动了一个个人项目,利用实时数据来支持公司网站上的一个产品。既然是个人项目,就没人知道这件事。在我完成基础工作后,我有许多问题要问。
- 产品经理对我的项目有什么看法?比如实时是怎么定义的?他想要几秒钟吗?还是分钟/小时?这一点很重要,因为它越实时,网站的负载就越高,数据的价值就越小(例如,在过去的 10 秒钟里,有 X 个人访问了你的网站)。这需要经验。
- 我如何在网站和应用程序上实现我的实时数据?我是数据分析师/工程师,不是网站开发者。
- 我的项目可能吗?它给公司带来了显著的价值吗?对于带来的价值,执行这个的时间和精力值得吗?观点在这里很重要。
我个人希望在我向我的上级和利益相关者陈述任何事情之前,这些问题能够得到解答。我意识到任何改变都是通过团队来实现的,而不是个人。我可能有这个想法,但是我需要帮助来执行它。因此,我不想提出一个想法,只是发现它不可能在我们现有的堆栈上实现。
当我和同事见面时,我显然需要解释我的项目背后的概念。在这种情况下,我坚持面对面交流,因为任何印象/困惑/信心都可以立即被发现,这反过来又能更快地完成工作。
这里的环境也更有活力。没有严格的工作时间,人们穿着时髦的便装,我们偶尔会有免费的食物。这个地方光线很好,充满了绿色植物,员工们在墙上绘有丰富多彩的有意义的引言。基本上,所有的东西都布置好了,这样你会在你的工作空间感到舒适,因为你一天要在这里呆 8 个多小时。
我们都同意,银行的工作空间不是最好的,尤其是对我国而言。如果你没有去过银行的办公室,让我告诉你吧。你必须每天准时,一分不差。根据你所在的部门,你也会晚下班。如果你准时离开,所有其他员工都会像往常一样盯着你。每天都需要正装,工作空间相当沉闷。我认为这很正常,直到我研究了其他国家的其他公司。还是那句话,我不反对,我只是不喜欢。
科技公司有更好的公司层级结构
Photo by Edvard Alexander Rølvaag on Unsplash
这不是秘密。
银行有复杂的企业金字塔结构供你攀爬。每个人都想成为经理,但是你需要多久才能做到呢?从初级,高级主管,助理经理,经理,如此这般。任务严格按照员工的头衔分配。例如,一个高级主管不会接受像管理一个落入经理手中的项目这样的任务。另一方面,我现在工作的地方要开放得多。如果你能证明你有这个能力,你可以建议自己对某些事情负责。我发起的气流项目就是一个最好的例子。
银行的性质也使得这座金字塔更难攀爬。你只需要遵从上级的指示。没有创新,你将获得的大多数任务的本质都是重复的。没有创新,就无法真正给公司带来有意义的贡献。据说,如果你想加薪或升职,你必须为公司带来价值。
但是,如果其他人都做出了类似的贡献,你带来的东西又有什么价值呢?
银行通常也会将你工作的时间视为经验,这有助于确定你的薪酬。这与行业中缺乏创新和任务的重复性高度相关。因此,你很快就会注意到,即使你比别人更聪明或者效率是别人的两倍,你也只需在银行工作最少几年就能获得经理这样的头衔。这样,你还会注意到同事之间的薪酬非常标准。例如,对于工作了 5 年的人来说,工资通常是 RM X。
在科技领域,经验取决于你所取得的成就。你能展示的项目、个人项目、副业将极大地有助于公司决定你的头衔和薪水。例如,如果你已经做了 10 年的数据分析师,但你没有机器/深度学习方面的经验,你就不会在这里获得“数据科学家”的头衔。因此,众所周知,个人投资组合对从事技术工作的人来说非常重要。这是为了让他们在申请新公司或在当前公司要求晋升时,能够展示自己的工作。当你对自己的成就感到满意时,你可以通过利用你对公司的贡献,在评估期间协商调整你的薪酬。顺便说一下,我说的不是定期捐款,而是非同寻常的捐款。那些让你在公司不可替代的人。
回到等级制度,科技通常有更平金字塔。在我工作的地方,我直接向公司的首席财务官汇报。同样,这里更加开放,为了更好的效率,任何形式都被跳过。如果我有什么要说或建议,我通常会直接向他提出来。我更喜欢这样。
Photo by Randalyn Hill on Unsplash
我希望这能给你一个大概的了解。
对我个人来说,我不认为我的日常工作是朝九晚五。我想喜欢我的工作,我想让它点燃我的激情,这样我每天都能保持动力。
我完全理解有些人没有我幸运。有些人几乎无法迈出第一步。为此,我感激我现在所拥有的。就我所担任的角色而言,我了解我们所拥有的基础、工作方式、位置和可能性。我能够探索新技术,并使用适当的用例来实现它们。我真的相信我所做的,我相信我给公司带来的价值。
如果我想让你从这件事中吸取什么的话,那就是对你所做的事情充满信心和热情。如果你所在的公司阻碍了你的发展,你应该离开它,因为在那里你不会有任何效率。祝你一切顺利。
只是我的两分钱。下次见!
你的机器学习代码可能不好的 4 个原因
你当前的 ML 工作流程可能会将几个线性执行的功能链接在一起。虽然很快,但它可能有许多问题。与其线性链接函数,不如将数据科学代码编写为一组任务,它们之间存在依赖关系。也就是说,您的数据科学工作流应该是一个 DAG。
您当前的工作流程可能将几个功能连接在一起,如下例所示。虽然很快,但它可能有许多问题:
- 随着复杂性的增加,它无法很好地扩展
- 您必须手动跟踪哪些函数是用哪些参数运行的
- 您必须手动跟踪数据保存的位置
- 其他人很难阅读
import pandas as pd
import sklearn.svm, sklearn.metricsdef get_data():
data = download_data()
data.to_pickle('data.pkl')def preprocess(data):
data = clean_data(data)
return data# flow parameters
do_preprocess = True# run workflow
get_data()df_train = pd.read_pickle('data.pkl')
if do_preprocess:
df_train = preprocess(df_train)
model = sklearn.svm.SVC()
model.fit(df_train.iloc[:,:-1], df_train['y'])
print(sklearn.metrics.accuracy_score(df_train['y'],model.predict(df_train.iloc[:,:-1])))
该怎么办呢?
与其线性链接函数,不如将数据科学代码编写为一组任务,它们之间存在依赖关系。也就是说,您的数据科学工作流应该是一个 DAG。
https://github.com/d6t/d6tflow 是一个免费的开源库,可以让你轻松构建高效的数据科学工作流。
我们没有编写这样的函数:
def process_data(df, parameter):
df = do_stuff(df)
data.to_pickle('data.pkl')
return dfdataraw = download_data()
data = process_data(dataraw)
您可以编写可以作为 DAG 链接在一起的任务:
class TaskGetData(d6tflow.tasks.TaskPqPandas): def run():
data = download_data()
self.save(data) # save output dataclass TaskProcess(d6tflow.tasks.TaskPqPandas): def requires(self):
return TaskGetData() # define dependency def run(self):
data = self.input().load() # load input data
data = do_stuff(data) # process data
self.save(data) # save output datadata = TaskProcess().output().load() # load output data
这样做的好处是:
- 不管你的工作流程有多复杂,所有的任务都遵循相同的模式
- 你有一个可伸缩的输入
requires()
和处理功能run()
- 您可以快速加载和保存数据,而不必硬编码文件名
- 如果输入任务没有完成,它将自动运行
- 如果输入数据或参数改变,该功能将自动重新运行
- 其他人阅读和理解工作流要容易得多
机器学习 DAG 示例
下面是一个机器学习流程的程式化示例,用 DAG 表示。最后,您只需要运行 TaskTrain(),它就会自动知道要运行哪些依赖项。完整示例见https://github . com/d6t/d6t flow/blob/master/docs/example-ml . MD
import pandas as pd
import sklearn, sklearn.svm
import d6tflow
import luigi# define workflow
class TaskGetData(d6tflow.tasks.TaskPqPandas): # save dataframe as parquet def run(self):
data = download_data()
data = clean_data(data)
self.save(data) # quickly save dataframeclass TaskPreprocess(d6tflow.tasks.TaskCachePandas): # save data in memory
do_preprocess = luigi.BoolParameter(default=True) # parameter for preprocessing yes/no def requires(self):
return TaskGetData() # define dependency def run(self):
df_train = self.input().load() # quickly load required data
if self.do_preprocess:
df_train = preprocess(df_train)
self.save(df_train)class TaskTrain(d6tflow.tasks.TaskPickle): # save output as pickle
do_preprocess = luigi.BoolParameter(default=True) def requires(self):
return TaskPreprocess(do_preprocess=self.do_preprocess) def run(self):
df_train = self.input().load()
model = sklearn.svm.SVC()
model.fit(df_train.iloc[:,:-1], df_train['y'])
self.save(model)# Check task dependencies and their execution status
d6tflow.preview(TaskTrain())'''
└─--[TaskTrain-{'do_preprocess': 'True'} (PENDING)]
└─--[TaskPreprocess-{'do_preprocess': 'True'} (PENDING)]
└─--[TaskGetData-{} (PENDING)]
'''# Execute the model training task including dependencies
d6tflow.run(TaskTrain())'''
===== Luigi Execution Summary =====Scheduled 3 tasks of which:
* 3 ran successfully:
- 1 TaskGetData()
- 1 TaskPreprocess(do_preprocess=True)
- 1 TaskTrain(do_preprocess=True)
'''# Load task output to pandas dataframe and model object for model evaluation
model = TaskTrain().output().load()
df_train = TaskPreprocess().output().load()
print(sklearn.metrics.accuracy_score(df_train['y'],model.predict(df_train.iloc[:,:-1])))
# 0.9733333333333334
结论
将机器学习代码编写为一系列线性函数可能会产生许多工作流问题。由于不同 ML 任务之间复杂的依赖关系,最好将它们写成 DAG。https://github.com/d6t/d6tflow 让这变得非常容易。或者,你可以使用 luigi 和 airflow ,但是它们更适合 ETL 而不是数据科学。
2020 年进军数据科学的 4 个步骤
2020 年就要到了,这意味着一年中的这个时候,你需要拿出一张纸,列出下一年你想要完成的目标。
Photo by Jude Beck on Unsplash
这没什么错,但是你可能知道很容易列出一个几乎不可能的、耗时的目标,这只会让你感到不知所措,并且很可能没有动力——因为有太多事情要做。
如果你打算明年注册数据科学,我会说你做了一个伟大的决定。这个领域被广泛接受,到处都有工作,薪水很高,甚至管理层也在慢慢明白为什么需要数据科学。
但是在我们开始之前,让我稍微打消你(是的,这是必要的)——一年的时间不足以学习整个领域。
不要误解我的意思,1 年的时间足以让你找到第一份工作,但很可能你不会在一年内从 0 成为数据科学团队的领导者(如果你成功做到了,请在评论区分享你的故事)。
话虽如此,让我们探索一下你需要的所有技能以及如何学习足够的技能让你起步。
1.复习数学技能
你很可能听说过数据科学苛刻的数学先决条件。你需要知道的数学知识量会因工作角色的不同而有很大差异,但作为开始工作时你需要多少数学知识的一般答案,我会说:比你想象的要少。
By GIPHY
推理会随之而来。深入每一个有点相关的领域很有诱惑力——比如微积分、线性代数、概率或统计——但是你需要知道什么时候该停下来。
不要误会我的意思,如果你有世界上所有的时间,请成为我的客人,成为上述领域的专家,否则,请确保你没有浪费时间。要想作为初级数据科学家进入这个领域,你需要了解数学,但更多的是直觉层面。你需要知道在某些情况下该怎么做——这就是直觉的作用——但是我不会花太多时间手工解决复杂的数学问题。
如果你擅长直觉,知道如何编码,那就足够了。找到工作后,你有足够的时间深入学习数学——不需要事先学习所有的东西。
如果你还没有高等数学学位,我不建议你花超过 2-3 个月的时间来温习数学技能。
2.编程呢?
是的,编码技能对数据科学至关重要。如果你在这个行业找到了一份工作,而你的编码技能很缺乏,很可能你会知道你需要做什么,但你不会知道如何去做。你很可能会患上 SOCPS ( 栈溢出复制粘贴综合症),甚至可能没有阅读问题和答案。
By GIPHY
在网上寻找更优雅的解决方案没有错,但你应该知道如何自己写一个基本的解决方案。
如果你以前从未写过一行代码,从小处着手,读一本关于 Python 或 R 以及它们在数据科学中的作用的书(以获得完整的图片)。然后深入研究语法。不要担心记住所有的东西,只要确保知道当你卡住的时候去哪里找就行了。
如果你已经读过一本书或者完成了一门编程课程,并且你知道语法,但是不知道如何处理这个问题,花一些时间学习算法和数据结构。还要回答最常见的编码面试问题,因为这些问题会激发你的创造力(或者让你生气)。
你对自己的编程技能满意吗? 太牛了!现在花一些时间在分析库上——比如 Numpy 和 Pandas。
你花在编码上的时间也会有很大不同。对于完全的初学者,或者只是需要图书馆知识的人来说就不一样了。我认为对于完全的初学者来说,3-4 个月足够了,如果你只是学习分析库,大约 1 个月。
3.数据库?
您正在分析的数据很可能来自某种数据库。这就是典型的工作环境与书本或在线课程不同的地方——你不会得到一个格式良好的 CSV 文件。通常情况下,你需要一个领域知识(或拥有领域知识的人),以及大量的 SQL 知识。
如果你要用 Python 或 R 之类的编程语言做分析,那么不要花太多时间学习 SQL 分析函数、PLSQL/T-SQL 和所有那些更高级的东西。在这种情况下,您的 SQL 工作将主要依赖于连接两个表来执行分析。
你会在这里花多少时间取决于你使用它们的方式和之前的知识,但是对于初学者来说,不要在这里花超过一个月的时间。
4.现在让我们学习一些数据科学
By GIPHY
如果你遵循了上面的每一步,并且你没有一些先验知识,那么现在可能是 2020 年 8 月或 9 月。很多时间过去了,但是你已经具备了找到第一份工作的所有先决条件。
嗯,准确的说不全是。
您正在寻找数据科学方面的工作,到目前为止,我们只讨论了先决条件。我建议在接下来的两个月中,您应该熟悉基本的数据分析和可视化库,比如:
- Numpy
- 熊猫
- Matplotlib
- Scipy
- 统计模型
也就是说,如果你还没有学过的话(你可能已经学过了,但是不清楚为什么需要它们会很无聊)。
不要只是浏览教程,从网上下载一些数据集进行可靠的分析。然后上网看看别人在同一个数据集上做了什么,看看哪里可以改进。
在这两个月的时间里,你还应该熟悉一些机器学习算法,比如:
- 线性回归
- 逻辑回归
- 分类和回归树
- KNN
- 朴素贝叶斯
- SVM
也许你在实践中不会用到其中的一些,但是它们会为你提供一个基础,让你以后学习更高级的算法,比如 XGBoost 和神经网络。
像分析库一样,确保不要一个教程接一个教程地学习,而是自己完成高质量的工作。如果你喜欢,试着在 Numpy 中从头开始实现算法**——但这不是强制性的。**
下一步是什么?
2020 年只剩下几个月了,创建一个 GitHub 账户,上传 3-5 篇你最好的分析/ML 文章给潜在雇主看。另外,制作一份漂亮的简历和求职信。
如果你真的喜欢,以在线博客的形式记录你的学习历程。在线展示只能帮助你的职业发展,也就是说,如果你不每天发布无意义的内容——但我相信你的判断。
就这样,开始给你想去的公司投简历吧——没有别的办法了。
真心希望 2020 年是你的一年。去粉碎它。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
高级特征工程和预处理的 4 个技巧
特征工程
创建新要素、检测异常值、处理不平衡数据和估算缺失值的技术。
https://www.analyticsvidhya.com/blog/2018/11/data-engineer-comprehensive-list-resources-get-started/
显然,开发机器学习模型的两个最重要的步骤是特征工程和预处理。特征工程包括创建特征,而预处理包括清理数据。
折磨数据,它会承认任何事情*。—罗纳德·科斯*
我们经常花费大量时间将数据提炼为对建模有用的东西。为了使这项工作更有效,我想分享 4 个技巧和诀窍,可以帮助你工程和预处理这些功能。
我应该注意到,尽管这可能是老生常谈,领域知识可能是工程特性中最重要的东西之一。通过更好地理解您所使用的功能,它可能有助于您防止欠拟合和过拟合。
你可以在这里找到带分析的笔记本。
1.重采样不平衡数据
在实践中,您经常会遇到不平衡的数据。如果你的目标只是有轻微的不平衡,这不一定是个问题。然后,您可以通过使用适当的数据验证措施来解决这个问题,例如平衡精度、精确召回曲线或 F1 得分。
不幸的是,情况并非总是如此,您的目标变量可能会非常不平衡(例如,10:1)。相反,您可以使用称为击打的技术对少数目标进行过采样,以引入平衡。
重击
SMOTE 代表合成少数过采样技术,是一种用于增加少数类样本的过采样技术。
它通过查看目标的特征空间并检测最近的邻居来生成新的样本。然后,它简单地选择相似的样本,并在相邻样本的特征空间内随机地一次改变一列。
实现 SMOTE 的模块可以在不平衡学习包中找到。您可以简单地导入包并应用 fit_transform:
Original data (LEFT) versus oversampled data (RIGHT).
如您所见,该模型成功地对目标变量进行了过采样。使用 SMOTE 进行过采样时,您可以采取几种策略:
**'minority'**
:只对少数类重新采样;**'not minority'**
:对除少数类以外的所有类进行重新采样;**'not majority'**
:对除多数类以外的所有类进行重新采样;**'all'**
:对所有类进行重采样;- 当
**dict**
时,按键对应目标类别。这些值对应于每个目标类所需的样本数。
我选择使用字典来指定我想要对数据进行过采样的程度。
附加提示 1 :如果您的数据集中有分类变量,SMOTE 可能会为那些不可能发生的变量创建值。例如,如果有一个名为 isMale 的变量,它只能取 0 或 1,那么 SMOTE 可能会创建 0.365 作为值。
相反,您可以使用考虑到分类变量性质的 SMOTENC。该版本也可在不平衡学习包中获得。
附加提示 2: 确保在创建训练/测试分割后进行过采样,以便只对训练数据进行过采样。您通常不希望在合成数据上测试您的模型。
2.创建新功能
为了提高模型的质量和预测能力,通常会从现有变量中创建新的特征。我们可以在每对变量之间创建一些交互(例如,乘或除),希望找到一个有趣的新特征。然而,这是一个漫长的过程,需要大量的编码。幸运的是,这可以通过使用深度特征合成来实现自动化。
深度特征合成
深度特征合成(DFS)是一种算法,使您能够快速创建具有不同深度的新变量。例如,您可以将多对列相乘,但也可以选择先将 A 列与 B 列相乘,然后再将 c 列相加。
首先,让我介绍一下我将在这个例子中使用的数据。我选择使用人力资源分析数据,因为这些功能很容易理解:
简单地基于我们的直觉,我们可以将**average_monthly_hours**
除以**number_project**
识别为一个有趣的新变量。然而,如果我们只遵循直觉,可能会错过更多的关系。
包确实需要理解它们对实体的使用。但是,如果您使用单个表,您可以简单地遵循下面的代码:
第一步是创建一个**entity**
,如果需要的话,可以从它创建与其他表的关系。接下来,我们可以简单地运行**ft.dfs**
来创建新的变量。我们用参数**trans_primitives**
指定如何创建变量。我们选择了数字变量相加或者相乘。
The output of DFS if verbose = True
正如你在上面的图片中看到的,我们只用了几行代码就创建了额外的 668 个特性。创建的功能的几个示例:
**last_evaluation**
乘以**satisfaction_level**
**left**
乘以**promotion_last_5years**
**average_monthly_hours**
乘以**satisfaction_level**
加上**time_spend_company**
附加提示 1: 注意,这里的实现比较基础。DFS 的伟大之处在于它可以从表之间的聚合创建新的变量(例如,事实和维度)。参见此链接的示例。
附加提示 2: 运行**ft.list_primitives()**
以查看您可以执行的聚合的完整列表。它甚至处理时间戳、空值和经度/纬度信息。
3.处理缺失值
和往常一样,没有处理缺失值的最佳方式。根据您的数据,简单地用某些组的平均值或模式填充它们可能就足够了。然而,有一些先进的技术可以使用已知的数据部分来估算缺失值。
一个这样的方法叫做iterative inputr这是 Scikit-Learn 中的一个新包,它基于流行的 R 算法,用于输入缺失变量 MICE。
迭代估算器
尽管 python 是开发机器学习模型的一种很好的语言,但仍有相当多的方法在 R 中工作得更好。一个例子是 R 中完善的插补包:missForest、mi、mice 等。
迭代估算器由 Scikit-Learn 开发,将每个缺失值的特征建模为其他特征的函数。它以此作为估算值。在每一步,选择一个特征作为输出y
,所有其他特征作为输入X
。然后在X
和y
上安装一个回归变量,用于预测y
的缺失值。对每个特征都这样做,并在几轮插补中重复。
让我们看一个例子。我使用的数据是众所周知的泰坦尼克号数据集。在这个数据集中,列Age
有我们想要填充的缺失值。代码一如既往地简单明了:
这种方法的好处在于它允许你使用自己选择的估计量。我使用了一个 RandomForestRegressor 来模拟 r 中常用的 missForest 的行为。
附加提示 1: 如果您有足够的数据,那么简单地删除缺失数据的样本可能是一个有吸引力的选择。但是,请记住,这可能会在您的数据中产生偏差。也许丢失的数据遵循一种你错过的模式。
附加提示 2 :迭代估算器允许使用不同的估算器。经过一些测试,我发现你甚至可以使用 Catboost 作为一个估算器!不幸的是,LightGBM 和 XGBoost 不起作用,因为它们的随机状态名不同。
4.离群点检测
如果对数据没有很好的理解,离群值是很难发现的。如果您非常了解数据,您可以更容易地指定数据仍然有意义的阈值。
有时这是不可能的,因为很难实现对数据的完美理解。相反,你可以利用离群点检测算法,比如流行的隔离森林。
隔离森林
在隔离森林算法中,关键字是隔离。本质上,该算法检查样本分离的难易程度。这将产生一个隔离数,该隔离数通过在随机决策树中隔离样本所需的分裂数来计算。然后对所有树的隔离数进行平均。
Isolation Forest Procedure. Retrieved from: https://donghwa-kim.github.io/iforest.html
如果算法只需要做几次分裂就能找到一个样本,那么它更有可能是一个离群值。分割本身也是随机分割的,从而为异常产生更短的路径。因此,当所有树的隔离数较低时,该样本极有可能是异常。
为了展示一个例子,我再次使用了我们之前使用过的信用卡数据集:
额外提示 1 :有一个扩展版本的隔离森林,它改进了一些缺点。然而,T4 的评论褒贬不一。
感谢您的阅读!
如果你和我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我,或者在 Twitter 上关注我。
有代码的笔记本可以在这里找到。
任何反馈和意见,一如既往,非常感谢!
在下一个 Python 项目中使用 PyCharm 的 4 个理由
如何使用编辑器的特性来帮助您在大型项目中跟踪 Python 代码
The PyCharm Logo from jetbrains.com/pycharm
PyCharm 是最常见的 Python 编辑器,仅次于 Spyder。当我几年前开始使用它时,我正在为我的毕业设计编写一个推荐系统。我只是听从了我的项目教练的建议,完全不知道编辑器的优点是什么。我知道它与 Anaconda 集成在一起,这让我的生活稍微轻松了一些,但仅此而已。老实说,当时我也不太了解版本控制。3 年过去了,我还在坚持 PyCharm,但这一次,我有我的理由。
当您只是简单地尝试机器学习或为不需要复杂的文件夹结构或模块中组织的脚本的短项目编码时,编辑器的选择通常并不重要。当项目变得更大,有几个脚本、模块、测试和程序员在同一个脚本上协作时,问题和偏好通常会出现。我相信,这就是 PyCharm 的额外特性对任何 Python 程序员都有很大帮助的地方。
我只是提到社区版的功能,而不是专业版的。因此,任何人都应该能够在该软件的免费版本中使用这些功能。
我将描述 PyCharm 的 4 个特性,它们在我上一个 Python 项目中产生了真正积极的影响:
- **寻找瓦尔多:**如何在大型项目中轻松导航
- **Git 集成:**版本控制变得简单,包括快速解决冲突!
- **窗口分割:**为了在开发时更好地了解代码。
- **调试:**如何避免不计其数的打印语句!
“寻找沃尔多”的情况
任何程序员都知道,当他们可以看到代码中使用的函数,但在任何地方都找不到它的定义时,是多么痛苦。他们知道它的名字,也知道它的样子。这个“Waldo”函数似乎在做一些至关重要的事情,但是当脚本数量众多和/或相当长时,要找出这个函数最初是在哪里定义的可能会很麻烦。
PyCharm 有一个非常好的特性,允许在项目中的任何地方查找某个关键字的出现。它类似于 CTRL-F,但更好。
在路径中查找功能
位置:编辑>查找>在路径或**中查找使用快捷键 CTRL-Shift-F**
The Find in Path window in PyCharm
当我需要查找变量或函数的第一个引用时,Pycharm 中的" Find in Path "特性非常方便。如果我想包括库或者只包括某个模块,它也有几个选项来改变我的搜索范围!另一个方便的特性,“路径中的替换”,也是同样的工作方式。它可以自动替换我的项目/模块/范围中出现的所有关键字。
我喜欢这个功能,因为我很懒,也很不耐烦。人们总是可以判断出函数是否被导入,进入文件夹找到正确的模块(如果函数在其中),然后滚动脚本直到找到函数定义。但是时间和耐心往往是稀缺的,所以当谈到轻松导航大型项目时,任何帮助都是受欢迎的。
一点小小的警告…
值得一提的是,如果你一直给你的函数或变量起相同的无意义的名字,比如“x,y,z”,“result”和“df”,这个特性就变得毫无用处。我建议在项目变得更大之前,给变量和函数取一个有意义的名字,这也是为了下一批可能要从事这项工作的程序员。
没有理由不使用版本控制!
使用版本控制可以理解版本控制的重要性。幸运的是,py charm非常容易与 Git 一起使用。无论您喜欢使用命令行还是 GUI,选项都在那里。您可以使用 PyCharm 中的选项,在版本控制下提交和推送到您的分支,恢复到您脚本的前一个版本,以及比较分支(尽管我不经常使用那个)。你也可以很容易地在屏幕的右下角看到你在哪个分支。
解决冲突功能(我的最爱!)
地点: VCS >吉特>解决冲突
Resolve Conflict window from jetbrains.com
PyCharm 的“解决冲突”特性仍然是有史以来最好的特性(我甚至没有夸张)。当我不得不解决几个脚本中的多个冲突时,它让我省去很多麻烦。当在本地合并一个分支后发生冲突时,PyCharm 将以红色显示所有有冲突的文件。在上面提到的位置打开“解决冲突”窗口后,PyCharm 在一个窗口中显示我的分支版本、合并的版本和我试图合并的分支版本。对于每个变更或冲突,我可以决定在合并的脚本中采用冲突代码的哪一部分。当几个程序员在同一个项目上工作时,合并冲突经常发生,所以我非常喜欢 PyCharm 的这个特性。
我们需要更多的窗户!
位置:右击我的脚本名>向右移动
Move Right option
当我在写一个新的脚本或者更新一个现有的脚本时,我经常需要在不同的脚本之间来回切换。经常需要查看我们使用的代码约定,在另一个脚本中定义的函数名,或者我以前编写代码的方式。皮查姆也接手了这个案子。它允许您拆分和移动窗口,以便在您当前正在处理的脚本旁边显示一个或多个脚本。如果你还想在代码的工作方式和外观上保持某种一致性,这会很有帮助。
压扁虫子!
当我在一个大项目中工作时,调试可能是一项非常痛苦的任务,并且输出中有些东西不正确。要找出我的数据帧为什么和在哪里得到一些重复值,可能需要在我的代码中的几个地方使用无数不同的 print 语句,我可能会迷失在输出窗口中打印的变量和数据帧的数量中。
调试器
位置:右击我的脚本名>调试‘测试’
My extremely poor attempt at highlighting the important tools of the debugger.
通过使用断点和调试器模式,你可以很容易地在你代码的任何地方评估你的变量。任何时候你的代码在断点处停止,调试窗口将显示每个变量的值,它允许你查看数据帧内部。你也可以点击小计算器,在临时变量上写表达式。如果你通过使用我(试图)突出显示的箭头来浏览代码,你也可以看到你的变量的内容是如何逐行演变的。要了解更多细节,你还可以找到一个非常清晰的教程,教你如何在jetbrains.com上使用调试器。
感谢阅读!
我最近与数据科学相关的故事:
&他/她不需要知道多少。
towardsdatascience.com](/how-much-data-engineering-does-a-data-scientist-need-to-know-93afe7fab40c) [## 从销售代表到数据科学家
我从销售专员到数据科学家的转变&最大的挑战是什么。
towardsdatascience.com](/from-being-a-sales-rep-to-being-a-data-scientist-4bb1da79ba3f)
使用 Python Matplotlib 可视化行为的 4 个技巧,以及简单的教程
处理不同动作事件和多次发生的事件的提示
为什么要可视化客户行为?
我目前在 Unbounce 工作,担任数据分析师。Unbounce 是一个基于订阅的工具,帮助营销人员建立和优化登录页面,以获得高转化率。像任何其他基于订阅的公司一样,我们希望减少客户流失,吸引客户停留更长时间。其中很大一部分是了解哪些行为与更长的客户保持率相关,为什么会这样,以及我们如何培养这些行为。
虽然我们可以使用许多统计方法来检查客户行为趋势,但我发现将一些客户的行为可视化(并与面向客户的团队讨论)以形成稍后可以验证的假设是有帮助的。
数据
在本教程中,我们将使用包含 4 个帐户的事件和订阅信息的示例数据。不包含任何个人信息,并且帐户的唯一标识已被更改以确保安全。
客户行为数据通常包括日期和时间事件,即客户执行特定操作的时刻。在本教程中,我们将研究帐户重新发布(republished_df
)和登录(login_df
)的事件。
我们也有每个客户的订阅信息(subscription_info_df
)。一个客户可以有多个订阅,但每个订阅都是互斥的。客户的新订阅只有在他/她翻炒(意味着停止支付)然后重新订阅时才开始。我们称这个人为活板。
加载和转换
republished_df = pd.read_csv(filepath)
login_df = pd.read_csv(filepath)
subscription_info_df = pd.read_csv(filepath)
在进行可视化之前,我们需要将日期列转换为日期-时间格式。现在,Python 认为它们是一串字符串。因此,日期将不会及时安排。
republished_df['action_date'] = pd.to_datetime(republished_df['action_date'])login_df['action_date'] = pd.to_datetime(login_df['action_date'])subscription_info_df['subscription_starts_at'] = pd.to_datetime(subscription_info_df['subscription_starts_at'])subscription_info_df['subscription_ends_at'] = pd.to_datetime(subscription_info_df['subscription_ends_at'])
让我们为本教程获取一个帐户的样本数据。
sample_subscription = subscription_info_df[subscription_info_df['AccountCode'] == 'a']sample_republished = republished_df[republished_df['AccountCode'] == 'a']sample_login = login_df[login_df['AccountCode'] == 'a']
*# This is a constant for visualization purpose*
sample_subscription['vizline'] = 0.5
sample_republished['vizline'] = 0.5
sample_login['vizline'] = 0.5
提示 1:这个账户是当天活动账户吗?让我们混合一些颜色
当我们需要想象不同的事件只发生一次,但它们可能在同一天发生时,这个技巧很方便。
像任何一家基于订阅的公司一样,Unbounce 希望吸引那些订阅、流失然后在某个时间点回来的用户。有些情况下,客户流失和重新订阅发生在同一天。为了区分同一天的时髦女郎,我们可以使用这种混色技巧。
注意:我们在这里假设每个订阅都是互斥的。
如果我们用不同于subscription end date
的颜色来显示subscription start date
,并使用一些不透明度,我们将为同一天的美眉提供不同的颜色。
比如这里我选择蓝色为subscription start date
,选择红色为subscription end date
,通过alpha = 0.5
( alpha
范围从 0 到 1)改变不透明度。这导致洋红色用于当天的时髦女郎。
你可以通过这篇文章了解更多关于混色的基础知识。
下面是 Matplotlib 中颜色代码的列表。
fig, ax = plt.subplots(figsize=(20, 5))ax.plot(sample_subscription['subscription_starts_at'], sample_subscription['vizline'],
marker='|', linewidth = 0.1,
markersize=50, mew=2, alpha=0.5,
color='royalblue', label='Subscription Starts')no_expire_mask = ~sample_subscription['subscription_ends_at'].isnull()ax.plot(sample_subscription[no_expire_mask]['subscription_ends_at'], sample_subscription[no_expire_mask]['vizline'],
linewidth = 0.1, marker='|',
markersize=50, mew=2, alpha=0.5,
color='crimson', label='Subscription Ends')ax.legend(loc='upper left', ncol=2)
ax.set_title("Customer Behavior")*# Remove y-axis ticks as we don't need it*
ax.get_yaxis().set_visible(**False**)
从上面的图表中,我们知道这个帐户有 4 个订阅。在最后一次订阅中,他/她是当天活动的参与者。第三个订阅结束时,最后一个订阅开始,因此我们在这里看到的是洋红色,而不是蓝色或红色。
除了颜色和 alpha,在axes.plot()
函数中还有更多参数,你可以根据你想要如何设计你的图表来调整,比如标记类型和标记大小(我们将在下一篇技巧文章中对marker
进行更详细的讨论)。
点击阅读关于这些参数的更多信息。
技巧 2:每个动作的频率和强度是多少?让我们使用不同的形状和不透明度
当我们需要想象在同一天可能发生多次的不同事件时,这个小技巧很方便。
因为 Unbounce 是一个帮助营销人员发布和优化其登录页面的工具,所以我们关心重新发布事件。我们想了解:
- 与登录该工具相比,客户重新发布页面的频率如何?
- 客户每次登录重新发布多少/密集?
为了帮助回答这些问题,我们需要在同一个图表上绘制登录和重新发布。这有两个问题:
- 客户可以在同一天登录并重新发布
- 客户可以在同一天多次执行这些操作
而要解决这些问题,我们可以在axes.plot()
函数中使用不同的形状(通过marker
)和不透明度(通过alpha
)。有许多标记类型,但是这里我使用圆圈用于登录,使用三角形用于重新发布。你可以在这里了解其他类型:https://matplotlib . org/3 . 1 . 1/API/markers _ API . html # module-matplotlib . markers。
ax.plot(sample_login['action_date'],
sample_login['vizline'],
marker='o', markersize=11,
alpha=0.3, color='darkseagreen',
linewidth=0.1, label='Login')ax.plot(sample_republished['action_date'],
sample_republished['vizline'],
marker='^', markersize=8,
alpha=0.5, color='teal',
linewidth=0.1, label='Republish')
从上面的图表中,我们可以回答两个行为问题:
- 与登录该工具相比,客户重新发布页面的频率如何? —在第一次订阅期间,该客户几乎每 2 周登录并重新发布一次,但在随后的订阅中,这一频率有所降低。有时他们登录时没有重新发布页面。
- 与登录该工具相比,客户重新发布页面的频率如何? —在所有订阅期间,该帐户在登录时往往会多次重新发布,因此我们会看到深色的三角形。这表明他们可能会在每次修改页面预览时重新发布。
技巧 3:这个账户的行为与另一个相比如何?让我们确定我们看的是同一个尺度
当你想比较一个实体和另一个实体时,这个提示特别方便。
如果我们只调查一个客户,我们不知道这个客户是否是一个高度参与的客户,或者这种行为是否是我们所有客户群的规范。为了弄清楚这一点,我们可以从最简单的技术开始:随机挑选一些客户,手动比较他们的行为。
为了进行更合理的比较,我们希望确保图表使用相同的刻度。有些客户会在年初开始订阅,而有些客户会在年中或年底开始订阅。在这种情况下,我想限制我的图表显示从 1 月 1 日到 12 月 31 日的日期范围。为此我们可以使用axes.set_xlim()
函数。
点击阅读更多关于axes.set_xlim()
的内容。
*# Limit date range*
datemin = pd.to_datetime('2019/01/01').date()
datemax = pd.to_datetime('2019/12/31').date()
ax.set_xlim(datemin, datemax)
*# Format date*
date_form = mdates.DateFormatter("%Y/%m/%d")
ax.xaxis.set_major_formatter(date_form)*# Ensure ticks fall once every other week (interval=2)*
ax.xaxis.set_major_locator(mdates.WeekdayLocator(interval=2))
ax.xaxis.set_tick_params(rotation=40)
技巧 4:让它可重复
我是受大卫·罗宾逊启发的三原则的忠实粉丝。
当你已经写了 3 次相同的代码时,写一个函数
由于我们要在数据集中可视化 4 个客户的行为(显然不止 3 个),我想写一个函数。我喜欢函数,因为我们可以对可视化效果进行系统化的修改,并节省大量时间将这些修改复制粘贴到每个图表上。
我们的第一个功能是获取一个帐户的数据。
我们的第二个功能是可视化帐户的行为。注意,我在第二个函数中使用了第一个函数。
我们来试试吧!
_ = _visualize_customer_behavior('b')
以下是我们刚刚在本教程中浏览过的所有内容的完整代码:
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/hadinh1306/blog-posts/blob/master/tutorials/Visualize_Customer_Behavior.ipynb)
更多关于数据分析和工作生活平衡的文章,可以查看我的 博客 。让我们也 连接 并保持我们的数据(对话)流动!
在 NLP 上你需要知道的 4 个技巧——来自 Twitter 数据科学家
独家 TDS 采访
独家关注 Twitter 的 NLP 项目、采访流程和数据科学工具——TDS 采访。
面试官:TowardsDataScience.com 项目负责人 Haebichan Jung 。
受访者: 阿方索·博尼拉,Twitter(健康)的数据科学家,之前是沃尔玛实验室的数据科学家——华盛顿大学计算语言学硕士。
你能描述一下你的专业背景吗?
我叫阿方索·博尼拉。我是一名计算语言学家,目前在 Twitter 担任数据科学家。到底什么是计算语言学家?计算语言学是语言学的一个分支,它使用计算方法来解决语言问题。在过去的几年里,我对语言空间中机器学习模型(特别是深度学习模型)的可解释性越来越感兴趣——尤其是当涉及到面向消费者的产品时。虽然非常有效,但结果和模型本身很难被人类(尤其是用户)解释,并且可能不一定与语言的某些方面相关联——词类、语义或语法结构,等等。我特别感兴趣的是嵌入空格,它与语言概念的关系,以及偏见是如何产生的(我在下面写了一点!)。
有一张图片展示了从土耳其语到英语的翻译。土耳其语是中性的…
medium.com](https://medium.com/@fonzbonz/ai-can-be-sexist-classist-and-racist-3c2c83712a4)
你现在在 Twitter 的哪个团队工作,你专注于哪些项目?你能详细告诉我们这些团队是如何划分的吗?
我是一名数据科学家,支持 Twitter 的工作,我们称之为平台的健康,我们努力确保平台上的每个人都感到安全,并与可信的信息互动。
健康只是 Twitter 数据科学的一个领域。Twitter 的数据科学跨越不同的产品层面。产品表面是指用户可以与平台交互的不同地方。其中一些领域包括家庭时间表、搜索和入职培训。
Twitter 的招聘流程是怎样的?这个过程与你申请沃尔玛实验室(你以前的公司)的过程不同吗?
我在 Twitter 招聘过程中的经历非常积极。与一名招聘人员进行了第一次电话交谈。我们谈到了我为什么对 Twitter 感兴趣,并就这个角色进行了一些讨论。后来有了技术屏,有了结对编码。我喜欢这次编码采访的原因是,它并没有给我一个千篇一律的编码问题,而是真正关注于为真实世界的应用程序编码。最后一步是现场面试。现场面试包括 4 次面试和午餐休息。每次采访都简短而甜蜜,集中在关键概念上,而且有趣。尽管压力很大,面试官还是测试了他们的创造力,并真正关注问题的解决。在那之后,提供服务的速度非常快!在整个招聘过程中,每个人都非常细心,风度翩翩。
沃尔玛的招聘流程也非常相似。我要和招聘人员进行电话交谈,然后是配对编码的技术筛选,还有 4 次现场面试和午餐。两次面试都测试技术概念,如统计和编码,以及沟通、解决问题和其他对数据科学至关重要的软技能。
你使用 Twitter 的常用工具有哪些?
在我的日常生活中,我通常使用 Python 和 SQL。我发现自己在使用常用的库和工具,如 Jupyter、Sci-Kit Learns、Numpy 和 Pandas,以及 NLP 专用库,如 NLTK、SpaCy 和 Gensim。此外,Twitter 还开发了一个大数据工具,叫做 burning。burning 是一个 Scala 库,可以轻松指定 Hadoop MapReduce 作业。你可以在下面找到更多关于它的信息。
[## 滚烫的
burning 是一个 Scala 库,可以轻松指定 Hadoop MapReduce 作业。滚烫建立在层叠之上…
twitter.github.io](https://twitter.github.io/scalding/)
你目前是一名 NLP 数据科学家。但你也是受过正规训练的计算语言学家。你能告诉我们这两个学科之间的异同吗?
(提示 1)这两者高度相关,它们之间的界限非常模糊。计算语言学,以及更一般的语言学,致力于理解不同层次和不同语境下的人类语言。另一方面,自然语言处理(NLP)和计算机科学侧重于计算机系统和软件的实现。我认为计算语言学(CL)使用计算方法来理解语言,而自然语言处理(NLP)专注于开发程序和算法来解决基于语言的问题。两者都是高度跨学科的,相互影响,尤其是在技术方面。
它们之间的主要区别是它们的潜在焦点和每个领域旨在解决的问题类型。一个很好的例子是每个字段如何看待解析。
解析到底是什么?解析是根据一组规则(正式语法)将一串符号分析成逻辑句法成分的过程。围绕解析的主要计算语言学问题围绕着形式语法。另一方面,大多数 NLP 问题更关心解析中使用的算法。两者都旨在改进解析,但关注问题的不同但高度相关的部分。
这些相似和不同之处在你的日常工作中是如何体现的?
(提示 2)当谈到我的工作时,主要的区别出现在我要回答的问题中。在我的工作中,很多与实现相关的问题更倾向于 NLP,而与用户相关的问题更倾向于 CL。
与实现相关的问题的一个很好的例子是*“我如何按照主题有效地聚集推文?”*。主题聚类是一种特定类型的聚类,其中推文或更一般的文档按主题分组在一起。常用的技术有 LDA 、 K-means 、 Doc2Vec 。在分析推文时,对我们来说,系统地、一致地将推文分组是很关键的。对于常用的技术,这可能具有挑战性,因为 Tweets 由用户、文本和网络组成(都是不分类的数据)。鉴于这些问题的挑战,Twitter 已经围绕主题聚类做了新颖的工作,提出了 LDA 的一种变体,称为使用逻辑 LDA 的区分主题建模。这只是我们为更好地服务用户所采取的方法的一个例子。
https://arxiv.org/pdf/1909.01436.pdf
用户相关问题的一个很好的例子是*“人们是如何谈论 X 的?”*。最终在 Twitter,我们是一个对话的平台。推动这些对话的人是真实的人。了解他们如何使用平台将有助于我们开发更好的平台。Tweet 聚类是我们了解人们如何谈论话题的一个很好的方式。为了纪念《权力的游戏》, Twitter 的数据可视化团队创建了一个互动工具,让我们可以看到用户如何谈论角色,以及他们如何将角色与其他角色联系起来。
https://interactive.twitter.com/game-of-thrones/#?episode=63
对想要进入 NLP 数据科学的 TDS 社区有什么建议吗?
(提示 3 和 4)对于那些对 NLP 感兴趣的人来说,我认为理解如何使用不同的 NLP 工具以及何时以及为什么使用这些工具非常重要。何时使用算法的原因和算法本身一样重要。
就资源而言,我肯定会先看看 Jurafsky & Martin 的语音和语言处理(未完成的第三版可以在这里找到)以及 Dickinson、Brew 和 Meuer 的语言计算机&。有关实现的更多信息,请查看自然语言工具包(NLTK)简介。此外,还可以查阅以下论文:雷斯尼克&林,2010 ,本德(2008) ,霍维&斯普雷特(2016) ,内森等人 2007 ,博卢克巴斯等人 2016 。这绝不是一个详尽的列表,而是一个很好的方式来暴露你自己存在的问题,以及人们使用了什么技术来解决它们!
对于我们的其他 TDS(视频)采访,请点击下面的链接
阅读《走向数据科学》中关于 Tds 采访的文章。分享概念、想法和代码。
towardsdatascience.com](https://towardsdatascience.com/tagged/tds-interview)
我要感谢 Twitter 通信团队的 Lindsay McCallum 审阅并批准了这篇文章。
4 数据地图在商业分析中的应用
在一些新闻报道和商业杂志中,经常看到地图被用来分析和展示商业现象。这种使用地图来反映和分析数据的形式称为数据地图。数据图谱是业务数据分析过程中非常直观形象的表达方式。你可以使用地图显示各个地区的销售和利润,或者显示全国各地仓库的分布,以优化运输网络。再比如,如果我们需要统计商场的人流量和分布,热图可以帮助我们实现有针对性的广告投放。
Made with FineReport
在类似于上面的场景中,地图的显示无疑会比简单的表格直观得多。作为一种专业应用程序,数据地图在以下领域具有广泛的分析用途。
1.数据地图的用途
1.1 人口分布
根据年龄、性别、收入、受教育程度等人口统计数据。,对地图上不同区域或社区的客户进行分析和分类。数据可以帮助我们了解他们的生活方式、兴趣和购物习惯。
1.2 市场容量预测
分析地图上每个网点的资源投入、销售收入、产品销量,预测整个市场的容量,让资源科学配置到市场潜力最大的区域。
1.3 物流路径规划和供应链管理
比如通过下面的数据图,可以了解订单的分布情况,仓储设置是否合理,物流路线如何优化。
Made with FineReport
1.4 连锁店位置
连锁店和餐厅的选址通常要考虑很多空间因素。利用地图可以直观地展示客流量、门店容量等指标,是进行市场规划的好方法。
2.数据映射的类型
实际上,数据地图有多种表现形式。这里我介绍五种常见类型。
2.1 分销类型
为了制作这种类型的地图,我们根据数值的大小给相应的区域添加不同的颜色。颜色深度反映了数值,如下所示。
Made with FineReport
上面的地图显示了单维数据。如果要根据全国范围内的销量分布来分析一个省或城市的销量,可以通过钻取得到数据。
Made with FineReport
2.2 标记类型
数据地图的标记类型用作位置提醒。您可以使用点或图形让读者将他们阅读的内容与其地理位置联系起来。这样的地图本身并不能反映定量信息。它可以反映位置、流量和密集分布,并减少数据分析的抽象。
Made with FineReport
Made with FineReport
2.3 图表类型
图表型地图是在一个区域的全部或部分区域上显示一个简单的图表,如柱形图、饼状图、气泡图等,相当于增加了一个基本维度,使数据结果一目了然。图表用于直接显示区域中的数据趋势,以进行比较或形成关系。下图是区域图和气泡图的组合,气泡阴影表示数据的大小。这种映射不应该复杂。注意尺度,对复杂的图表使用数据钻取。
Made with FineReport
2.4 热图
热图是根据区域数据的大小来填充不同的颜色深浅,从而反映数据的分布。这是一个非常常见的地理可视化。它可以实时描述种群分布、密度和变化趋势。例如,下面是为一个叫车应用程序制作的交通密度图。
Made with FineReport
Made with FineReport
2.5 自定义地图
数据地图还有其他复杂的样式,比如添加动态地图或动态图表,或者与其他表格结合形成仪表板。
购物中心平面图
Made with FineReport
Made with FineReport
仪表盘
Made with FineReport
GIS 地图
Made with FineReport
技巧
文中所有资料图均用 FineReport 制作。FineReport 是一款企业级业务分析工具,具有强大的数据可视化功能。它通常用于各种业务中的数据分析。只需简单的拖拽,你就可以创建各种很酷很有用的数据地图。对初学者很友好。
如果你想自己制作数据图,可以去官网免费下载 FineReport ,里面提供了很多数据图组件。最后我想说,当你开始迈出第一步的时候,你会发现数据分析其实很简单!
原载于 2019 年 7 月 5 日http://www.finereport.com。
自动化改变数据科学的 4 种方式
自动化已经连根拔起了无数的事物,而且在未来还会有更多的事情发生。数据科学是自动化改变的事情之一。
无论您已经在该领域工作,还是确定为一名有抱负的数据科学家,了解这里提到的与自动化和数据科学相关的变化将有助于您为未来做好准备。
以下是自动化改变数据科学的四种主要方式。
1.它缩短了数据科学项目的时间框架
自动化对数据科学家最有帮助的事情之一是最大限度地减少他们在项目上花费的时间。大多数公司都认识到了数据科学的价值,并计划扩大数据科学团队的规模。也就是说,他们通常难以衡量其数据科学项目的效果,并且没有大量的数据科学模型可以依赖。
信息还表明,公司需要两到三个月的时间来完成一个数据科学项目。如果企业正在考虑实施数据科学,但发现自己处于观望状态,那么这么长的时间可能会引起怀疑。自动化可以减少完成数据科学项目所需的时间。
例如,如果公司使用人工智能(AI)工具来自动化一些数据科学工作,它可以在最少的人工帮助下处理诸如清理数据并将其转换为正确格式之类的事情。
由于该技术使数据科学家有更多时间专注于其他任务,因此人力和先进技术的结合可以使公司在更短的时间内完成以数据为中心的工作。
2.它正在帮助公司解决数据科学技能缺口
单靠自动化无法满足当今社会对数据科学家日益增长的需求。一些估计称,仅在美国就有超过 150,000 个数据科学职位空缺,但一些公司发现,带有自动化组件的数据科学平台让没有受过正式数据科学培训的人更容易利用企业拥有的信息。
一些这样的解决方案使用自动机器学习(AutoML)。它们使公司能够享受数据科学的好处,而不需要大量资源。
由于许多自动化数据科学程序是用户友好的,即使没有这方面背景的人也可以理解公司的信息,并确定如何最好地利用这些发现来支持公司的目标。
然后,即使公司拥有的数据科学家比他们需要的少,短缺可能不会如此严重,因为自动化会照顾到一些必需品。
3.它为公司整合数据科学构建了一个更强大的商业案例
各种自动化对于公司保持竞争力变得越来越重要。它带来的好处包括更好的质量控制和更高的效率。
具体到数据科学,自动化可以为使用它来管理数据湖的公司带来竞争优势。这些是几十年前公司开始接受大数据时出现的巨大存储库。
但是,数据湖很快就会变成数据沼泽,这意味着它非常混乱,几乎没有任何结构。数据沼泽使数据科学家更难处理信息,通常会损害企业竞争力。如果公司不能以实际的方式使用他们的数据,他们会浪费时间和金钱来实现数据科学。更重要的是,他们最终很可能会失败。
数据湖有几个相关的挑战,一些分析师认为自动化可以解决这些挑战。管理数据湖并确保它有效地支持业务需求可能很棘手。
如果自动化做了一些跑腿工作,数据科学家可能会发现他们花在数据湖中争论信息的时间更少了。由此给企业带来的好处可能是,他们能够更好地快速访问数据,并从中提取必要的见解。
无论公司的团队中现在是否有数据科学家,或者是否会很快雇用他们,他们通常都希望确保投资数据科学将会有显著的回报。自动化可以帮助提供这种保证,为数据专业人员提供他们所需的工具,使数据湖更加整洁,防止它们变成数据沼泽。
4.它减少了对大量数学和编码技能的需求
在数据科学领域具有市场竞争力与保持技能更新和了解雇主需要和想要什么能力有很大关系。但一些人指出,自动化和数据科学的融合也意味着一些能力不再是必不可少的。
例如,DataRobot 的副总裁兼总经理西蒙·布伦南(Simon Blunn)说,有一些工具——包括他的公司生产的一些工具——可以消除一些数学和编码需求。
那么,自动化可以为高技能数据科学家创造机会,让他们与能力相似但程度较低的人一起工作,因为他们没有花几年时间通过正规教育获得技能。像这样共享劳动力可以通过减少一些公司利用数据科学时遇到的延迟来提高生产率。
最近有一股力量推动公司将一些员工送到数据科学训练营。这些密集培训期可以帮助人们获得数据科学的基础,但他们不会给个人提供他们通过获得传统文凭获得的知识量。
有时,自动化可能会对刚开始学习数据科学的人有很大帮助。
未来令人兴奋的变化
这份清单上的四个领域突出了为什么自动化和数据科学可以一起改变游戏规则。
这种转变并不意味着公司可以没有数据专业人员,但它可以帮助这些专家简化他们的工作流程,并专注于更高层次的任务,而自动化处理较低层次的需求。
图像经由 Rawpixel
数据科学可以革新几乎每个行业测试阶段的 4 种方式
所有行业中最成功的公司通常都有测试阶段,帮助他们开发新产品、测试新材料、指导营销活动等等。
数据科学和大数据平台可以共同颠覆几乎所有行业的测试阶段,帮助公司节省资金并更好地评估结果。这里有四种可能发生的方式。
1.提高测试人员的效率
数据科学不会将人类测试人员从等式中删除,但如果使用得当,数据分析可以帮助这些人更快地从数据集合中提取有价值的见解。
例如,测试团队的成员从各种来源获得反馈,从社交媒体上的评论到焦点小组中提供的评论。
数据分析平台可以帮助测试人员理解编译的数据,并发现其中的趋势。在数据科学的帮助下,人们可以了解产品开发的下一步模式。
2.评估产品安全性
测试阶段如此重要的原因之一是,它可以帮助产品制造商识别可能导致产品召回的问题。IBM 有一个内容分析平台,可以筛选出与汽车等产品的严重问题相关的指标。
虽然制造商可以并且应该在初始测试阶段之后使用数据分析,但在产品进入市场之前这样做也是明智的。通过采取这种方法,他们可以在伤害公众或参与小型测试的人之前识别出可能的安全缺陷,从而节省时间、金钱和麻烦。
数据分析平台检查大量数据的速度比人类在没有帮助的情况下要快得多。这意味着这些工具可以识别可能表明产品在测试中存在问题的警告信号。使用大数据创建的测试模拟也可以预测当人们以特定方式使用产品时会发生什么。
例如,他们可能会指出,在使用不到 250 次后,适合旅行的咖啡杯的盖子材料变得过于柔软,并且该问题导致密封不充分,用户不会立即发现。然后,当人们喝一小口的时候,如果盖子掉下来,他们可能会被烫伤。在这种情况下,产品工程师会知道是时候重新开始,寻找更合适的材料了。
3.简化监管要求
建筑、航空和其他一些行业必须对其产品进行防火和易燃性测试。它们揭示了产品暴露于明火后会发生什么,或者产品可以耐火多长时间。例如,在一些防火门的情况下,它们应该能够承受至少 90 分钟的火焰暴露。
数据科学可以帮助公司以系统的方式处理任何要求的易燃性测试,确保他们的产品符合或超过法规要求。此外,即使一个企业所在的行业没有强制进行防火测试,进行防火测试也可以为想要避免不必要风险的客户创造一个卖点。
大数据还可以以另一种方式提供帮助,即在消防检查中发现有风险的建筑。
纽约市官员利用这种方法和一个数据分析平台,寻找超过 7500 个风险因素,使检查准确率提高了近 20%。公共建筑必须接受定期检查,这是一个数据驱动测试即使在初始测试发生后仍有价值的例子。
4.缩短上市时间
世界上最具竞争力的公司都知道比其他实体更快地发布市场现成产品是多么重要。成功实现这一壮举将带来长期盈利和在该领域的主导地位。许多公司在测试阶段依靠大数据来让产品更快地准备好发布。
除了帮助企业对产品在测试期间的预期功能充满信心,大数据分析还可以帮助企业评估其行业中最紧迫的未满足需求。
宝洁公司在超过 175 个国家有的业务,这些国家的人们有不同的需求。该公司发现,大数据有助于他们发现真知灼见,并灵活地改变他们的产品或推出新产品,以提高成功。
当公司能够获得可靠的见解时,缩短产品上市时间也会带来回报。尽可能快地发布一个产品,然后意识到没有足够多的人想要或需要它来使新产品发布变得有价值,这是没有用的。
因此,公司可能会首先部署大数据,以确保市场对产品的需求足以证明其创造的合理性,方法是对细分市场进行测试,以了解他们对产品的反应。
接下来,它可以使用大数据来减少冗余或错误,这些冗余或错误可能会使测试过程花费更长的时间。这两件事都有助于产品更快地进入市场。
引起有意义的增强
消费者可能不会花太多心思在他们喜爱的产品或他们喜欢参观的建筑在开发过程中所经历的测试上。但是,他们中的大多数人意识到,测试往往会导致整体的改善。
大数据可以帮助产品开发人员更快地实现目标。
提高连续目标训练精度的 4 种方法
快速、简单、有效。
连续目标…
我们都认识他们,我们都和他们一起工作。连续特征可以表示价格、GDP 以及任何量化的东西。连续目标是累加的目标,或者通常由于另一个特征而在值上增长和收缩的目标。一个很好的例子就是货币。尽管这可能很可笑,但大多数商业分析都围绕着钱,(很疯狂,对吗?)而且大多数(如果不是全部的话)这些货币目标都是连续的。
显然,在进行连续预测时,准确性非常重要,因为资金对企业很重要,国内生产总值对国家很重要,收入和支出需要加以利用,以确保稳定的运营。几乎每个企业都利用某种形式的分析,无论是数据分析师(DA),数据科学家(DS),甚至是数据工程师(DE)。
因此,如果你要解决连续的问题,有一些非常简单易行的方法来提高你的准确性,而且非常有效。
确认
为了训练一个准确的模型,我们需要知道如何验证它。通常,对于连续特征,我们使用三个家庭指标:
平均绝对误差
平均绝对误差是两个阵列之间的差的总和,理想情况下是 y 和 y hat。这可以通过简单地用点减去两个数组,然后求差的平均值来实现。
对于这个指标,重要的是要记住越低越好。分数越低,我们预测的 y 和我们得到的ŷ.之间的差异就越小为了在 Julia 中做到这一点(如图所示),我们只需使用。-运算符,然后得到它的总和,对于这样的公式:
m = Σ(y - ŷ)
均方误差
均方误差是两个阵列之间的平方差的总和**,与我们之前的公式一样简单,在 sigma 之前对 y 和ŷ之间的结果差求平方。**
和 MAE 一样,MSE 是连续的,越小越好。这个数字离零越远,我们的模型就越不精确。这里的一个区别是,这个数字(自然)会更大。
回归的相关系数
虽然另一个验证很简单,计算起来也很容易,但 r 却不是。r 分数以百分比表示,计算方法是先计算相关系数(r ),然后求平方。为了计算回归的相关系数,我们必须首先计算相关系数。
我们已经了解了如何计算 MAE 和 MSE,但这是计算 r 的方法,虽然看起来有点令人畏惧,但一旦我们将其分解,就非常简单了。我们需要“插入”到这个方程中的主要部分是 n,σx,σy,σxy,σx,σy .为了计算这些,就像前面一样;我们需要使用点运算符。当然这是特定于 Julia 的,但对于其他统计语言来说没有太大的不同。在 Python 中,使用 Numpy,在 R 中你实际上可以只使用*操作符(它有一个多态属性,可以应用于偶数数组,以及单个整数和浮点数。)所以当然是在 sx2,sx,sy 等里面的 s 上面。是 sigma 或σ的缩写,我们当然可以在大多数高级语言中用 base sum()方法得到它。那么就像把这些值代入公式一样简单,
应该注意的是,机器学习中使用的相关系数通常使用皮尔逊相关方法来计算 r。我还想说明 r 对于非回归问题来说不是一个好的指标。这包括带有加权系数和决策加法的公式(不是典型的基于公式的回归,如岭回归、线性回归和 LLSQ 回归)。)通常,对于加权最小二乘法和普通最小二乘法,您可能应该使用均方误差或平均绝对误差。
现在我们有了 r 的 r 部分,要得到 r,我们只需要求 r 的平方,我想我们会写一个函数来做这件事,尽管手工做起来并不困难。
轻松点。现在我们有了第三个也是最后一个指标,可以理解模型的准确性,并得到某种分数。
基线
基线精度是一个经常被低估的重要性,通常基线的优势在于它可以告诉您是否有必要使用模型来预测您的要素。这不是限制性的,因为这是对其他优势的补充,因为基线通常是一个很好的起点。为了获得基线,我们可以使用 Lathe.models.meanBaseline 构造函数,或者编写我们自己的函数。根据本文到目前为止的进展,您可以推测
我们要做的是后者。
但首先,让我们使用车床,这样你就可以在我们从头开始之前知道我们要做什么。
当然,如果需要,我们可以使用 Julia 的帮助功能(?())给我们模型的信息。
至此,我们得到了一个详细的解释,并举例说明了如何准确地使用该模型,所以让我们快速地补充一些数据:
x = [7,6,7,5,6,7,8,8,4]
y = [3,5,6,4,6,8,9,0,6]
xtest = [6,4,5,8,6,5,5,7,8,3,5,7,8,]
现在,我们将它插入到构造函数中,并使用我们的 predict()函数。注意,我不会“使用”它,我将显式地导入它。这样我们就可以用多态来修改车床函数,以便利用我们自己的函数。
现在我们有了基线预测,我们可以使用之前制定的指标。我们将用平均绝对误差作为基线。
平均绝对误差约为 7,但重要的是要考虑到数据的平均值为 5,因此 7 实际上是一个非常可怕的精度。当然,这是由数据组成的,所以让我们从网上获取一个数据集,在这个例子中使用,这样我们实际上可以提高准确性。在快速浏览了 Kaggle 之后,我想出了这个数据集。这个例子应该很适合我们。所以让我们读给朱莉娅听:
我们必须做的是:
显示(df,allcols = true)
在对我们由此得到的(糟糕的)数据框视图进行了一番研究之后,我得出了这样一个数据框:
现在让我们训练测试拆分数据,但是我们能用什么呢?车床中可能有一个功能,所以让我们检查一下…
我们可以假设测试序列分割在预处理模块中,因为这一次其他的不一定符合要求。
我们将完全按照它说的去做,并且使用?()来访问该模块的信息。这样做可以显示模块树,包括每个函数的单独部分。
当然,我们来这里是为了寻找 lathe . preprocess . train test split,所以我们现在可以使用?()功能在上面:
?(Lathe.preprocess.TrainTestSplit)
这将返回我们完成测试序列分割所需的所有细节,包括超参数和语法:
轻松 ML 是有原因的座右铭!现在,我们可以使用 Julia 符号来区分我们的单一特征和目标:
feature = :no_reviews
target = :Price
xtrain = train[feature]
ytrain = train[target]
xtest = test[feature]
ytest = test[target]
现在让我们像承诺的那样扩展预测函数,以便使用我们以前的可变结构为新的平均基线函数编写我们自己的 Lathe.models.predict()。首先,我们将把我们的三角形插入我们的新模型:
现在让我们写一个函数,本质上我们需要做的就是为数组中的每个元素添加一个替换数(平均值)。我们可以通过使用 Lathe.stats.mean()和一个简单的一行 for 循环快速而简洁地完成这项工作:
现在我们把它作为可变结构的一个属性来扩展:
predict(m::Lathe.models.meanBaseline,x) = meanbaseline(m,x)
现在我们可以用前面的 MAE 函数来验证它:
这是一个相当糟糕的准确度分数!虽然我没有对特性选择进行任何测试,但我们肯定可以通过首先实现一个模型,然后投资一些预处理来进一步开发这个特性。对于我们的模型,我选择了 FourSquare 模型。FourSquare 模型基于四分位数使用不同的回归模型进行预测,类似于回归树——但它不使用相关性,而是使用数据段。这使得它非常适合时间序列数据和分段连续数据。但是现在我们的功能出现了问题:
我们得到了比我们上一个模型更差的准确性,表明这个特征可能不是预测这个连续目标的最佳选择,因为评论的数量可能与目标没有很好的相关性。当然,这是我们的无效假设,即这些特征之间没有相关性。与普遍的看法相反,我们经常可以看到这一点,而从来没有使用统计测试来检查。因此,让我们通过执行统计测试并可视化我们的数据和模型来进一步验证零假设(耶!)我认为这也说明了基线精度为何如此重要,以及 segways 如何真正成为我们的第一个精度助推器:
1.改变特征
丢弃统计上不重要的特征,或者在我们的情况下(单一特征预测)一起改变我们的特征,是我们可以用来提高准确性的最有效的方法之一。在这种情况下,老话真的是正确的:
坏数据输入,坏结果输出。
The original data scatterplot
仅从这个可视化,很容易看到,在大多数情况下,这些功能是扁平线在一起。这意味着这种情况下的特性对我们的目标并没有太大的影响。下面是我用来创建这个图形的代码:
scatter(xtest,ytest,
# title:
title = "Original airBnB Data",
# X label:
xlabel = "Number of Reviews",
# Y label
ylabel = "Price",
# Grid:
grid = false,
# Legend position
legend=:bottomright,
# Color of the marker
color = :lightblue,
# Marker stroke width and opacity
markerstrokewidth = 4,
markerstrokealpha = .75,
# Marker stroke color
markerstrokecolor = :lightblue,
# Adjust out y ticks
yticks = [500,1500,3500],
xticks = [200,400,600],
label = "AirBnB's",
# Our font options
fontfamily = :Courier,xtickfontsize=7,ytickfontsize=9,
ytickfont=:Courier,xtickfont = :Courier,titlefontsize=13,)
现在让我们看看我们的模型做了什么…
Our model — visualized
幸运的是,有意地用这种方式编写代码,很容易回过头来改变特性。我决定将我们的功能更改为今年的可用性,因为较低的数字似乎相当于较低的价格。当然,我们将使用测试和更多的可视化(耶!)用实际支持来巩固这个假设(数据科学的科学部分。)
让我们回到过去,用这个新特性来重建我们的数据帧:
df = DataFrame(:Price => df[:price],:Availability => df[:availability_365])
有了这个新功能,又出现了一个小问题,这是很常见的:Nans。因此,为了去掉 nan,我们将使用 DataFrames 中的 dropmissing()函数。
df = dropmissing!(df)
如果我们想替换这些,我们可以很容易地通过使用缺少的包:
using Missing
xbar = mean(df.feature)
df.feature = Missings.replace(df.feature, xbar)
然后,我们将替换定义功能和目标的符号:
既然已经结束了,为了进行统计测试,我们必须屏蔽我们的数据。布尔掩码允许我们为我们的数据设置一个要遵守的条件(否则—毫不留情地丢弃)。)但首先,让我们把这种形象化处理掉,因为在这种情况下,眼见为实。
从表面上看,这个特性也不是最好的,我们可以通过快速 f 检验来巩固它。让我们来做我之前提到的布尔掩码:
high_df = df[(df[:Availability].>=300),:]
然后我们将把它插入到来自 Lathe.stats 的 f_test()函数中。
所以考虑我们的假设:P 值为 0.05 或更小通常意味着考虑拒绝我们的零假设具有统计学意义,对吗?因此,P 值为 0.032 表明统计学显著性相当不错,肯定高于我们之前的数据。
2.切换模型
让我们面对现实吧,有时你的模型可能不奏效。切换到梯度回归,甚至建立一个神经网络,有时可以是一个非常好的复杂问题的解决方案。虽然您的选择可能类似于 XGBoost,但是对于这个例子,我将切换回线性回归。这并不会提高准确性——在本例中,这只是一个必须考虑的问题。当然,如果车床不是在阿尔法,我们有更多的工具利用,我们可能会全力以赴与模型,使它非常准确,这和努力与回报;我对这个模型没什么意见,我用它作为一个不太精确的例子。
转换我们的特征和我们的模型产生了平均绝对误差
16014.948562702863
鉴于平均值是 141,这是相当关闭…但一如既往,我们有另一个锦囊妙计…
3.特征缩放
众所周知,特征缩放可以提高准确性,让我们面对它:这就是它存在的意义。在这种情况下,我们将使用标准标量,也称为 Z 分数标量。这将根据标准偏差对数据进行标准化。如你所料,我们将编写一个函数来实现这一点。
Z 分数标量的公式为:
xᵢ = (xᵢ-x̄ ) / σ
其中 sigma 是标准偏差,x 条是样本平均值,x 子条是当前迭代。回到编程的思维模式,我们最终会得到:
function StandardScalar(array)
q = Lathe.stats.std(array)
avg = Lathe.stats.mean(array)
v = [i = (i-avg) / q for i in array]
return(v)
end
现在,要使用我们的函数,我们只需插入它,并在定义 xtrain 和 xtest 时对它们进行预处理:
在这个具体的例子中,这使我们的平均绝对误差下降到
15,249
这意味着我们正式低于我们的基线。
4.四分位数归一化
四分位数归一化是另一个有趣的方法,四分位数范围 q 和 q 之外的任何数据都被丢弃,将数据集中在中位数周围(记住,这是中位数,而不是平均值。)
拥有一个准确的模型是很棒的,这些数据科学原则肯定可以帮助你实现这一点。即使你的模型相当准确,其中一些肯定能把它提高到 98%。当像标准标量这样简单的东西对您的准确度分数产生如此大的影响时,这绝对是令人满意的。希望这个快速检查列表有助于阐明一些非常重要的想法和哲学。如果你要从这整个列表中选择一个,我建议你选择**好的特性。**底线是,无论如何,你的特征是你的算法唯一需要放弃的东西。就这样,机器学习快乐!
增强你的推荐系统的 4 种方法
在用户面前提高可扩展性和质量的 4 个实用步骤。
Credit: Unsplash/Peter Lewicki
推荐系统帮助用户找到他们喜欢的商品。他们通过为一个给定的用户产生一个预测的可能性分数或一个顶级推荐项目列表来做到这一点。推荐可以基于过多的因素,包括用户人口统计、总体项目流行度和历史用户偏好。在亚马逊、Spotify 和 Tinder 等地方经常会遇到现实生活中的例子。
然而,许多系统的运行规模强调了成功的学术和“小数据”应用的挑战。此外,用户意识和选择的增加导致了偏好混乱意味着用户比以往任何时候都更乐意放弃一个不准确的服务。
考虑到这一点,以下 4 点是可实现的想法,它们针对可伸缩性问题,同时提高您的协同过滤推荐的质量。
Credit: @BlaxZtar
1——抛弃基于用户的协同过滤模式。
在商业环境中,协同过滤算法面临的一个关键挑战是处理数据的稀疏性和可扩展性。现代系统需要处理数千万个潜在数据点的能力,对性能限制的容忍度较低。在这些系统中,用户可能已经与不到 1%的可用项目进行了交互。
基于用户的协同过滤模型中的瓶颈主要出现在对*邻居、*的搜索中,这些邻居是在大用户群中历史上对给定用户表现出相似偏好的其他用户。能够搜索成千上万的邻居固然很好,但系统必须根据它们所适应的业务进行扩展——能够实时搜索数百万个邻居会为您和您的用户带来真正的价值。
切换到基于项目的协同过滤算法将推荐问题从用户空间转置到项目空间。它探索的是项目之间的关系,而不是用户之间的关系。在大多数现实生活的应用程序中,项目的数量与用户的数量相比相形见绌,并且在许多情况下项目是静态的。也就是说,项目集的变化远不如用户数量的变化频繁。这允许基于项目的协同过滤模型的拟合阶段和预测阶段的分离。
我们来看看实践中的区别。
使用来自 6,040 个用户的 3,704 部电影的 994,168 个评级的训练集(MovieLens 1M 数据集),评估基于用户的算法的相似性矩阵的计算成本是 77.6 秒,但是对于基于项目的算法,仅 28.4 秒,每个使用皮尔逊相似性。
这种转变解决了大规模系统的计算能力问题,这在某些阶段变得比质量上的微小差异更重要。当然,如果您的用户集小于您的项目集,并且预期变化相对不频繁,那么例外是存在的。
2 —黄金标准相似度计算技术。
相似性的概念是协同过滤框架的关键元素。对于基于用户的协同过滤算法,用户相似性矩阵由组成,该矩阵测量任何一对用户偏好之间的距离。同样,项目相似性矩阵测量基于项目的框架中任何一对项目之间的相似性。三种通常讨论的技术是皮尔逊、余弦和均方差(MSD) 但是您应该使用哪种相似性计算技术呢?
输入用户 56。用户 56 评价了 54 部电影,下面给出了来自上述相同训练集的 5 部星级电影。
Figure 1 — User 56’s Top Rated Movies
我选择用户 56 纯粹是出于兴趣,考虑到用户喜欢《美国历史 X》和《宝贝》(可以说是两部关于猪的电影),会有什么样的推荐。产生适当的推荐是数据集中其他用户的功能,但是挑选这些用户的能力取决于对相似性度量的选择。
Figure 2 — Similarity Metric Comparison (model hit rate, computation time, top 8 movie list)
忽略计算速度的差异,所有 3 个顶级列表都报告说命中率为 0,我不知道你的情况,但我在任何推荐列表中都没有认出一部电影。通常情况下,这就是结果。丑。
这更有可能是数据集的产物,而不是相似性度量,因此停止通过离线评估度量搜索黄金标准相似性计算技术,并开始 A/B 测试。真相在于现实生活中的反应。
3 —使用模型尺寸提升您的算法。
在基于项目的协同过滤框架中,模型大小的概念围绕着这样一个思想,即关于用户偏好的足够信息存在于与他们已经高度评价的项目最相似的项目的子集中。从逻辑上讲,与最高评级的已见项目具有高相似性的未见项目对最终推荐列表贡献最大是有意义的。模型大小 是由活动用户评定的任何给定活动项目的最相似项目的邻域。
对于大量的项目,对整个候选集的推荐很快变得过于计算密集。对项目的邻域进行操作大大减少了进行预测所需的时间,但也减少了模型必须排序的信息。关键的权衡就变成了什么级别的信息可以确保推荐既及时又合适?
Figure 3 — Model Size Comparison (top 8 movie list, computation time, hit rate, hit rate by rating)
使用前述的 MovieLens 数据集,可以在具有余弦相似性的基于项目的模型上检查模型大小的影响。对于用户 56,邻域实现立即改变前 8 个列表。从所有 8 部电影都是可识别的这一事实来看,这个模型似乎不再抛出晦涩难懂的推荐了(对我来说)。*降低了系统噪音。*我这样说并不是因为我现在能认出前 8 名名单中的电影,而是因为在留一交叉验证测试集上命中率的增加(6040 个前 8 名名单)。
使用只有 10 个项目的邻域实际上将系统的命中率从 0%提升到 1.4%,更重要的是在五星预测上的命中率为 2.1%。虽然标题点击率随着邻居增加到 50 个项目而提高,但五星级项目稳定在 2.5%左右,因此整体改善源于 4 星级类别。
仔细想想除了顶级分类之外的其他分类对你的系统是否重要。推荐是如何在屏幕上显示的?顶级列表中有多少项?你的单子消耗率是多少?
模型大小可以减少大量的计算量,同时有时还可以提高推荐的质量。文献表明 30 岁左右是最佳值( Herlocker 等人,1999 ),但文献不知道你的背景。亲自动手,观察它如何影响对您所关心的客户的顶级推荐。花一点时间调整模型大小可以极大地改善客户体验,增加您的服务消费,并减少平均销售周期指标。
4——驱动您的用户、推动您的成功的因素。
你的评分函数应该反映用户的效用。
从最终结果开始,反向工作,基于项目的协同过滤的目标是从给定用户尚未评级的所有项目集合中创建一个顶级推荐列表。为了做到这一点,一个 分数 被分配给还没有被该目标用户评级的每一个项目——即候选生成步骤。然后可以基于分数进行排名,并且可以将最高的项目呈现给活动用户。
我们为每个候选项目建立的 分数 是活动项目的等级以及活动项目和候选项目之间的相似性的函数。文献通常使用相似性加权评分总和(萨瓦尔等人,2001 ),这是一种天真的尝试,可以通过以下几种方式进行改进。
时间加权。第一个主要步骤是评估你的用户对你的物品的敏感程度。长期偏好与学习相一致,即随着一个人的知识基础扩大,对生活的看法改变,习惯改变,偏好随之改变。相比之下,短期偏好往往受到社会病毒式传播、社会压力和影响的欺凌。通过将最近的评级加权为高于旧的评级,系统可以更快速地响应变化的用户偏好。决定你的系统对新数据有多敏感,是理解长期偏好变化和病毒行为之间的细微差别。无论哪种方式,目标都是了解用户对环境和产品的反应,并将其纳入评分过程。
*负加权。*由于相似性分数是非负的,与评级较低的所见项目不相似的候选项目对顶级推荐几乎没有影响。实际上,模型忽略了这些项目。另一种评分方法可以惩罚对已知不喜欢的项目具有高相似性评分的候选项,并提升对已知不喜欢的项目具有低相似性评分的候选项。实现这一点的一种方式是将评级的尺度和相似性的尺度都线性移动到中心 0。这一概念摆脱了仅仅根据用户喜欢的已知商品进行推荐的局限,大大提高了你的模型推荐的多样性。
当然,这只是两种可能的修改,应该让您考虑一下 score 函数对您的业务的实用性。用户的地理位置和非线性转换也应该在适当的时候进行研究。
结束语
没有一篇文章能为你开出一个完美调整的推荐算法,我在这里也不做尝试。相反,我希望通过上面的四个关键点来提高对某些调优选择的认识,这些选择有可能增加边际额外努力的实际价值。
你优化的价值,无论是歌曲、点击量还是文章,都应该符合商业需求,并根据商业需求进行评估,而不是学术指标。结果不在乎准确性,只在乎呈现在眼前的东西的顺序。拥抱协作过滤的简单性,因为它可以在个性化订购中提供强大的功能&寻求用户的真实反馈。
另外,对于那些想知道“如何做”的人,我个人很喜欢詹姆斯·柯克的文章这里。
Github 代码:https://github.com/93tilinfinity/collab-filter-basic/