TowardsDataScience 2023 博客中文翻译(九十五)

原文:TowardsDataScience

协议:CC BY-NC-SA 4.0

杀死你机器学习模型的数据质量问题

原文:towardsdatascience.com/data-quality-issues-that-kill-your-machine-learning-models-961591340b40?source=collection_archive---------4-----------------------#2023-01-19

数据质量纪实

应对不完美数据的复杂性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Miriam Santos

·

关注 发表在Towards Data Science ·8 min read·2023 年 1 月 19 日

这是一个专注于数据科学数据质量的专栏系列。这是第一篇文章,重点讨论数据不平衡、数据代表性不足以及数据重叠问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Sergey Sokolov提供,来源于Unsplash

垃圾进,垃圾出。 这就是从数据中学习的诅咒。 在这篇文章中,我将讨论为你的机器学习模型提供高质量数据的重要性,并介绍一些致命的数据质量问题,如果不加以控制,可能会彻底影响你的数据科学项目。

机器学习已经成为现实世界领域中的一种无处不在的工具

从社会到医疗应用,机器学习已深深融入我们的日常生活。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

机器学习在实际应用中的情况:有了强大的能力,就有了巨大的责任。这提到了面部识别技术的“编码凝视”和 Joy Buolamwini 在算法正义联盟上开展的工作。图片由engin akyurt拍摄,来源于Unsplash

也许你今天早上 7:45 醒来,因为一个算法已经分析了你的睡眠模式,并确定这是你开始新一天而不会感到昏昏欲睡的最佳时间。然后,你可能会沿着另一个算法推荐的路线开车去工作,以避免交通拥堵。

当你打开笔记本电脑时,你的电子邮件已经被分门别类到这些所谓的“智能”文件夹中,垃圾邮件也被自动过滤(通过另一个算法!),这样你可以专注于重要的消息。

在这漫长的一天结束时,也许你会有一个盲目约会,对方的个人资料在成千上万的可能性中被另一个算法挑选(好吧,脚本挑选?)。再次由另一个算法完成。

当技术变得如此普遍,如机器学习目前的状态,我们明智的做法是 专注于这些模型和它们的学习方式*,因为尽管 AI 具有* 服务社会的巨大潜力*,它也具有* 巨大的破坏和不平等的力量*。

那为什么会这样呢?

不完美数据:在不完美的世界中觅食

原因在于 算法从我们教给它们的内容中学习*。

它们从我们提供的数据中学习,并期望这些数据在多个属性上是“表现良好”的。

理想情况下,情况应该是这样的。但我们的世界不完美,我们不完美,我们产生的数据自然带有这些不完美。

数据(或大数据,一个我们在过去几年中经常听到的词汇)并不等同于优质数据,混淆这两者可能导致开发出有偏见和不公平的模型,而不是准确可靠的模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据与优质数据。图像由作者提供。

传统上,机器学习算法依赖于几个假设,例如训练数据的假设:

  • 现有类别的代表性是均等的;

  • 现有的数据子概念也是均等代表的;

  • 来自不同类别的实例占据输入空间的不同区域;

  • 数据中有足够多的训练实例来学习潜在的概念;

  • 特征值一致,实例被正确标记;

  • 特征对最终任务是有信息量和相关性的;

  • 训练和测试数据遵循相同的分布;

  • 所有特征值对所有实例都是可用的。

自然地,在现实世界中,缺陷总是潜伏的,这些假设往往被打破

当它们被破坏时,它们表现为数据缺陷,具体包括:

  • 不平衡数据;

  • 代表性不足的数据或小型分离群体;

  • 类别重叠;

  • 小数据、缺乏密度或数据不足;

  • 不一致数据;

  • 无关数据;

  • 冗余数据;

  • 嘈杂数据;

  • 数据集偏移;

  • 缺失数据。

如果不加以处理,这些缺陷可能会危害标准机器学习模型的性能,对商业应用和人们的生活产生不良后果。

一次错误的信用卡欺诈警报导致了重要投资的损失。一项失败的肿瘤检测转变为痛苦的治疗方案或临终决定之间的艰难选择。一个对相似面部结构的错误判断错误地判处一个人面临法律,而另一个人则被释放。

缺陷可能让我们付出金钱、自由和生命的代价。

在我深入讨论这些数据缺陷之前,我想澄清一下不完美数据的概念。

我的研究中,我将这个词作为一个总括性术语,描述任何数据特性、特有性或容易导致分类器行为和性能偏差的问题(其他作者将其描述为数据内在特征数据难度因素数据不规则性)。

这意味着某些“缺陷”不应字面理解(这可能在某种程度上转化为有缺陷的数据)。

当然,一些缺陷可能是由于数据获取、传输和收集过程中的错误引起的,但其他缺陷是领域内在性质的自然产物。 它们自然地出现,不论数据获取、传输或收集过程有多么完善。

这里涵盖的三种数据缺陷——不平衡数据、代表性不足的数据和重叠数据——就是一个很好的例子。它们往往来源于领域本身的性质,而非数据收集或存储过程中的错误。

不平衡数据:概念不均、预测不等

不平衡数据通常指的是数据集中每个类别样本数量的不均衡

换句话说,类在领域中没有得到平等表示,这使分类器的学习过程偏向于表现良好的概念,可能忽视或忽略其余的。这是一个问题,因为在大多数应用中,少数类通常是感兴趣的类。

那么我们在哪里可以找到它们?

一些示例包括疾病诊断信用卡欺诈情感分析客户流失预测

一个有趣的转折:类不均衡本身可能并不是问题!

确实,即使在高度不均衡的领域中,标准分类器也可能在分类问题复杂度较低(例如,考虑一个线性可分的领域)时取得令人满意的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

存在于单独的不均衡数据类重叠结合的数据。两个领域包含相同数量的点(500)和不均衡比(8:1)。图像由作者提供。

尽管单独解决类不均衡可能比较容易,但在训练机器学习模型时必须始终考虑这一点,特别是在设计合适的交叉验证方法和选择无偏分类性能度量方面。

数据不均衡:小离群点的问题

数据不均衡是另一种形式的不均衡数据

在之前的案例中,我们提到的是类间不均衡,而数据不均衡与类内不均衡现象相关,并以小离群点的形式出现。

小离群点是数据中小而未充分代表的子概念,理解为类概念中的小簇。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据不均衡的特点是数据中出现小的子簇。图像由作者提供。

类间不均衡类似,小离群点问题在于分类器通常通过为表现良好的概念生成规则来学习,即较大的离群点。因此,它们容易对这些子概念进行过拟合,这导致新示例的分类性能较差。

那么在哪里可以找到它们?

小离群点的出现非常普遍于医疗数据,这与一些疾病(如癌症)的异质性和患者之间的生物多样性有关。其他示例包括面部和情感识别

当前研究中的一个开放挑战是区分核心概念(即使它们在数据空间中表现为簇)、代表性不足的子概念或小的分离点以及噪声实例。这本身并不是一个简单的问题,如果数据中存在其他问题(而且通常会存在),则变得更为复杂。

类别重叠:离开我的(输入)空间!

类别重叠发生在不同类别的实例共存于数据空间的同一区域。

随着不同概念的代表填充相同的区域,机器学习分类器很难区分它们,这导致了分类性能差(特别是影响这些区域中较少表示的概念)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

类别重叠的典型示例:领域中存在越来越多的重叠示例。图片由作者提供。

多年来,研究人员处理这个问题的方式包括仅从非重叠区域学习(在一定程度上忽视了这个问题)、将重叠数据视为新类别为重叠和非重叠区域构建单独的分类器

其他作者尝试区分散布在整个输入空间中的示例与集中在概念之间决策边界上的示例,应用量身定制的策略来处理每种类型的不同。

当前研究正转向类别重叠是一个异质概念,包含多种复杂来源的观点。在初步工作中,我特别将其区分为 4 种主要的重叠表示,将其分为特征重叠、实例重叠、结构重叠和多分辨率重叠,每种类型与不同的复杂性概念相关联。

我们在哪里可以找到它?

字符识别软件缺陷预测蛋白质及药物发现来看,类别重叠也是现实世界领域中的一种常见数据特征。

结论:我们从这里出发去哪里?

虽然过去几十年 AI 研究致力于生产更好的模型——我们称之为模型中心 AI——但目前的关注点已从模型优化和超参数调整转向系统识别和缓解数据质量问题——这一范式最近被称为数据中心 AI

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们当前生活的“人工智能巴别塔”中,真正理解数据并指向重要内容将比拥有大量的“信息”更具变革性。这种指向是新数据中心人工智能范式的基础。照片由 Killian CartigniesUnsplash 提供

这种新方法包含了对数据进行系统化和持续迭代的循环,从不完美数据转变为智能且可操作数据。这自然需要对数据缺陷有深入的理解,包括其识别与特征描述,以及其综合效应和高效的缓解策略。

数据质量纪实系列介绍了数据科学中的数据质量话题,从现实世界中常见的 3 种数据质量问题开始:不平衡数据不足数据重叠数据。系列的后续部分将致力于对其他数据质量问题进行特征描述,深入探讨每一个问题,并向读者介绍有效的工具和策略,以便在处理现实世界数据集时有效识别和衡量这些问题。

关于我

博士,机器学习研究员,教育者,数据倡导者,以及全能型人才。在 Medium 上,我撰写关于数据中心人工智能和数据质量的文章,教育数据科学与机器学习社区如何从不完美数据过渡到智能数据。

数据中心人工智能社区 | GitHub | Google Scholar | LinkedIn

参考文献

  1. B. Krawczyk, 从不平衡数据中学习:开放挑战与未来方向(2016),人工智能进展,5(4),221–232。

  2. S. Das, S. Datta, B. Chaudhuri, 处理分类中的数据不规则性:基础、趋势与未来挑战(2018),模式识别 81, 674–693。

  3. A. Fernández, S. García, M. Galar, M., R. Prati, B. Krawczyk, F. Herrera, 数据内在特征(2018),Springer International Publishing,页 253–277。

  4. I. Triguero, D. García-Gil, J. Maillo, J. Luengo, S. García, F. Herrera, 将大数据转化为智能数据:关于使用 k-最近邻算法获取高质量数据的见解(2019),Wiley Interdisciplinary Reviews:数据挖掘与知识发现 9, e1289。

  5. M. Santos, P. Abreu, N. Japkowicz, A. Fernández, J. Santos, 关于类重叠和不平衡的统一视角:关键概念、多视角全景以及研究的新领域(2023 年),信息融合 89, 228–253。

数据科学最佳实践,第一部分——测试你的查询

原文:towardsdatascience.com/data-science-better-practices-part-1-test-your-queries-629ad5209f28?source=collection_archive---------5-----------------------#2023-09-07

如何确保我们的查询按预期工作——以及其他未来的好处。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Shachaf Poran

·

关注 发表在 Towards Data Science · 11 分钟阅读 · 2023 年 9 月 7 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由 Midjourney 生成

数据科学领域根植于数学和统计学以及计算机科学。尽管在过去几十年中它有了显著的发展,但只有在过去的 10 到 15 年里,它才成为组织中的一个成熟角色,并且作为科技行业中的一个独立领域而崛起。

作为一个相对年轻的职业,数据科学中的最佳实践还没有足够的时间来凝聚,也没有得到很好的记录。这与软件工程这一相对成熟的领域形成对比,后者充满了经验丰富的指南、结构和方法论,经过时间的考验被证明是有益的。

从逻辑上讲,数据科学家应从与软件工程师的重叠和紧密合作中受益,特别是在实践方面。不幸的是,情况往往并非如此,因为许多数据科学家要么对这些方法论不了解,要么不愿意学习它们,声称这些方法论不相关或不在他们的职责范围内。

在这个博客系列中,我想分享一些数据科学家在工作中可以使用的技巧、窍门和系统性方法,旨在提高我们代码的正确性和稳定性,更好地管理我们的模型,并改善团队合作。

前提是

我们从每个处理大数据的人都在某个时刻面对的场景开始,有些人可能甚至每天都面临这个问题:

你正在使用PySpark并希望从一个大表中提取一些信息。你无法在内存中保持大量的相关数据,因此你被迫在查询语言中完成所有的转换、聚合、连接等操作。

你开始编写查询,并且对它感到满意,因为PySpark使得即使查询太复杂而难以解释给其他人,它也能轻松使用具有 Python 风格的优雅 API。即使你决定使用 SQL 接口——你仍然愉快地输入着。

然后,你意识到在groupBy调用中遗漏了一个关键列,于是回去修复它。

然后,你意识到一个窗口函数缺少orderBy子句。

然后,你决定将第四行中使用的这个神奇数字改为 1.25,而不是 1.2。

你最终会反复地查看这些 20 到 50 行的查询,来回调整 20 到 30 分钟,稍微修改一下,同时构建最终的查询结构。

然后……你运行查询,它失败了。

你再次遍历你刚刚生成的代码行,努力找出遗漏的逻辑需求,并逐一修复它们。

最终,查询运行并返回了一些结果。

但是……

谁能保证这些结果确实反映了你一直以来想要的内容,并且与当前你头脑中的过程相匹配?

这时测试会为我们提供帮助。

测试?

是的。我们做的是:

  1. 手动制作一个小数据集。

  2. 手动计算我们希望通过查询获得的结果。

  3. 在那个小数据集上应用我们编写的查询。

  4. 将查询结果与我们自己的计算结果进行匹配。

如果我们遇到不匹配的情况,我们必须修复一些东西——要么我们的手动计算错误,要么查询没有按预期执行。另一方面,如果结果匹配——我们可以继续到下一步。

现在,我将逐步向你展示我在编写这些测试时使用的结构。

设置环境

让我们从创建我们需要与PySpark一起工作的环境(即固定装置)开始。我们每次运行可能会测试许多用例,因此我们在模块级别设置PySpark会话。否则,我们可能需要为每个测试启动和停止会话,这会产生不可忽略的开销。

我使用 Python 内置的*unittest*,但如果你或你的团队其他成员使用*pytest**nose*或任何其他测试框架,我相信你会找到执行这些操作的方法。

*unittest*有两个钩子*setUpModule**tearDownModule*,分别在测试之前和之后运行。我们将使用这些钩子来启动和停止我们的PySpark会话。

test_pyspark.py

import pyspark
import unittest

spark: pyspark.sql.SparkSession | None = None

def setUpModule():
    global spark
    spark = get_spark_session('local')

def tearDownModule():
    global spark
    if spark is None:
        return
    try:
        spark.stop()
    finally:
        spark = None 

我喜欢我的会话创建函数是可重用的,所以这里是它(我会在适当的时候填写非本地选项):

query_pyspark.py

import pyspark

def get_spark_session(scope='local'):
    if scope == 'local':
        return (
            pyspark.sql.SparkSession.builder
            .appName('unit-tests')
            .master('local[4]')
        ).getOrCreate()
    else:
        ...  # TODO

如果项目变得更大,我会将这个函数放在PySpark专用的工具文件中,但目前我们将项目保持扁平和小巧。

我们的第一个测试

我现在要测试的第一件事是运行这个测试时是否实际获得了会话。以下是测试:

test_pyspark.py

class TestPysparkQueries(unittest.TestCase):
    def test_session_created(self):
        self.assertIsNotNone(spark)

你瞧,我运行了测试(PyCharm 允许你直接从代码中运行,你应该会看到每个测试旁边有一个绿色的“播放”按钮),并且收到了 OK 消息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建测试我们的数据

现在我们可以开始讨论数据了。你应该手头有一个小的数据集,涵盖你可能遇到的不同情况,并且仍然可以手动处理。就实际大小而言,我通常建议 20–50 行,具体取决于领域和查询的复杂性。如果涉及分组,请选择 5–10 个不同的组。

出于教学目的,我创建了一个包含名字和出生日期的数据集。为了简单起见,我假设所有具有相同姓氏的个体是兄弟姐妹。我还引入了行顺序的随机性,以防止顺序敏感的查询在不直接处理顺序的情况下获得正确的答案。数据如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在是时候将数据加载到我们的PySpark会话中了。但首先,让我们为它创建一个基本的测试。顺便说一下,创建测试然后编写使测试通过的代码是测试驱动开发(TDD)方法的一部分,但我不对数据科学家传授这个方法,只关注测试部分。

对于一个理智的测试,我们可以测试列名,测试数据集大小,或者两者都测试,或者我们可以提出更深层次的测试。甚至,我们可以编写一个测试,逐行匹配 CSV 文件和DataFrame

我们在编写测试时越严格,后来对代码正确性的确信就越强,但这也会使未来的更改更加困难,例如,如果我们想在数据集中添加/更改一行以测试特定边界情况怎么办?

在我们的工作中,平衡这些速度和正确性因素更像是一门艺术,而不是科学,这随着时间和实践会变得更加自然。

test_pyspark.py

 def test_load_data(self):
        df = get_family_data()
        self.assertEqual(25, df.count())

接下来,我们编写加载数据的函数:

query_pyspark.py

def get_family_data():
    return (
        get_spark_session(scope='local')
        .read.csv(os.path.join(os.path.dirname(__file__), 
                  '../assets/data_sample.csv'))
    )

当我运行测试时……失败了?这怎么可能?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在重新计算行数并确保为 25 后,我最终在代码中添加了*header=True*,测试通过了(不用担心,我会在接下来的示例中省略虚假的戏剧性):

query_pyspark.py

def get_family_data():
    return (
        get_spark_session(scope='local')
        .read.csv(os.path.join(os.path.dirname(__file__), 
                  '../assets/data_sample.csv'), header=True)
    )

测试我们的查询

现在是查询特定测试的时间。假设我想从每个家庭中获取最年长的孩子。我查看数据集(或使用排序的电子表格)来找出我期望获得的确切名字集合,并将其硬编码到我的测试中:

test_pyspark.py

 def test_elder_child_query(self):
        df = get_elder_child(get_family_data())
        elders = {_.elder_child for _ in df.toLocalIterator()}
        self.assertEqual(elders, {'Gus', 'Rita', 'Sam', 'Trent', 'Ursula'})

使测试通过的代码如下:

query_pyspark.py

def get_elder_child(family_df: pyspark.sql.DataFrame):
    return (
        family_df
        .orderBy(f.col('date_born').desc())
        .groupby('last_name')
        .agg(f.first('first_name').alias('elder_child'))
    )

尽管我省去了戏剧性的描述,我还是要告诉你,我不得不多次修复查询才能使测试通过。例如,我按*first_name*分组,聚合了*last_name*的值,并且忘记了进行降序排序。

在我的工作中,测试让我多次避免了丢脸

完成了吗?绝对没有。

我们应该考虑边界情况,比如如果有双胞胎呢?是否有没有孩子的家庭?如果数据不可靠,那么空值怎么办?

对于这些选项,我们将转到我们的数据集,将其更改为产生这样的案例,然后更新我们的测试和代码。

如果我们通过后来出现的错误遇到这些特殊情况(即使我们不是自己提出的),我们也会这样做——更改数据集以反映这些情况,然后从那里继续。

我们还应该为其他查询编写测试,并且我们会遇到不同类型的测试。在上面的测试中,我们关心的是结果集,但如果我们想测试简单的 1:1 转换, f(row) = y,我们需要考虑 Spark 在行顺序上的非确定性。

例如,假设我们想要获取数据集中名字的首字母。

一种选择是对*DataFrame*进行排序,并在使用我们手工制作的列表进行相等断言时相信这个顺序:

query_pyspark.py

def get_initials_col():
    return (
        f.concat(
            f.substring('first_name', 0, 1),
            f.lit('. '),
            f.substring('last_name', 0, 1),
            f.lit('.'),
        )

    ).alias('initials')

test_pyspark.py

 def test_get_initials_col_1_by_1(self):
        df = (
            get_family_data()
            .withColumn('initials', get_initials_col())
            .orderBy('date_born')
        )
        expected_list = ['V. A.', 'W. W.', 'X. M.', 'Y. T.', 'Z. C.', 'I. M.', 'J. T.', 'K. C.', 'L. A.', 'M. W.',
                         'N. M.', 'O. T.', 'P. C.', 'Q. A.', 'A. A.', 'B. W.', 'C. M.', 'E. T.', 'F. C.', 'G. A.',
                         'H. W.', 'R. W.', 'S. M.', 'T. T.', 'U. C.']
        for expected, actual in zip(expected_list, [_.initials for _ in df.toLocalIterator()]):
            self.assertEqual(expected, actual)

另一种选择是编写一个本地函数来完成相同的工作,并进行充分测试。然后,我们可以在将结果加载到内存后应用它,并编写测试以逐行断言相等。以下是一个示例:

query_pyspark.py

def get_initials(first_name, last_name):
    return f'{first_name[:1]}. {last_name[:1]}.'

test_pyspark.py

 def test_get_initials(self):
        self.assertEqual('B. H.', get_initials('Bob', 'Hope'))
        self.assertEqual('C. C.', get_initials('Charlie', 'Chaplin'))
        self.assertEqual('J. L.', get_initials('Jonathan', 'Livingstone'))

    def test_get_initials_col_support_function(self):
        df = (
            get_family_data()
            .withColumn('initials', get_initials_col())
        )
        for row in df.toLocalIterator():
            self.assertEqual(get_initials(row.first_name, row.last_name), row.initials)

在这两个选项中,我肯定会选择后者,因为它更灵活,因为它不直接依赖数据,而是通过支持函数的代理——这些函数在不与数据集耦合的情况下进行测试。

当然,如果函数对你的查询负载不重,你可以选择将其用作 UDF,保持代码复杂性低。

等等,还有更多内容吗?

当然。有许多不同的情况,比如联接和窗口函数的结果,但我相信上述示例足以说明测试是一种重要工具,是编写查询时的有效方法,即使对像我这样的数据科学家也是如此。

请注意,我选择展示如何在使用PySpark时工作,因为它是一个常见的大数据工具,但这种模式不仅限于PySpark或大数据数据库。实际上,它应该适用于任何数据库。你也可以使用这种方法与内存数据库类似的工具,如*pandas*

只要你能够:

  1. 连接到数据源。

  2. 加载/模拟数据源中的数据。

  3. 执行查询。

  4. 检索并处理查询结果。

一切准备就绪。如果你使用的工具无法执行这些步骤中的任何一个,你可能需要重新考虑使用这个工具。

而且你会发现,测试你的代码还有一个隐藏的好处。假设你发现你的某个函数在运行时间或内存消耗方面表现不佳,并决定尝试优化或重构它。现在你可以使用现有的测试来保证你的新代码给出的输出与之前的相同。没有这些测试,我个人会害怕改动哪怕一行代码,担心会破坏某些下游依赖。

总结

测试是一种强大且重要的方法,可以验证代码的正确性,并使任何重构易于管理。

在未来的帖子中,我将提供更多关于数据科学中良好实践的示例。我们将涉及如何在不相互干扰的情况下协同工作在同一个模型上,如何管理数据集版本,如何观察我们代码在生产环境中的性能,以及更多内容。

敬请关注。

常见问题解答

问:等等,什么?

答:欢迎在这里或其他地方就本博客系列中的概念展开讨论。

问:如果我的查询需要成千上万行来测试呢?

答:编写查询的参数化版本,例如*def get_n_smalles_children(family_df, n): …*并使参数足够小。另一个选项是通过编程方式模拟数据,但这也会带来新的问题和挑战。

问:如果我不断更改查询,这是否意味着我也需要更改测试?

A: 理想情况下,你不会随时间改变查询,但我知道我们领域的探索性。因此答案是“是的”。这也是为什么你可能会感觉编写测试时速度变慢的原因之一。然而,速度是与准确性/正确性权衡的。你可能会在后期过程中编写测试,当查询结构更加稳定时。

Q: 如果我不使用 PyCharm,怎么运行测试?

A: 在测试文件的末尾添加以下魔法行,然后使用*python test_pyspark.py*运行它。别忘了确保代码根目录被包含在PYTHONPATH中,以便导入能够正常工作(PyCharm 会自动处理这个问题)。

if __name__ == '__main__':
    unittest.main()

Q: 如果我不想(或者无法)将数据保存在.csv 文件中怎么办?

A: 任何对你有效的数据存储和加载方式都可以,只要尽量保持整洁即可。对于非常小的数据集,我使用了 dict-to-DataFrame(或者如果你愿意,可以使用 json-to-DataFrame),对于较大的数据集,我使用了永久存储在 Hadoop 上的表。

Q: 你给出的示例函数不是非常简单吗?

A: 是的。这就是我教授的方式——通过给出简单的例子,并逐渐使其变得更加复杂。不幸的是,这篇文章的边距太小,无法容纳后面的部分。

Q: 你有没有将上述代码存储在某个仓库中,以便我可以用作参考?

A: 是的,我确实这样做了。

数据科学职业路径、技能与特别项目:我们 2023 年的最佳阅读

原文:towardsdatascience.com/data-science-career-paths-skills-and-special-projects-our-best-reads-of-2023-d3ed88b6db41?source=collection_archive---------1-----------------------#2023-12-21

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 TDS Editors

·

关注 发表在 Towards Data Science · 作为 Newsletter · 5 分钟阅读 · 2023 年 12 月 21 日

2023 年可能是大型语言模型(LLM)的年份——我们上周突出了我们关于 ChatGPT 的最受欢迎的文章以及相关主题——但数据科学和机器学习的领域太广泛,难以将其缩减为单一现象(尽管这可能是不可避免的)。

每天,TDS 作者都会发布涵盖各种主题的优秀作品,从最新的工具到职业见解和项目演示。为了今年的最后一期 Variable,我们决定突出一些最令人难忘和广泛阅读的帖子,围绕三个主题:数据科学家的编程、职业发展,以及创意项目和观点文章。它们出色地展示了这个领域及我们的社区是多么充满活力、多样性和动态。

我们希望你喜欢我们的精选内容,并再次感谢你在过去一年中的支持。

数据科学家的编程

  • 编程很难,直到我学会了这两件事

    如何从“有抱负的开发者”成为一名受雇的开发者?Natassha Selvaraj 的病毒式热门文章提供了切实可行的建议和大量的灵感。

  • Pandas 2.0:数据科学家的游戏规则改变者? 新的 Python 库每天都在出现,但 Pandas 仍然是数据科学家的必备工具。Miriam Santos 的有用概述带我们了解了该库 2.0 版本的显著特点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Sneha Chekuri 拍摄,发布在 Unsplash

  • 12 个将你的代码提升到新水平的 Python 装饰器

    如果你想扩展你的 Python 知识,为什么不探索装饰器的世界呢?Ahmed Besbes 介绍了 12 种你可以尝试的装饰器,以便编写更高效的代码。

  • 我在几乎所有数据科学项目中使用的 5 个 Python 装饰器 想要更多装饰器吗?通过跟随 Thuwarakesh Murallie 的清晰简明指南,给你的编程工具包额外加点油。

  • 5 个区分高级开发者与初级开发者的 Python 技巧

    解决问题的方式不止一种,但这并不意味着所有策略都等同。Tomer Gabay 展示了经验丰富的开发者在代码中引入的小调整如何产生显著的影响。

职业发展

  • 6 个正在毁灭你数据科学生产力的坏习惯从过度依赖笔记本到跳过数据版本管理,数据科学家常常因不良习惯而陷入困境。多纳托·里奇奥提供了切实可行的建议,作为强有力的解药。

  • 数据科学家角色的原型鉴于职位描述的广泛差异和招聘广告的模糊不清,选择数据科学领域中的正确路径可能会很棘手。为了帮助你完成这一过程,斯蒂芬妮·基尔默列出了你可能会考虑的主要角色类型。

  • 在开始数据科学之旅之前,不要错过这 5 个必做步骤对于求职者来说,这段时期充满挑战,但没有理由感到绝望。正如胡劳德·艾拉米在她受欢迎的帖子中所强调的,早期职业数据科学家有能力为自己创造成功的机会。

  • 让我获得数据科学家工作的作品集通过详细讲解如何创建一个引人注目的数据科学作品集,马特·查普曼的指南引起了大量从业者的共鸣,他们希望在竞争激烈的领域中脱颖而出。

  • 使用 OpenAI 和 Python 来提升你的简历:一步一步的指南为什么不利用新工具来简化简历制作过程?皮耶罗·派亚隆加将 ChatGPT 和一些 Python 代码结合起来,将这一常常枯燥的任务变得更加愉快。

  • 如何制定有效的自学计划,成功学习数据科学

    如果你为即将到来的一年设定了一些雄心勃勃的目标,你需要一个能够帮助你度过挑战时刻的计划。麦迪逊·亨特详细解释了如何制定一个既有效又可持续的自学计划。

  • 我在数据科学总监职位的第一年学到了什么 每个人当然都想在职业生涯中有所进步,但成为高级数据科学家也面临一系列挑战。CJ Sullivan 讲述了她在担任总监级高管的第一年中需要克服的一些挑战。

创意项目和观点文章

  • 我如何使用 AI 生成的曲目构建了一个 Lo-fi 音乐网络播放器 在围绕 AI 的许多炒作中被忽视的是其激发一些真正创新项目的能力。举个例子:Aleksandra Ma的有趣(且聪明)的 lo-fi 音乐播放器。

  • 监管 AI:基于机制的方法案例 试图对 AI 发展进行规制的努力一直笨拙而棘手,众多利益相关者争夺影响力。Viggy Balagopalakrishnan 分享了如何使这一过程变得更有效的主观见解。

  • 走向负责任的 AI 生成内容的途径 在 AI 的广泛领域中,生成工具占据了社会和伦理问题的相当大一部分,这些问题仍需解决。Lingjuan Lyu的深刻文章绘制了一张通向更负责任使用这一强大技术的路线图。

  • 仪表板已死:三年后 我们过多地关注如何生成和呈现数据,以至于其在其他领域同事中的实际使用有时感觉像是事后的想法。Taylor Brownlow重新审视了仪表板的概念,以揭示协作和沟通的长期挑战。

  • 被禁书页:美国书籍禁令的数据分析 数据在告知和塑造重要对话方面的力量得到了充分展示,Yennie Jun深入探讨了美国书籍禁令的令人担忧的趋势,“LGBTQ+社区、穆斯林家庭、科学女性、种族主义、性别歧视,甚至是关于牛的图画书的故事。”

  • 摆脱局限:在 MoMA 验证机器幻觉 我们很高兴阅读了Christian Burke关于他在纽约现代艺术博物馆的协作人类/人工智能装置工作的介绍。随着人工智能在我们生活中的影响越来越大,这为各种创作者打开了新的方向,这是一次令人着迷的探索。

再次感谢你在 2023 年对我们作者工作的支持!如果你喜欢在 TDS 上阅读的文章,可以考虑成为 Medium 会员:这是一个新的会员等级,为你喜爱的作者提供更大的奖励,以回报他们的高水平写作。

《The Variable》将在假期期间短暂休息,但我们迫不及待想在新的一年里再见到你。

TDS 编辑部

数据科学专业知识以多种形式和形状出现

原文:towardsdatascience.com/data-science-expertise-comes-in-many-shapes-and-forms-6a14f665f325?source=collection_archive---------7-----------------------#2023-05-25

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 TDS Editors

·

关注 发布于 Towards Data Science · 作为 Newsletter 发送 · 3 分钟阅读 · 2023 年 5 月 25 日

很少有事情比发布作者的第一篇 TDS 文章更让我们感到高兴。这部分是因为发现一个新声音分享他们独特的经历和知识的兴奋感。另一个原因是一次又一次地意识到,即使我们处理的是常见的问题和挑战,总有一个新角度值得探索。

我们将本期《Variable》致力于最近由我们最新一批作者所作的贡献,并且有几个原因。首先,我们想庆祝他们用清晰、精准和独特的个人视角传达复杂思想的能力。

其次,也许更自私一点——我们突出这些文章,希望我们社区中的其他成员也能受到启发,与 TDS 的观众分享他们的专业知识。我们涵盖了非常广泛的主题——从 AI 伦理和气候变化数据到 ML 管道和产品管理。真正重要的是你对自己的主题充满热情,并认为其他人也应该关心它。

祝阅读愉快!

  • “世界需要另一个GPT 家族的介绍吗?”这是一个值得提出的问题。在阅读了Beatriz Stollnitz对这些无处不在的语言模型背后核心概念的详细解释后,我们相当确定你的回答会是响亮的“是!”

  • 关系型数据库已经存在了几十年,但它们的持久性并不是忽视它们强大功能和经得起时间考验的可靠性的理由——相反!Stephanie Lo 解释了为什么数据科学家应该更深入地了解数据库的工作原理并学习如何有效使用它们。

  • 作为一名从事 NLP 研究的实践者,Francisco Caio Lima PaivaChatGPT 在情感分析任务中的表现如何感到好奇,因此他决定测试这款聊天机器人的能力,并与特定领域的模型进行对比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Viviane OkuboUnsplash上拍摄的照片

  • 你是否偶尔会觉得编写自定义函数的想法让人感到畏惧?那就不要错过Vivian Peng的新文章:它涵盖了使用自定义函数在 R 中生成多个图形的完整过程****。 作为额外的好处,Vivian 描述的主要步骤可以在各种工作流程中普遍适用。

  • “[处理包含日期和时间的数据可能会让人感到不知所措,”Andreas Lukita说;我们猜测你们中的许多人对这句话点头如捣蒜。Andreas 将提供帮助,Python 的 datetime 模块的全面、一站式资源

  • 管理 ML 和 AI 团队有其自身的奖励和挑战。Przemek Pospieszny 分享了他在研发和产品领导方面的丰富经验,并强调了敏捷性、规划以及在创新与务实之间找到正确平衡的重要性

感谢您对我们作者的支持!如果您喜欢在 TDS 上阅读的文章,可以考虑 成为 Medium 会员 —— 这将解锁我们所有的档案(以及 Medium 上的其他所有帖子)。

直到下一个 Variable,

TDS 编辑

数据科学造福社会:超越利润,迈向更美好的世界

原文:towardsdatascience.com/data-science-for-good-beyond-profits-towards-a-better-world-2d161e2d2b28

利用数据分析的力量来推动公司内部的积极变革,同时提高盈利能力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Samir Saci

·发表于Towards Data Science ·阅读时长 11 分钟·2023 年 8 月 25 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据科学造福社会 — (作者提供的图片)

数据科学可以支持远超财务收益的业务转型。

这可以改善工作条件,减少不平等,并促进包容性的工作环境。

在我作为高级供应链工程师的经验中,我主要使用分析工具来提高运营绩效并降低成本。

然而,工程师的职责不仅仅是最大化利润;她还可以帮助让世界变得更美好。

作为数据科学家,您如何改善物流操作员的工作条件?

在这篇文章中,我将分享使用数据科学来改善物流操作员的工作条件(和奖金)的例子。

💌 免费订阅最新文章: 新闻通讯

📘 您的完整供应链分析指南:分析备忘单

I. 生产力与盈利能力

物流公司的盈利能力

作为一名前供应链解决方案设计师,我职业生涯的早期帮助物流公司优化生产力以提高利润。

我亲眼目睹了我们的客户 (零售、时尚、奢侈品、化妆品) 面临的巨大压力,他们需要按时交付货物,同时最小化成本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3PL 零售分销 — (作者提供的图片)

作为第三方物流提供商,这种压力持续向我们施加,我们时刻担心合同无法续签。

在这种压力巨大的环境下,削减成本和采用激进管理策略的诱惑始终存在。

让我们找到更聪明的工作方式吧!

通过利用数据科学的力量来改进流程,我们可以避免将这种压力转移到操作人员身上,并推动积极的变化。

过程生产力定义

让我们以一个假设的场景来讨论,一家主要的国际时尚零售商正在与物流公司建立其配送网络

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配送网络以交付 100 家门店 — (图像来源:作者)

I&N 正在寻求外包其仓储和运输操作,以交付其在上海的门店。

物流团队组织招标,也称为请求提案(RFP),邀请全球物流公司提交他们的解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

请求提案 — (图像来源:作者)

作为 RFP 的一部分,I&N 的物流团队提供

  • 数据和流程要求

  • 一份报价单概述了不同服务价格,如存储、接收、箱子拣选、单件拣选、装载和退货管理。

作为解决方案设计经理,我负责提出解决方案并计算每项服务的价格。

价格通过考虑设备和劳动力成本来确定,这些成本由操作人员的生产力和销售利润率驱动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算处理服务的价格 — (图像来源:作者)

附注:销售利润率定义为营业额中代表利润的百分比。

仓库和运输团队随后将进行为期三年的操作,关键目标是保持这一利润率。

这可以通过提高价格(几乎不可能)或降低成本来实现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

损益平衡 — (图像来源:作者)

后者的选择通常归结为一个关键因素:提高生产力

但是你如何提高生产力呢?

这可以通过使用高个人生产力目标、工资削减和非法劳动实践的激进管理策略来实现。

这通常会导致员工压力和不满增加,这可能会影响贵公司的 ESG 评分。

❓ 想了解更多关于 ESG 评分的内容吗?

## 什么是 ESG 报告?

利用数据分析进行全面和有效的环境、社会及治理(ESG)报告

towardsdatascience.com

第二种方法是优化流程、布局和货物流动,帮助操作人员在相同的努力下变得更高效

这种方法不仅有利于公司,而且改善了工作条件

为了说明我的观点,我将分享我在零售、快时尚和奢侈品行业的职业生涯中实施的示例。

💡 关注我在 Medium 上的文章,获取更多与🏭供应链分析、🌳可持续发展和🕜生产力相关的内容。

II. 通过优化提高生产力

数据科学可以成为改善操作员工作条件和工资的重要工具。

提高拣货效率

让我们从一个来自再工程项目的例子开始,我使用分析来帮助操作员提高拣货生产力。

仓库拣货可以定义为从库存中提取产品以准备订单(电子商务、门店配送)的任务。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仓库中的拣货路线——(作者提供的图片)

在**配送中心(DC)**中,从一个位置到另一个位置的行走时间在picking route中可以占据操作员工作时间的60%到 70%

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算拣货的价格——(作者提供的图片)

减少行走时间可以对生产力产生显著影响。

假设操作员拣选的是完整的箱子。

  • 生产力将以**(箱数/小时)**来衡量。

  • 价格将以**($/小时)**来衡量。

仓库操作员有生产力目标,他们需要达到这些目标才能获得奖金。

对于零售和快速消费品(FMCG)操作,操作员面临巨大的压力,因为他们占据了固定和变动成本的主要部分。

改善操作员生产力的最佳方法是什么?

如果您最大化每米行走拣选的箱数,可以在最小化操作员的努力的同时提高他们的生产力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提高每米行走拣选的箱子数量的 3 种方法——(作者提供的图片)

在一系列文章中,我提出了几种数据驱动的方法来减少行走距离并最大化操作员的生产力。

  • 订单批处理以增加每条路线拣选的订单行数。

  • 拣货地点的聚类以按区域分组订单。

  • 使用 Google-OR 库进行高级路径规划以优化拣货路线。

这些不同的优化方法已经通过实际的订单行和仓库布局进行了测试。

更多的箱子被拣选 + 更少的距离 = 更高的生产力。

结果显示,在拣选相同订单范围时,行走距离大幅减少。

通过在您的仓库管理系统中实施这些算法,您可以在不改变流程的情况下提升操作员的生产力。

💡 欲了解更多详细信息,您可以查看这些文章,

[## 使用订单分批处理提高仓库生产力

设计一个仿真模型,以估算几种单拣货员路线问题策略在拣货中的影响…

向数据科学进发 [## 使用空间聚类提高仓库生产力

通过使用拣货位置空间聚类,将订单分批处理来提高仓库拣货生产力

向数据科学进发 [## 使用路径规划算法提高仓库生产力

基于旅行推销员问题设计的路径规划算法,采用 Google AI 线性优化…

向数据科学进发

使用排队理论设计的包裹打包过程

现在让我们转到电子商务操作。

在线零售的兴起给履行中心带来了巨大的压力,以无与伦比的速度准备和发货订单。

我们的仓库每天可以发货多少订单?

在这个例子中,一名持续改进工程师的主要问题是运输能力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仓库中的打包区域 — (图像由作者提供)

拣货之后,订单等待过长时间被打包并装上卡车。

根据现场观察和生产力分析,我们的工程师了解到打包过程是瓶颈

为了减轻打包操作员的压力,她希望重新设计布局并优化流程。

现场经理决定投资第二个打包站

因此,我们的工程师希望使用排队理论找到最佳布局。

解决方案 1:保留一条带有两个平行工作站的单线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决方案 1 — (图像由作者提供)

解决方案 2:增加一条带有专用工作站的第二条线

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决方案 1 — (图像作者提供)

最佳解决方案是什么,以最小化排队时间并减少瓶颈?

运用排队理论的概念,我们可以估计考虑输入流量变异的两种布局的表现。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两种解决方案的模拟结果 — (图像作者提供)

分析显示,第二种解决方案鲁棒性较差,可能会在面对容量变异时降低包装站的能力。

假设我们有 1.5 的变异性,

  • 打包线队列时间减少-25%(秒)

  • 在相同的包装速度下更高的整体生产力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按解决方案计算的平均生产力 — (图像作者提供)

多亏了这个简单的建模,她设计了一个可以让操作员在没有额外努力的情况下提高生产力的布局。

💡 有关更多详细信息,请查看这篇文章

## 使用路径寻找算法和 Python 提升仓库生产力

实施基于旅行商问题的路径寻找算法,由 Google AI 线性优化设计…

towardsdatascience.com

结论

使用先进的分析工具,您可以重新设计流程,以帮助操作员提高效率。

  • 提高挑选和包装操作员的奖金(👩‍🏭)

  • 更少的努力就能快速行走或打包,无需经理的压力(🧘)

  • 为公司带来更好的盈利能力(💰)

在下一部分,我们将探索其他基于数据的改进机会,重点关注资源分配

💡 在 Medium 上关注我,获取更多关于🏭供应链分析、🌳可持续性和🕜生产力的文章。

II. 智慧地投资于您的员工

前一部分专注于设计一种最佳过程,以最大化操作员的生产力。

然而,过程设计执行之间存在一个差距,这个差距可以通过优化工具来弥补。

入库管理的劳动力规划

对于我们的快时尚客户I&N,我们必须计划劳动力以应对商店需求的波动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

电子商务仓库的日常波动示例 — (图片由作者提供)

I&N 提供体积预测,如上所示,管理者正在规划所需的员工人数以满足需求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基于体积预测的劳动力规划 — (图片由作者提供)

他们必须在确保员工保留和遵守当地法规的同时,最小化临时工的数量。

在我们的例子中,我们希望帮助入库经理

他的团队职责包括

  • 卸货 从卡车上卸下托盘

  • 扫描 每个托盘并记录在仓库管理系统(WMS)中收到的数量

  • 将这些 托盘放置在库存区域

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

仓库卸货过程 — (图片由作者提供)

团队有两种生产力目标

  • 每小时卸货的托盘数量 每个工人 (I)

  • 每小时卸货的托盘数量 为整个团队支付(II)

如何根据体积和生产力来确定劳动力规模?

如果经理招聘了过多的操作员总体生产力(II)可能会大幅下降。

根据体积预测,他可以估算每天所需的资源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每日入库资源需求预测 — (图片由作者提供)

确保员工保留,你需要保证每周 5 个连续工作日的最低要求。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据上述约束进行轮班规划 — (图片由作者提供)

为了帮助我们的入库经理平衡这些约束和目标,我们可以使用Python 的线性规划

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终结果 — (图片由作者提供)

这个优化工具的结果令人满意,

  • 除了星期五和星期六,我们没有多余的资源

  • 供应每天与需求相匹配

除了这两天外,总体生产力不会受到计划问题的影响。

如果操作员达成目标,他们将获得全额奖金,而不会影响运营利润。

💡 要了解更多细节,你可以查看这篇文章

## 使用线性规划和 Python 优化劳动力规划

你需要雇佣多少临时工来吸收每周的工作量,同时确保……

towardsdatascience.com

仓库操作员的最佳激励政策

在这个最后的例子中,让我们假设你正在帮助一个拥有22 个仓库的物流公司的区域主任处理她的损益表。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配送中心的拣货、增值服务和包装 — (作者提供的 CAD 模型)

目标仍然是最大化操作员的拣货生产力

她希望使用财务激励来激励操作员提高每小时的产出。

当前的激励计划为达到目标的操作员提供每天 5 欧元(日薪:62 欧元)

然而,这并不高效,因为只有20%的操作员能够达成他们的目标。

达到 75%目标所需的最低每日奖金是多少?

这个想法是进行一个数据驱动的实验

  1. 随机选择你在22 个仓库中的操作员

  2. 实施每日激励金额在1 到 20 欧元之间

  3. 验证操作员是否达到了目标

使用逻辑回归,我们可以得到一个概率图,帮助估算每个每日激励值下达到目标的概率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你的样本数据的拟合线图 — (作者提供的图片)

根据趋势,以15 欧元的每日激励,我们有 75%的概率达到目标。

这一结果,通过统计工具的支持,为我们的主管提供了有价值的见解,以便调整她的激励政策。

💡 更多详细信息,请查看这篇文章

## 使用 Python 进行精益六西格玛 — 逻辑回归

用 Python 代替 Minitab 执行逻辑回归,以估算达到 75%目标所需的最低奖金。

towardsdatascience.com

结论

我们发现了一些优化和统计工具,帮助公司改善资源分配以实现关键运营目标。

  • 提高整体团队生产力和改善利润率(👩‍🏭)

  • 为操作员提供更多激励(💰)

  • 减少管理层的压力(🧘)

💡 关注我在 Medium 上的更多文章,内容涉及🏭供应链分析、🌳可持续发展和🕜生产力。

III. 下一步

希望这些现实世界的应用能够激发你设计和部署支持财务收益并改善操作条件的工具。

随着利益相关者对企业社会责任(CSR)和 ESG 评分的要求越来越高,工作条件和公平工资将成为任何业务转型的关键参数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

ESG 支柱演示——(作者提供的图片)

环境、社会和治理(ESG)是一种用于披露公司环境足迹、社会影响和治理结构的报告方法。

查看 ESG 评分中包含的指标,你会发现利用数据科学带来积极变化的额外机会。

有关 ESG 评分的更多细节

什么是 ESG 报告?

利用数据分析进行全面有效的公司环境、社会和治理报告

towardsdatascience.com

在本系列的下一篇文章中,我将专注于高级分析以减少消耗品使用和废物生成

敬请关注!

🌍 对全球可持续未来的路线图感到好奇吗?

深入了解我最近关于联合国可持续发展目标如何通过数据支持的见解

## 数据科学支持可持续发展目标(SDGs)——数据为善

将全球可持续发展倡议与公司供应链数字化转型通过数据科学相结合

s-saci95.medium.com

关于我

LinkedinTwitter上与我联系,我是一名使用数据分析改善物流操作和降低成本的供应链工程师

如果你对数据分析和供应链感兴趣,可以看看我的网站。

## Samir Saci | 数据科学与生产力

一个关注数据科学、个人生产力、自动化、运筹学和可持续性的技术博客……

samirsaci.com

💡 在 Medium 上关注我,获取更多有关🏭供应链分析、🌳可持续性和🕜生产力的文章。

参考资料

拉曼光谱的数据科学:一个实际示例

原文:towardsdatascience.com/data-science-for-raman-spectroscopy-a-practical-example-e81c56cf25f?source=collection_archive---------5-----------------------#2023-01-16

光谱预处理和建模的实际示例

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Nicolas Coca, PhD

·

关注 发表在 Towards Data Science ·10 分钟阅读·2023 年 1 月 16 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

拉曼光谱的数据科学。从光谱预处理到建模:峰值检测与去除、基线扣除、平滑处理以及经典最小二乘法应用于成分量化。[作者提供的图片]。

介绍

拉曼光谱学提供了分子振动模式的信息,以拉曼光谱的形式展现。这些光谱可以像结构指纹一样,用于识别和表征分子和材料。从中我们可以了解材料的组成、温度、材料内部的应力、是否有施加的电磁场等。然而,为了提取这些信息,我们需要先清洗和处理数据,然后应用化学计量学或机器学习模型。在本文草稿中,我将解释数据科学管道如何在拉曼光谱数据上工作,并给出定量光谱分析的示例化学计量学。

本文是《Python 拉曼光谱数据科学系列》的一个部分。本篇将帮助总结之前的主题,并将其用于完整的处理和建模周期。请查看之前在Towards Data Science发布的文章:

一个例子

本文的目的是展示拉曼光谱数据分析和建模的典型工作流程。为此,我们生成了一个基于三个不同组件的合成拉曼光谱。为了增加真实感,添加了不同类型的噪声。应用了最常见的预处理步骤以恢复干净的光谱。最后,使用经典的最小二乘法来估计三个不同组件的浓度。

本笔记本因此分为三部分:

  1. 合成光谱生成

  2. 光谱的预处理

  3. 应用经典最小二乘法计算光谱中不同组件的量

让我们首先加载将要使用的库。

# Loading the required packages:
import numpy as np
import matplotlib.pyplot as plt
from scipy import sparse
from scipy.sparse.linalg import spsolve
from scipy.signal import savgol_filter, general_gaussian
import sklearn.linear_model as linear_model

合成数据生成

对于这个实际例子,我们将模拟一些拉曼光谱,以便知道预期结果。

  1. 我们将生成三个组件,并按给定比例混合。

  2. 为了让数据更真实,我们将添加噪声:随机噪声、尖峰和基线。

生成由三个组件组成的混合光谱

即使这个话题更复杂,为了这个例子,我们假设信号由高斯峰组成。为此,我们定义一个高斯函数为

def Gauss(x, mu, sigma, A = 1):
    # This def returns the Gaussian function of x
    # x is an array
    # mu is the expected value
    # sigma is the square root of the variance
    # A is a multiplication factor

    gaussian = A/(sigma * np.sqrt(2*np.pi)) * np.exp(-0.5*((x-mu)/sigma)**2)

    return gaussian

我们首先生成这三个组件:

# X-axis (Wavelengths)
x_range =  np.linspace(650, 783, 1024)

# Let's create three different components

# Component A
mu_a1 = 663
sigma_a1 = 1
intensity_a1 = 1

mu_a2 = 735
sigma_a2 = 1
intensity_a2 = 0.2

mu_a3 = 771
sigma_a3 = 1
intensity_a3 = 0.3

gauss_a =  Gauss(x_range, mu_a1, sigma_a1, intensity_a1) + Gauss(x_range, mu_a2, sigma_a2, intensity_a2) + Gauss(x_range, mu_a3, sigma_a3, intensity_a3)

# Component B
mu_b = 700
sigma_b = 1
intensity_b = 0.2

mu_b1 = 690
sigma_b1 = 2
intensity_b1 = 0.5

mu_b2 = 710
sigma_b2 = 1
intensity_b2 = 0.75

mu_b3 = 774
sigma_b3 = 1.5
intensity_b3 = 0.25

gauss_b = Gauss(x_range, mu_b, sigma_b, intensity_b) + Gauss(x_range, mu_b1, sigma_b1, intensity_b1) + Gauss(x_range, mu_b2, sigma_b2, intensity_b2) + Gauss(x_range, mu_b3, sigma_b3, intensity_b3)

# Component C
mu_c1 = 660
sigma_c1 = 1
intensity_c1 = 0.05

mu_c2 = 712
sigma_c2 = 4
intensity_c2 = 0.7

gauss_c = Gauss(x_range, mu_c1, sigma_c1, intensity_c1) + Gauss(x_range, mu_c2, sigma_c2, intensity_c2)

# Component normalization
component_a = gauss_a/np.max(gauss_a)
component_b = gauss_b/np.max(gauss_b)
component_c = gauss_c/np.max(gauss_c)

# How do they look?
plt.plot(x_range, component_a, label = 'Component 1')
plt.plot(x_range, component_b, label = 'Component 2')
plt.plot(x_range, component_c, label = 'Component 3')
plt.title('Known components in our mixture', fontsize = 15)
plt.xlabel('Wavelength', fontsize = 15)
plt.ylabel('Normalized intensity', fontsize = 15)
plt.legend()
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三个(已知的)合成组件光谱。[作者提供的图片]。

我们可以基于这三个不同的组件生成一个混合光谱:

# What concentrations we want these components to have in our mixture:
c_a = 0.5
c_b = 0.3
c_c = 0.2

comps = np.array([c_a, c_b, c_c])

# Let's build the spectrum to be studied: The mixture spectrum
mix_spectrum = c_a * component_a + c_b * component_b + c_c *component_c

# How does it look?
plt.plot(x_range, mix_spectrum, color = 'black', label = 'Mixture spectrum with noise')
plt.title('Mixture spectrum', fontsize = 15)
plt.xlabel('Wavelength', fontsize = 15)
plt.ylabel('Intensity',  fontsize = 15)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

合成光谱。 [作者提供的图片]。

为了让我们的混合物更加真实,现在我们添加一些噪声:

# Let's add some noise for a bit of realism:

# Random noise:
mix_spectrum = mix_spectrum +  np.random.normal(0, 0.02, len(x_range))

# Spikes: 
mix_spectrum[800] = mix_spectrum[800] + 1
mix_spectrum[300] = mix_spectrum[300] + 0.3

# Baseline as a polynomial background:
poly = 0.2 * np.ones(len(x_range)) + 0.0001 * x_range + 0.000051 * (x_range - 680)**2 
mix_spectrum = mix_spectrum + poly

# How does it look now?
plt.plot(x_range, mix_spectrum, color = 'black', label = 'Mixture spectrum with noise')
plt.title('Mixture spectrum', fontsize = 15)
plt.xlabel('Wavelength', fontsize = 15)
plt.ylabel('Intensity',  fontsize = 15)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

添加噪声的合成光谱。 [作者提供的图片]。

我们现在有了一个合成的测量光谱。

光谱的预处理

在我们进行任何建模之前,需要对光谱进行预处理。这些是我们在实际测量光谱时会做的一些工作:清除尖峰、平滑噪声和减去基线。为此,我们将使用一些简单的算法,如下所述。

关于拉曼光谱处理步骤的更完整列表,建议读者查阅 B. Barton 等人的文章(《应用光谱学》76 (9), 1021–1041)或 O. Ryabchykov 等人的文章 (doi.org/10.1515/psr-2017-0043)。

i) 去尖峰光谱

第一步是定位并修正尖峰。为此,我们使用了基于修改后的 z-score 的算法。修改后的 z-score 计算如下:

z(i) = 0.6745 (x(i)-M) / MAD

其中 MAD = median(|x-M|),|…| 表示绝对值,x 是差分光谱的值。

更多信息请参见我之前的 文章 或 这个 jupyter 笔记本

# The next function calculates the modified z-scores of a diferentiated spectrum

def modified_z_score(ys):
    ysb = np.diff(ys) # Differentiated intensity values
    median_y = np.median(ysb) # Median of the intensity values
    median_absolute_deviation_y = np.median([np.abs(y - median_y) for y in ysb]) # median_absolute_deviation of the differentiated intensity values
    modified_z_scores = [0.6745 * (y - median_y) / median_absolute_deviation_y for y in ysb] # median_absolute_deviationmodified z scores
    return modified_z_scores

# The next function calculates the average values around the point to be replaced.
def fixer(y,ma):
    threshold = 7 # binarization threshold
    spikes = abs(np.array(modified_z_score(y))) > threshold
    y_out = y.copy()
    for i in np.arange(len(spikes)):
        if spikes[i] != 0:
            w = np.arange(i-ma,i+1+ma)
            we = w[spikes[w] == 0]
            y_out[i] = np.mean(y[we])
    return y_out

接下来,我们应用去尖峰算法:

despiked_spectrum = fixer(mix_spectrum,ma=10)

并与原始混合光谱进行比较:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

尖峰检测。 [作者提供的图片]。

ii) 基线分离

为了计算基线,我们使用了一种基于非对称最小二乘法的基线估计算法,如 Eilers 和 Boelens 在 2005 年论文中所述。

# Baseline stimation with asymmetric least squares
# According to paper: "Baseline Correction with Asymmetric Least Squares Smoothing" 
# by Paul H. C. Eilers and Hans F.M. Boelens. October 21, 2005

# We need the following packages here:
from scipy import sparse
from scipy.sparse.linalg import spsolve

# Baseline stimation function:
def baseline_als(y, lam, p, niter=100):
    L = len(y)
    D = sparse.diags([1,-2,1],[0,-1,-2], shape=(L,L-2))
    w = np.ones(L)
    for i in range(niter):
        W = sparse.spdiags(w, 0, L, L)
        Z = W + lam * D.dot(D.transpose())
        z = spsolve(Z, w*y)
        w = p * (y > z) + (1-p) * (y < z)
    return z

# For more info see the paper and https://stackoverflow.com/questions/29156532/python-baseline-correction-library

基线减法参数:

正如他们在论文中所说,“有两个参数:p 表示非对称性l 表示平滑度。这两个参数都需要根据手头的数据进行调整。我们发现通常 0.001 < p < 0.1 是一个不错的选择(对于有正峰的信号),10² < l < 10⁹。” 参见 Eilers 和 Boelens,2005。

# Parameters for this case:
l = 10000000 # smoothness
p = 0.05 # asymmetry

借助这个算法,我们可以估计基线并将其从测量光谱中减去。

# Estimation of the baseline:
estimated_baselined = baseline_als(despiked_spectrum, l, p)

# Baseline subtraction:
baselined_spectrum = despiked_spectrum - estimated_baselined

# How does it look like?
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(16,4))

# We compared the original mix spectrum and the estimated baseline:
ax1.plot(x_range, despiked_spectrum, color = 'black', label = 'Mix spectrum with noise' )
ax1.plot(x_range, estimated_baselined, color = 'red', label = 'Estimated baseline')
ax1.set_title('Baseline estimation', fontsize = 15)
ax1.set_xlabel('Wavelength', fontsize = 15)
ax1.set_ylabel('Intensity',  fontsize = 15)
ax1.legend()

# We plot the mix spectrum after baseline subtraction
ax2.plot(x_range, baselined_spectrum, color = 'black', label = 'Baselined spectrum with noise' )
ax2.set_title('Baselined spectrum', fontsize = 15)
ax2.set_xlabel('Wavelength', fontsize = 15)
ax2.set_ylabel('Intensity',  fontsize = 15)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基线减法。 [作者提供的图片]。

iii) 平滑

为了平滑光谱,我们使用了在 SciPy 库中实现的 Savitzky-Golay 滤波器。窗口参数(点数)w 和多项式阶数 p 可以针对每组光谱进行优化。

from scipy.signal import savgol_filter, general_gaussian

# Parameters:
w = 9 # window (number of points)
p = 2 # polynomial order

smoothed_spectrum = savgol_filter(baselined_spectrum, w, polyorder = p, deriv=0)

# Some more information on the implementation of this method can be found here:
# https://nirpyresearch.com/savitzky-golay-smoothing-method/

# We plot the mix spectrum after baseline subtraction
plt.plot(x_range, baselined_spectrum, color = 'black', label = 'Baselined spectrum with noise' )
plt.plot(x_range, smoothed_spectrum, color = 'red', label = 'Smoothed spectrum' )
plt.title('Smoothed spectrum', fontsize = 15)
plt.xlabel('Wavelength', fontsize = 15)
plt.ylabel('Intensity',  fontsize = 15)
plt.legend()
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

噪声平滑。 [作者提供的图片]。

我们最终得到了一个处理过的光谱,可以在其上应用模型。

经典最小二乘(CLS)方法用于定量光谱分析

现在我们已经预处理了我们的混合光谱,可以应用 CLS 来量化其组成。有关 CLS 的更多信息,你可以查看我之前的帖子 这里

query_spectrum = smoothed_spectrum # Let's just rename it

我们首先生成成分矩阵 K

# Generate the components matrix or K matrix
components = np.array([component_a, component_b, component_c]) 

我们可以利用 Scikit-learn 实现 CLS,因此我们导入了该库。

import sklearn.linear_model as linear_model

并应用 CLS 计算浓度

cs = linear_model.LinearRegression().fit(components.T, query_spectrum).coef_
#We print the result:
print('The expected concentrations for components A, B and C are: ' + str(cs)) 

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们从图形上来看一下:

# Does the result match the original data?

# Plot the original data:
plt.plot(x_range, query_spectrum, color = 'black', label = 'Mix spectrum' )

# Plot the separate components times its calculated concentration:
for i in np.arange(len(cs)):
    plt.plot(x_range, cs[i]*components[i], label = 'c' + str(i)+ ' = ' + str(np.round(cs[i], 3)))

# Plot the result: the sum of separate components times its calculated concentration:
plt.plot(x_range, np.dot(cs,components), color = 'red', linewidth = 2, label = 'Calculation')

plt.title('Mixture spectrum and calculated components', fontsize = 15)
plt.xlabel('Wavelength', fontsize = 15)
plt.ylabel('Intensity', fontsize = 15)
plt.legend()
plt.ylim(ymin = -0.1)
plt.show()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

光谱拟合。[作者提供的图片]。

图例中显示的拟合浓度与合成光谱的设定值完全一致。

总结一下,我们已经看到了如何预处理光谱,并应用了一个简单的最小二乘模型来恢复不同的成分及其浓度。这些简单而强大的工具可能会帮助你最大程度地利用你的光谱数据。重要的是,这种方法的不同步骤不仅可以应用于拉曼光谱,还可以应用于任何类型的光谱数据,例如红外光谱、X 射线衍射光谱等。

现在轮到你了,合成不同的光谱,调整不同算法的参数,或将其应用于你自己测量的光谱。

… 如果你有任何问题、评论或建议,请随时通过消息或我的 LinkedIn 账号 联系我nicolascocalopez

Jupyter notebook:

查看完整的 jupyter notebook 这里

参考文献

你可以在我之前的帖子 这里 阅读更多关于去尖峰光谱的内容,以及在 这里 阅读关于经典最小二乘法的内容,或者在我的 GitHub 或 Medium 账户中查看:

原始文献:

  • 修改过的 z 分数去尖峰算法

    Whitaker 等人,《化学计量学与智能实验室系统》第 179 卷,2018 年 8 月 15 日。

  • 使用不对称最小二乘法进行基线校正。

    “基线修正与不对称最小二乘平滑”由 Paul H. C. Eilers 和 Hans F.M. Boelens 著。2005 年 10 月 21 日。

关于如何处理和应用化学计量学于拉曼光谱的完整指南,请参见:

  • Barton, B., Thomson, J., Diz, E. L., & Portela, R. (2022). 拉曼光谱学化学计量学的协调. 应用光谱学, 76(9), 1021–1041.

  • Ryabchykov, O., Guo, S., & Bocklitz, T. (2019). 拉曼光谱数据的分析. 物理科学评论, 4(2).

小公司与大公司中的数据科学

原文:towardsdatascience.com/data-science-in-small-and-big-companies-5cb32be1491a

数据科学家角色的公司规模综合比较

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Thomas A Dorfer

·发表于 Towards Data Science ·8 分钟阅读·2023 年 2 月 24 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Annie SprattChuttersnap 提供,编辑者为作者。

数据科学已成为企业不可或缺的一部分,并渗透到几乎每一个领域,从电子商务到自动驾驶和医疗保健。在每个领域内,数据科学团队都在努力产生有价值的数据驱动洞察,这些洞察可以用来做出明智的业务决策。然而,得出这些洞察的基本过程可能会有很大差异。

在考虑数据科学时,通常会想到一些狭窄的概念,如数据探索、实验、模型训练和数据可视化。然而,数据科学家的角色可以非常多样化,这取决于组织的规模。

本文通过评估一系列标准,包括任务和职责、影响和创新、学习与技能发展、可用资源、指导机会和晋升空间,提供了在小公司与大公司中担任数据科学家的情况概述。

应当注意的是,这里讨论的标准会因公司而异,也会依赖于公司内数据科学部门的成熟度。

任务和职责

在较小的公司中,数据科学家的任务性质和职责范围可能会因当前数据科学部门的成熟程度而有很大差异。

如果公司刚刚成立或仅由少数人组成,你可能会发现自己作为一个全能型人才,负责建立包括数据收集、处理、清理、探索、模型训练、部署、监控等在内的整个基础设施。在某些情况下,职责还可能包括积极参与并实施公司的数据驱动策略,比如识别新的商业机会或提高运营效率。

从积极的一面来看,在较小的组织中,个人工作的可见性通常更高,数据科学家往往享有更大的自主权和项目所有权。然而,这也带来了更多的责任和问责。

当我在一家由大约 30 名员工组成的小型生物技术初创公司工作时,我直接向公司的 CTO 汇报工作。这当然是一个让我的工作得到关注并因成功和及时交付功能而获得认可的绝佳方式。然而,C 级高管的期望往往很高,这增加了数据科学家在紧张时间表下交付结果时所面临的压力。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Desola Lanre-Ologun拍摄,Unsplash

相比之下,在大型组织中,数据科学家的角色往往更加狭窄和专业化。例如,如果你加入了苹果公司的 Siri 团队,你很可能会在自然语言处理领域内的一个小众领域工作。同样,加入一个专注于微软 Teams 的数据科学部门可能会要求你成为噪声抑制或异常检测等领域的专家。

在大公司工作的一大优势是你能够获得来自协作和领域知识的支持。大型公司通常拥有更多经验丰富和多样化的团队,能够提供宝贵的支持和专业知识。从更广泛的范围获取信息可以帮助数据科学家对业务的基本面有更全面的理解,这不仅提供了绝佳的学习机会,还帮助识别数据驱动的解决方案,以解决公司内部的低效问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dylan Nolte拍摄,Unsplash

影响与创新

在较小的公司中,数据科学家通常对业务的整体成功有更显著的影响,因为他们的工作可以直接影响决策和战略。然而,由于缺乏现成的资源,如计算能力或领域知识,数据科学家可能需要更具创造性和高效地工作以产生有影响力的解决方案,因此需要展现出更大的多样性和适应能力。

较小公司的一个显著优势是更快的决策过程。如果你有一个新的创新想法,由于组织层级较小,获得领导层的批准和执行通常会发生得更快。

另一方面,在大公司中,由于组织的规模和复杂性,数据科学家可能对业务结果的直接影响较小。然而,他们可能会有更多的资源和基础设施来存储、处理和分析数据,这可以使他们能够处理更复杂和雄心勃勃的项目。此外,大公司中的领域知识和专业技术的增加可以创造更多的合作和创新机会,使数据科学家能够与其他专家一起工作,开发先进的解决方案。

学习与技能发展

在较小的公司中,数据科学家需要熟悉整个数据科学工作流程,这提供了一个发展广泛且全面技能的绝佳机会。这种对数据科学周期各个方面的接触进一步使他们能够确定哪些领域特别与他们产生共鸣,从而可以利用这些信息做出更明智的职业发展决策。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由肯尼·艾利亚森拍摄,发布在Unsplash

相比之下,大公司中数据科学家通常专注于特定的细分领域,这可能会限制他们技能的广度,但会在其专注领域内积累相当深入的知识和专业技能。他们还可能从更多的公司资源中受益,例如专门的培训计划或免费的在线学习平台,如 LinkedIn Learning、Coursera 或 Pluralsight。例如,在微软,我们还有一个名为 MLADS(机器学习、人工智能和数据科学)的半年内部会议,其中分享了广泛领域的最前沿技术。

可用资源

虽然所有规模的公司通常都会面临资源限制,但在小型组织中这些限制往往更为明显。这些限制可能包括较小的数据集、有限的计算能力、较少的专用工具和软件,以及较少的学习和成长机会,表现为有限的培训项目、学术会议资金和公司内部的领域知识来源。这使得数据科学家进行大规模分析和处理需要大量领域知识、数据和计算能力的复杂项目变得更加困难。

例如,在我的创业公司任职期间,我们只有两个 GPU,这大大限制了模型的容量,增加了训练时间,并限制了我们进行大规模实验的能力。因此,我们不得不投入大量时间和精力寻找更高效的解决方案,有时也会推迟特性交付的初始日期。

大型公司的情况通常相反。他们往往为数据科学家提供访问大型数据集、更多计算能力以及各种工具和软件,这些资源使他们能够以多种不同方式实现解决方案。效率仍然重要,因为它可以减少延迟并带来成本节省;然而,与小公司相比,它通常不是首要关注点。此外,大型公司往往拥有更多的资金用于通过内部培训项目、训练营、在线学习资源或学术会议来支持学习和职业成长。

导师机会

导师指导是职业发展的关键方面,能够帮助你朝正确方向发展,并在决定下一步职业时做出更明智的决策。

由于较小公司的数据科学家和高级员工数量有限,他们可能无法始终提供导师机会,尤其是技术方面的。例如,我在创业公司工作期间的数据科学部门只有三个人,这意味着为了获取技术信息,我们不得不查阅科学文献,并想办法将论文中的新方法转化为代码。然而,另一方面,你可能会发现自己有更多直接接触高级主管甚至创始人的机会,他们仍然可以在业务运营和战略方面提供宝贵且更高层次的建议。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Monica Melton拍摄,发布在Unsplash

与此相比,许多大型公司拥有完善的指导计划,将数据科学家与经验丰富的导师配对,并提供技术技能发展、职业成长和领导力方面的指导。例如,在微软,员工可以选择多种受到高度欢迎的指导计划。我自己也一直在接受积极的指导,这是一段极具回报的经历,不仅帮助我解决了技术问题,还让我学到了更多关于数据科学家职业发展的知识,并参与了关于该领域最新趋势的激动人心的讨论。

然而,根据我自己和同事们的经验,找到一位在特定领域拥有相关专业知识的合适导师仍然具有挑战性,特别是在数据科学家数量不断增长的背景下。

向上流动性

在小型公司中,向上流动性高度依赖于高级职位的可用性以及数据科学部门的成熟度。如果后者仍处于起步阶段,那么凭借合适的技能和经验,更快地被分配到高级职位的可能性可能会增加。这样,你有更多机会承担更大的项目所有权和责任,这可以直接影响公司方向的塑造。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Hunters Race拍摄,来源于Unsplash

相反,大型公司往往为数据科学家提供更明确的职业发展路径,概述了晋升到下一级所需满足的具体标准。虽然它们可能提供更广泛的机会,让你在数据科学的特定领域专注或承担更多责任,但大型公司的等级结构可能使得对公司方向产生显著影响变得更加困难,晋升可能更多地依赖于满足一些预定义的标准,而不是承担更广泛的职责。

结论

我们已经看到,小型组织通常要求数据科学家对整个数据科学周期有基本的理解,而在大型公司中,角色通常更专注于特定的细分领域。尽管所有公司都面临资源限制,无论其规模大小,这种限制在小型公司中往往更为明显,可能会限制对大型数据集、计算资源、软件和职业发展计划的访问。与高级管理人员的直接接触在小型公司中无疑是一个优点;然而,这可能会以技术指导机会的减少为代价,因为相关专业知识的员工较少。

作为数据科学家,决定加入小公司还是大公司最终是一个个人决定,这应该基于你的职业目标、优先事项和偏好。我希望这篇文章能为你提供一些指导,并让你对在小公司和大公司担任数据科学家的情况有一个总体了解。

数据科学不是科学

原文:towardsdatascience.com/data-science-is-not-science-bb95d783697a?source=collection_archive---------7-----------------------#2023-01-17

如何在数据科学分析中融入科学过程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Conor O’Sullivan

·

关注Towards Data Science上发布 · 8 分钟阅读 · 2023 年 1 月 17 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由Greg Rakozy提供,发布于Unsplash

商业科学、运动科学、食品科学……我们喜欢在其他词汇后面加上“科学”这个词。这让这些领域听起来,更加科学。然而,如果我们不小心,它们会与伪科学有更多的共同点。

数据科学也没有什么不同。

表面上看,它可能接近科学。两者都是寻求知识的过程。从本质上讲,机器学习也是一个重复的过程。我们不断收集新数据并尝试改进之前的结果。然而,在许多情况下,数据科学偏离了科学过程。

了解为什么我们讨论:

  • 科学过程

  • 数据科学与科学不同的方面

  • 我们如何使数据科学更接近科学

科学是我们理解自然世界的最佳工具。它可能在不同的条件下操作于数据科学,但我们仍然可以采用其过程。这样做将导致更可靠的分析。

在你继续阅读之前,你可能对这个话题的概述感兴趣:

什么是科学?

科学涵盖了大量的人类活动。大致来说,它既包括我们已经知道的东西,也包括我们知道这些东西的方法。后者被称为科学过程。这是一种获取新知识的系统方法论。该系统中最重要的部分是假设。

科学可以被看作既是知识的体系,又是获取新知识的过程(通过观察和实验——测试和假设)。

— 澳大利亚科学院

假设

假设是一种关于事物运作方式的有根据的假设或猜测。例如,你可能睡得不好。一个好的假设是:“我睡前喝的双倍浓缩咖啡让我无法入睡。”这是一个好的假设,因为它既可测试又有证据支持。

可测试性

事实上,假设必须是可测试的。这意味着我们能够设计一个实验来提供数据。对这些数据的分析将支持或反驳假设。我们上面的假设是可测试的。你可以简单地在睡前停止喝咖啡,然后观察你的睡眠情况。

证据

在科学中,我们永远不能以 100%的确定性宣称一个假设是真的。我们可以通过更多来自多个独立实验的证据逐渐接近这一目标。要宣称咖啡对睡眠有负面影响,我们需要比一次实验更严格。这需要多个人、不同的咖啡因水平、双盲测试等……

这就是科学过程——做观察,制定假设,设计实验,收集证据,得出结论并重复!这是我们获取新知识的最佳工具。然而,它不是唯一的工具。

为什么数据科学不是科学

数据科学也寻求获取新知识。正如我们所提到的,它以偏离上述过程的方式进行。在我担任数据科学家期间,我遇到过这方面的例子。

数据讲述

首先是数据讲述。实际上,这就是以一种不会让非技术观众感到乏味的方式重新框定分析。我们使用漂亮的图表和相关的故事来说服他们我们的结论是正确的。

数据讲述的概念是基于复杂的数据和分析构建一个引人入胜的叙述,帮助讲述你的故事并影响和告知特定的观众。

— 微软(Power BI)

数据讲述的一个关键部分是建立对模型的信任。我们需要说明为何使用某些特征或这些特征的参数。换句话说,我们需要解释模型捕捉的潜在关系。

问题是,这些理由是在模型构建后才被想到的。我们从数百,甚至数千个特征开始。经过多次迭代,我们将这些特征缩减到最终集。只有到那时,我们才会为将这些特征纳入模型提供令人信服的商业理由。这正好与假设检验相反。

黑箱模型

在某些情况下,我们甚至不关心模型是如何做出预测的。我们只关心它们做出预测的效果如何。算法被视为黑箱,我们没有产生新的知识。这与科学的最终目标相悖。

机器学习的回音室

更糟糕的是,这种方法可能会从行业的数据科学转到学术界。也就是说,机器学习研究者往往会创造自己的生态圈。研究的目标甚至整个社区的目标是提升在基准数据集上的表现。性能改进的递减被视为科学贡献,原始的研究问题则成为次要考虑。

一个例子来自我自己的研究。我的硕士论文研究了使用机器学习和自然语言处理技术预测法律案件的结果。这旨在帮助欧洲人权法院(ECHR)提高判决速度。

我的唯一目标是提高现有方法的准确度。回顾过去,这实际上对 ECHR 并没有帮助。法官会相信模型的结果吗?

与其挤出额外的 1%准确度,我本可以解释模型或提供更深入的结果分析。这样法院可以用来辅助决策,而不是完全取代决策。

快速决策

最后的原因与环境差异有关。学术界有重新测试、收集新数据集或甚至以全新的方式测试假设的特权。工业界则没有这种特权。你需要立即做出决策,基于你所拥有的任何证据。

这引出了一个问题,数据科学是否应该更像科学?通常答案是否定的。用与科学假设相同的严谨度来处理所有商业问题会适得其反。在做出决定所需的时间内根本无法创造出多条证据链。

数据科学如何更像科学

然而,与此同时,科学仍然是我们揭示真相的最佳方法。将数据科学更接近科学可以使我们的结果更可靠。那么,我们可以通过哪些方式来实现这一目标呢?

融入领域知识

与非技术同事提前讨论期望是很重要的。这可以包括数据中的趋势或你期望哪些模型特征是重要的。这些可以作为非正式假设。

你的分析将提供支持或反对这些期望的证据。如果你发现相反的证据,现在你不仅仅需要对观察到的趋势提供令人信服的理由。你还需要解释为何现有的期望是错误的。这将增加你理由的负担,使其更具可靠性。

使用多个指标和可视化

在提供证据时,不要仅仅依赖一个指标或可视化,因为它们都有自己的局限性。数据科学家们已经这样做了。在评估模型性能时,我们不仅仅看准确性。我们使用精确度、召回率,甚至通过 ROC 曲线来可视化性能。

进行分析时也应采取相同的方法。例如,假设我们想评估某人的财务状况。我们可以计算他们前一年的总收入。这会告诉我们很多,但一个数字不足以完全捕捉他们的状况。我们还需要查看开支和现有债务。除了总数外,我们还可以查看月度变化。

这类似于为一个结论提供多条证据。尽管这并不等同于收集新数据或重新运行实验。我们仍然使用一个基础数据集。所有指标都将受到该数据集中的偏差的影响。我们只是去除了由指标本身引入的偏差。

预先定义成功指标

更进一步,我们可以正式定义指标及其截断值。也就是说,我们将在分析中使用哪些指标,以及哪些值将被视为成功。这是为了防止你挑选支持先入为主观念的指标。

一个例子来自下面关于算法公平性的文章。这里我们提供了公平性的不同定义。一种定义,平等机会,通过比较特权组和非特权组的假阳性率(FPR)来工作。如果 FPR 的差异在某个截断值之内,则模型被认为是公平的。

## 机器学习中的公平性分析(使用 Python)

进行探索性公平性分析,并使用平等机会、平等化概率和差异化…

towardsdatascience.com

假设我们没有定义截断值或选择公平性的定义。在计算 FPR 差异后,我们可以争论一个更高的截断值。如果差异显著,我们甚至可以争论使用完全不同的定义。面对几个月的建模工作,这可能是诱人的。

可解释的机器学习

我们还可以努力不仅仅使用这些评估指标。这就是 IML 的作用。它旨在构建可以被人类理解的模型。像 SHAP、LIME、PDPs 和 ICE 图这样的 IML 方法允许你窥视黑箱,了解它的工作原理。

使用这些方法使我们更接近科学的目标——理解我们的自然世界。我们从了解模型预测的效果到了解它们如何做出这些预测。在这个过程中,我们可以学到一些关于我们数据的新知识。

[## 从黑箱模型中可以学到什么

使用非线性模型进行数据探索和知识生成

了解我们可以从黑箱模型中学到什么

对你的结论保持自信

直到现在,我们讨论了与数据科学相关的问题。然而,许多问题实际上是由于其最佳实践的曲解造成的。数据科学家往往不是做出决策的人。你是负责提供基于数据的信息,以支持决策的人。你应该努力提供尽可能可靠的信息。

在组织中工作时,这说起来容易做起来难。你会处理多个利益相关者,他们可能对决策有不同的偏好。无论是想让模型上线的经理,还是希望销售更多保险的业务主管,都会对你的结论施加压力。因此,为了避免从 DS 变成 BS,你需要坚定立场,依靠数据所告诉你的信息。

数据科学可以通过许多方式变得更像科学。我们没有涉及的一点是科学的协作性质。我认为数据科学家已经很擅长这一点。无论是分享 git 代码、Kaggle 上的数据集还是 Medium 上的文章,我们都喜欢分享我们的想法。也许我们可以对这种做法稍微更具科学性。

希望你喜欢这篇文章!你可以通过成为我的推荐会员来支持我**😃**

## 使用我的推荐链接加入 Medium — Conor O’Sullivan

作为 Medium 会员,你的一部分会员费用会分给你阅读过的作者,你将可以完全访问每一个故事……

加入 Medium,使用我的推荐链接 — Conor O’Sullivan

| Twitter | YouTube | Newsletter — 免费注册以获得 Python SHAP 课程

参考资料

伯克利,科学理解 101 undsci.berkeley.edu/understanding-science-101/

科学委员会,我们对科学的定义sciencecouncil.org/about-science/our-definition-of-science/

澳大利亚科学院,什么是科学? www.science.org.au/curious/people-medicine/what-science

可汗学院,科学方法 www.khanacademy.org/science/biology/intro-to-biology/science-of-biology/a/the-science-of-biology

微软 Power BI,什么是数据讲述? powerbi.microsoft.com/en-us/data-storytelling/

数据科学项目通过 KPI 达成精通

原文:towardsdatascience.com/data-science-project-mastery-through-kpis-adfdfe8fde1d

在数据科学项目控制中使用关键绩效指标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Janik 和 Patrick Tinz

·发表于 Towards Data Science ·10 分钟阅读·2023 年 5 月 17 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Alexandr Podvalny 提供,来源于 Unsplash

项目控制 在数据科学项目中至关重要,因为所需的时间和成本往往难以估算。客户希望通过机器学习方法高效、成功地实施他们的用例。通过有意义的 关键绩效指标 (KPIs),你可以积极影响一致的项目控制。根据一些 研究,85% 的数据科学项目失败,这需要早期识别障碍。

在传统的 IT 项目中,存在许多用于项目控制的 KPI,但这些 KPI 对数据科学项目来说是不够的。因此,本文介绍了 IT 项目的基本 KPI,并针对数据科学项目进行分析。结果表明,特定的 KPI 可以使数据科学项目的项目控制更加透明。

本文首先处理项目控制的基础知识,并介绍了一些来自软件行业的 KPI。接着,我们使用这些 KPI 并根据数据科学项目使用 CRISP-DM(CRoss-Industry Standard Process for Data Mining)过程模型进行分析。分析还包括来自数据科学项目的个人项目经验。

如果你想了解更多关于 CRISP-DM 的内容,我们推荐阅读我们的 CRISP-DM 文章

项目控制

项目控制是项目管理的核心组成部分,用于支持项目决策。其目标如下(参见[1],第 334 页):

  • 项目目标协调

  • 支持项目管理,识别计划中的偏差及其原因

  • 风险评估和采取措施以控制或降低风险。

项目控制人员使用各种工具来控制项目,包括仪表盘。IT 项目通常根据项目订单进行管理。项目描述通常定义了项目的范围以及客户方期望的项目目标。然而,项目描述往往只是粗略的描述,因此需要进一步细化。最后,我们需要推导出具有里程碑的路线图以及资源和成本规划。里程碑在项目控制中至关重要,因为它们决定了审查的时间,从而有助于对整体项目的工作状态进行分类。

支持项目控制的 KPI 是本文的主要焦点。经验丰富的项目经理通常依赖于明确且易于解释的 KPI。

在数据科学项目中的项目控制时,了解机器学习的基本知识是很重要的。

在下一节中,我们将介绍一个概念,用于推导 IT 项目的有意义的 KPI。

平衡计分卡概念

概念平衡计分卡(简称:BSC)在实践中已被证明是一种全面的 KPI 开发方法。BSC 是一个平衡的 KPI 系统。该概念的核心是对成功现象的具体化以及对非货币指标的整合。(参见[1],第 374 页)。该概念考虑了以下四个视角(参见[1],第 375 页):

  • 财务: 我们需要考虑哪些财务方面?需要哪些关键指标?

  • 客户: 客户对项目的期望和态度是什么?

  • 内部过程: 内部过程在成本、时间和质量方面的效率如何?

  • 学习和发展: 员工的部署是否有针对性?

这四个视角构成了平衡计分卡的框架,但它们也可以扩展,例如,通过项目成果。(参见[1],第 374 页)

首先,我们需要为项目推导出视角。然后,我们可以最终定义项目目标和需求。随后,我们为平衡计分卡的每个视角推导出以下协议(参见[1],第 376 页):

  • 项目在各自视角下追求的目标的定义。

  • 关键指标的分配

  • 每个关键指标的目标定义

  • 偏差情况下的措施

最后,我们可以根据关键成功因素和战略目标,为每个视角推导出关键指标。

从财务角度来看,关键成功因素包括项目预算、项目成本和项目收益(IT 项目的 ROI)。从客户角度来看,关键成功因素包括客户满意度、利益相关者对项目工作的接受度以及客户对软件解决方案的使用情况。从内部流程角度来看,关键成功因素包括项目进展(里程碑)、活动的生产力和流程的创新支持。从员工角度来看,关键成功因素可以包括项目员工的满意度、项目员工的资格和团队发展。

关键绩效指标

在本节中,我们为每个角度定义了一些重要的 KPI。

财务:

KPI:预算合规性(参见[1],第 378 页)

  • 目标:偏差低于 10%

  • 单位:百分比

  • 公式:实际预算/目标预算

KPI:投资回报率(项目的 ROI)(参见[1],第 381 页)

  • 目标:透明地呈现和沟通 IT 项目的好处。

  • 单位:绝对数

  • 公式:根据效用价值分析(标准 x 权重)确定

客户:

KPI:客户满意度指数(参见[1],第 381 页)

  • 目标:满意度指数至少为 98%

  • 单位:百分比

  • 公式:客户调查结果

内部流程:

KPI:项目中的截止日期遵守情况(参见[1],第 382 页)

  • 目标:遵守 99%的约定截止日期

  • 单位:百分比

  • 公式:实际项目持续时间/预测项目持续时间

KPI:项目计划偏差(参见[2])

  • 目标:按计划完成项目

  • 单位:绝对数

  • 公式:实际值 - 计划值

KPI:实现值(参见[2])

  • 目标:实现积极的实现值

  • 单位:绝对数

  • 公式:计划小时数 - 实际支付小时数

学习和发展:

KPI:员工满意度指数(参见[1],第 381 页)

  • 目标:确保项目员工的高满意度

  • 单位:百分比

  • 公式:员工调查结果

在本节中,我们讨论了一些经典 IT 项目中的 KPI。这个列表并不完整,因为每个 IT 项目都有不同的 KPI。接下来,我们将分析数据科学项目中的 KPI 并引入新的 KPI。

分析

在本节中,我们分析了在数据科学项目中与经典 IT 项目相比可以使用哪些 KPI。此外,我们还介绍了数据科学项目的额外 KPI。数据科学项目通常按照 CRISP-DM 过程模型进行。因此,我们利用该过程模型分析在数据科学过程中哪些 KPI 可以在什么阶段使用。

CRISP-DM 过程模型的阶段(见图)包括业务理解、数据理解、数据准备、建模/评估和部署。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CRISP-DM 过程模型(见[3])

业务理解

在数据科学项目的开始阶段,通常不清楚数据分析对客户的潜在价值。第一步是找到合适的使用案例。在实践中,项目开始时通常会举行初步研讨会,以识别具有高商业潜力的使用案例。还应该注意,问题和数据必须相匹配。在这种情况下,数据科学家应当提前参与,因为他们可以基于可能的数据来源更好地评估潜在价值。一旦找到使用案例,就可以确定用于衡量项目成功的 KPI。在这个过程中,必须考虑不仅是经典的控制 KPI,还包括实际业务价值(ROI)的测量,例如将机器停机时间减少 30%。在这个阶段,应明确我们希望实现的效用价值。在此阶段,我们定义了使用案例及相关目标。目标通过 KPI 的定义变得可衡量。因此,目标也应与要开发的机器学习模型相关联。您可以使用各种指标(如准确率、精确率召回率、F1 分数、AUC 分数、混淆矩阵或提升因子)来控制预期的模型质量。在这个阶段,您可以设定一个最低要求。本文中将这些 KPI 称为数据科学 KPI,并可以将其与经典 KPI 一起使用。

数据理解

数据基础为成功的数据科学项目提供了基础。在这一步中,数据科学家必须获得对数据的概览并评估其质量。但什么是数据质量?数据质量描述了数据与使用案例的适配程度。数据科学家通过正确性、相关性、完整性、一致性和可用性等标准来检查数据质量。数据科学家的重点应该始终放在数据质量上,而不仅仅是数据数量。在数据科学家进行初步评估后,通常会进行工作量和预算规划的估算。

数据准备

在数据准备阶段,我们从原始数据中创建一个用于分析的最终数据集。数据准备占据了整个项目持续时间的约 50–70%。因此,调整项目控制以应对此是非常重要的。在数据准备期间,与客户的紧密沟通是必要的,以便在数据准备中考虑领域特定的方面。必须明确如何处理缺失值或异常值。在此阶段,应特别关注 KPI 的实现值,因为这一阶段的工作量通常非常高。应确保花费的时间不会超过总小时数的某个上限,例如 60%。然而,您必须为项目具体选择这个上限。此外,您还应确保遵守项目计划(KPI 项目计划偏差)。

建模 / 评估

在建模阶段,选择并实施适当的分析方法。分析方法可以是简单的统计程序或复杂的机器学习程序。随后,评估分析结果并与目标进行比较。这些阶段是迭代的,因为你可以随时返回建模阶段以根据评估指标调整模型。这两个阶段作为可行性研究。在这一点上,可以明确数据科学项目是否实现了设定的目标。在此阶段,你应关注业务理解中定义的数据科学 KPI。

部署

在这个阶段,当公司具有运营附加值时,开发的模型会部署在 IT 基础设施中。部署是长期有效利用数据的关键!

CRISP-DM 过程模型显示,数据科学项目中存在其他多个 KPI。在数据科学项目中,模型评估结果对项目的成功至关重要。

讨论分析结果

在本节中,我们根据分析结果和个人经验讨论以下论点:

“传统的 IT 环境中的关键绩效指标在数据科学项目中是不够的。”

目前,媒体将数据科学描述为一种可以解决许多问题的“灵丹妙药”。这也是许多服务公司希望在这一领域进一步发展的原因。服务提供商宣传他们在数据科学领域的能力,并与潜在客户展开谈判。首先,服务提供商进行潜力分析。潜力分析显示项目是否为客户带来附加值。如果潜力分析成功,数据科学项目将启动。根据我们的经验,许多数据科学项目使用 CRISP-DM 过程模型。经验丰富的 IT 项目经理通常会领导这些项目。项目经理将项目作为传统 IT 项目进行管理。项目经理使用 KPI 进行项目控制,并且在这些方面有良好的经验。

根据我们的经验,这些项目可能会成功,也可能会失败。原因在于项目经理通常对特定的数据科学 KPI 缺乏理解。我们认为,特定的数据科学 KPI 可以使项目对所有利益相关者更加透明。定义可量化的目标至关重要,以便能够衡量数据科学项目的成功。根据我们的经验,如果项目经理已经对数据科学有所了解,这也是有帮助的。如果是这样,沟通和控制将更加透明。此外,将数据科学项目分阶段进行也是有用的。你可以使用 CRISP 过程模型,这样可以清楚地知道你在项目中的位置。

分析显示,数据科学项目中应使用 IT 环境中的 KPI。例如,预算合规性和项目效益(ROI)。定义 ROI 是至关重要的,这样你才能衡量项目的实际收益。根据我们的经验,快速实现一个原型通常会非常有帮助,这个原型能够令人印象深刻地展示 ROI。**这个原型让客户更加放松,所有方面的优化动力也随之增加。**此外,它创造了一个更好的工作氛围,提高了员工满意度指数。然而,我们也从以往的项目中学到,不应将数据科学项目管理得像经典的 IT 项目一样。其他因素也起着作用。你必须将数据科学 KPI 融入到控制流程中。数据科学 KPI 确保了开发过程的更大透明度。此外,项目经理应该熟悉数据科学 KPI,以确保数据科学项目的成功。我们同意这个观点,因为我们在数据科学项目中必须使用特定的数据科学 KPI。

结论

本文通过 CRISP-DM 过程模型说明了在数据科学项目中使用 KPI。KPI 的使用在数据科学和 IT 项目中都是至关重要的。此外,对于数据科学项目来说,如果项目经理具有数据科学背景则非常有帮助。在数据科学中,尤其是与模型质量相关的新 KPI 也出现了。

最后,值得注意的是,数据科学项目中的项目经理仍处于寻找最佳 KPI 的阶段。项目经理的经验和成功的项目实施将确保出现更多可以有助于数据科学项目成功控制的 KPI。

👉🏽 加入我们的免费每周 Magic AI 通讯,获取最新 AI 更新!

👉🏽 你可以在我们的数字产品页面找到所有免费的资源!

免费订阅 以获取我们发布新故事的通知:

[## 订阅以获取 Janik 和 Patrick Tinz 发布的最新邮件。

订阅以获取 Janik 和 Patrick Tinz 发布的最新邮件。通过注册,如果你还没有 Medium 账户,将创建一个账户…

tinztwinspro.medium.com

在我们的关于页面了解更多关于我们的信息。不要忘记在X上关注我们。非常感谢阅读。如果你喜欢这篇文章,欢迎分享。祝你有美好的一天!

使用我们的链接注册 Medium 会员,阅读无限制的 Medium 故事。

参考文献

  • [1] Ernst Tiemeyer. 《IT 项目管理手册:方法模型、管理工具、最佳实践》。Carl Hanser Verlag GmbH Co KG,2018 年。

  • [2] Oliver Brüggen. 3 个项目管理 KPI,您应该测量的指标。2018 年。

  • [3] Wirth, R. 和 Hipp, J., 2000 年 4 月. CRISP-DM: 朝着数据挖掘标准过程模型迈进。见于第四届国际知识发现与数据挖掘应用大会论文集(第 1 卷,第 29–39 页)。

数据科学团队的顶层设计

原文:towardsdatascience.com/data-science-team-topologies-b6844d4e2fa4?source=collection_archive---------10-----------------------#2023-02-03

数据产品开发如何与软件开发不同

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Mark Derdzinski

·

关注 发表在 Towards Data Science ·7 分钟阅读·2023 年 2 月 3 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:Alina Grubnyak via Unsplash

今天,我们将探讨数据科学团队的顶层设计以及它们如何与典型的软件团队不同。我们的论点有多准确?跟随我,我们来深入探讨这个问题。

构建数据科学团队与传统的软件开发团队有几个关键的不同。从团队成员的角色和职责到所使用的工具和流程,数据科学团队需要独特的方法以确保成功。我们将探讨在构建数据科学团队时需要考虑的一些因素,包括跨职能协作的重要性、专业技能以及数据科学过程中的实验和迭代。如果我们到最后能够说服自己,我们将发现一些宝贵的见解和最佳实践,帮助你应对构建数据科学团队的复杂性。

数据驱动,而非代码驱动

在数据科学中,问题很少围绕特定的技术或编程语言,更多的是围绕数据本身。因此,数据科学团队的组成可能与传统的软件团队大相径庭。多样化的技能和观点在处理数据时是一个优势。这就是为什么跨学科团队,拥有各种背景和领域专长的专家,往往会取得成功。此外,一组能够以新视角解决问题的通才,可以带来宝贵的见解并推动创新。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Luke Chesser 提供,来自 Unsplash

在分析追求和数据产品设计中,数据科学团队也往往采取更具探索性和迭代性的解决问题的方法。因此,数据产品和分析项目通常具有不确定性和对明确解决方案的需求。数据科学家必须不断地筛选大量数据以识别模式和见解,并且可能需要尝试多种不同的方法才能得出最终解决方案。这种迭代过程可能非常耗时,并且使得科学家或领导者很难准确预测团队何时完成某些项目。因此,数据科学团队可能需要比传统的软件团队更多的灵活性和自主性。

知道就是知道自己一无所知

数据科学团队的拓扑结构与典型的软件团队拓扑结构从根本上有所不同:它们基于实验和探索。与某些软件团队可能拥有明确的需求和定义的路线图不同,数据科学家通常负责在大量数据中发现见解和识别新机会。这种模型需要不同的团队合作方式,强调灵活性、适应性和愿意尝试新事物。

在一个高效运作的数据科学团队中,个人贡献者和领导层应该对不确定性和模糊性感到舒适。他们应该能够在实验没有产生预期结果时迅速调整,并愿意冒险尝试新的方法。与传统的功能开发团队(其目标可能包括在特定时间表上交付特定产品)不同,数据科学团队专注于发现洞察和进行发现,工作时间表不可预测。成功的数据科学团队的一个重要方面是能够以迭代和探索的方式工作,愿意进行实验和尝试新事物,同时持续在数据中寻找新的机会和洞察。

地图不是领域

数据科学团队的拓扑结构通常与典型的软件团队不同,因为它们需要对其所处领域有深入的了解。这种专业知识对构建具有影响力的数据产品至关重要,这些产品能够真正解决问题并为最终用户提供价值。有了领域专长,数据科学家可以避免陷入优化虚荣指标或构建会加剧数据偏见的模型的陷阱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片来源于 Marjan Blan | @marjanblan 在 Unsplash

对问题领域的全面理解意味着不仅要了解问题的技术方面,还要考虑到业务背景、用户需求和伦理影响。通过使用全面的方法,数据科学团队可以将其工作与组织的整体目标对齐,并优化所期望的结果。这种方法不仅有助于减少数据产品中的偏见,还可以避免在优化实验结果或模型性能时的狭隘视角,以实现长期的业务目标或用户行为。

为了通过数据产品产生更大的影响和创造价值,数据科学团队(特别是那些开发面向用户的数据产品的团队)应该是“流对齐”的,并对其工作的最终结果或用户影响负责。这些团队对问题领域和期望的结果有深入的了解,与最终用户紧密联系,并对其产品的影响和表现负责。此外,他们还与支持团队和产品利益相关者合作,负责确保他们的数据产品随着最终用户需求的变化而不断发展。通过采用全面的数据科学方法并专注于结果(而不仅仅是交付数据或模型),数据科学团队可以更好地响应用户需求,发展更强的目标感,并创造适应市场变化和用户需求演变的产品。

不同的操作模型

传统 DevOps 功能所需的结构和技能与数据科学组织所需的 DataOps 或 MLOps 技能不同。虽然经典的 DevOps 团队专注于部署和维护软件所需的基础设施和操作,但 DataOps 和 MLOps 团队还必须考虑管理和部署机器学习模型的独特需求。这种细微差别通常强调数据科学家、工程师和运维专业人员之间的协作,以确保模型得到部署并持续监控、测试和更新,以满足用户(不断变化)的需求。支持生产数据产品的运维还需要了解问题领域,以确保所部署的产品以正确的准确性和公平性运行,同时仍能解决它们旨在解决的业务问题。

数据产品的康威定律

任何设计系统(广义上定义)的组织都会产生一个设计,其结构是组织沟通结构的副本。——梅尔文·E·康威

创建一个新的数据产品不仅仅涉及数据科学家,还包括来自组织其他部分的利益相关者。这种协作意味着数据科学团队的沟通架构必须设计成能够容纳这些不同的利益相关者及其不同的观点。这可能与某些软件团队的沟通架构大相径庭,后者的重点可能是团队内部的沟通。数据科学家还必须能够将他们工作的结果传达给非技术利益相关者,如业务领导,并帮助他们理解开发的数据产品的影响。要求数据科学家深入理解问题领域并具备强大的沟通技能,最终会影响如何将数据科学家或团队嵌入到组织中。

面向服务的结构

本着健壮性的精神,让我们承认生活是复杂的,尝试反驳我们自己的观点。然后,退一步,问自己:“数据科学团队结构何时最接近典型的软件开发?”

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Markus Spiske 拍摄于 Unsplash

一个例子是,当一个团队将数据科学功能作为服务提供时。例如,用于实验的平台或被多个下游产品使用的模型可能需要类似于典型软件开发团队的结构和方法。在这种情况下,团队可能会专注于构建和维护支持实验和模型开发过程的基础设施、工具和流程。他们还可能负责确保模型的质量和性能,以及为使用平台或模型的其他团队提供文档和支持。

然而,虽然在这些情况下,开发或维护的结构和方法可能相似,但所需的技能集可能会有所不同。提供功能即服务的数据科学团队仍需要对特定领域有深入的理解,通常还需要具备强大的协作和沟通能力,以便有效地与下游团队和利益相关者合作。支持即服务的数据产品需要提供指导和支持,以确保开发的数据产品与预期结果一致,以免度量标准或模型被误解或滥用。

一种不同的团队拓扑

我们学到了什么?在数据科学中,产品的架构(例如 ML 模型)通常只有在数据科学家有机会进行实验和探索后才会被完全理解。因此,数据科学团队的结构需要灵活和适应,能够随着团队对问题和潜在解决方案的理解的演变而调整。此外,这意味着数据科学团队与组织其他部分之间的沟通架构需要反映这种适应性,并处理更高程度的不确定性。这种对协作、探索和端到端责任的过度关注,特征化了高影响力数据科学功能的拓扑结构。

你怎么看——我们说服了自己吗?这个论点在哪些方面显得薄弱,又在哪些方面产生了共鸣?

文中的观点仅代表我个人的意见,并不代表任何组织、其附属机构或员工的意见。

数据科学技术以提升营销活动

原文:towardsdatascience.com/data-science-techniques-to-improve-marketing-campaigns-f949573712d9

数据科学 | 人工智能 | 营销

一份利用数据科学增强现有营销活动的指南,将您的业务提升到一个新的水平

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 David Farrugia

·发表于 Towards Data Science ·5 分钟阅读·2023 年 5 月 10 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由 Melanie Deziel 提供,来源于 Unsplash

说实话,在今天的世界里,营销是任何业务的命脉。营销(尤其是数字营销)有潜力产生成千上万的潜在客户。在当今竞争激烈的市场中,任何企业的成功都与其营销活动的有效性紧密相关。

有效的营销活动必须针对一个(或多个)群体。

有效的营销活动必须充分了解其目标受众。了解他们喜欢什么和不喜欢什么。

数据科学与营销的结合赢得如此强烈的关系,这一点并不奇怪。

数据科学彻底改变了企业处理营销的方式。最有效的营销活动完全依赖数据驱动。企业分析其流量,识别趋势,并不断渴望更好地理解其客户。

本文的目的是提供关于一些在数据科学中最强大的技术的高级讨论,这些技术用于构建高效的营销活动。

1. 客户细分:识别目标受众

假设您是一个服装店的自豪老板。您的库存涵盖从最新流行的青少年时尚到高档商务套装。显然,向所有客户发送一条关于商务套装的促销信息不会带来最大的投资回报。

相反,您决定使用 k-Means 聚类按年龄、性别和购物习惯对客户群体进行细分。

然后你会创建一个营销活动,更有效地向正确的客户群体推广你的库存。

你将从更具针对性和焦点的促销信息中受益,这些信息旨在带来更高的回报。

2. 情感分析:理解客户意见

情感分析是一种技术,通过分析文本来判断该文本是否具有积极或消极的意图。

情感分析对企业评估客户对其产品的接受程度非常有价值。你的客户对购买感到满意吗?他们会推荐给朋友吗?

通过分析社交媒体平台上的文本甚至客户评论,你的业务可以确定客户对你业务的总体情感。这将揭示关于你营销策略的宝贵见解。例如,你可能会选择加大对受欢迎的产品线的投入,或者决定停产那些收到负面情感的产品线。你也可以采取必要措施来改变或更新你的产品,以更好地满足客户需求。

3. 预测分析:预测客户行为

预测分析是一个非常重要且极具多样性和动态性的领域。根据业务和行业的不同,预测分析有不同的应用案例。

简而言之,预测分析是一种使用历史数据通过机器学习和统计方法预测未来事件的技术。

一些示例可能包括预测客户行为、预测趋势以及按季节性销售等。

此外,还有一些其他高效的应用案例,包括客户生命周期价值(CLV)、流失预测和欺诈检测。

4. A/B 测试:实验并找到最佳方法

考虑这个。

你拥有一个在线商店。你目前的着陆页是红色背景和蓝色按钮。

你已经对这个布局感到厌倦,并且根据你的情感分析,客户似乎也不喜欢这个布局。

你决定将按钮的颜色从蓝色改为白色。

那个改变是好的?还是使情况更糟?

A/B 测试帮助我们回答这个问题。A/B 测试是一种相对简单但极其有效的技术,用于衡量变更带来的影响。例如,在这种情况下,我们可以使用 A/B 测试来确定新的布局更改是否改善了客户的情感评分,或是否与其之前的版本相比带来了更多销售。

A/B 测试对优化营销至关重要,因为它还可以帮助我们衡量哪个营销活动产生了更好的结果。

5. 社交网络分析:揭示关键连接和关系

毫无疑问,如今每个人及他们的祖母至少都在使用一个社交媒体平台。

另外,我们都有那个在社交媒体上过度分享的家庭成员或朋友。

潜意识中,我们每个人都不可避免地让别人知道我们喜欢什么、不喜欢什么。

企业利用这些信息深入了解他们的客户。社会网络分析是一种技术,通过检查社会结构和模式来确定它们在网络中的关系。

在促销的背景下,社会网络分析可以跟踪信息的传播,揭示隐藏的关系,并提供目标受众可能感兴趣的其他信息。

也许这是利用数据进行营销时最具争议的方面,但这肯定正在我们周围发生。

社会网络分析的另一种方法是识别关键客户(即“意见领袖”),这些客户可能会将您的产品分享给他们的网络,并尽可能多地转化为付费客户。最终目标是让您的产品“病毒式传播”。

6. 推荐系统:个性化客户体验

顾名思义,推荐系统就是一个推荐东西的系统。

它分析用户行为和偏好,以向合适的受众推荐合适的内容。其好处有两方面:1) 定制化营销活动,2) 提高品牌参与度。更有针对性和集中的营销活动。

这里的典型例子包括亚马逊的“其他人也买了这个”或著名的 Netflix 的“因为你观看了”。

整合一切:数据驱动的营销成功故事

假设一个小型在线商店销售环保产品的实际例子。

以下是强大而有效的营销的总结性步骤指南。

  • 客户细分以根据购买历史、人口统计数据和浏览行为来识别重点群体。这导致了更个性化的营销内容,与每个细分群体产生共鸣,从而提高了参与度。

  • 情感分析用于分析客户评论,了解他们在社交媒体上的意见。这意味着他们能够解决问题和客户反馈,从而改善品牌形象。

  • 预测分析用于预测客户的需求和偏好。这导致了更有针对性的营销活动,并减少了客户的流失率。

  • A/B 测试使他们能够微调广告设计、优惠结构和信息传递风格,从而大幅提高点击率。

  • 社会网络分析被用来识别关键的有影响力客户,以推广他们的产品并帮助提升品牌形象和曝光度。

结论

数据科学是一个有趣的领域,提供了大量营销机会。利用数据的力量,使我们能够创建更有针对性、最终更有效的营销活动,与您的目标受众产生共鸣。

您喜欢这篇文章吗?每月$5,您可以成为会员,解锁对 Medium 的无限访问权限。您将直接支持我和您在 Medium 上最喜欢的其他作家。非常感谢!

## 通过我的推荐链接加入 Medium - David Farrugia

获得对我所有⚡优质⚡内容的独家访问权,无限制地浏览 Medium。通过给我买杯咖啡来支持我的工作…

david-farrugia.medium.com

想要联系我吗?

我很想听听你对这个话题的看法,或者对任何关于 AI 和数据的意见。

如果你希望联系我,可以发邮件到davidfarrugia53@gmail.com

Linkedin

数据科学:现代经济学的支柱

原文:towardsdatascience.com/data-science-the-modern-day-pillar-of-economics-f5e9e6d3cb44

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Petru van der Walt Félix

·发布于Towards Data Science ·6 分钟阅读·2023 年 11 月 20 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片:Shutterstock,授权(1928239373)

大致框架

随着近年来特别是新千年以来的技术进步,数据科学已成为一个独立的学科,区别于计算机科学,更加贴近统计学。它开辟了一个独特的领域,在这个领域中,数据科学家致力于解决依赖于数据的获取、处理和最终解释的商业问题。

这需要特定的技能组合,例如对编程语言的良好理解,例如 Python 和 R,以帮助简化访问大型离散数据集所需的分析工作流。数据科学家的技能组合与经济学家的技能结合,为那些希望在现代经济学中脱颖而出的个人提供了成功的公式。

事实与数据

上述发现得到了声望卓著的伦敦经济学院[1]在近年来扩展其课程的支持,增加了一项名为 BSc 数据科学与商业分析的本科课程,课程标语承诺学习者将“学习分析数据以解决现实世界问题”,这些现实世界的问题自然基于经济和商业关系。

另一个积极的指标是,世界银行前首席经济学家[2]和 2018 年诺贝尔经济学奖共同获得者保罗·罗默,是 Jupyter Notebook 的支持者。Jupyter Notebook 是一个开源的网络应用程序,允许用户创建和分享包含实时代码、方程式和可视化的文档,以支持跨多种编程语言的互动计算。Jupyter 的最终备注是其核心,Jupyter 的名称是一个首字母缩略词,代表 Julia、Python 和 R,这三种都是编程语言。

一个经济学领域的巨头公开支持数据科学工具意义重大——无意冒犯——这明显表明了发展方向。正如罗默在 2018 年的一篇博客中所指出的:“Jupyter 奖励透明性;Mathematica 理性化保密。Jupyter 鼓励个人诚信;Mathematica 让个人躲在企业规避后面。”[3] 在这里,他将 Jupyter 与竞争平台 Mathematica 进行比较,然而如果我们超越这些描述,可以明显看出罗默强烈认同数据科学带来的好处和可能性。

实时案例研究

为了说明上述主题,我们来看一个当前的现实问题,英国正接近其脱欧后欧盟-英国关系的三周年纪念,按照新实施的贸易规定进行运作。

在 2016 年 6 月 23 日英国公投决定脱离欧盟及单一市场之后,经过四年的过渡期,直到 2021 年 12 月 31 日,才实施了商定的变更。

快进到现在,即 2023 年 11 月 20 日,除了英国脱欧成为影响英国经济成败的关键因素外,还有其他几个因素加入了这个复杂的局面,使得形势更加扑朔迷离。

其中一个晚到的因素当然是新冠疫情。纯粹从金融角度来看,新冠疫情导致消费者支出的前所未有的停滞,进而增加了家庭的储蓄,这主要是因为办公人员转为在家工作,所有的社交和休闲活动,包括旅行,都被无限期推迟。

不用说,这无疑加剧了财政上的巨大失衡,在金融系统已经因 0%利率而过热的情况下,进一步限制了货币政策的灵活性,从而使经济复苏变得困难。

这涵盖了两个因素,脱欧和新冠疫情。如果这还不够,紧接着出现了由乌克兰-俄罗斯冲突引发的能源危机,这场冲突始于 2022 年 2 月 24 日俄罗斯入侵乌克兰。再一次,纯粹从经济角度来看,这场冲突导致了能源需求超过供应,进而导致所有受影响的消费品价格飙升。

总结来说,这三种因素汇聚在一起,形成了完美的经济风暴,这将要求各方共同努力,帮助我们度过前方的波涛汹涌。

数据科学和经济学都建立在统计学之上,关键的区别在于,数据科学往往更侧重于预测变量之间的未来互动,而经济学则更侧重于历史互动,即前瞻性与回顾性,预测与因果关系。

戴上经济学家的帽子,我审查了 G7 国家在 2023 年之前的贸易对 GDP 比率,数据和图表由国家统计局提供[4]。这清楚地表明,尽管所有 G7 成员国在 2020-2022 年的疫情期间贸易暴跌,但它们都恢复到了疫情前的水平,强劲反弹,唯一的例外是英国仍然落后于其他成员国,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片:国家统计局 [4]

这表明,与其他六个 G7 国家相比,贸易在英国 GDP 中的比重较低,这是截至 2022 年第二季度的有效声明。与 Brexiteers 在公投前主张的促进与欧盟以外的贸易关系不同,看来英国的贸易开放度,即其贸易能力,实际上在减少,这一点得到了数据科学的支持。

健康经济体的另一个关键组成部分当然是通货膨胀的平衡,目标是将其控制在 2%以下。截至 2023 年 10 月,英国的通货膨胀率为 4.6%。[5]

如果我们回顾从 1960 年代到现在的数据,特别是跟踪通货膨胀情况,也能提供一些有趣的见解。以下数据和图表来源于世界银行集团。[6]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片:世界银行集团 [6]

我们在 2008 年看到的峰值是全球通货膨胀跳升至 8.9%,这是对 2008-2011 年全球金融危机的反应。

这一点也可以在下面的英国通货膨胀等效图中看到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片:世界银行集团 [6]

尽管 2008 年的峰值在全球通货膨胀尺度上并不显著,但却跃升至 3.5%,比前一年上涨了 1.1%,比 2004 年稳定水平 1.4 上涨了 2.1%。[6]

结论

随着全球和英国通货膨胀水平显著上升,这支持了关于 2024-2025 年经济衰退的预期,如果历史趋势和数据是可信的话。

基于上述发现和我作为投资管理数据业务分析师的个人经验,可以明显看出数据科学和经济学学科紧密相连,数据科学实际上作为经济学及其驱动和支持的决策的一个关键支柱。

我认为可以公平地得出结论,经济学已经通过利用市场上可用的新技术和数据分析方法获得了显著回报,一切迹象表明这仍是一个处于形成阶段的趋势。

参考文献:

[1] 伦敦经济学院,提供BSc 数据科学与商业分析学位作为其课程的一部分

[2] 保罗·罗默,维基百科

[3] P. Romer,Jupyter、Mathematica 和研究论文的未来(2018)

[4] 国家统计办公室,2022 年 10 月 10 日发布,ONS 网站,G7 经济体国际贸易流动的近期趋势

[5] 国家统计办公室,2023 年 10 月发布,ONS 网站,通货膨胀和价格指数

[6] 通货膨胀数据和视觉图表,世界数据集团

数据科学家面试指南

原文:towardsdatascience.com/data-scientist-technical-interview-guide-part-1-84e286fd4bae

第一部分:统计学和概率

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Daniel Foley

·发布于Towards Data Science ·阅读时间 18 分钟·2023 年 2 月 9 日

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Maranda Vandergriff拍摄,来自Unsplash

介绍

现在有很多关于数据科学面试的博客文章,但由于我最近又开始面试了,我觉得分享一下我以前和现在的经历,并希望能为正在经历这段旅程的你们提供一些指导,会是很有意义的。毫无疑问,数据科学面试是非常困难的。部分挑战在于你可能被问到的主题范围非常广泛。你几乎需要将软件工程师、数据分析师和产品经理的角色合为一身。

好消息是,一旦你提醒自己这些基础知识,你会发现经常被问到相同类型的问题。在这份技术面试指南的第一部分,我想提供一些概率和统计问题的题目和深入解决方案,你在技术面试中很可能会被考到这些问题。所以不再赘述,让我们开始吧。

统计学和概率

统计学和概率学是任何数据科学家必备的基础,复习这些基本概念对于在技术面试中表现出色至关重要。有很多主题经常出现,特别是下面列出的这些。

  • 概率:期望值、组合和排列、递归关系

  • 统计学: p 值、假设检验、效能、置信区间、概率与似然、中心极限定理、大数法则

  • 分布: 均匀分布、二项分布和正态分布是最重要的

在我看来,更难的面试将专注于解决涉及这些概念中的一个或多个问题,这是这篇文章的主要重点。然而,能够以非技术性的方式解释这些概念也极其重要,因此我将涵盖一些我认为有用的主题。我希望,通过展示我在解决这些问题时的思维过程,能够为那些准备技术面试的人提供有用的指南。

这里有一本参考书,我发现对回忆基本概念很有帮助。

中心极限定理

假设我想测量人们的收入。如果我们取一个收入样本并绘制这些数据点,我们很可能会看到一个偏斜的分布,其中一些人有很高的收入,而大多数人的收入较小且更为集中。假设我们基于这个样本计算平均值。如果我们继续抽取收入样本并计算平均值并绘制数据,我们将得到样本均值的抽样分布(如下图所示)。由于中心极限定理,这个分布看起来像正态分布。至关重要的是,基础的总体分布不必是正态的。下面的图示说明了这一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者的指数分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者的正态分布

这很重要,因为它使我们能够基于单个样本进行统计推断。例如,在假设检验和回归分析中,我们可以使用 CLT 定理对我们的测试统计量/系数的行为进行推断。因为我们知道它是正态分布的,所以我们可以计算置信区间和 p 值,并做出可靠的推断。

大数法则

LLN 表明,随着样本大小的增加,样本均值会收敛于总体均值。可以将总体和样本视为两个集合,其中样本是总体集合的一个子集。随着样本大小的增加,样本集合的大小会越来越大,最终会与总体相同。这就是为什么样本均值会收敛于总体均值的原因。

LLN 和 CLT 之间的关键区别在于,LLN 讲述的是样本均值的情况,而 CLT 则与样本均值的分布相关。

二项分布

二项分布是一个极其重要的分布,并且在面试中经常出现。用直观的高层次方式从基本原理推导分布是展示你对其理解的好方法。

假设我们网站上有 10 个用户,我们想预测他们中有多少人会购买某物。我们可以将其视为重复的独立试验,每个用户要么购买要么不购买。设 p 为购买的概率,1-p 为不购买的概率,因为概率需要加起来为 1。考虑没有人购买的情况:(1-p)(1-p)… = (1-p)¹⁰。

如果一个人购买了呢?我们有 p¹(1-p)⁹。即 1 次成功和 9 次失败。我们不知道是哪位用户进行了购买。它可能是用户 1、用户 2、…或用户 10。为了解决这个问题,我们有 10 种可能性,并且我们要选择其中 1 种。将这些信息综合起来,就得到了下面的通用二项式公式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二项式公式

p 值

p 值是一个相当有争议的话题,我认为即使是数据科学家也不容易直观理解,更不用说非技术人员了。但让我试着用一个例子来解释它们是如何使用的。

我们使用 p 值来确定假设检验是否显著。通常我们选择 p 值为 0.05 或 5%。例如,如果我们进行了一次假设检验,并获得了 0.03 的 p 值,这意味着假设原假设为真,我们观察到的检验统计量与此一样极端或更极端的概率是 3%。换句话说,如果原假设为真,我们观察到这种效果的可能性非常小,因此它很可能是错误的。我们也可以这样考虑 p 值:如果我们进行 100 次实验,我们期望观察到至少与此一样大的检验统计量 5 次。最后,另一种看待 p 值的方法是,它是一个条件概率。在这种情况下,它是原假设为真的情况下观察到的检验统计量与此一样极端或更极端的概率。

在接下来的这些问题中,我将展示我们如何在实践中使用一些这些主题来解决技术面试中的问题集风格的问题。

解决问题

以下问题来源于我以前在面试中被问到的问题或在准备面试时遇到的各种书籍和互联网资源(例如 glassdoor)。这些问题的选择基于反映技术面试中最重要和最常见的概念。我还突出了一些我认为在每个问题中需要认识的关键概念。

问题 1

你和一个朋友轮流掷一个公平的六面骰子,第一个掷出 6 的人获胜。第一个掷骰子的人获胜的概率是多少?

关键概念:递归关系,概率树,独立性,均匀分布

如果我们在开始之前稍微思考一下问题陈述,直观上看来,先行似乎会给我们带来优势,所以我们期望这个概率大于 1/2。我们还知道关于掷骰子的什么?好吧,我们知道掷骰子的结果是均匀分布的。每个结果的可能性是一样的,得到特定数字的概率是 1/6。

对于这些类型的问题,我喜欢画一个概率树。至少对我来说,这简化了问题,并给了我一个可以用来解决不立即显而易见的问题的一般方法。那么从我们的角度来看,我们来做这个。有两种可能的情况

  • 我们赢:将获胜的概率定义为 x。

  • 我们输:概率为 1-x。

在第一次掷骰子时,我们有以下情况,

  • 我们要么掷出 6 的概率是 1/6,然后我们以 1 的概率获胜。

  • 或者我们掷其他数字的概率是 5/6。

第二种情况很有趣,因为现在是我们朋友的回合。为了使我们获胜,我们需要他们掷出 6,这种情况的概率为 5/6。请注意,当这种情况发生时,我们实际上是重新开始游戏。即再轮到我们掷骰子,我们的获胜概率是 x。

让我们用一个方程使这一点更具体。为了得到我们的概率,我们只需要解方程 x。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,如果我们先行,获胜的概率是 6/11,而我们朋友在第二个回合获胜的概率是 5/11(1–6/11)。请参见下面的树状图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

问题 2

你从一个 86 的网格底部开始。你只能向上或向右移动。你通过中心的概率是多少?*

关键概念:组合(顺序无关),计数的乘法规则

对于这些类型的问题,通常将概率定义为频率,即(相关事件的数量)/(总事件的数量)是有帮助的。这样做可以帮助我们将问题分解,并尝试求解分子和分母。

让我们首先尝试找出分母,即可能事件的总数。在这种情况下,我们可以从起点(0,0)移动到终点(8,6)的总方式数。我们需要做多少步才能到达这一点?我们需要做 8 次向上移动和 6 次向右移动,总共 14 步。如果我们将向上移动定义为 U,向右移动定义为 R,那么一种移动方式是

UUUUUUUURRRRRR,即 8 次向上移动后跟 6 次向右移动。

这会将我们带到目的地。然而,我们也可以这样做。

RRRRRRUUUUUUUU,即 6 次向右移动后跟 8 次向上移动。

我们可以继续列举所有可能性,但可能有更简单的方法。总的来说,我们从(0,0)到(8,6)有 14!种移动方式,(第一次移动有 14 种方式,然后第二次有 13 种方式,依此类推)。

然而,这会导致重复计算,因为我们可以重新排列初始的 6 个 R,而不会改变结果,即顺序无关紧要。因此,我们必须将总数除以排列这 6 个 R 的方式数,即 6!。同样,我们也将总数除以排列 8 个 U 的方式数(8!)。这给我们:

14! / (8!6!) = 3003。

你们中的一些人可能会认识到这是组合公式。没错。因为顺序无关紧要,这与 14 选 8 是一样的。好的,我们知道了分母的值,但分子呢?记住,我们需要找到通过网格中心点(即点(4, 3))到达点(8, 6)的所有路径。解决这个问题的最简单方法是将旅程分成两部分。

首先,我们需要找到从(0, 0)到(4, 3)的移动方式数,然后找到从(4, 3)到(8, 6)的移动方式数。然后将这些值相乘以得到分子的总数。

我们可以使用与分母相同的思维过程。在这里,我们必须总共进行 4 次右移和 3 次上移,或者 4+3 = 7 次总移动。一个可能的路径是:RRRRUUU。再次,排列这些字母有 7!种方法,我们需要除以排列 4 个 R 的方式数(4!)和排列 3 个 U 的方式数(3!)。

(0, 0) -> (4, 3):7!/(4!3!) = 35

我们再次应用相同的原则来计算从(4, 3)到(8, 6)的路径数。这与第一部分完全相同,即 7 次总移动,4 次右移和 3 次上移。

(4, 3) -> (8, 6):7!/(4!3!) = 35

因此,我们的答案是***(3535) / 3003 = 1225 / 3003 = 175 / 429.**

问题 3

给两个骑手发放了一张折扣券。使用优惠券的概率为 P。给定至少一个骑手使用了优惠券,两者都使用优惠券的概率是多少?

关键概念:贝叶斯定理,二项分布,独立性

解决这个问题的方法不止一种,我将在这里讨论两种。第一种方法是使用贝叶斯定理,我们通常可以通过一些条件语句识别这些类型的问题。在这种情况下,给定至少一个骑手使用了优惠券的情况下,两者都使用优惠券的概率是多少?我们可以将这些事件定义如下:

  • 至少一个骑手使用了优惠券(A)

  • 两名骑手都使用了优惠券(B)。

我们想找到给定 A 的情况下 B 的概率,我们可以使用下面的贝叶斯定理来计算。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

贝叶斯定理

剩下的就是计算每个组件并将它们代入方程。让我们从 P(A|B) 开始,即在两名骑手都使用优惠券的情况下,至少有一名骑手使用优惠券的概率。这显然是 1,因为如果两名骑手都使用优惠券,至少有一名骑手会使用。P(B) 是什么?我们知道使用优惠券的概率是 P,并且假设每名骑手是独立的,我们可以说两名骑手都使用优惠券的概率是 P*P=P²(乘法规则)。

  • P(B) = 骑手 1 使用优惠券的概率 骑手 2 使用优惠券的概率 = P*P = P²

计算 A 的概率(P(A))会有点复杂。至少有 1 个骑手使用优惠券的概率等于 1 个骑手使用优惠券 2 个骑手使用优惠券的概率。由于每个骑手使用或不使用优惠券的概率是相同的,我们可以使用二项分布来描述这个问题。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二项分布

要获得总概率,我们只需将这些值相加(加法规则)。将这些值代入公式中,我们得到下面的答案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

P(A)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决方案

替代解决方案

如上所述,还有一种更简单的解决方案。我们可以列出所有可能性。如果我们让 X 代表骑手使用优惠券,Y 代表骑手不使用优惠券,我们有:

  • XX: 两名骑手都使用了优惠券

  • XY: 骑手 1 使用优惠券而骑手 2 不使用优惠券

  • YX: 骑手 1 不使用优惠券而骑手 2 使用优惠券

  • YY: 两名骑手都没有使用优惠券

现在,如果我们条件化在至少一名骑手使用了优惠券的情况下,我们只剩下前 3 种可能性。现在的概率就是我们想要的事件除以所有可能事件的总数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

代入 P 作为骑手使用优惠券的概率,我们得到与第一个解决方案相同的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

替代解决方案

问题 4

假设你 观察了 3 个连续的 5 次抛硬币序列。至少有一个序列全是正面。这枚硬币有偏吗?*

关键概念:假设检验,二项分布,独立性

第二个问题是一个有趣的问题,我在面试中遇到过,可能会有点棘手。在我看来,解决这个问题的最简单方法是尝试将问题分解成几个步骤。首先,我们定义硬币有偏的含义。一个硬币有偏的定义是得到正面的概率不是 1/2。接下来,我们需要考虑如何测试这个问题。为了评估硬币是否有偏,我们基本上需要进行假设检验。

为了制定我们的假设检验,我们首先假设硬币是公平的,即我们的原假设是 p = 0.5(即掷出正面的概率),我们的备择假设是 p ≠ 0.5。然后我们在这个假设下计算观察到这个事件序列的概率。如果概率非常低(低于某个阈值,即 p < 0.05),我们拒绝我们的假设并得出结论:硬币有偏。我们如何计算观察到这个事件序列的概率?

记住,得到至少一个全正面的序列的概率与得到 0 个全正面序列的概率的 1 减去相同。或者,我们可以计算得到正好 1 个全正面序列 + 2 个全正面序列 + 3 个全正面序列的概率。

为了找到这个概率,我们需要计算以下内容

  • 5 次翻转中得到 5 个正面的概率:即 HHHHH

  • 得到恰好 0 个全正面序列中的 3 个序列的概率。

  • 我们需要从 1 中减去这个概率,以得到至少一个全正面序列。

这个问题由两个二项分布组成两个部分。第一个部分是 5 次翻转中得到 5 个正面。然后我们可以将这个概率作为输入用于我们的第二个二项分布,3 个 5 次翻转的序列,其中 p 是第一个部分的答案。

考虑第一次序列包含 5 次翻转。我们试图计算什么?我们想知道在 5 次翻转中得到 5 个正面的概率。如果我们定义成功的概率为得到一个正面,我们有

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好的,现在我们知道 5 次翻转中得到 5 个正面的概率。对于第二部分,我们可以再次应用二项式公式,因为每个序列具有相同的概率且都是独立的。我们有 3 次试验,我们希望其中 0 次是 HHHHH。

现在我们有 n = 3,k = 0,p = 0.03124 和 1-p = 0.96875。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

记住,这是看到所有零个正面序列的概率,因此得到至少一个全正面1–0.909 = 0.09

这本质上是我们的假设检验的 p 值。这个值没有低于我们 0.05 的阈值,因此我们没有足够的证据来拒绝硬币是公平的假设。这也应该有直观意义,因为你通常需要更多的硬币翻转来确定它是否有偏。

问题 5

你每天从一个正态分布的随机变量 X — N(0,1)中抽取一次。你获得大于 2 的值的预期天数是多少?

关键概念:期望值,正态分布,经验法则,几何分布

要解决这个问题,我们需要认识到我们正在计算某个事件发生之前的期望时间。我们也可以将其框架化为第一次成功之前的试验次数,你可能会认识到这是一个几何分布。换句话说,我们需要找到几何分布的期望值。几何分布的均值是 1/p。这个问题与我们期望在掷骰子之前看到 4 的次数是完全一样的。答案是 1/(1/6) = 6 次掷骰子。

解决这个问题的关键是找到正确的 p 值。我们知道我们的分布是均值为 0,标准差为 1 的正态分布。如果我们从这个分布中抽样,得到值为 2 的可能性有多大?

好吧,2 是距离均值 2 个标准差。根据经验法则,我们知道曲线> 2 个标准差的面积大约是 0.025。因此,我们在任何给定的一天观察到值> 2 的概率是 0.025。这就是我们的 p 值。

现在,我们只需计算 1/0.025 = 40。换句话说,我们期望等到 40 天后才能看到一个 2。

问题 6

你掷 100 枚公平的硬币。如果 60 枚或更多正面朝上,你赢得$10,其他所有结果都不赢。你应该为$1 玩这个游戏吗?

关键概念:期望值,二项分布,中心极限定理,经验法则

你应该将这个问题识别为一个期望值问题。我们想知道玩这个游戏获得的期望收益是否大于玩游戏的期望成本。

我们可以如下定义游戏的期望值:即,玩这个游戏的成本是$1,如果我们得到 60 次或更多的正面,我们将赢得$10,如果得到少于 60 次正面,我们将赢得$0。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

好的,这个问题归结为寻找 P(X≥60)。经过一点思考,我们可以认识到,在 100 次掷币中获得 60 次或更多正面应该是二项分布,N = 100,p = 0.5(假设是公平的硬币)。现在,我们只需要使用二项分布找到获得 60 次或更多正面的概率。做这个的长方法是逐一计算获得 60 + 61 + 62 + … + 100 次正面的概率。这似乎有点低效,那么有没有其他方法可以使这个计算更容易呢?

请注意,我们的样本量是 100 次掷币。希望你能认识到中心极限定理(CLT)可以在这里帮助我们,因为 N > 30。我承认,这并不是世界上最显而易见的洞见,但你练习这些问题越多,就越容易发现像这样的情况。为什么 CLT 在这里有用?我们知道如果应用 CLT,那么采样分布将大致是正态分布。由于这是一个表现良好的分布,我们只需要知道均值和标准差即可定义整个分布。如果我们知道分布,我们就可以轻松计算所需的概率。

我们首先需要计算硬币投掷的均值和标准差。由于它们遵循二项分布,我们有:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,我们的均值为 50,标准差为 5。关于正态分布我们还知道什么?如果你记得经验规则,它指出大约 95% 的分布在均值的 2 个标准差范围内,我们可以利用这一点计算所需的概率。60 距离均值 2 个标准差,我们知道大约 2.5% 的分布在这一点之上。

因此,P(X≥60) 大约是 0.025。现在我们可以直接将其代入上述期望值方程中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个游戏的期望值为负,因此我们不应该玩它。我非常喜欢这个问题,因为它需要应用概率和统计的几个方面才能解决。

问题 7

在不盈利的时期,公司有时会暂停支付股息。假设在支付股息后,下一个股息支付的概率为 0.9,而在暂停股息后,下一个股息也会以 0.6 的概率暂停。长期来看,将支付的股息的比例是多少?

关键概念:马尔可夫链,平稳分布

这个问题可以被表述为具有 2 个状态的马尔可夫链。

  • 支付股息

  • 支付股息 暂停

为什么可以表示为马尔可夫链?因为这个问题具有马尔可夫性质(无记忆性)。在时间 t+1 进入任何状态的概率仅取决于你在时间 t 时的状态。即我们是在支付股息状态还是暂停股息状态?时间 t-1、t-2 等的状态不会影响我们下一个状态的概率。

问题给出了这两个状态之间的转移概率。如果我们处于支付股息状态,我们将在该状态下保持的概率为 0.9,因此以概率 0.1 转移到暂停状态。如果我们处于暂停股息状态,我们将以 0.6 的概率保持在该状态,并以 0.4 的概率转移到另一个状态。我们可以将其表示为以下转移矩阵:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

转移矩阵

问题要求我们解决马尔可夫链的平稳分布,即长期均衡状态。在这种情况下,随着时间的推移,概率分布保持不变。即如果我将当前状态与转移矩阵相乘,我会得到相同的值。这种情况在以下方程中描述。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平稳分布

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平稳分布

我们在这里要做的就是解这组方程以求出 pi1 和 pi2。由于概率必须加起来等于 1,因此 pi1+pi2 = 1。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

方程

如果我们解这个方程组,我们会得到如下结果

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解答

因此股息将会支付 长期来看大约 85%的股息将会支付。

结论

下面是一些额外的参考资料,我认为它们将有助于你的准备,并深入探讨我在这里没有涵盖的话题。

参考文献

[1] Joseph K. Blitzstein 和 Jessica Hwang 的《概率论导论》

[2] Zenefits Glassdoor 面试问题

[2] www.stat.berkeley.edu/~aldous/150/takis_exercises.pdf

[3] Lyft Glassdoor 面试问题

[4] 递归方法

[5] 中心极限定理

[6] 二项分布

你可能会对我的其他帖子感兴趣

## 构建流数据管道

Apache Beam 和 DataFlow 实时数据管道

towardsdatascience.com ## 使用 Snowflake 和 Dask 构建机器学习管道

引言

towardsdatascience.com ## 贝叶斯时间序列预测方法

今天我们将从零开始在 R 中实现贝叶斯线性回归,并用它来预测美国 GDP 增长…

towardsdatascience.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值