构建基于人工智能的欺诈检测系统的 5 个步骤
似乎所有现代欺诈检测系统都是基于人工智能的,但它实际上是如何工作的?建立这样一个系统的具体步骤是什么?系统决策是如何控制的?
图片作者。
原来这篇文章已经被 贴在了 的 DataArt 博客上,这是一家我领导 AI/ML 能力的技术咨询公司。它非常受欢迎,所以我要确保更多的人可以访问它。
让我们将构建基于人工智能的欺诈检测系统的高级流程分为 5 个步骤。
步骤 0。数据准备
数据是机器学习的燃料;燃料越好,汽车能跑得越快。我将跳过描述如何聚集数据以及如何存储和传输数据的部分,直接跳到应该如何处理数据来实现 ML 的神奇。
重要的是从清理数据开始,以获得用于分析的一组特定特征。让我们以支付为例;相关功能将是买方细节,卖方细节,付款金额,交易发送的时间,银行细节,知识产权以及其他。事实上,可能有数百个参数。领域越复杂,需要的参数就越多。因此,我们对数据清理得越好,移除依赖或相关的特征,最终算法的性能就越好。否则,很难判断哪个特征导致了预测。通常情况下,数据准备和探索可能会比 ML 项目的其余部分花费更多的时间。
技术图片:红色方块是高度相关的特征,红色方块越少,模型的可解释性越好。图片作者。
第一步。监督学习,或者你能从你已经知道的东西中利用什么?
公司通常有某种类型的欺诈检测系统。它们可能是基于规则的,因为需要大量的规则而变得不堪重负,仍然难以过滤所有可疑案例,或者是基于人工智能的/混合的,由第三方供应商提供,在公司基础架构之外处理敏感数据。
如果您决定提升保护级别并在内部构建欺诈检测系统,是否有办法利用现有的欺诈知识?其实是有的。有监督的机器学习意味着一个人告诉机器什么是错的,什么是对的。使用来自现有系统的可信结果,您可以大大加快学习过程。
通常,有许多算法可以使用。主要目标是找到最适合特定数据集的方法,并调整其参数,以获得真阳性(真正的欺诈)、假阳性(未被标记为欺诈的欺诈)和假阴性(未被识别为欺诈的欺诈)的最佳平衡。有一个图表叫做混淆矩阵,数据科学家用它来优化算法。
技术图片:混淆矩阵——橙色还是非橙色?图片作者。
你在这里得到的数字越好,新系统替换过时系统的速度就越快,因为它从历史数据中学习得越好。
第二步。异常检测
但是,如果现有的算法遗漏了许多欺诈元素,那该怎么办呢?这就是我们在这里的原因——寻找可能是欺诈性的可疑记录。
为了做到这一点,我们需要将所有的项目、交易、支付或我们处理的任何东西进行分组。小而远的星团是可疑的元素。这意味着聚类算法将它们标记为非典型的。他们不一定是欺诈性的,但他们值得一看,更深入的研究。
技术图像:集群的 3D 表示。真实的维数可能是作者的数百个 d .图像。
稍后,主题专家可以查看这些集群并确认
- 所有记录看起来都不合法,所有出现在该群集中的新交易都应该被自动阻止
- 或者只有一部分记录是可疑的,我们应该调整聚类参数或者将所有这些可疑的记录发送给人类专家进行审查。
第三步。时序分析和动态限制
一般来说,可以在静态数据集上进行聚类,但是预期的行为会随着时间而改变。个人或企业收入可能会增长,从而增加支出模式。此外,支出可能具有季节性,例如,假日期间的支出较高。还必须适应这些行为模式,以确保系统运行良好。它应审查异常交易,同时动态调整预期范围,以适应交易随时间演变的性质。
预测低风险走廊是时间序列算法的工作,从简单的自回归模型开始,到更复杂的模型,如 FBProphet(由脸书开发),它将季节性因素计算在内。
技术图像:深蓝色线—实际平均值和预期平均值,蓝色范围—预期偏差,黑点—实际值。范围外的黑点是可疑的。图片作者。
第四步。综合
一旦我们准备好了数据,训练并测试了模型,我们如何将它与现有的基础设施集成呢?
关于技术,没有什么复杂的。ML 模型被包装成服务(即 REST)以拥有一个 API,这样系统的其余部分就可以与之交互。然后,它应该被测试和部署(即作为 Docker 容器),连接到数据源和决策支持 UI。
从风险管理和验证的角度来看,并行运行新的欺诈检测系统和旧的系统(如果有)以确保新系统的一致性可能是有意义的。此外,可以引入人工验证来降低现实生活中错误决策的风险,以及通过额外的监督训练来改进模型。
使用 Python 创建基本机器学习模型的 5 个步骤
由约翰内斯·普利尼奥在 风景画
机器学习
在本文中,我们将探索来自Kaggle.com的 Udemy 类数据,并尝试使用 Pandas 、 Matplotlib 、 Seaborn 和 Scikit-learn 来预测哪些类是成功的。
数据集可以在这里找到,代码可以在这个 GitHub repo 找到。
首先,我们将导入以下包并读入数据集:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as pltdf = pd.read_csv(r"C:\Users\Andrew\Documents\Python Scripts\data set\udemy_courses.csv")
在开始分析之前,我们将运行df.info()
来查看我们的数据集。我们可以看到我们有 3678 门课程,幸运的是在列中没有丢失数据!
RangeIndex: 3678 entries, 0 to 3677
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 course_id 3678 non-null int64
1 course_title 3678 non-null object
2 url 3678 non-null object
3 is_paid 3678 non-null bool
4 price 3678 non-null int64
5 num_subscribers 3678 non-null int64
6 num_reviews 3678 non-null int64
7 num_lectures 3678 non-null int64
8 level 3678 non-null object
9 content_duration 3678 non-null float64
10 published_timestamp 3678 non-null object
11 subject 3678 non-null object
dtypes: bool(1), float64(1), int64(5), object(5)
memory usage: 319.8+ KB
我们可以看到“published_timestamp”是作为一个对象存储的,所以在继续之前,让我们将其转换为一个日期时间变量。
df["published_timestamp"] = pd.to_datetime(df["published_timestamp"])
以下是我们将共同采取的步骤:
- **分布分析:**课程的常见科目、时长、价位有哪些?
- **组合特性:**我们可以组合任何列来获得更多有趣的特性吗?
- **将特征与目标变量进行比较:**我们能否对成功的课程有初步的了解?
- **建立模型:**我们能预测哪些课程最成功吗?
- **改进和部署模型:**为了构建一个更好的模型并让其他人更容易访问,接下来我们可以做些什么?
分布分析: 一种常见的开始方式是对数值数据使用df.hist()
,然后在对分类数据应用value_counts()
后绘制条形图。我们可以使用df.select_dtypes([‘type’])
来分离数字和分类数据。
num_cols_df = df.select_dtypes(['int64','float64','datetime64[ns, UTC]'])
cat_cols_df = df.select_dtypes(['object'])num_cols_df.hist(figsize = (10,10),bins=100)
这些特征大部分是指数分布的,除了价格。
对于分类变量,我们使用以下格式绘制相对频率:
(cat_cols_df[column_name].value_counts()/cat_cols_df.shape[0]).plot(kind="bar")
将“column_name”替换为“level ”,得到了下面的图表:
水平相对频率
再用“主语”:
主题相对频率
我们可能还想看看子分布,比如一个主题中的级别。为此,我们通过在[‘subject’]
前添加[cat_cols_df[‘subject’]==’Business Finance’]
来选择我们想要的主题,并运行几乎相同的代码行:
(cat_cols_df[cat_cols_df['subject']=='Business Finance']['level'].value_counts()/cat_cols_df.shape[0]).plot(kind="bar")
“业务财务”中“级别”的相对频率
组合功能:
我通常从寻找我能创造的相对价值开始。在这种情况下,我们可以用“内容持续时间”除以“讲课次数”来计算以小时为单位的平均讲课时间。
num_cols_df["average_lecture_length"] = num_cols_df["content_duration"]/num_cols_df["num_lectures"]
绘制直方图告诉我们,大多数讲座大约 0.1 小时,或 6 分钟长。
平均授课时长(小时)
虽然我们可能会马上说订阅者的数量是一个成功的类,但这并没有考虑到一些类是免费的或非常便宜的。为了更准确地衡量成功,我们应该看看收入,或“价格”*“订户数量”
num_cols_df["revenue"] = num_cols_df["price"]*num_cols_df["num_subscribers"]
绘制直方图显示了强指数分布,采用num_cols_df[“revenue”].mean()
会给我们带来 25 万美元的收入。
收入(十万美元)
比较特征与目标变量:
为了与我们的目标变量“收入”进行比较,我们可以使用 Seaborn 库。这可以帮助我们确定在模型中包含什么特性(或者以后删除)。
temp_df = pd.concat([num_cols_df,cat_cols_df], axis = 1)
sns.pairplot(temp_df, x_vars = ['content_duration','num_lectures','num_reviews','average_lecture_length'],y_vars = ['num_subscribers','price','revenue'], hue = 'subject')
pairplot()
中的“色调”参数允许我们在图表上覆盖分类数据。“评论数量”看起来与 y 变量有很强的相关性,而且“商业金融”科目在“平均演讲长度”上有较大的差异,但在任何 y 变量上没有太大的变化。“Web 开发”在“平均授课长度”方面更为严格,但在 y 变量方面有很大的变化。有可能我们的组合特征‘average _ lecture _ length’在模型中不是一个好的预测器。
与“价格”或“订户数量”相比,“收入”似乎显示出更清晰的相关性,因此我们将坚持把它作为我们的目标变量。同样从商业角度来看,收入应该更重要。
下面是相同的 pairplot,但是用hue = ‘level’
代替。“所有级别”在所有地块上的分布比其他的大得多,这一点在以后的研究中可能会很有趣。
建立模型:
我们通过分别准备前面的数字列和分类列来开始我们的数据管道。如果我们有任何空值,我们可以通过应用以下 lambda 函数之一来删除或估算数据中的缺失值:
fill_mean = lambda col: col.fillna(col.mean())
fill_mode = lambda col: col.fillna(col.mode()[0])
fill_median = lambda col: col.fillna(col.median())
对于“cat_cols_df ”,我们使用pd.get_dummies()
创建虚拟变量列。我们将删除“课程名称”和“课程网址”,因为它们目前不太可能有用。以下函数为 ’ cat_cols’ 中的每个特定列创建虚拟列。
cat_cols_df = cat_cols_df.iloc[:,2:]def create_dummy_df(df, cat_cols, dummy_na):
for col in cat_cols:
try:
# for each cat add dummy var, drop original column
df = pd.concat([df.drop(col, axis=1), pd.get_dummies(df[col], prefix=col, prefix_sep='_', drop_first=False, dummy_na=dummy_na)], axis=1)
except:
continue
return dfcat_cols_df = create_dummy_df(cat_cols_df, cat_cols_df.columns, dummy_na = False)
值得注意的是,大多数管道使用 Scikit-learn 的 OneHotEncoder,因为该方法可以处理未知的数据类型以及稀疏矩阵。假设您的训练数据有一个“颜色”列,其中只有“红色”和“绿色”作为值,但新数据有一个额外的值“蓝色”。get_dummies()
将为“蓝色”创建一个新列,即使它不在已训练的模型中,这将导致错误。
在为我们的分类列创建虚拟变量后,我们使用 Scikit-learn 的train_test_split()
方法将数据随机分为训练集和测试集(“random_state”保存了分割,因此任何人都可以复制结果)。
对于 X,我们创建“X_num_cols_df”并删除“course_id ”,因为它可能只是噪声。“收入”和“订户数量”也被删除,因为这些是我们试图预测的。
from sklearn.model_selection import train_test_splitX_num_cols_df = num_cols_df[['content_duration','num_lectures','num_reviews','price']]X = pd.concat([X_num_cols_df,cat_cols_df],axis = 1)
y = num_cols_df['revenue']#Split into train and test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .30, random_state=42)
我们使用 Scikit-learn 创建一个模型,我们希望将数据拟合到该模型中,在本例中,我们使用的是线性回归模型。
from sklearn.linear_model import LinearRegressionlm_model = LinearRegression(normalize=True) # Instantiate
lm_model.fit(X_train, y_train) #Fit
拟合模型后,我们基于 X_test 数据预测成功,并寻找其均方误差(MSE),这是一种常用的评分指标。
from sklearn.metrics import mean_squared_errory_test_preds = lm_model.predict(X_test)mse_score = mean_squared_error(y_test, y_test_preds)
length_y_test = len(y_test)print("The MSE for your model was {} on {} values.".format(mse_score, length_y_test))
这输出
The MSE for your model was 312248327184.6464 on 1104 values.
改进和部署模型:
现在我们的模型显然很糟糕,所以让我们试着了解一下为什么。通常情况下,您的第一个模型会非常遥远——没关系,许多实际工作来自于选择功能子集、交叉验证/集成方法或使用不同的模型!
然而,在此之前,尽可能地了解您的数据领域是非常重要的——数据中可能有未捕捉到的事件和趋势,这些事件和趋势可能会破坏您的模型。Udemy 经常会将所有课程的价格降到 10 美元,不管初始价格是多少。除非我们能够找到一个类别的平均销售价格,否则删除“价格”是值得的。我还建议深入研究第三步**将特征与目标变量进行比较,**因为更好地理解模式将有助于推动洞察力,而不仅仅是调整模型本身。
改进模型的另一种方法是对“course_title”列应用自然语言处理(NLP ),以查看某些关键字的存在是否有影响。
分享这种模式的最简单的方法是把你所有的代码放在一个笔记本和活页夹里。如果你想要一个更干净的用户界面,你可以创建一个 Plotly Dash 应用,并将其部署在 Heroku 上。
祝你好运,编码愉快!
开发独特数据科学项目创意的 5 个步骤
由 Julia Nikulski 制作的图形显示了开发独特的数据科学项目创意的必要步骤。由 Freepik 、 Smashicons 、eucalype、 Kiranshastry 、 Becris 和 monkik 从 Flaticon 制作的图标。
入门
帮助您识别值得一试的新颖独特的数据项目的指南
任何项目中最困难的部分显然是想出一个新颖但可执行的想法。你很容易陷入数据集兔子洞。你花几个小时浏览现有的数据集,试图提出新的有趣的想法。但这种方法有一个问题:当你只关注现有的数据集时——关注 Kaggle 、 Google Datasets 、fivethirtyeeight—你会把你的创造力限制在这个数据集设计用来解决的一小部分问题上。
有时,我喜欢探索一个我觉得有趣的数据集。Kaggle 预测任务的第一百万次复制可能有利于我的学习进度。但是作为数据科学家,我们努力创造新的独特的东西,并产生有用的见解。
那么你怎么能想出一个新的主意呢?我将创造力研究的见解与自己的经历结合起来。这导致了 5 个关键问题,包括项目想法的例子。这些问题指导你的想法产生过程,让你充分发挥你的创造力。这将产生新的独特的数据科学项目想法。
丹尼尔·麦金尼斯在 Unsplash 上的图片。
1.我为什么要开始一个项目?
当你考虑开始一个新的项目时,你会在头脑中有一个意图或目标。为什么一开始要做另一个数据科学项目?对你的目标进行广泛的分类可以帮助你集中精力寻找一个想法。所以想想你是否想创造
- 一个投资组合项目向潜在雇主展示,
- 一篇关于概念、模型或探索性数据分析的博客文章,
- 一个让你实践一项技能的项目——比如自然语言处理、数据可视化、数据角力,或者某个特定的机器学习算法,
- 或者你是否有完全不同的想法。
2.我的专长和兴趣领域是什么?
思考这个问题很重要,主要有三个原因。首先,记住数据科学的维恩图。领域专业知识是每个数据科学家都应该拥有的重要资产。只有你也理解了潜在的问题,你才能用数据解决问题。否则,你实现的算法、可视化和创造的预测与该领域的任何从业者都无关。而如果你的工作会无关紧要,那你当初为什么要去做呢?
其次,对你正在处理的想法和数据集感兴趣是很重要的。你不想强迫自己把空闲时间花在一个你不关心的项目上。如果你对某个领域感兴趣,你不需要成为这个领域的专家。但是你需要愿意花时间做额外的研究,并且理解数据之外的问题。
第三,研究人员发现,在创作过程中引入约束会带来更好的结果。这意味着专注于某个特定领域或某个领域的组合会比试图在搜索过程中不受任何限制地提出一个想法产生更好的结果。例如,我的兴趣和专长领域是可持续性、金融、流行文化和自然语言处理。专注于这些主题将允许我在确定灵感是否可以转化为可执行的新想法时利用我现有的知识。
3.怎么才能找到灵感?
要找到灵感,你能做的最重要的事情就是阅读。各种来源可以帮助你在构思过程中发现有趣的主题:
- 新闻、观点、博客文章:轶事证据——以故事的形式——是想出点子的好方法。《连线》杂志发表了这篇关于谷歌自动补全功能中的政治偏见的文章。你可以用这个来研究语言模型中的偏见。或者你可以调查是否有可能根据在谷歌中输入的搜索查询来预测一个人的位置。
- 科学文献:学术论文通常包含讨论与研究主题相关的公开研究问题的段落。这篇介绍语言模型 GPT-2 的文章提到,如果不进行微调,该模型在某些任务(如回答问题)上的表现并不比 random 好。为什么不写一些关于微调这个模型的复杂性的东西呢?
- 数据科学帖子:浏览介绍数据科学主题和项目的博客帖子可以产生新的想法。我看到了这个 NLP 探索办公室,立刻后悔没有首先想到这个。但是探索另一个电视节目怎么样?还是几部电影确定模式?你可以用 GPT 2 号为你最喜欢的电视节目写剧本。
除了阅读,在你的日常生活中寻找灵感。每当你想知道一些事情的时候,考虑一下你是否可以用数据来回答这个问题。例如,我最近偶然发现了电视节目 The Boys 的预告片,看到了很多对 IMDb 的积极评价。所以我问自己,流行的电视剧变得更加暴力有没有一个被证实的趋势?喜欢暴力节目的观众越来越多了吗?利用这些好奇的时刻,用数据探索这些问题。
你有什么选择来从上面的灵感中创造想法?神经科学家确定了与想法产生有关的三种不同的心理过程:
- 你可以把已有的想法组合起来,创造一个新的结果(组合创意 ) →各种项目分析 Airbnb 房源,其他的分析房市。结合这些思路来考察 Airbnb 是否提高了一个城市的房价。
- 你可以探索一个现有的想法,寻找要解决的新问题(探索性创造力 ) →以围绕受过大学教育和自学成才的数据科学家的现有辩论为例,调查谁更成功。
- 你可以拿一个现有的想法,改变它的一些东西,完全改变它的规则或意义(转换创造力 ) →这是创造力最罕见的形式,在既定的概念空间之外运作。很难把握和描述。一个例子是,不要预测某件事会发生,而是尝试预测某件不会发生的事。
4.在哪里可以找到相关数据?
一旦你有了一个总的主题,寻找数据来决定你如何在一个数据科学项目中实现这个想法。这是决定你的想法是否可行的关键。考虑现有数据库以及仍需收集且更难找到的数据:
- 现有数据集来源 : Kaggle ,谷歌数据集, FiveThirtyEight , BuzzFeed , AWS , UCI 机器学习知识库, data.world ,Data.gov等等,一个快速的谷歌搜索就会发现更多。
- 其他人用过的方法:在谷歌和谷歌学术上搜索你选择的话题,看看是否有人已经调查过类似的问题。他们用了哪些数据?我们的数据世界结合了你可能不知道的学术和非学术资源。
- 通过以下方式收集数据: Web 抓取、文本挖掘、API、事件跟踪、日志收集。
如果你找不到任何可以帮助你表达项目想法的数据,那就重新措辞。试着推导出一个可以用你所拥有的数据来回答的想法。同时问问自己为什么想要的数据得不到?你关注的领域中的问题是什么,如何解决?回答这些问题可能会引发一个数据科学项目。
图片由 Erol Ahmed 在 Unsplash 上拍摄。
5.我能执行我最后的想法吗?
你有一个绝妙的主意!但它可实施吗?回顾你的想法产生过程。想想你想要实现什么(问题 1),你是否对这个领域感兴趣或有专长(问题 2),以及你是否有执行这个想法所需的数据(问题 4)。现在你需要确定你是否有能力实施这个项目并实现你的目标。
要考虑的一个重要因素是你愿意在这个项目上花费的时间。你不会想在这个话题上做博士的。所以你的期末项目可能只是你想法的一部分,也可能是学习你将来实现想法所需的技能。在这个想法产生过程的最后,应该是一个研究问题,在你愿意为实现目标而花费的时间里,你可以并且想要回答这个问题。
图片由 Sharon McCutcheon 在 Unsplash 上拍摄。
最后的想法
- 管理你的期望 : 想出一个可执行的新颖想法需要几个小时以上的时间。这是一个持续的灵感过程,你应该把你想到的任何想法都写下来。在手机上打开便笺,记录你的想法。你也许能把你的几个想法结合成一个强有力的项目。
- 和某人谈论你的想法:和某人讨论你的项目想法会对你有帮助。也许一个相关的问题更有意思。也许他们可以给你指出额外的数据来源。也许你需要一个共鸣板来意识到你的想法是否有意义。
- 不要害怕重新开始:每一次经历都会教会你一些东西。每次你写一行代码,你都在练习和扩展你的技能。当你意识到你的想法没有让你更接近你的目标,或者这个想法是不可执行的,不要害怕离开它,继续前进。你花的时间没有浪费。重要的是要明白什么时候你的努力不会得到至少同样多的回报。
本指南为我带来了新的独特的数据科学项目想法,我希望你会发现它和我一样有用。让我知道你的过程是什么,你认为这些步骤中缺少什么。
你想在媒体上阅读更多高质量的故事吗?考虑注册一个支持我和其他媒体作者的会员。
[## 通过我的推荐链接加入 Medium-Julia Nikulski
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@julia.nikulski/membership)
有效仪表板设计的 5 个步骤
创建有影响力的仪表板的指南
卢克·切瑟在 Unsplash 上的照片
仪表板仍然是任何公司数据科学流程的重要组成部分。从数据分析师到最高级别的高管,仪表板仍然被用来传达关键信息和从数据中获得洞察力。
在设计仪表板时,可以考虑许多不同的方面。数据、数据的可用性、可视化数据的需求、可视化数据的方式、对感知和认知科学的考虑,等等。你会发现数百种仪表盘设计指南和规则手册。面对如此多的信息,被规则所束缚而无法提供有用的东西是很常见的。
本文旨在提供一个清单,当你被要求设计一个仪表板时,你可以考虑 5 点。即使您是新手或经验丰富的人,您也可以使用下面的指针来创建仪表板,以正确有效地传达信息。
所以,让我们开始吧!!
步骤 1:评估需求
请记住,仪表板的目标很重要。关于仪表板的讨论经常集中在仪表板的外观上。人们喜欢看到按照他们熟悉的方式设计的仪表板。这导致仪表板无法解决手头的问题。这里的关键是关注仪表板解决什么问题,而不是它是如何设计的。
另一件重要的事情是,仪表板与用户的能力相匹配。如果我们能了解用户的金属模型,我们就能更好地评估仪表板的需求。仪表板既不应该非常复杂,也不应该过于简单,而是应该与用户的能力相匹配。
在这一步要问的重要问题:
- 仪表板将回答的 5 个关键问题是什么?将采取什么行动来应对它们?
- 仪表盘的受众是什么?
- 仪表板上需要显示哪些信息项目,为什么它们很重要?
- 仪表板上的哪些项目回答了您的主要问题?
- 信息需要以什么样的详细程度(粒度)来表达?
- 哪些信息项之间的比较有助于回答关键问题?
- 仪表板需要多久更新一次?
第二步:制作原型
清楚了解仪表板和信息项的目标后,制作仪表板的原型。这有助于您了解您手头有哪些组件,并找出您可能缺少的东西。
原型可以是简单的手绘草图。不需要设计一个工作原型。
这里的目的是定义将出现在仪表板上的信息的不同部分,它们的重要性以及它们应该如何排列。
此外,征求对原型的反馈。你可能不会第一次就把设计做对。尝试在你的设计中引入新的视角。
第三步:选择图表
一张图胜过千言万语。所以选择正确的图片(图表)很重要!图表对于可视化模式、趋势和获得洞察力非常重要,否则仅通过查看原始数据很难获得这些信息。
- 随时间变化的趋势: 折线图、面积图、条形图
- 对比与排名: 条形图
- 相关性: 散点图,棒线组合图
- 分布: 箱线图,直方图
- 部分到整体: 堆积条形图
- 地理数据: 地图搭配其他海图
此外,你也可以查看data-to-viz.com获取图表类型的详细指南。
第四步:确保图表是有效的
除了选择正确的图表类型,我们还需要确保图表是有效的。
Tableau 有一份关于可视化分析最佳实践的白皮书,其中概述了下面一些让图表更容易理解的示例:https://www . tableau . com/sites/default/files/media/white paper _ visual-analysis-guideline _ 0 . pdf
不要让你的图表信息过多。相反,创建分区有助于更好地理解图表。
为图表选择正确的方向。
避免在一个图表中使用太多颜色。
组织图表,使其能够轻松回答问题。
第五步:收集反馈并重申
收集用户对图表的反馈,以便更好地评估它。
确保您的仪表板回答了您设计它来回答的关键问题。确保图表类型正确,图表易于理解。找出图表中是否有过滤或深入查看的要求。根据反馈改进设计。
制作仪表板是一门艺术,也是一门科学。因此,为了构建出色的仪表板,您需要投入精力和时间,进行协作和重申!
演职员表:苏米特·夏尔马
产品分析有目的沟通的 5 个步骤
(来源:坎瓦)
产品分析的目的是帮助你做出提高客户价值的决策和行动。就是这样。做出更好的产品。做出更好的服务。
在较小的组织中,信息的传播要简单得多。利益相关者越来越少,优先级也越来越模糊。对于较大的组织,导致决策的网络有更多的节点。更广泛的系统带来了不同的接受度和更高的误解几率。
然而,在这两种情况下,你的信息都需要有目的、有计划地分享。在这篇文章中,我们将重点关注:有目的、有计划地传达你的分析。
该框架分解如下:
- 设定你的目标
- 定义你的受众
- 精心制作你的信息
- 选择您的频道
- 调整你的时间
设定你的目标
你为什么分享这个?你希望你的观众做什么?
在我们进入内容之前,让我们从沟通的一个重要部分开始——目的。
最起码,我们希望避免类似“那又怎样?”“好的,很酷,”或者——在我的 Chik-Fil-A vs. Popeyes 推文下面的例子中——“为什么我会看到这个?”。
没人问我对辣鸡三明治辩论的看法。(来源:推特)
分享分析的三个原因
分享您的分析结果有三个主要原因。
首先是**创造对某个话题的认知。**作为产品经理,你总是在创造环境。您正在识别要解决的问题,突出无效的用户流,或者监控您的发布的采用。
抓住这些机会需要别人看到你所看到的。在这些场景中,您(希望)使用数据来创建对这些情况的意识。
第二是**产生洞察力,培养理解力。**当你深入一个话题时,你和你的利益相关者可能会对正在发生的事情和原因感兴趣。你可能已经预料到了那些重要的问题。(不要脸塞给我的帖子:高级分析从已证实的问题开始。)
在这种情况下,您希望与利益相关者分享您的发现。你可以更好地理解正在发生的事情。它也可能固执己见,并以某种方式框定形势。
最后,你可能想要为一项行动或一项决定辩护。当你到了一个需要努力或决策的关头,数据起着重要的引导作用。您可以使用模型来评估不同的战略选择。你也可以根据你所做的决定来预测未来。
直截了当地说,数据可以用来增加决策信心。
定义您的受众
你会和谁分享信息?
我们可以使用的背景等级和的参与等级来对观众进行分组。
背景水平是指个人对你的信息做出有意义的回应的准备程度。这可以是知识、责任或投资的形式。
参与程度是您要求个人采取的行动的直接性或影响力。这代表了一个人或一个团队对你的计划的成功有多重要。
三种受众类型
有了这两个属性,您就可以开始创建三个受众群体。
(来源:乔里兹·德·古兹曼)
直接团队成员是具有高背景和高参与度的个人。他们非常了解你的计划,并且对你的目标有着深刻的理解。他们通常是第一个知道发展和新见解的人。
合作者展示高背景-低参与或低背景-高参与。他们由那些意识到某种情况但对你的工作没有直接影响的人组成。或者,他们是你需要动员的个人,但不需要很多环境来执行。
观察者语境低,参与度低。这些人将是最后一批收到你的分析信息的人。与这些人分享的目的是让他们广泛了解你的计划。
选择受众时的考虑因素:
- 当你远离中心的时候,你对信息的控制就越少
- 低语境受众很有可能产生误解
- 如果混合分组,请调整您的消息以考虑低上下文
- 错开你的通信,以控制你的信息,减少噪音
- 像任何优先级排序一样,关注最小努力的最高回报
精心制作你的信息
你需要了解哪些要点?
下面是我在交流中使用的一个结构。
- 求问与推荐。因为大多数人都很忙,所以我会以行动或提问开始。你提供了一个镜头,观众应该通过它来观看你的其余内容。
- 关键要点。综合你的听众需要吸收的最突出的观点。在这里保持公正和诚实是至关重要的。我已经看到太多有偏见的观点了。
- **语境构建。**你有机会让你的听众了解为什么这种沟通是必要的,以及他们需要知道什么才能负责任地、有效地行动。
- **方法论。**透明度可以与听众建立信任,促进健康的讨论。如果你是数据的接收方,你应该要求方法清晰。
- **详细的调查结果。**下意识的反应是列出见解和数据点。更有效的方法是用为什么它是必要的来支持你的结论——通过故事和暗示。
选择您的频道
你将如何向你的听众传达这一信息?
有几种方法可以分享你的发现并倡导行动。典型的例子是演示文稿、电子邮件、Slack 或自助仪表板。
丹尼尔·山特维克在 Unsplash 上的照片
以下是选择信息传播媒介时需要考虑的几个问题:
- **互动性。**你需要多少互动来推动你建议的行动?当涉及到分析时,您可能需要一个允许讨论和阐述的论坛。电子邮件或聊天可能足以提供简短的更新。
- **受众规模。**有些频道适合爆破给大批人看。其他的更有利于更亲密的交流。
- **最大化参与度。**选择受众最有可能消费你的内容的渠道。
- **勾兑渠道。**一封邮件可能解决不了问题。有时你需要发送一封预读邮件,然后安排一次简短的面对面讨论。你需要设计一个“决策之旅”,并带着你的听众一起来。
努力掌握你的时间
你应该什么时候分享你的发现?
托马斯·博尔曼斯在 Unsplash 上拍摄的照片
时机是迄今为止沟通你的分析最抽象的部分。没有硬性规定说你什么时候应该发送任何东西。但是,您可能需要考虑以下几点:
- 准备好了就分享。在这种情况下,准备好意味着你对自己的工作质量、对结果的解释以及隐含的行动/决定充满信心。
- 根据紧急情况的需要尽快分享。在某些情况下,发生的事件需要你尽快提高团队成员和合作者的意识。例如,使用率的急剧下降应该引起产品、工程、财务和客户支持部门的注意。
- **错开各种观众类型。**正如我之前提到的,你可能希望优先与直接团队成员交流,然后是合作者。一旦决策和行动计划明确,您就可以与观察者分享。
- 错开在观众群内。直属团队可能由不同的部门组成。决策之旅可能有一条信息共享的最佳路线。根据联盟建设和决策链随意分享信息。
把所有的放在一起
如果这篇文章有什么值得借鉴的,那就是:与分析人员交流需要有目的性和深思熟虑。分享你的发现应该突出新的机会,创造更多的理解,或推动具体的行动。规划您的信息并根据特定受众进行定制,可以确保您将噪音保持在最低水平,同时最大限度地发挥您的预期效果。
我们在这里没有涉及的其他主题包括您的信息的语气以及适应您组织的数据文化。我经历过低成熟度的数据文化,其中强调问题被认为是不利的。
**侧栏:**一些文化甚至可能将数据视为与战略相对立的东西。上周,一位即将离任的产品副总裁在她的告别邮件中建议我们“平衡战略和数据。不是非此即彼。”对此我不禁感到失望。我从来不知道战略性和数据驱动是两个极端。
我跑题了。
看啊。您付出了艰辛的努力来获取数据,从中提取信息,并找出利用这些信息的方法。读完这篇文章后,你就有了一个框架来沟通和招募他人加入你的事业。让我们制造一些更好的产品。
注册我的战略和分析简讯。在此订阅!
查看我在产品分析上的其他帖子
数据流畅的责任是对现实负责。只有这样,你才能做出最好的决定。
towardsdatascience.com](/25-sapient-principles-for-better-data-literacy-5ff5d42480a5) [## 卓越的分析始于经过验证的问题
分析最容易被忽视的方面也是最关键的——知道哪些问题很重要。
medium.com](https://medium.com/swlh/superior-analytics-starts-with-proven-questions-83e623fa27bf) [## 产品分析数据治理的 31 个最佳实践
治理可能不是转型变革中最激动人心的部分。它让你的其他投资得到回报…
towardsdatascience.com](/31-best-practices-for-product-analytics-data-governance-d03f23b0e841)
作为反种族主义数据科学家需要采取的 5 个步骤
在一个种族主义的社会,仅仅是非种族主义者是不够的【数据科学家】。我们必须反对种族主义[数据科学家]——安吉拉·戴维斯
数据科学家是数据管家。我们收集数据、存储数据、转换数据、可视化数据,并最终影响数据的使用方式。在我们这个数据驱动的世界里,我们发现自己有责任用数据来讲述故事和影响变化。
但是有了这个责任,我们这些非黑人数据科学家仅仅不种族主义是不够的。在乔治·弗洛伊德、布里奥纳·泰勒、艾哈迈德·阿贝里和太多其他黑人死后,我们坐在电脑屏幕后面写代码、感到愤怒却不采取行动是不够的。我们承认美国继续存在的种族主义制度,但却不积极采取任何行动,这是不够的。
*正如安吉拉·戴维斯所说,“在一个种族主义社会,仅仅是非种族主义者是不够的。我们必须反对种族主义。”*非种族主义者和反种族主义者都认识到种族主义和白人至上是错误的。反种族主义者是那些采取行动对此做些事情的人。
作为非黑的数据科学家,我们必须是反种族主义的数据科学家。我们必须对我们的权力和特权负责。我们必须正视数据和算法被用来延续种族主义的方式,并在我们自己的工作中消除种族主义的决定和算法。我们必须认识到我们的领域缺乏多样性(只有约 3%的数据科学家认为是黑色的),并为改变这一点的途径做出贡献。成为反种族主义的数据科学家不是一次性的决定,也不是我们能够完全实现的目标,而是我们每天都要做出的承诺,无论是现在还是未来,都是为了建设一个更加公平公正的世界。
我们可以从以下 5 个步骤开始:
第一步:教育我们自己成为反种族主义者
要成为反种族主义的数据科学家,我们必须采取措施成为反种族主义的个体。反对种族主义对于白人和有色人种是不同的。正如国家非裔美国人历史和文化博物馆的工具包中所写的:“对于白人来说,反种族主义随着他们种族身份的发展而发展。他们必须承认并理解他们的特权,努力改变他们内在的种族主义,并在看到种族主义时打断它。对于有色人种来说,这意味着认识到种族和种族主义是如何被内化的,以及它是否被应用于其他有色人种。”Anneliese Singh 博士的《种族愈合手册》中的这段摘录是一个很好的起点,因为它讲述了个人在反种族主义的持续过程中可以承担的六项责任:阅读、反思、记忆、风险、拒绝和建立关系。
特别是那些已经开始承认特权并希望阅读和反思的白人读者——在让黑人、土著或有色人种(BIPOC)朋友负担阅读资源或对话的请求之前,先从目前在线提供的许多资源列表开始,如这里的和这里的和,并联系也在这次旅程中进行对话的白人朋友。
第二步:了解数据和算法如何被用来延续种族主义
作为数据科学家,我们使用数据来回答问题、解决问题,并且(希望)产生积极的影响。但历史一再表明,良好的意愿是不够的。数据和算法被用来延续种族主义和种族主义社会结构。我们必须让自己了解这些现实以及它们对黑人生活的不均衡影响。这份清单只是一个起点,绝非详尽无遗;在我们应对这些挑战的努力中,我们必须继续学习、促进和扩大关于这项工作的研究和报告。
新文章 : 医学算法中的种族偏见有利于白人患者,而不是病情严重的黑人患者;美国研究称许多面部识别系统存在偏见;机器偏见:全国各地都有用来预测未来罪犯的软件。而且对黑人有偏见;随着摄像机追踪底特律的居民,一场关于种族偏见的辩论随之而来。脸书的广告投放算法存在性别和种族歧视;拉姆齐县的社区成员如何阻止大数据计划将学生标记为处于危险中
讲座 : 大数据、技术、法律;算法公正:种族、偏见和大数据;合法化真正的安全(其中包括面部识别的讨论,以及警方如何监视被指控违反社交距离令的底特律居民)
书籍(考虑从一家 黑书店 ) :压迫的算法:搜索引擎如何强化种族主义(萨菲亚贵族);《人工智能:计算机如何误解世界》(梅雷迪思·布鲁萨德);自动化不平等:高科技工具如何描述、管理和惩罚穷人(弗吉尼亚·尤班克斯);技术错误:性别歧视的应用程序,有偏见的算法,以及其他有毒技术的威胁(萨拉·沃希特-博特彻);破坏数学的武器(凯茜·奥尼尔)
跟随的专家:Nasma Ahmed(数字司法实验室);阿尔瓦罗·贝多亚(乔治敦大学法学客座教授、隐私与技术中心创始主任);梅雷迪思·布鲁萨德(NYU 大学副教授);Joy Buolamwini(麻省理工学院媒体实验室,算法正义联盟创始人);马克斯·克莱蒙(Holyoke 市长阿莱克斯·摩尔斯的高级政治顾问);Teresa Hodge(R3 Technologies 联合创始人兼首席执行官);塔米卡·刘易斯(数据司法实验室研究员);Yeshimabeit Milner(黑人生活数据联合创始人兼执行董事);Tawana Petty(数字社会实验室非常驻研究员,底特律社区技术项目主任);rashida Richardson(AI Now 政策研究总监);Samuel Sinyangwe(零号战役联合创始人);Latanya Sweeney(哈佛大学政府和技术教授,数据隐私实验室主任)
组织追随 : 数据&社会;艾现;数字公民社会实验室;隐私与技术中心;黑人生活的数据;战役零;数字股权实验室;数据正义实验室;算法正义联盟
*虽然这篇文章特别关注对黑人个人的反种族主义支持,但也有与种族、性别、性和其他人口属性相关的长期数据驱动的歧视历史,我鼓励读者也了解更多
第三步:消除我们工作中的种族主义决策和算法
作为反种族主义的数据科学家,我们必须承诺每天在自己的工作中采取行动,消除种族主义决策和算法。没有一个清单可以做到这一点,但我发现自己经常向我参与的数据科学项目提出一系列问题。这些问题的一部分来自我参加的 2018 年讲座,题为“你拥有的数据和你提出的问题”,由 UPP up 的高级政策分析师 Logan Koepke 提出。
如果这些问题的答案揭示了潜在的种族主义,我们必须大声疾呼,挑战现状。
从你掌握的数据开始。查看数据,并经常联系主题专家,以便更好地理解:
- 数据是如何获得的?
- 数据是为谁获得的?
- 数据是由谁获得的?
- 是否获得了获取数据的许可?
- 如果人们知道这些数据正在被获取,他们会感到舒服吗?
- 如果个人知道这些数据是如何存储或共享的,他们会感到舒服吗?
- 数据是为了什么目的获得的?
- 这个数据怎么可能有偏差?
- 探索杂志数字防御剧本来考虑你如何更好地通知和包括更广泛的社区,包括黑人社区,进入关于获取和使用数据的对话
考虑你希望用你的数据回答的问题或解决的问题。提问:
- 将受此分析影响的社区是否参与了形成您希望回答的问题的过程?如果没有,为什么没有?
- 当前的目标是否使历史数据集的使用复杂化,并以不同于最初预期的方式使用它们?
- 预测的结果在多大程度上不同于数据中的观察结果?你问的问题是不是试图强加一个没有事实根据的现实?
- 预测这一行为是否也改变了未来的观察空间?行为会因为预测而发生怎样的变化?
当你建立一个模型时,像对手一样思考:
- 这个系统怎么玩?
- 它怎么会被用来伤害人,尤其是那些在 BIPOC 社区的人?
- 这种模式可能会带来什么意想不到的后果?
- 当模型从新数据中“学习”时,这些新数据会如何引入新的偏差?
当你传达模型的结果时:
- 模型是否经过沟通,使得提供数据的社区能够查看和理解结果?
- 您是否清楚地传达了测试模型以发现种族偏见的方式?
了解技术细节:
有越来越多的技术方法研究以一种考虑公平的方式解决算法中的竞争。简单地不将种族作为一个变量包括在算法中,并说你有**“通过无知的公平”是不可接受的** : j 仅仅因为一个算法不包括种族作为一个预测因素并不意味着它是无偏见的。相反,数据科学家应该明确考虑算法对种族的敏感性。这篇文章介绍了算法公平性,包括人口统计均等、均等优势和预测率均等的概念,以及可用于在预处理、训练和后处理过程中减少差异的工具。这篇文章展示了如何使用 SHAP,一个可解释的人工智能工具来探索人口统计的均等性。麻省理工学院 D-Lab 的报告探索国际发展机器学习的公平性相当详细地探讨了如何将公平性集成到机器学习项目中。对于额外的学习,利用这个免费的在线教材和这些视频:谷歌机器学习速成班 ML 中的公平性; 2017 机器学习中的公平性教程; 21 个公平定义及其政治。
第四步:致力于增加数据科学领域的多样性
2020 年哈恩哈姆美国数据和分析报告发现,只有 3%的数据和分析专业人士被认为是黑人,在领导岗位上就更少了。这是不可接受的,特别是当我们(非黑人数据科学家)继续使用从黑人社区收集的数据并编写影响黑人社区的算法时。
为了推动我们工作的组织和整个数据科学界进行变革,我们必须致力于:
- 直面我们自己无意识的偏见,以及它们如何在工作场所表现出来,从而使我们的领域成为一个更具包容性的空间
- 盘点我们的内部公司实践,并做出改变,在我们组织的各个层面推进公平、多元化和包容性
- 审查和更新我们的招聘流程,使其不反映负责招聘的个人/团队的无意识偏见
- 要求在执行领导团队、董事会和专家小组中有代表
- 开发领导力途径,支持来自历史上代表性不足背景的新兴领导者
第五步:向致力于数据意识和增加数据科学多样性的黑人领导和社区驱动的组织捐款
众所周知,数据科学是一个利润丰厚的领域,平均年薪约为10 万美元。由于我们并非生来就了解数据科学,我们中的许多人很可能由于强大的教育经历而进入了这个领域。作为反种族主义的数据科学家,我们必须认识到,我们生活在一个种族主义的社会,教育机会分配不均。由于数据科学影响着每一个人,我们必须致力于使用我们的工作所获得的财政资源来支持教育体验,以增加数据科学劳动力的多样性(并使这一利润丰厚的领域更容易进入)以及每个人的数据意识。
支持黑人领导和社区推动的组织,为数据意识做出贡献
每月定期向黑人领导和社区驱动的组织捐款,以促进数据意识、数据收集和对警察暴力等及时问题的数据可视化。要考虑的组织包括:
支持为黑人学生服务的数据科学和技术项目
设立每月定期捐款,以支持为黑人学生服务的数据科学和技术项目。虽然志愿获得教学机会可能很诱人,但对于 BIPOC 学生来说,从 BIPOC 数据科学家那里学习是非常强大的。考虑财政支持计划,例如:
在你当地的社区大学设立奖学金
2016 年,谷歌完成了一项研究,强调了社区大学在创造一条增加计算机科学多样性的道路方面可以发挥的作用和面临的挑战。与大学相比,社区学院通常对启动奖学金的财政要求要低得多,而且这些奖学金可以发挥很大作用。联系当地社区大学的经济资助办公室,从今天开始。
在历史上的黑人学院或大学(HBCU)启动或贡献奖学金或数据科学项目
许多 HBCUs 拥有现有或新的数据科学计划,包括:
- Clark Atlanta 大学、Spelman 学院、莫尔豪斯学院和莫尔豪斯医学院的 AUCC 数据科学计划由 UnitedHealth 在 2019 年提供的 820 万美元捐款资助
- 位于 Prairie View A & M 的大军事数据情报卓越研究和教育中心
- 在 NC A & T 获得应用科学和技术博士学位,专注于数据科学和分析
- 科平州立大学人工智能及其应用实验室
- 鲍伊州立大学的虚拟现实实验室
请直接联系这些计划,了解更多信息。
作为非黑人数据科学家,我们的工作要求我们不仅要认识到种族主义,还要成为反种族主义的数据科学家并采取行动。
我们不能袖手旁观,因为我们作为数据管家所做的决定继续对黑人社区造成不可挽回的伤害。我致力于这篇文章中的步骤,同时知道只要种族主义继续存在,这项工作就不会结束。
我希望你能加入我。
我欢迎反馈和其他贡献。
感谢朋友、同事和家人对这篇文章的草稿提供了反馈,也感谢许多榜样在我的旅程中提供了指导。工作仍在继续。
数据告诉我们关于数据科学家的 5 个故事
数据科学家通过数据讲故事。但是数据可以讲述数据科学家的哪些故事呢?
照片由 Dariusz Sankowski 拍摄
这听起来像是结构化数据的报复,但实际上这只是由 Kaggle 平台进行的一项调查。2019 年 Kaggle 机器学习和数据科学调查的数据在这里可用,因此我们可以听听他们可以告诉我们的关于数据科学家的故事。
这些问题引导我们完成了本次分析:
- 他们的教育背景如何?
- 他们在日常工作中从事哪些活动?
- 他们使用哪些工具?
- 他们的工资呢?
以下是他们告诉我们的故事:
教育
作者图片
我知道,如果你刚刚开始成为数据科学家的旅程,第一个数字对你来说可能是个坏消息。我不想给你任何剧透,但如果你现在感到失望,去看看最后一节叫做学历 x 工资的内容,它可能会让你再次冷静下来。
大多数回答调查的数据科学家确实有硕士学位。尽管如此,他们通过受欢迎的平台参加在线课程仍然非常普遍,如 Coursera、Udemy、DataCamp、Udacity 和其他许多平台。
作者图片
这可能表明,无论你的正规教育背景如何,你都必须不断寻求知识,尤其是在这个几乎每天都给我们带来新闻的技术领域。
活动
听到数据科学,难免会想到人工智能和机器学习算法的炒作。但是,当谈到数据科学家日常生活时,那会是主要任务吗?
作者图片
他们中超过 60%的人实际上必须处理数据分析,而不仅仅是担心使用什么算法或找到改进模型的方法。实际上,调查向我们表明,无论你是数据科学家还是数据工程师,数据分析都会在你的活动中发挥很大作用。
此外,我们可以看到,几乎 35%参与调查的数据科学家从事与数据基础架构相关的活动。这显示了数据科学领域中不同角色之间的关系。
工具
如果我告诉你 Python 是数据科学家中最受欢迎的编程语言,你可能不会感到惊讶。但是如果我问你他们最常用的第二语言是什么呢?
作者图片
如果你的答案是 SQL,那你就答对了!SQL 或结构化查询语言是一种简单但功能强大的语言,它的命令可以分为四个主要功能:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)和数据查询语言(DQL)。
它向我们展示了数据科学家的大部分工作是通过在数据库中执行查询、转换、操作和分析来理解数据。
但是语言只是我们可以在数据科学家的工具箱中找到的工具之一。使用最多的数据库和机器学习框架呢?
作者提供的图片
我们可以看到,在这些关系数据库中, MySQL 是最受欢迎的,尽管其他如 PostgreSQL 和微软 SQL Server 似乎也是数据科学家的宝贵工具。
如果说机器学习框架的话,Python 的流行导致 Scikit-Learn 成为使用最多的框架,其次是 Keras 、 XGBoost 和 TensorFlow 。
薪水
作者图片
你可以是数据或业务分析师、数据科学家、数据或数据库工程师。如果你住在美国,你很幸运。那是你更有可能获得更高薪水的地方。
对于数据科学家来说,我们有一个特别的好消息。
作者图片
在所有这些职业中,数据科学家似乎是年底账户金额较高的职业。
然而,这不仅仅是好消息。
作者图片
尽管我们有相当多的人不愿意宣布他们的性别(在这一点上,我们必须说,Kaggle 允许自我描述性别,以防他们与男女选项无关),但我们可以看到,在那些宣布自己是这两种性别之一的人中,可悲但并不奇怪的是,女性似乎比男性获得的报酬更低。
教育程度 x 工资
如果你从第一部分就来到这里,我在这里让你冷静下来:尽管博士和硕士学位显然与更好的报酬有关,但看起来不管你的正式教育背景如何,如果你致力于学习必要的工具和概念,房间里有足够的空间给你。
作者图片
我们可以看到,大多数不同背景的人之间的工资差异并不是很大,这意味着尽管这可能是一条充满挑战的道路,但你肯定可以通过数据科学找到自己的路。
结论
通过这篇文章,我们对如何更好地理解现实世界中的数据科学家有了一个大致的了解,这里我们有一个迄今为止我们所见的快速简历:
- 尽管似乎有很多专业人士拥有硕士学位,但每个真正致力于成为有能力的专业人士的人都有一席之地;
- 学习工具和概念的一个好方法是参加在线课程,有很多选择,从大学提供的课程到与该领域最大的公司合作准备的课程;
- 如果你不知道该学哪种语言,Python 是个不错的选择,但是不要忘了 SQL。仍然是关于工具,Scikit-Learn、Keras、TensorFlow 和 MySQL 等数据库似乎在数据科学家中非常受欢迎;
- 数据科学是一个创新领域,但一些旧规则坚持保留下来:在同样的角色下,女性仍然比男性挣得少。但是往好的方面想,成为一名数据科学家可能是一个有利可图的选择。
在 data 与我们分享了所有这些故事之后,您是否已经决定从哪里开始您的数据科学之旅?
如果你已经走上了这条路,你今天会开始学习哪种新工具?
多伦多大学机器学习学生的 5 点心得
从经验中学习
多伦多大学斯卡伯勒校区——肯·琼斯在 UTSC 拍摄的照片
众所周知,多伦多大学是加拿大排名最高的大学之一,但并不是所有的校园都被平等对待。斯卡伯勒校区,我称之为 UTSC,是一个较新的校区,位于 GTA 的东端,提供各种合作项目供新生选择。大约 4 年前,当我申请大学时,我决定以合作计算机和数学科学学生的身份进入多伦多大学斯卡伯勒校区,目标是进入计算机科学(CS)项目(本科学习第一年后必须申请)。
以下是我在整个旅程中学到的五件事,以及我如何开始我的数据科学职业生涯:
1.校园选择
大家总是声称多伦多大学的名声完全是建立在圣乔治(市中心)校区的基础上。这种说法并非完全错误,因为大多数大学的排名是基于研究生项目而不是本科项目,圣乔治(UTSG)大学提供最受欢迎的硕士项目。然而,任何人都不应该低估“后代”校园的教育水平,包括斯卡伯勒(UTSC)和米西索加(UTM)校园。普遍的说法是,UofT 的两个新校区比圣乔治校区更容易被录取。这是千真万确的,不一定是因为市中心的校园好得多,而是因为 UTSC 和 UTM 都比较新,没有一百多年的学术声誉来支撑它们。
按校区招生—由多伦多大学 2017
毫无疑问,圣乔治校区提供了最多的课程可供选择,拥有最多的学生,当然还有令人惊叹的排名很高的教授。然而,如果适合你的专业课程是在一个较小的校园里提供的,并且你不介意一个不那么拥挤和更紧凑的校园,UTSC 或 UTM 可能是一个很好的适合你的地方。如果你担心你将接受的教育质量,不要!UofT 的大多数教授都在不止一个校区任教。也就是说,如果你听说过这位了不起的统计学教授在 UTSG 大学教授这门令人难以置信的课程,你可能会发现他们在 UTSC 大学也教授同样的课程。作为一名未来的计算机科学学生,毫无疑问,我想体验当实习生的经历,并在学习期间获得实践经验。考虑到这一点,我选择 UTSC 而不是 UTSG 的决定性因素是,前者提供合作项目。
2.合作计划的价值
什么是合作社?Co-Op 是一个允许学生在仍然是全日制学生的同时在一个行业相关的领域工作的计划。这给了学生们在一个学期的学校教育和一个学期的工作之间交替的机会。
科技行业竞争非常激烈,因为我们都生活在这个强大的数字时代,越来越多的人加入科技行业,因为它不需要任何强制性的大专教育,并提供相当有竞争力的工资。
克里斯·利维拉尼在 Unsplash 上的照片
当你毕业时,你将与成百上千的新毕业的学生竞争同一个入门级的技术工作。想想看,任何一个候选人如何在这么多的申请者中脱颖而出。假设有一个职位空缺,剩下两个申请人,你和与你有相同学习成绩和技能的人。招聘经理会选谁?现在考虑一下你在大学期间是否有过与行业相关的实践经验。毫无疑问,招聘经理会聘用有经验的人,而不是没有经验的人。然后,你将与一个小得多的申请者群体竞争,而不是与所有本科技术学生竞争,这个群体由所有具有相关经验的本科技术学生组成。
如果你正在寻找计算机科学或数据科学方面的职业,我怎么强调现实世界中与行业相关的经验在你本科期间的重要性都不为过。当然,你可以在夏季学期自己寻找实习机会,获得同样多的宝贵经验。然而,如果你想要更多的指导来寻找你的工作经验和一般的工作申请咨询(包括求职信和简历,以及关于个人品牌的一般提示),Co-Op 将是你的一个好选择。此外,一些实习生职位只对合作学生开放,这进一步缩小了申请人的范围,从而增加了你获得该职位面试的机会。
3.认识你的优势——从计算机科学到统计学
如前所述,我最初开始攻读本科学位的目标是进入 UTSC 的合作计算机科学项目,专攻软件工程。我记得我想这么做并不是因为我擅长编码,实际上我以前没有编程经验,而是因为 CS 非常流行,可以保证一个好的未来。不要误解我,这个主题非常有用,为你打开了许多大门,但我只是注意到我并没有像我希望的那样喜欢它。第一年后,我意识到我更喜欢统计学课程,并且比计算机科学课程表现得更好。对我来说幸运的是,UofT 给一年级学生提供了一套基于整个计算机和数学科学系的必修课程,而不是针对你希望申请该系的确切项目的任何课程。然后,我可以毫无困难地切换到统计程序。
我不仅发现我在统计学课程中学到的理论在现实世界中非常适用,我还注意到我非常喜欢处理庞大而杂乱的数据集。然而,我知道我想继续发展我的编程技能……所以我发现 UTSC 大学提供了一个统计学项目,重点是机器学习和数据挖掘。就这样开始了我的数据科学之旅。对于那些刚刚接触数据科学主题的人来说,该领域结合了传统数据分析和方法(统计学)的技能以及编程技能(计算机科学),从而从数据中发现一些潜在信息并估计未知情况。
4.建筑经验
在我获得第一个数据科学家合作职位之前,我曾是一名数据分析师合作伙伴。到目前为止,我所受的教育(在我最初几个工作任期申请工作时)和经验主要包括与数据测试和清理方法相关的统计理论,这些理论可以很容易地应用于可操作的数据。这与数据分析师的角色密切相关,数据分析师更专注于获得有意义的见解,以直接解决问题。另一方面,数据科学是一个更广泛的领域,包括专注于构建数据建模的新流程,创建算法等更复杂的问题。机器学习是数据科学家最常用的技术之一。因此,除了当时没有多少数据科学领域的知识之外,我还寻找了分析实习机会。
数据科学和数据分析的主要区别—图片来自 SISENSE
作为一名数据分析师,我工作了三个学期,终于有了足够的行业经验,开始考虑数据科学合作机会。在学习了机器学习算法及其背后的基本理论(以及过去的合作经验)后,我成功获得了第一份数据科学实习。
虽然我走了很长的弯路才获得数据科学职位,但这让我拓宽了数据应用方面的知识。有很多方法可以让你接近这个职业,这只是我个人的大学之旅。我鼓励你选择最适合自己、最符合你工作风格的路线。
5.我需要高等教育吗?
我申请的实习越多,我就越注意到全职数据科学家职位要求申请者拥有相关领域的硕士或博士学位。随着我对这个领域了解的越来越多,这样的要求对我来说就越有意义。数据科学需要各种各样的数据技术,因此需要更先进的理论来完成这项工作。然而,我知道这些知识不是你只能通过更高层次的教育才能获得的知识!事实上,许多公司规定,在该领域全职工作几年也同样有价值。我知道,如果你希望在正式研究、机器学习算法开发、深度学习等领域做出贡献,许多人会建议你攻读研究生学位。不过,我需要提一下,我还没有亲身经历过这种经历。当我在多伦多大学完成统计学的本科学位时,在机器学习和数据挖掘方面,我仍然在考虑自己的硕士学位。
我的第一个 EDA 项目的 5 个技术要点
在过去的两周里,我一直在做我的第一个涉及电影行业的数据探索项目。以下是我学到的五个技巧。请注意,正如标题所暗示的,我是数据科学的初学者,因此欢迎任何评论。
念多个。使用 glob 的 csv 文件
我从各种电影网站获得数据,包括 IMDB、电影数据库和烂番茄。第一项任务是把它们读到我们的笔记本里。一种简单的方法是使用 glob,它创建一个特定扩展名的所有文件的列表。
# Create a list of all csv files using glob
csv_files = glob("./zippedData/*.csv.gz")
**为什么有用:**这样可以节省时间,因为我们不必单独读取每个文件。如果文件夹中添加了其他数据,这些数据将自动添加到列表中。
另外,以下是我每次使用 glob 时想到的:
Jabba glob——来源:starwars.com
熊猫的 read_html()函数
作为我项目的一部分,我想从网上抓取额外的数据,比如维基百科上的网飞原创电影表。我不假思索地使用了 BeautifulSoup ,这是一个 Python 库,通过导航和搜索解析树从 HTML 文件中提取数据。
然而熊猫有一个read_html()
功能,可以帮我节省几个小时的工作。由于数据整齐地显示在一个表格中,用几行就可以得到一个近乎完美的数据框架。
后来,我还想要关于基于视频游戏的电影的数据,这次记得使用内置函数。
DF = pd.read_html('List of films based on video games - Wikipedia.html')
然后,由于我只对已发行的真人电影感兴趣,所以我限制在第一张表的前 38 行。
Videogamemovies = DF[0][:38]
**为什么这个有用:**省时又轻松!如果数据已经整齐地显示在表格中,这可能是从 web 上抓取数据的最佳方式。
一个热编码
在我们的数据集中,电影被分为三种类型。哪一个是主要类型并不明显,最好的方法是将每部电影归入其列出的每个类型。以下是我们的movies
熊猫数据框架的相关栏目。
首先,使用map()
以逗号分隔流派列中的值。然后,为每个具有零值的独特的单个流派创建额外的列。然后,我遍历流派列,将与电影流派匹配的列中的值更改为1
。
# Create columns with genres
for genre in individualgenrelist:
movies[genre] = 0# Set value to 1 if genre applies
for index, genres in enumerate(movies['genres']):
for genre in genres:
movies.loc[index,genre] = 1
使用枚举不是很有效,但由于时间限制,我无法找到更好的方法。如果你做了,请让我知道!
下面是结果的样子,显示了列Action
和Drama
。
**为什么这很有用:**这让我们不仅可以简单地对比如说Action
电影的数量求和,还可以创建比如说Action
和Adventure
电影的子数据帧。当我们考虑机器学习和预测分析时,以这种格式保存我们的数据将非常有用。
这里有一些熊猫!照片由 Ilona Froehlich 在 Unsplash 上拍摄
熊猫切()功能
Pandas cut()函数用于将一维数组元素分离到不同的容器中。当你有数字数据并希望转换成分类数据以便更好的可视化时,这是很有用的。在我的项目中,我正在调查一部电影的制作预算,并将数据分为“小预算”、“中预算”和“大预算”电影。过程很简单:创建 bin 和名称列表,然后让 Pandas.cut()完成这项工作,而不是进行迭代。
# Create bins and names lists
bins = [0, 100000000, 200000000, np.inf]
names = ['Low','Medium', 'High' ]# Use pd.cut() to create budgetrange column
movies['budget_range'] = pd.cut(movies['production_budget'], bins, labels=names)
**为什么这很有用:**创建分类箱将使数据可视化和研究特征变得更容易。使用pd.cut()
效率高。
西伯恩的计数图
计数图使用条形显示每个分类箱中的观察值数量。它可以被视为分类数据的直方图。虽然这当然可以“手动”实现(例如,通过使用关键类别和值计数的字典进行迭代),但使用 Seaborn 的快速可视化功能要快得多。
# Plot number of movies released per decade
sns.catplot(x = 'decade', kind = 'count', data = movies)
**为什么有用:**直观显示分类数据分布的快速简单的方法。
这就是你要的,我将带着这五点去做我的下一个项目。
如果你有兴趣看我的电影项目,什么类型的电影票房最好,请查看我的 GitHub 资源库。
学者成为数据科学家需要知道的 5 件事。
从学术界到工业界的转变可能会很艰难。管理者和前学者需要认识到这两个世界的不同。
如果这就是你心目中的工作环境,那么你会学到很多教训。
这个是私人的。年轻时的我,在他离开学术界后的第一份工作中,被解雇了。是的,即使作为一名牛津大学的前博士后研究员,以及数学和统计学的大学讲师,我还是被送上了路!
他们不知道我是谁吗?
原来他们知道我是谁。我是一个已经做了一年的巨大的马尔可夫链蒙特卡罗分析的人,却没有产生任何价值。事实上,它正在使用最新的融合诊断和最先进的降维方法,这意味着一个甜蜜的脂肪什么都没有。因为他们也知道自己是谁——一家无法承载非生产性员工的初创小公司。
但是*#我很聪明*?显然不是。
当然,对我的年轻人的自尊心的打击是不愉快的,但是,哼哼,它最终被证明是一件好事。我们从错误中学到的比从成功中学到的多,对吗?这就是为什么所有有经验的数据科学家都知道这么多。现在我在管理岗位上,我不断看到其他学术界人士犯了和我一样的错误。因此,如果你要离开学术界进入数据科学领域,你应该知道以下 5 件事。
- 没有人(我的意思是没有人!)在乎你有多聪明。
我明白了。要获得博士学位,你必须是那些一生都在学业上表现优异的孩子中的一员。你会在学校名列前茅,去一所很棒的大学,在那里你会做得很好。当你快 30 岁的时候,几乎你的整个生活都会被一系列的人告诉你,你会做得很好,因为你很聪明。所以你一直试图证明你很聪明,所以更多的人告诉你你很聪明,如此循环往复。
直到现在。
看,整个学校到学术界的系统确实是一团糟,但那是以后的事了。在这里,你只需要知道,没有人在乎你有多聪明,他们只在乎你有多有用。
明白了吗? 有用不聪明!
如果你真的感到恶心,你可以马上停止阅读,因为所有其他的事情都会自然而然地发生。然而,如果你是那种认为自己很棒的人,那么你可能应该继续读下去。我觉得你听起来有点聪明…
2.有用和写论文不一样。
现在你可能会对自己说,“对,知道了,让我们有用吧。好的,我们在公司使用这种技术来做那件事,我读了这篇关于这种略有不同的技术的论文。所以如果我在公司的事情上使用这种不同的技术,那么我就是有用的。因为这是公司的事情。”然后你去告诉你的经理你要这么做,他们看着你,好像要掐死你一样。这让你感觉很糟糕。
这种行为方式似乎很熟悉,因为这是学者们接受的训练。从一个领域获得一项技术并应用到你自己的领域是获得出版物的一个简单方法。坦率地说,在学术界,它甚至不必比现有的技术更好。它必须是新颖的。
你的经理根本不关心小说。你刚刚告诉他们,你将花一段未知的时间来试验一种未经证实的技术,这种技术可能会也可能不会改进一个已经令人满意的解决方案。你想知道他们为什么不热情?
在这方面有一种变化,数据科学家在公司里搜寻,试图找到一个几乎足够容易解决的问题,但只需要令人愉快的深入思考。在某些情况下,数据科学家可能会做一些勉强可以的事情,但很少会有有用。这是因为做这件事的动机并不是真的有用。深刻的思考才是真正的动力。这又是一种在学术界得到奖励的行为。通过解决难题来显示你的聪明才是关键。你的经理不在乎。
3.找出如何变得有用是工作的一部分。
好吧,你已经打破了那些学术习惯,但你发现自己不知所措。如果这些人不希望你像他们训练的那样,那么他们到底想要什么?
首先,放松。你薪水的一部分是用来找出什么是有用的,什么是无用的。困难在于没有两个环境是相同的,所以无论我的建议是什么,你都必须自己想办法。然而,这里有三个原型供你思考。
首先是混乱的产品环境。在这种环境下,你会有很多产品人员跑来跑去,说“我们想尽快做这件事,但我们不知道这是否可能”。现在这可能听起来像是一个困难的地方,但是只要做一些有用的事情,它实际上是最容易的!找一个看起来正常的产品人员,和他们成为好朋友,做他们想做的事情。他们应该是自己产品的专家,了解产品的潜在市场,因此真正知道什么有用,什么没用。换句话说,你只是把工作中“如何变得有用”的部分外包给了别人。你现在要做的就是造出那个有用的东西。你很擅长这个,对吧?
其次是“提高数字”类型的环境。您通常会在拥有成熟数据科学团队的公司中发现这些问题。在这种情况下,你或你的团队将拥有一项服务,它接收数据,进行一些数学运算,并输出一些东西,通常是预测。会有一个数字来衡量这个东西的质量,你必须提高这个数字。
现在听起来“想出如何变得有用”已经完成了!提高数字,笨蛋!可惜,事情没这么简单。你必须在尽可能短的时间内找出最能提高数字的东西。对一个前学者来说,诱惑是退回到旧的行为方式,应用一些你读过的新技术。然后,经过几个月的努力,你意识到新方法几乎没有改变数字。这里要做的正确的事情是分析实际的失败案例,并认真和诚实地思考什么可以解决最多的失败案例。(我的预测是:改进数据总的来说会胜过更复杂的方法。)关键是,你必须认真思考什么能真正提高这个数字,这可能会涉及到愚蠢和无聊的工作。不要只想着一个漂亮闪亮的新东西,然后期待最好的结果。
最后,还有功能失调的环境。你会认识到这些,因为没有人真正知道他们为什么在那里,或者他们应该做什么。这有很多原因。也许公司里有人知道他们需要数据科学,但不知道为什么。也许有线索的人离开了,现在有一个悬而未决的团队没有家。偶尔会有一个研究团队在他们的研究与公司使命有任何关联的时候仍然存在。如果你遇到这种情况,你就有麻烦了。你能做的最好的事情就是通过接触你的直接团队之外的产品人员,试着把它变成第一种环境。然而,在某些情况下,你可能需要重新整理 linkedin 的个人资料。
4.依靠他人
你不应该试图一个人有用。在学术界,尤其是作为一名博士后,你是一个人的乐队,被期望成为数学家、作家、平面设计师、程序员、公共演说家……名单还在继续。此外,在一个非常严格的等级制度中,你与周围的人激烈竞争非常少的工作,这在 19 世纪晚期的普鲁士人看来可能是有意义的。这一切造就了一个奇怪而孤立的工作环境,在这个环境中,人们为了生存而发展出自负的自我。更糟糕的是,学术界有一种文化假设,认为聪明的人会留在学校读 A-level,最聪明的人会去读本科,最聪明的人会去读研究生,最聪明的人会留在学校做博士后,等等。
你需要放下这一切。首先,如果我回想一下我在本科/研究生过渡时期的经历,最聪明的人肯定不会继续攻读博士学位。这意味着他们就在工作场所,不需要你的任何# I very smart 废话。更积极的是,这也意味着他们可以帮助你做所有你知道自己不擅长的事情。事实上,工作生活的最大乐趣之一就是在一个有凝聚力、运转良好的团队中,每个人都扮演自己喜欢的角色。
所以,不要做那种无聊地对同事的工作说教的人。相反,把它当成一个机会,和其他与你想法稍有不同的伟人一起工作,向他们学习。
5.在工作场所,少量的偏执是健康的。
现在是 2020 年,尽管资本主义创造了许多奇迹,但它是一头无情的野兽。这种“有用”的东西依赖于对已知的当前成本和估计的未来收益的客观计算。你是一个已知的当前成本。一旦你的成本超过你估计的未来收益,你就有麻烦了。
因此,不幸的是,你需要担心一下公司未来会从你那里得到什么好处。当然,还没到你因恐惧而失眠和瘫痪的程度。但足以让你集中注意力。你不在学术界,那里的人要么有任期,很少被解雇,要么有定期合同,从来没有被解雇。
这是对事物现状的描述,而不是对事物应该如何的判断。我只想说,如果你认为(或者,更糟糕的是,你的经理告诉你)一切都很好,每个人都可以在下午 5 点打卡下班,那么你的团队就有麻烦了。这种麻烦涉及到拥有漂亮皮肤的工商管理硕士、整洁得令人生疑的发型,以及为大幅削减预算提供依据的电子表格。
原来如此。离开学术界进入职场时,我希望知道的 5 件事。如果你还能想到什么,或者有什么不同意见,请在评论中提出来!
脚注
哦,是的,今天的孩子们,事实证明深度神经网络并不是第一个出现的技术,它通过承诺逼近世界上的任何函数而产生了很多兴奋,但后来证明它不是万能的灵丹妙药。当然,我意识到我在这里放弃了我的年龄。
开始学习数据科学时,我希望知道的 5 件事
到目前为止,我在数据科学之旅中学到的见解
wayhomestudio 创作的咖啡照片—www.freepik.com
两年来,我一直在独自研究数据科学概念,通过这次旅程,我获得了许多见解,我想与正在起步的新数据科学家分享。
你可以随意从这篇文章中得到你想要的,但是我只是简单地分享我的观点给那些有点迷茫并且想要更多指导的人。话虽如此,以下是我希望在开始学习数据科学时就知道的 5 件事:
1)在成为一个好的数据科学家之前,先努力成为一个好的程序员和好的统计学家。
如果你读过我以前的文章,你可能已经听过我这么说——数据科学家实际上是一个利用编程来实现统计方法的现代统计学家。
理解这些基本原理会让你的生活轻松很多,从长远来看,实际上还会节省你的时间。几乎所有的机器学习概念和算法都是基于统计和概率的,除此之外,许多其他数据科学概念,如 A/B 测试,也是纯统计的。
最终,作为一名数据科学家,你有多优秀会受到你在编程和统计方面知识水平的限制。
查看我以前的文章《 如果我可以重新开始,我会如何学习数据科学》》,以获得这方面的更多指导。
TLDR:在学习其他任何东西之前,要有良好的编程和统计基础。从长远来看,这会节省你更多的时间。
2)少花点时间在在线训练营上,多花点时间在个人数据科学项目上。
我知道对你们中的一些人来说,这可能是一个有争议的声明,所以让我先说几件事:
- 这完全是基于我的轶事证据以及我对同龄人的观察。
- 显然有一些令人惊叹的在线课程/训练营没有包括在我的概括声明中,比如 deeplearning.ai 的课程。
- 我还想说,如果别无选择,你最好去参加训练营。
也就是说,在线训练营有几个问题。
- 就材料的深度而言,它们往往是非常肤浅的,不仅如此,它们还会给人一种对所学材料理解的错觉。
- 他们也倾向于而不是很好地保留信息。我想你会同意,你花在学习一门学科上的时间越多,你就越有可能记住信息。这些训练营的问题在于,尤其是那些标榜“在 5 周内成为专家”的训练营,它们没有给你足够的时间来真正沉浸在你所学的东西中。
- 最后,他们通常倾向于而不是足够有挑战性。很多训练营和课程只是让你跟着做,复制他们的代码,这并不需要你进行批判性和深入的思考。
为什么你应该从事个人数据科学项目。
个人数据科学项目是一个很好的学习方式,因为你将被迫独自批判性地思考问题和解决方案。
通过这个,你会学到比任何训练营都多的东西。您将学习如何提出正确的问题,如何在谷歌上搜索正确的问题,如何着手为您工作的数据科学项目,如何有条不紊,等等…
通过更多地投入到自己的项目中,你也会更有动力去学习更多的东西,投入更多的时间,创造一个积极的反馈循环。
TLDR:少花点时间参加数据科学训练营,多花点时间做个人数据科学项目。
需要一些想法来开始?请查看我的文章,“ 14 天隔离期间要做的 14 个数据科学项目 ”。
3)专注于精选的几个工具,并真正擅长它们。
有这么多数据科学包和工具,这很酷,因为您可以以适合自己的方式个性化您的数据科学工具包。
然而,想要学习尽可能多的包和工具很容易被冲昏头脑。不要犯这个错误。
精通一些工具比使用一些你几乎没花时间使用的工具涉猎皮毛要好得多。(在简历上列出技能和工具的清单不应该是最终目标!)
举个例子,有几个很棒的数据可视化软件包:Matplotlib、Seaborn、Plotly、Bokeh 等。没有必要花时间去掌握其中的每一个,这是在浪费你宝贵而有限的时间。
再比如,如果你想用熊猫操纵数据,那就好好用熊猫。如果你是那种比较傻的人,那就去吧。是的,理想情况下,你想擅长熊猫和熊猫,但我的观点是,坚持一个并掌握它,而不是不停地跳来跳去,这可能是一个好主意。
同样的事情发生在…
- Python vs R
- 张量流 vs Pytorch
- Postgresql vs MySQL
- 这份清单还在继续…
TLDR:建立你的数据科学工具包,并坚持下去!掌握 5 种工具比勉强知道如何使用 20 种工具要好。
4)了解各种机器学习算法只占数据科学的一小部分。
就个人而言,让我进入数据科学的是所有不同的机器学习模型,它们如何工作,以及它们在哪些应用中有用。我可能花了至少六个月的时间来学习和涉猎几个机器学习模型,只是意识到这只是数据科学家需要知道的一小部分。
数据建模只是整个机器学习生命周期的一部分。您还需要了解数据收集、数据准备、模型评估、模型部署和模型调整。事实上,我会说,大部分时间花在数据准备上,而不是数据建模(机器学习建模)。
除此之外,你还需要学习其他一些东西,比如版本控制(Git),从 API 中提取数据,理解云,等等。
TLDR:不要把所有的时间都花在试图掌握每一种机器学习算法上。它只占数据科学家需要了解的一小部分。
5)作为一名数据科学家,感到冒名顶替综合症是很常见的。
从我开始学习数据科学的第一天起,直到今天,我定期经历冒名顶替综合症。但是我知道这是完全正常的。
为什么数据科学家觉得冒名顶替综合征很普遍也没什么?
- “数据科学”是一个模糊的术语,因为它是一个跨学科领域,包括统计学、编程、数学、业务理解、数据工程等。最重要的是,数据科学家有很多同义词(数据分析师、数据工程师、研究科学家、应用科学家)。我的观点是,你永远不会成为数据科学涵盖的所有领域的专家,你也不应该觉得自己必须成为专家。
- 像编程和技术中的其他事物一样,数据科学也在不断发展。20 年前,熊猫还没有被创造出来。Tensorflow 年前才发布。总会有新技术出现,因此你必须学习新的东西。
- 这和我的第一点有点关系,但是因为你很可能不是所有事情的专家,这意味着总会有人在你花费较少时间的事情上做得更好。这也没关系。
TLDR:作为一名数据科学家,你总会有冒名顶替综合症的感觉,这没什么。
感谢阅读!
通过阅读这篇文章,我希望我能够给你一些见解和有用的建议,这将有助于消除你的一些误解,并使你的数据科学之旅比我顺利得多!
我收到了对我更有见解的数据科学文章的非常好的反馈,这就是我写这篇文章的原因。像往常一样,如果你不同意我说的任何话,请有所保留。但是如果你喜欢它,请让我知道你还想让我写些什么。
我一如既往地祝你们在数据科学之旅中一切顺利!
特伦斯·申
- 如果你喜欢这个, 在 Medium 上关注我 获取更多
- 关注我的Kaggle了解更多内容!
- 我们连线上LinkedIn
- 有兴趣合作?查看我的 [网站](http://Want to collaborate?) 。
- 查看 我的免费数据科学资源 每周都有新素材!
我从高效机器学习项目中学到的 5 件事
图片由 Skitterphoto 为 Pixabay 拍摄
大多数机器学习项目都失败了。你如何确保你的高影响力项目的成功?
我已经从事计算机视觉和机器学习项目大约十五年了——最近是在病理学和遥感应用方面。以下是我学到的一些东西。
1。数据很重要——而且可能很混乱
机器学习依赖于训练数据。在监督学习的情况下,数据和模型将在新示例上预测的相关标签集。
训练样本的数量是能够训练出好模型的关键因素。当可用于训练复杂模型的训练示例太少时,模型就会过度拟合,而不会推广到看不见的数据。但是在医学成像应用中,我们通常只能得到几百张图像。几千幅图像可能被认为是一个大数据集。这使得训练一个好的模型具有挑战性,并且可能需要专门的技术。
但是数量不是唯一的因素。我目前正在进行一个项目,通过卫星图像预测发电厂的排放。我们真实数据的质量真的很重要。我们需要确保每个发电厂的地理位置是正确的,并且该位置正确地映射到描述发电厂正在燃烧的燃料类型的数据库,以及提供排放读数的时间序列的不同数据库。如果这些映射中有任何一个不正确,那么垃圾输入就会转换成垃圾输出。
数据的数量和质量对于成功的机器学习解决方案都至关重要。而且,在许多情况下,两者都不容易实现。
2。这需要一个团队——不仅仅是建立一个机器学习模型
从上面的电厂示例中可以看出,需要大量的数据处理基础设施来形成一组用于训练模型的观察值。再加上一个完全不同的基础设施来获取每个发电厂的遥感图像。甚至在进入机器学习模型本身之前,这些都是必需的。从不同的来源收集数据,对其进行清理,标记异常以进行更详细的检查,并将其整理成整洁的表格。
我参与的大多数项目都雇佣了各自领域的跨学科专家。不仅仅是机器学习科学家或工程师,还有数据分析师和软件工程师。
我们的电厂项目包括多个遥感科学家和电厂专家。我从事的许多病理学项目都是与病理学家、遗传学家、流行病学家、生物统计学家以及许多其他人合作的,这取决于项目。
对于如此多样化的团队来说,沟通变得至关重要,但对于为机器学习构建可扩展且健壮的基础设施来说,沟通也是必要的。
3。该算法可以产生不同的效果——尤其是在产生影响时
第三点我终于开始做模特了!
你会读到很多文章声称简单的算法就足够了;最好把重点放在数据管道上。
对于许多应用来说,这可能是真的。比方说为了增加广告收入。一个简单的机器学习算法可能会让你达到目标,并增加 10%的销售额——或者更好,50%。太好了!
但是,如果你正在开发一个可以让自动驾驶汽车更安全、缓解气候变化或更好地治疗癌症的应用程序,该怎么办?花时间和金钱去完成一项任务,哪怕只是比以前可能完成的任务好一点点,这值得吗?我会这么说。
一个平庸的算法和一个优秀的算法之间的区别对某些人来说可能是生死攸关的。
我还参与了一些任务,在这些任务中,一种简单的算法无法区分两种类型的癌症——但一种新的算法(在这种情况下,是深度学习)可以以合理的准确度做到这一点。关键是更强大的特征提取方法。
对于高影响力的应用程序,数据管道和模型都应该值得努力。首先从简单的机器学习算法开始,并从那里前进。
一些应用需要更专业的算法来处理独特的复杂情况,如千兆像素图像、弱标签或图像中的异质性。
4。模型验证和推广至关重要
正确验证模型性能是理解模型对未知数据进行归纳的能力的关键。
对于病理学而言,这可能需要对在不同医院收集、由不同实验室处理或由不同扫描仪成像的样本进行检测。这些因素都会改变图像中组织的外观。在来自一个实验室的图像上训练的模型可能在来自该实验室的其他图像上表现良好,但是在来自不同实验室的图像上测试时表现不佳。
然而,影响性能的不仅仅是图像采集。对不同人群的患者进行培训和测试也会带来问题。也许训练人群倾向于在后期诊断出癌症。该模型可能没有见过太多的低级别肿瘤,因此在测试集上表现不佳。
泛化能力不仅仅适用于医学数据。对于上述发电厂排放项目,我们在选定的几个拥有真实排放数据的国家训练模型。然而,我们的模型有望推广到全球所有发电厂。我们需要小心地选择特征来训练我们的模型,我们还需要寻找方法来验证我们的预测。这可能采取按国家收集年度排放量估计的形式,即使我们无法验证我们各自的预测,也要进行核对。
在缺乏独立测试且可用数据相对较少的情况下,交叉验证是评估模型性能的良好起点。然而,一个单独的测试集将是必要的,以真正理解算法将如何执行其预期的用例。
5。考虑用例
图片来自希瑟时装公司授权的 Shutterstock
最后,在开发机器学习解决方案时,要考虑到它的最终用例,这一点很重要。虽然这适用于所有应用,但对于医疗用例尤为重要。
这一点也与验证有关。虽然最初的概念验证可能在简单的测试数据集上进行验证,但最终需要在真实环境中进行测试。这不应该仅仅是算法性能与人类专家性能的比较。
人工智能将如何使用?它是否能识别图像区域,以便病理学家或放射学家更详细地查看?它会检查医生的结果并通知可能的错误吗?或者它将执行不同的任务,例如筛查更复杂的视觉特征,并将结果提供给病理学家进行解释?
关于跨学科团队的第二点在这里也是相关的。该团队应该包括那些理解可能的用例并能确保在该环境中正确评估算法的人。
对于医疗应用,机器学习算法应该使我们能够做出更好的决策,最终改善患者护理和结果。
我是否错过了其他重要的课程?请在评论中分享你的见解。
关于作者
Heather D. Couture 是 Pixel Scientia Labs 的创始人,该实验室指导 R & D 团队利用人工智能更成功地对抗癌症和气候变化。
联系她,学习如何最大化你的图像和算法的影响。
我在 2020 年上半年每天发布一个数据学到的 5 件事
📊半年的数据分析工作,即
每日 Instagram 贴子 ft。数据即
来自@VeryData_365 的 Instagram 图库
2020 年,我的目标是每天在我的 Instagram 上发布一个很酷的数据可视化。我们的目标是从你所有惊人的数据中获得个人灵感,然后传递给其他人。我还想学习和理解所有不同的技术、图表和显示数据的方式。
六个月后,我浏览、分析并发布了超过 182 个不同的数据可视化。我学到了什么?
1)如果您正在寻找,数据可视化无处不在
因为我开始每天发布一个数据可视化,所以我开始寻找它们。你猜怎么着?它们在野外无处不在。找到他们非常容易。似乎每个应用程序、网站和公司都有一个“统计”页面。只要打开你的手机,这些页面有你熟悉的吗?
左上至右下:谷歌分析、iRobot Roomba、Medium、Instagram、苹果健康、苹果屏幕时间
数据正在成为我们日常生活的一部分。我们不断地看到图表并解释它们的含义。*随着大数据的兴起,数据可视化制作和理解也必须同步增长。*未可视化的数据仍然相对无用。我们看到这是极其真实的电晕病毒新闻。媒体一直在分享约翰·霍普金的仪表盘或者约翰·伯恩-默多克的乡村追踪。通过可视化显示,人类最容易消化数据。
我原以为每天很难找到值得分享的东西,但事实证明,决定分享什么更难!谷歌搜索、Instagram、FlowingData.com、Tableau Public、Twitter、Reddit、 Data Viz Society 等都让人们很容易找到美观、信息丰富的图表。
2)人们真的很喜欢地图
地图在数据可视化方面有双重功能。第一,他们以一种每个人都能理解的熟悉方式非常好地描绘了多维度。第二,他们允许观众将数据联系起来。它让用户通过说“哦,我住在这里…这是我妈妈住的地方…哦,伙计,看看约翰尼住的地方发生了什么。”它允许数据个性化。
例如,我目前正在我的任天堂 Switch 上玩动物穿越。这很有趣,但更重要的是,这是令人难以置信的治疗和放松。我通过谷歌趋势数据和繁荣制作了这张地图,以显示哪些州对这个游戏最感兴趣。结果呢?西海岸喜欢它!俄勒冈州?真的很喜欢!你所在的州喜欢动物穿越吗?
来自我的 Instagram 的动物穿越搜索地图
3)人们对动画数据感到惊讶,即
动画是有趣的,有意思的,有知识性的。数字时代,视频为王。将图表转化为视频证明了对于一个参与的观众。
以我制作的这张愚蠢的动画图表为例,它显示了网飞原版电影在发行后几天内的成功程度。这张小图在抖音获得了超过 17 万的点击率(个人记录)!事实证明,这也是我在 Instagram 上浏览、点赞和保存最多的帖子之一。声音开启以获得完整体验😉
网飞的原始比较(由 fluore 制作,数据来自 Google Trends)
4)人们喜欢黑暗模式
当黑暗和光明模式的争论在上激烈进行时,我是黑暗模式的超级粉丝。虎王动画是黑屏和大粉丝的最爱…但其他人呢?人们似乎更喜欢深色背景的图表,还是更干净的白色?
虽然我对此没有任何具体的分析,但我有自己的经验证据表明,黑暗模式至少在 Instagram 上更受欢迎。
来自我的 Instagram 的见解
这张截图显示了我在 Instagram 上最喜欢的帖子。我的前十名中有八名是黑暗模式。相关还是因果关系?我没有统计测试来证明这一点,但我相信。胜利的黑暗模式!
这很有趣,因为大多数数据可视化工具默认以白色背景开始。有没有证据表明从深色背景开始会让你的视觉更有趣?
请注意,本文中的第二点在这里有效;前十名中有五个是地图。
5)人们对极坐标图很感兴趣
数据专业人士通常不喜欢极坐标图,但公众似乎真的很喜欢它们。
《圣经》中这个惊人的情感分析图表让人们很感兴趣:
谷歌新闻实验室探索食物节奏的这些图也是如此。
羽衣甘蓝的节奏(好消息实验室
我认为一般人都认为圆很有美感。我还认为图表和图形通常主要被认为是矩形的。几何图形的改变很有趣,也很容易理解,同时保持了影响力
还有一半路程
虽然过去的 182.5 天很棒,但我对未来的 182.5 天感到兴奋。仍然有主题要探索,有工具要学习,有大量的数据要分享和启发。
请和我一起踏上这段旅程!给我发一些你自己的数据可视化。从他人的作品中获得灵感。让我们一起学习吧!
关于 Python 函数要知道的 5 件事
是时候编写结构良好的程序了
由 David Clode 在 Unsplash 上拍摄的照片
函数是重用程序代码的有效方法。使用函数的好处是节省空间,我们选择的名字使我们的程序易于阅读。函数可以在没有输入的情况下定义,并且不一定需要产生输出。
python 中有许多内置函数[但是我们可以创建自己的函数。](https://docs.python.org/3/library/functions.html)
在 python 中,函数是使用def
关键字定义的。
>>> def myfunc():
print("Python functions are easy to learn.")>>> myfunc() #calling function
'Python functions are easy to learn.'
函数主要帮助你构建你的程序。最好将长程序分解成函数,每个函数都有自己的用途,使其结构透明,如下所示:
data = extract_data(source)
results = analyze(data)
present(results)
恰当地使用函数使程序更具可读性和可维护性。此外,在不关心程序其余部分的情况下,对一个函数进行修改更容易。
在本文中,我们将讨论五个主题,我认为这些主题对于了解函数非常重要。这些主题将帮助您更好地理解函数。
1.变量作用域
函数定义为变量创建新的局部范围。当一个新变量在函数体内赋值时,它只在函数内部定义。变量在函数外部不可见。所以我们在定义变量的时候可以选择任何名字,而不用关心函数之外的变量。
例如
>>> x = 10
>>> def myfunc():
x = 5
在上面的函数中,变量x
在函数外赋给10
,在函数内赋给5
。现在,当我们在函数外打印 x 时:
>>> x
10
变量 x 在函数外不会改变,因为函数内定义的x
的范围仅限于函数本身。
2.参数类型
自变量也称为参数,用于将信息传递给函数。有两种类型的论点:
- 关键字参数: 在函数调用中以标识符(
key1 = value1
)开头的参数,或者在以**
开头的字典中作为值传递的参数。
ratio(numerator=10, denominator=4)
ratio(**{'numerator':10,'denominator':4})
- 位置论点: 不是关键字论点的论点。该值被直接传递到一个函数中,该函数的位置表示函数中的一个变量。它也可以作为前面带
*
的 iterable 的元素来传递。
ratio(10,4)
ratio(*(10,4))
3.作为参数的函数
有趣的是,我们也可以将函数作为参数传递。例如,我们可以将内置函数len()
或用户定义的函数vowel_present()
作为参数传递给另一个函数:
>>> sent = ['Python', 'functions', 'are', 'amazing']
>>> def execute_func(prop):
return [prop(word) for word in sent]
>>> execute_func(len)
[6, 9, 3, 7]
>>> def vowel_present(word):
... for x in word:
if x in 'aeiou':
return True
return False>>> execute_func(vowel_present)
[True, True, True, True]
4.参数类型检查
Python 函数不要求我们指定输入参数的类型。所以在执行函数之前,有必要检查输入变量的类型。
def is_vowel(char): #Returns True if char is vowel, False otherwise.
if char in 'aeiou':
return True
else:
return False>>> is_vowel(5)
False
例如,在上面的函数中,没有指定number
的数据类型,但是我们希望变量的类型为长度为 1 的str
。然而,如果我们传递一个整数变量,函数就会执行并返回False
。
为了避免执行并引发错误,我们可以像这样使用assert
函数。
def is_vowel(char):
assert(isinstance(char, str)) #raises error if not satisfied
assert(len(char)==1) #raises error if string not of length 1
if char in 'aeiou':
return True
else:
return False
如果assert
语句失败,它会产生一个错误,函数会暂停执行。
5.记录功能
很好的做法是记录描述其用途的函数,并在函数定义的顶部使用 docstring 提供它,如下所示:
def is_vowel(char):
'''Takes a string input of length one and returns True if vowel, False otherwise''' assert(isinstance(char, str))
assert(len(char)==1)
if char in 'aeiou':
return True
else:
return False
运行help
函数可以找到任何函数的 Docstrings。也可以使用属性__doc__
来检索它。
>>> help(is_vowel)
Help on function is_vowel in module __main__:is_vowel(char)
Takes a string input of length one and returns True if vowel, False otherwise>>> is_vowel.__doc__
'Takes a string input of length one and returns True if vowel, False otherwise'
尝试运行help(sklearn)
来获取 sklearn 库的 docstring。
在本文中,我们主要讨论了函数的应用以及它们如何帮助构建结构良好的程序。在下一篇文章中,我们将讨论 python 模块以及它们如何帮助高效编程。
PyCaret 中你做错的 5 件事
来自 PyCaret 的创造者
本·怀特在 Unsplash 上的照片
PyCaret
PyCaret 是一个用 Python 编写的开源、低代码的机器学习库,可以自动化机器学习工作流。它是一个端到端的机器学习和模型管理工具,可以加快机器学习实验周期,让你更有效率。
与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,可以用来替换数百行代码。这使得实验快速有效。
官方:【https://www.pycaret.org】T4
文件:https://pycaret.readthedocs.io/en/latest/
https://www.github.com/pycaret/pycaret
👉compare_models 做的比你想的更多
当我们在 2020 年 4 月发布 py caret 1.0 版本时, compare_models 函数正在比较库中的所有模型,以返回平均的交叉验证性能指标。在此基础上,您可以使用 create_model 来训练性能最佳的模型,并获得可用于预测的训练模型输出。
这种行为后来在 2.0 版中有所改变。 compare_models 现在根据 n_select 参数返回最佳模型,该参数默认设置为 1,这意味着它将返回最佳模型(默认)。
比较模型(n_select = 1)
通过将默认的 n_select 参数更改为 3,您可以获得前 3 个模型的列表。例如:
比较模型(n_select = 3)
返回的对象是训练好的模型,你真的不需要再调用 create_model 来训练它们。如果愿意,您可以使用这些模型来生成诊断图,甚至将其用于预测。例如:
预测模型函数
👉你认为你仅限于 scikit-learn 模型
我们收到很多请求,要求将非 scikit-learn 模型包含在模型库中。很多人没有意识到,你并不仅限于默认的模式。 create_model 函数除了接受模型库中可用模型的 ID 外,还接受未训练的模型对象。只要你的对象与scikit-learnfit/predict API 兼容,它就能正常工作。例如,这里我们通过简单地导入未训练的 NGBClassifier,从 ngboost 库中训练并评估了 NGBClassifier :
使用外部模型创建模型
也可以通过 compare_models 的 include 参数中的未训练模型,就可以正常工作了。
将模型与未训练的对象进行比较
请注意,包含参数包括来自模型库的三个未训练模型的 ID,即逻辑回归、决策树和 K 个邻居以及来自 ngboost 库的一个未训练对象。另外,请注意,索引表示在 include 参数中输入的模型的位置。
👉你不知道 pull()函数
所有训练功能(创建模型、调整模型、集合模型等。)显示一个乐谱网格,但它不返回乐谱网格。因此,你不能在一个像 pandas.DataFrame 这样的对象中存储分数网格。但是,有一个名为 pull 的函数允许你这样做。例如:
带 create_model 的拉函数
当您使用 predict_model 函数时,这也适用于维持分数网格。
带预测模型的拉函数
现在,您可以像熊猫一样访问指标。DataFrame,你可以创造奇迹。例如,您可以创建一个循环来训练具有不同参数的模型,并使用以下简单代码创建一个比较表:
创建 _ 模型和拉功能
👉你认为 PyCaret 是一个黑盒,它不是。
另一个常见的困惑是,所有的预处理都是在后台进行的,用户无法访问。因此,你不能审计当你运行设置功能时发生了什么。这不是真的。
PyCaret get_config 和 set_config 中有两个函数允许您在后台访问和更改一切,从您的训练集到您的模型的随机状态。您可以通过简单地调用 help(get_config) 来查看 get_config 函数的文档,以查看您可以访问哪些变量:
帮助(获取配置)
您可以通过在 get_config 函数中调用该变量来访问它。例如,要访问 X_train 转换的数据集,您将编写以下代码:
get_config('X_train ')
您可以使用 set_config 功能来更改环境变量。有了目前为止你所知道的关于 **pull、get_config、**和 set_config 函数、你可以创建一些非常复杂的工作流。例如,您可以对维持集 重新采样 N 次 来评估平均性能指标,而不是依赖于一个维持集:
import numpy as npXtest = get_config('X_test')
ytest = get_config('y_test')AUC = []for i in np.random.randint(0,1000,size=10):
Xtest_sampled = Xtest.sample(n = 100, random_state = i)
ytest_sampled = ytest[Xtest_sampled.index]
set_config('X_test', Xtest_sampled)
set_config('y_test', ytest_sampled)
predict_model(dt);
AUC.append(pull()['AUC'][0])>>> print(AUC)**[Output]:** [0.8182, 0.7483, 0.7812, 0.7887, 0.7799, 0.7967, 0.7812, 0.7209, 0.7958, 0.7404]>>> print(np.array(AUC).mean())**[Output]: 0.77513**
👉你没有记录你的实验
如果你没有记录你的实验,你应该现在就开始记录。不管你是否想使用 MLFlow 后端服务器,你仍然应该记录你所有的实验。当你执行任何实验时,你会产生大量的元数据,而这些元数据是不可能被手动跟踪的。
当您使用 get_logs 函数时,PyCaret 的日志功能将生成一个漂亮、轻量级、易于理解的 excel 电子表格。例如:
**# loading dataset**
from pycaret.datasets import get_data
data = get_data('juice')**# initializing setup**
from pycaret.classification import *s = setup(data, target = 'Purchase', silent = True, log_experiment = True, experiment_name = 'juice1')**# compare baseline models**
best = compare_models()**# generate logs**
get_logs()
获取日志()
在这个非常短的实验中,我们已经生成了 3,000 多个元数据点(指标、超参数、运行时间等。).想象一下,您会如何手动跟踪这些数据点?也许,这实际上不可能。幸运的是,PyCaret 提供了一种简单的方法。只需在设置功能中将 log_experiment 设置为真。
使用 Python 中的轻量级工作流自动化库,您可以实现的目标是无限的。如果你觉得这有用,请不要忘记给我们 GitHub repo 上的⭐️。
想了解更多关于 PyCaret 的信息,请关注我们的 LinkedIn 和 Youtube。
要了解 PyCaret 2.2 中所有更新的更多信息,请参见发行说明或阅读此公告。
重要链接
想了解某个特定模块?
单击下面的链接查看文档和工作示例。
关于 PyCaret 你不知道的 5 件事
来自 PyCaret 的作者
PyCaret
PyCaret 是 Python 中的一个开源机器学习库,用于在低代码环境中训练和部署有监督和无监督的机器学习模型。它以易用和高效著称。
与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,可以用来用几个单词替换数百行代码。
如果你以前没有使用过 PyCaret 或者想了解更多,这里的是一个很好的起点。
“在与许多日常使用 PyCaret 的数据科学家交谈后,我列出了 PyCaret 的 5 个鲜为人知但极其强大的功能。”Moez Ali
👉您可以在无监督实验中调整“n 参数”
在无监督的机器学习中,“n 参数”,即用于聚类实验的聚类数、异常检测中异常值的分数以及主题建模中的主题数,是非常重要的。
当实验的最终目标是使用无监督实验的结果预测结果(分类或回归)时,那么 pycaret.clustering 模块**、py caret . anomaly 模块、和 pycaret.nlp 模块、**中的 tune_model()函数就非常方便了。
为了理解这一点,让我们看一个使用" Kiva "数据集的例子。
这是一个微型银行贷款数据集,其中每行代表一个借款人及其相关信息。列“en”捕获每个借款人的贷款申请文本,列“status”表示借款人是否违约(默认= 1 或无默认= 0)。
您可以使用 pycaret.nlp 中的 tune_model 函数,根据监督实验的目标变量优化 num_topics 参数(即预测提高最终目标变量预测所需的最佳主题数)。您可以使用评估器参数(本例中为“xgboost ”)定义训练模型。这个函数返回一个训练好的主题模型和一个显示每次迭代的监督指标的视图。
👉您可以通过增加“n_iter”来改善超参数调整的结果
pycaret.classification 模块中的 tune_model 函数和 pycaret.regression 模块在预定义网格搜索上采用随机网格搜索进行超参数调整。这里默认的迭代次数设置为 10。
来自 tune_model 的结果不一定是使用 **create_model 创建的基础模型的结果的改进。**由于网格搜索是随机的,您可以增加 n_iter 参数来提高性能。请参见下面的示例:
👉您可以在 setup 函数中以编程方式定义数据类型
当您初始化设置功能**、**时,您将被要求通过用户输入确认数据类型。更常见的是,当您将脚本作为工作流的一部分运行或作为远程内核执行时(例如 Kaggle 笔记本),在这种情况下,需要以编程方式提供数据类型,而不是通过用户输入框。
参见下面使用“保险数据集的示例。
将 silent 参数设置为 True 以避免输入,category _ features参数将分类列的名称作为字符串, numeric_features 参数将数值列的名称作为字符串。
👉对于模型构建,您可以忽略某些列
在许多情况下,您可能不希望移除数据集中的某些要素,但希望忽略这些要素来训练机器学习模型。一个很好的例子就是聚类问题,您希望在聚类创建期间忽略某些特征,但是稍后您需要这些列来分析聚类标签。在这种情况下,您可以使用设置中的 ignore_features 参数来忽略这些特性。
在下面的示例中,我们将执行一个聚类实验,我们希望忽略**‘国家名称’和‘指标名称’**。
👉您可以在二进制分类中优化概率阈值%
在分类问题中,假阳性的成本和假阴性的成本几乎从不相同。因此,如果您正在优化一个业务问题的解决方案,其中类型 1 和类型 2 错误具有不同的影响,您可以优化概率阈值的分类器,以优化自定义损失函数,只需分别定义真阳性、真阴性、假阳性和假阴性的成本。默认情况下,所有分类器的阈值都是 0.5。
参见下面使用“信用数据集的示例。
然后,您可以将 0.2 作为 probability_threshold 参数传递给 predict_model 函数,以使用 0.2 作为正类分类的阈值。请参见下面的示例:
PyCaret 2.0.0 来了!
我们得到了数据科学界的大力支持和反馈。我们正在积极改进 PyCaret,并准备我们的下一个版本。 PyCaret 2.0.0 会更大更好。如果您想分享您的反馈并帮助我们进一步改进,您可以在网站上填写此表格或者在我们的 GitHub 或 LinkedIn 页面上发表评论。
关注我们的 LinkedIn 并订阅我们的 YouTube 频道,了解更多关于 PyCaret 的信息。
想了解某个特定模块?
从第一个版本 1.0.0 开始,PyCaret 有以下模块可供使用。点击下面的链接,查看 Python 中的文档和工作示例。
另请参见:
笔记本中的 PyCaret 入门教程:
你愿意投稿吗?
PyCaret 是一个开源项目。欢迎每个人都来投稿。如果您愿意投稿,请随时关注未决问题。dev-1.0.1 分支上的单元测试接受拉请求。
如果你喜欢 PyCaret,请给我们 GitHub 回购的⭐️。
中:https://medium.com/@moez_62905/
领英:https://www.linkedin.com/in/profile-moez/
推特:【https://twitter.com/moezpycaretorg1 T43
熊猫数据汇总的 5 个技巧
提高数据处理技能的实用技巧
在做数据分析的时候,能够熟练的聚合数据起到了很重要的作用。Pandas 提供了许多有用的方法,其中一些可能没有其他方法受欢迎。此外,即使对于众所周知的方法,我们也可以通过进一步调整它的参数或用其他方法补充它来增加它的效用。考虑到这些因素,如果你以前没有遇到过,这里有 5 个关于熊猫数据聚合的技巧:
作者图片
在这篇文章中,我将通过例子展示它们是如何有用的。我也希望这些技巧能帮助你写出清晰、简洁、易读的代码。
0.Python 设置🔧
我假设读者(👀是的,你!)拥有:
◼️访问并熟悉 Python,包括安装包、定义函数和其他基本任务
◼️使用 pandas 的工作知识,包括基本的数据操作。
如果你是 Python 新手,这个是一个入门的好地方。如果你以前没有用过熊猫,这个是一个很好的参考资料。
我在 Jupyter Notebook 中使用并测试了 Python 3.7.1 中的脚本。
1.数据📦
我们将使用 seaborn 的提示数据集来说明我的提示。
# Import packages
import pandas as pd
from seaborn import load_dataset# Import data
df = load_dataset('tips').rename(columns={'sex': 'gender'})
df
关于这个数据集(包括数据字典)的细节可以在这里找到(这个源实际上是针对 R 的,但是它看起来是指同一个底层数据集)。为了便于快速查阅,我在下面引用了他们的数据描述:
2.技巧🌟
📍技巧 1:对多变量计数/百分比使用 crosstab()
你可能已经熟悉这个系列函数:value_counts()
。运行df['day'].value_counts()
将给出日变量中唯一值的计数。如果我们在方法中指定normalize=True
,它将给出百分比。这对于单个变量很有用,但有时我们需要查看多个变量的计数。例如,如果我们想通过日和时间获得计数,一种方法是使用groupby()
+ size()
+ unstack()
:
df.groupby(['time', 'day']).size().unstack()
另一种更灵活的方式是使用crosstab()
:
pd.crosstab(df['time'], df['day'])
使用crosstab()
有一些好处。首先,很容易得到行和列的小计——我们只需加上margins=True
:
pd.crosstab(df['time'], df['day'], margins=True)
是不是很牛逼?其次,通过调整normalize
参数,我们可以很容易地得到百分比而不是计数:
pd.crosstab(df['time'], df['day'], margins=True, normalize=True)
在本例中,我们通过设置normalize=True
获得了表格百分比。这相当于将其设置为normalize='all'
。对于行百分比,我们使用normalize='index'
和normalize='columns'
表示列百分比。我们还可以进一步扩展列和行的变量集:
pd.crosstab([df['time'], df['gender']], [df['day'], df['smoker']],
margins=True)
发现crosstab()
后,我现在用熊猫的时候也经常用。
📍技巧 2:使用 groupby()和 describe()进行分组汇总统计
你可能已经知道了groupby()
和describe()
。但是你们一起用过吗?通过结合使用这两种方法,我们可以通过分类列中的唯一值来检查数值变量的汇总统计信息,只需一行代码,如下所示:
df.groupby('day')['tip'].describe()
我们可以看到提示的汇总统计如何在天进行比较。
📍技巧 3:使用 agg()/aggregate()进行灵活的聚合
在本帖中,我们将使用 *agg()*
, *aggregate()*
的别名。然而,两者可以互换使用。
您可能知道基本的聚合语法,如下所示:
df.groupby('day')[['tip']].mean()
以下是用agg()
获得相同输出的一些替代方法:
df.groupby('day')[['tip']].agg('mean')
df.groupby('day').agg({'tip': 'mean'})
在这个简单的例子中,没有明显的优势说明为什么应该使用agg()
而不是第一种选择。然而,当我们想要查看多个聚合函数的输出时,使用agg()
给了我们更多的灵活性。例如,通过向agg()
传递一个列表或一个字典,我们可以一次得到均值和标准差。
df.groupby('day')[['tip']].agg(['mean', 'std']) # list
df.groupby(['day']).agg({'tip': ['mean', 'std']}) # dictionary
如果我们必须重命名输出列,而不是这样做:
df.groupby('day')[['tip']].agg(['mean', 'std']).rename(columns={'mean': 'avg', 'std': 'sd'})
我们可以更简洁地做到这两点:
df.groupby(['day'])[['tip']].agg([('avg', 'mean'), ('sd', 'std')])
df.groupby(['day']).agg({'tip': [('avg', 'mean'), ('sd', 'std')]})
到目前为止,使用列表或字典都同样有效。但是,如果我们想要检查多个变量的同一组汇总统计信息,使用 list 会更简洁。
df.groupby('day')[['tip', 'size']].agg(['mean', 'std'])
另一方面,有时使用字典是可行的方法。使用 dictionary,我们可以为每个变量指定不同的集合函数:
df.groupby(['day']).agg({'tip': ['mean', 'std'],
'size': ['median']})
有许多聚合函数可供使用:
◼️频率/计数:size()
,count()
◼️中央倾向:mean()
,median()
◼️方差:std()
,var()
◼️其他:min()
,max()
,️ sum()
,prod()
,quantile()
等等。
除此之外,我们可以在agg()
中使用任何 Series 或 DataFrame 方法。例如,要查看日前最高的两个提示,我们使用:
df.groupby('day')['tip'].nlargest(2)
我们可以看到一些最大的提示是在周六。💰
此外,我们也可以使用 lambda 函数:
df.groupby(['day']).agg({'tip': [('range', lambda x: x.max() - x.min()),
('IQR', lambda x: x.quantile(.75) - x.quantile(.25))]})
这扩展了我们可以做什么的可能性!😎
📍技巧 4:利用 pivot_table()
假设我们需要得到两个变量的平均值提示。一种常见的方法是使用groupby()
:
df.groupby(['time', 'day'])['tip'].mean().unstack()
但是更好的方法是使用pivot_table()
:
df.pivot_table('tip', 'time', 'day')
这里,我们没有指定参数,因为我们已经按照正确的顺序为方法提供了值。下面是相同代码的另一个版本,其中所有参数都被显式指定:
df.pivot_table(values='tip', index='time', columns='day')
这个版本可能可读性更强。我认为,如果我们省略第一个参数名称,使其稍微简洁一些,可读性不会受到影响:
df.pivot_table('tip', index='time', columns='day')
我们将保持这种形式向前发展。
默认情况下,pivot_table()
给出平均值。然而,我们可以通过将它指定为aggfunc
参数来轻松地更改为我们喜欢的函数,例如sum()
:
df.pivot_table('tip', index='time', columns='day', aggfunc='sum')
类似于crosstab()
,用pivot_table()
也很容易得到小计。
df.pivot_table('tip', index='time', columns='day', aggfunc='sum',
margins=True)
我们还可以将字典传递给aggfunc
,为传递给values
参数的每个变量定制聚合函数。另一个有用的参数是fill_value
,在这里我们指定如果输出丢失,我们希望看到什么值。让我们看一个例子来说明这些观点:
df.pivot_table(['tip', 'size'], index=['time', 'smoker'],
columns='day', fill_value=0, margins=True,
aggfunc={'tip': 'sum', 'size': 'max'})
使用pivot_table()
,您可以准确地知道哪些变量将出现在行和列中,并且不需要对数据进行整形。
📍技巧 5:使用 transform()向数据添加聚合统计信息
当我们希望将分组聚合度量值追加回未分组的数据时,这个技巧很有用。这里有一个例子来说明这一点:
df['avg_tip_by_gender'] = df.groupby('gender')['tip'].transform('mean')df.head()
在本例中,新创建的变量 avg_tip_by_gender 显示了按性别分类的平均 tip 。换句话说,来自下方的平均提示由性别添加回未分组数据。
df.groupby('gender')['tip'].agg(['mean', 'std'])
现在,让我们举一个稍微高级一点的例子:
df['n_sd_from_gender_avg_tip'] = df.groupby('gender')['tip'].transform(lambda x: (x-x.mean())/x.std())df.head()
这里,使用lambda
函数,我们为变量提示做了 3 件事:
x.mean():
按性别找均值。
x-x.mean():
通过性别求距离平均值。
(x-x.mean())/x.std():
以标准差为单位求距离。
让我们以第一条记录(index=0)为例,为了简单起见,将数字四舍五入到小数点后两位:x=1.01
、x.mean()=2.83
、x.std()= 1.16
然后,n _ SD _ from _ gender _ avg _ tip=(1.01-2.83)/1.16 =-1.57
这就是我们在 n_sd_from_gender_avg_tip 第一行找到的。对于此记录,小费金额比女性顾客的平均小费低约 1.57 个标准差。
Voila❕:这些是我目前关于熊猫的顶级数据汇总技巧!
您想访问更多这样的内容吗?媒体会员可以无限制地访问媒体上的任何文章。如果您使用 我的推荐链接成为会员,您的一部分会费将直接用于支持我。
谢谢你看我的帖子。希望我的建议对你有用,✂️.如果你有兴趣了解更多关于熊猫的信息,这里有我其他帖子的链接:
◼️️ 在熊猫中编写 5 个常见的 SQL 查询
◼️️ 给熊猫用户的 5 个提示
◼️️ 如何在熊猫数据框架中转换变量
再见🏃💨
数据科学面试的 5 个技巧
图片由斯科特·格雷厄姆在 Unsplash 上拍摄
概观
多次经历过面试过程的双方,这是面试的 5 个技巧,应该对那些有兴趣面试数据科学职位的人有所帮助。讨论的问题来自 https://datascienceprep.com/的,涵盖了顶级科技公司的面试问题。
1.学习时,注重广度而不牺牲深度
数据科学面试可能会很难,因为根据你面试的职位类型,你可能会被问到的面试问题的类型可能会有很大的广度和深度。你可以把它想象成两个维度:公司和角色。让我们以脸书产品分析和网飞机器学习为例。脸书有许多产品,数据科学的重点通常是分析和实验,因此重点是主题的广度而不是深度。相比之下,网飞有一个产品,大多数功能都致力于优化该产品的特定方面(例如,推荐的机器学习角色),因此重点是深度。
因此,对于产品分析角色,您可能会收到从 SQL 到概率的各种问题,如下所示:
a)假设您有关于用户操作的表格。编写一个查询,按月获取活动用户保持率。
b)假设你掷出三个骰子,观察三次掷出的总和。假设三次掷骰不同,结果之和为 12 的概率是多少?
而在更技术性的角色(机器学习)和公司方面,你可能会得到更深入的技术问题,例如:
a)假设您使用参数为λ的指数分布为一组客户的生命周期建模,并且您有 n 个客户的生命周期历史(以月为单位)。λ的最大似然法是什么?
b)对于 k 个聚类和 n 个样本点,k-means 聚类中使用的损失函数是什么?使用 1)批量梯度下降,2)使用学习率ε对聚类 k 的聚类均值进行随机梯度下降来计算更新公式。
2.当你不记得特定的概念时承认
我们都有过这样的情况,某个概念看起来很熟悉,但在面试中却不容易找到。一个不好的做法是假装你理解这个概念。在这种情况下,最好的办法是承认你不记得了,让面试官引导你。虽然这看起来很明显,但它非常重要,因为面试过程中的很大一部分通常都是用来筛选假阳性的(想象一下,你有一个仅用简历预测面试结果的模型),即简历很棒,但候选人却不那么棒的情况。对你确切知道和不知道的事情保持诚实绝对是一个决定性因素,所以在面试时记住这一点很重要。
3.不要害怕技术细节
问技术问题是面试官评估 1)你是否理解你声称知道的东西,2)你是否能以清晰简洁的方式传达适当的信息的一种方式。通常情况下,这些问题是面试中的“成败”点(特别是如果你声称了解某些话题,但对他们希望你了解的问题却知之甚少,按照上述观点)。被评估的两个品质对数据科学家来说非常重要,因为这项工作围绕着深思熟虑和清晰的数据分析。因此,当你有各种技术方面的专业知识时,绝对不要害怕展示出来,并与你的面试官讨论。一个好的面试官可能不同意你的观点,但他会进行深思熟虑的反复思考,只要你清楚自己的假设和思维过程,这绝对不会对面试过程有害。
4.彻底讨论你的项目
除了技术问题之外,经常会有很多关于你在简历中列出的项目的讨论。有项目是很重要的,因为大部分数据科学都是关于探索的,并且表明你在感兴趣的领域有某些可展示的技能是一个很好的招聘信号。正因为如此,招聘经理通常希望清楚地了解你在每个项目中做了什么,以了解你在这个过程中运用或学到了什么技能,以及如何运用。这意味着如果你有许多小组项目,你应该准备好解释你对每个项目的重要贡献以及每个项目的实际收获。
5.了解产品和业务方面
这几乎普遍适用于数据科学中的所有角色,因为无论职能如何,数据科学都将始终致力于推动产品(以及业务)向前发展。通过了解你申请的公司,你可以很好地理解他们可能会问的产品问题类型以及数据科学在每个产品中的位置。例如,在脸书,涉及产品问题的流程通常围绕实际的核心产品(脸书、Instagram、WhatsApp 等)。)或者基于感兴趣的假设(AR/VR 空间中的新东西,区块链等)。)而不是一些题外话。此外,重点是快速实验(A/B 测试,监控许多指标,等等。)因此,您应该知道他们可能会问什么类型的产品问题,从衡量成功到评估 A/B 测试过程中的权衡。以我的经验来看,这个框架对大多数科技公司都很有用。
感谢阅读!
如果您有兴趣进一步探索与数据科学面试相关的问题的深度和广度,请查看发送给您练习问题的简讯。
启动您的数据职业生涯的 5 个技巧
促进您的数据科学/工程职业发展的免费资源汇编。
四年前,我是一名刚毕业的大学生,在一家由四个人组成的物联网创业公司开始了我的职业生涯。我的第一个任务是研究和提出一个基于人工智能的军事数字助理的解决方案。虽然我在大学里学的是工程学,并且在一个实验室工作协助机器学习研究,但是在没有经验丰富的内部数据科学家/工程师的情况下承担一个巨大的自然语言处理项目是一项艰巨的任务。不可避免的是,我不得不求助于在线资源来填补空白,并在组织外寻找导师来指导和个人成长。
快进到现在,我现在从事我们物联网平台的数据基础设施工作,并在公司培训 fullstack 工程师和产品经理有关数据科学的知识,以分析我们的海量物联网数据。这篇文章汇集了我在数据科学/工程领域发展的这些年来使用的所有资源和学到的技巧。无论你是一名希望进入数据行业的工程师,还是一名正在准备新工作的应届毕业生,我希望我的建议对你有用。
1)订阅数据简讯
在进入流行的 MOOCs 或在亚马逊上购买推荐书籍之前,我开始订阅各种数据科学和数据工程通讯。起初,我阅读每一篇文章并做笔记,但随着时间的推移,我学会了识别多份简讯中共享的重要链接,并专注于少数几篇。时事通讯有助于及时了解新工具、学术研究和大型互联网巨头(如谷歌、网飞、Spotify、Airbnb、优步等)分享的热门博客文章。
以下是我最喜欢的一些时事通讯:
- 特里斯坦·汉迪的数据科学综述:特里斯坦对他的数据科学文章精选列表发表了自己的评论。
- 数据科学周刊:数据科学、人工智能和 ML 相关文章和博客文章的精选列表。我还发现培训&资源部分是一个有用的在线教程集合。
- 黑客时事通讯:每周时事通讯,精选自黑客新闻的文章。它不是数据科学/工程专业的,但有一个专门的部分是关于相关的数据和代码的。
- 来自 VB 的 AI 周刊:来自 Venture Beat 的作家的想法,收集了与 AI 有关的文章。
2)设计您自己的数据课程
接下来,根据你的侧重点,你需要精心设计你的数据科学、数据工程师或数据分析师课程。这可能包括学习如何用 Python 或 R 编程,如果你从非编程角色转行的话。如果预算不是问题,参加训练营或参加 Udacity 和 Dataquest 的课程可能是获得行业专家在线指导的一个很好的选择。然而,如果你像我一样对价格敏感,你可以选择遵循开源指南来创建免费课程:
- 开源社会大学数据科学
- 吴恩达的 Python 语言 ML Coursera 课程
- Python 机器学习书籍 Github 资源
- Hackernoon 的免费数据工程资源
- 大卫·文丘里的免费数据科学硕士课程
- 创业数据科学
- Topbot 顶级 AI 研究总结
这里需要提醒的是,仅仅学习这些课程是不够的。我发现网上的大多数课程和教程要么侧重于基础知识(如数学、统计、理论),要么侧重于简单的例子。在大数据中尤其如此,因为教程倾向于使用较小的数据子集在本地运行,而不是在云上遍历完整的生产设置。
为了用现实场景补充理论,我建议加入 Kaggle 并使用谷歌的免费工具,如 Colab 来练习处理大型数据集。你也可以搜索 Udacity 学生的 Github repos,看看一个顶点项目会是什么样子。
3)免费与专家交流
任何职业指南都会告诉你人际关系网很重要。但是如何找到愿意指导或简单回答一些问题的行业专家呢?在疫情之前,一种选择是参加聚会,但这种机会主要局限于湾区、纽约或西雅图(至少在美国)等主要科技中心的居民。另一个选择是参加专注于数据科学、机器学习或数据工程的会议或研讨会。然而,这些活动的门票非常昂贵,如果没有公司赞助,个人参加是不切实际的。
作为一名居住在巴尔的摩的初创公司员工,我的解决方案是通过首先观看行业合作伙伴在技术会议上举办的会议的免费视频(例如 AWS re:Invent、Microsoft Ignite 或 Google Cloud Next),并在 LinkedIn 上与发言者联系,来建立在线网络。除了主题演讲和关于新云产品发布的会议之外,还有大量关于最佳实践和架构讨论的会议,来自行业合作伙伴(例如 Lyft、Capital One、Comcast)的产品经理或首席开发人员将与 AWS/Azure/GCP 的解决方案架构师一起介绍如何解决大规模的实际问题。我会在会议上做笔记,然后联系 LinkedIn 上的所有演讲者,询问他们的产品或演讲中提到的架构决策。令人惊讶的是,几乎所有的演讲者都愿意回应并继续与我交谈,尽管我当时只是一名刚毕业的大学生,在一家不知名的初创公司工作。
随着时间的推移,我以这种方式稳步扩大了我的网络,并获得了与所有主要云提供商的新产品和行业趋势保持同步的额外好处。考虑到新冠肺炎目前的情况以及向虚拟活动的持续转移,这可能成为建立联系而不是亲自参加会议以会见其他利益攸关方的新规范。
4)获得认证
虽然云认证绝不是对能力或数据知识的验证,但我仍然认为投资认证是有价值的。如果你的目标是成为一名数据工程师,这一点尤其正确,因为云知识对于运行生产工作负载是必不可少的。即使对于数据科学家来说,熟悉云产品也能让你真正专注于分析数据,而不是努力加载和清理大规模数据。
获得认证的另一个被低估的方面是网络的开放。LinkedIn 上有非常活跃的成员,特别是在技术咨询领域,他们发布云数据职位的新机会。一些招聘人员直接在 LinkedIn 群中发布,只面向认证持有者。仅仅有证书并不能带来一份新工作或新职位,但是有了这些证书,就更容易与他人或招聘人员展开对话。就我个人而言,在获得认证后,我获得了一些小型咨询项目。
5)解决现实问题
最后,和任何工程学科一样,你只会随着实践而提高。如果你已经是一名数据科学家或数据工程师,获得真实世界的经验应该不成问题。对于其他寻求转型的人,许多人会建议建立一个投资组合。但是你从哪里开始呢?使用经典的 Titanic 数据集进行生存分类或对 iris 数据集进行聚类可能会损害而不是帮助你的投资组合。
相反,尝试使用公共 Github 项目作为灵感。基于你通过技术会议和认证从 LinkedIn 积累的人脉,看看其他人在建立什么。请随意使用来自 Github 上的 Udacity 或 Coursera 项目的示例。然后混合来自谷歌研究、 Kaggle 或的真实数据集,搜索一个有趣的数据集,并开始构建真实问题的解决方案。
如果您对某个行业或特定公司感兴趣,请尝试搜索公共数据集并构建一个样本项目。例如,如果你对 fintech 感兴趣,可以尝试使用 Lending Club 的公共贷款数据来构建贷款审批算法。使用真实数据集的最大收获是,与学术环境中提供的数据集相比,这些数据集非常杂乱和嘈杂。
显然,有多种方式可以发展你的职业生涯,并打入数据行业。我绝不是数据专家,每天都在学习和成长。如果您有其他资源、提示或建议,请在下面留下评论,我会为其他希望推进其数据职业的人更新这篇文章。
从心理学过渡到数据科学的 5 个技巧
数据科学
以及如何做到这两点。
在这里检索到。
目前,进入数据科学和人工智能的惊人世界变得越来越困难。对于那些没有技术背景的人来说尤其如此。
在这篇文章中,我想讨论心理学家或那些具有社会导向背景的人找到数据科学家工作的可能性。
作为一名心理学家,你比那些纯技术背景的人有几个优势:
- 你接受过深入的沟通训练
- 你是各自领域的领域专家(例如,经济心理学或临床心理学)
- 你熟悉统计学,也许比你的技术同行更熟悉
- 你有处理小数据集的经验
然而,你可能有同样多的缺点:
- 您不熟悉计算机科学领域(例如,创建生产管道、单元测试、git 等。)
- 你不熟悉必要的数学技能(例如,微积分、线性代数等。)
- 您对数据科学相关算法(例如,机器学习、NLP、流程挖掘、信息检索等)几乎没有经验。)
在这篇文章中,我将解释你如何利用这些优势,以及如何弥补这些劣势。
因此,本文中的主要信息很简单:
发挥你的长处,改进你的短处。
注意:这里的许多技巧可以推广到其他背景。然而,他们首先是针对那些有社会背景的人。如果考虑另一个背景,我会改变一些提示。
1.学习一门编程语言
这可能有点太明显了,但是学习一门编程语言可能比你想象的更重要,尤其是从长远来看!
应该选择哪种编程语言?
这是一个备受争议的问题,取决于你想从事的行业。总的来说,Python 和 R 目前主要用于机器学习和统计应用。
如果你想找一份技术含量不高,但更具分析性的工作,我会强烈推荐 R。r 在公司中已经存在了很长时间,用于进行数据分析,仍然有公司还没有转换到 Python。这种语言擅长做快速和相对深入的统计分析。
此外,由于 R 最初是由统计学家使用的,很有可能你以前用过它,因为社会科学是典型的重统计的。
另一方面,如果你真的想专注于复杂的算法或生产流水线,那么我会推荐选择 Python 。Python 是想要将他们的人工智能模型投入生产的数据科学家的首选语言。它非常灵活,与 R 相比,有更广泛的使用范围。
虽然从技术上讲,SQL 不是一种编程语言,但在访问和分析数据时,SQL 是不可或缺的。它通常用于查询存储在关系数据库中的信息。特别是对于非技术背景的心理学家,你可以很快学会如何做基本的分析。
我应该知道如何编程到什么程度?
这取决于你想成为什么类型的数据科学家。如果你想帮助企业做出决策,那么我建议你了解 SQL 和 r 的基础知识。然而,如果你正在寻找一份将模型投入生产的算法繁重的工作,那么关键是你要接近软件工程师的知识和效率。
我还应该关注哪些技能?
不过,为了让你的生活更轻松,我还是建议你学习一些东西:
Git 是一个版本控制系统,帮助你跟踪代码的变化。我见过许多数据科学家创建他们的笔记本/文件的副本,并将它们称为 V2,以向他们的解决方案添加功能。这不仅效率低下,而且很难对应用程序进行适当的版本控制和跟踪不一致性。
创建数据驱动的解决方案时,使用合适的 IDE 。例如,使用 Pycharm 而不是 Jupyter 笔记本将帮助您编写更好的代码,因为有许多选项可以帮助您跟踪问题。
如果你想更进一步,你可以看看下面的:
- 单元测试
- 分析运行时间
- API 开发
- Docker 集成
2.得到经验
有许多方法可以让你获得这方面的经验。以下是我认为在转变过程中最大的好处。
实习
可以说,简历上有一次或多次实习经历是让你获得数据科学家工作的最重要因素。以我的经验来看,雇主在寻找那些见过商业领域混乱数据,而不是你在学术界看到的相对原始数据的员工。
实习也将帮助你理解数据科学领域的语言。人们在决策中大量使用试探法和偏见。因此,当你像数据科学家一样说话时,他们更倾向于认为你是数据科学家。
此外,利用你的统计技能为你造福。许多初创企业和较小的组织都希望他们的团队中有人能够分析他们的小型数据集,同时清楚地传达这些结果。
创建投资组合
作品集可以帮助你交流与潜在雇主相关的各种技能和项目。不仅如此,它还可以用来学习如何正确地向对该领域了解不多的人解释技术原理。一个重要技能要有!
我的投资组合作为你可以做的项目的例子:【https://maartengr.github.io/projects/或https://github.com/MaartenGr/projects
我建议你在你的投资组合里放两件东西中的一件:
- 一个专业内的几个项目(例如深度学习)
- 或者跨越广泛专业领域的几个项目来展示广泛的能力
3.利用你的背景为自己谋利
在我从心理学家转到数据科学家后,我希望我的技能得到认可。我努力学习必要的技能,称自己为数据科学家。雇主经常会说,在将数据科学/人工智能解决方案翻译给非技术利益相关者时,我的心理学背景会很有帮助。然而,我想自己解决这些问题!甚至有几次,我把心理学背景从简历中去掉,只被认为是一名数据科学家。
此处检索到。
事后看来,这显然不是正确的做法。真正有帮助的其实很简单:
专注于心理学知识主要被视为领域知识的领域,而不是很好地沟通技术问题的能力。
对我来说,这导致了一个数据科学家的职位,在那里我将专注于分析和预测人类行为。
注:如果你喜欢成为数据科学家和利益相关者之间的桥梁,那么你的社会背景加上基本的数据科学知识应该足以胜任这样的角色。
4.了解商务智能工具
当您考虑数据科学解决方案时,可能不会首先想到使用 BI 工具。实际上,学习这些工具比你可能意识到的更重要。
如果你在非研究环境中工作,那么你的解决方案很有可能会被非技术利益相关者使用。这些利益相关者通常已经利用 BI 工具来驱动他们的决策过程。
为了让这些风险承担者使用您的预测模型,最好将它们集成到现有的工作流程中。了解正在使用的 BI 工具将有助于将您的模型的输出集成到它们的工作流中。
上面列出了一些最流行的工具(即 Qlik、Tableau 和 PowerBI)。我建议至少制作一个包含所有工具的仪表板,以了解这些工具的基本工作原理。然后,选择您喜欢的方法,深入了解这些应用程序的数据架构。
5.自学
拥有面向社会的背景的缺点和优点是,雇主更倾向于认为你的技能最适合一个需要大量沟通的职位。为了让他们认可你的技能,一个学位,无论是硕士课程还是在线课程,都可能是有益的。
硕士学位
在完成面向社会的项目后,继续攻读数据科学硕士学位可能会非常困难。与那些有技术背景的人相比,你很可能缺乏必要的技术技能,比如编程、线性代数、微积分、数据结构等。
因此,寻找能帮助你在更短的时间内获得这些必要技能的项目是很重要的。一些项目在技术和社会课程之间有很好的平衡,适合有社会背景的人。
我建议看一看研究硕士项目或者数据科学硕士项目。前者通常在你的领域内,并允许你将它与高级分析技能相结合。尤其是你硕士论文重点是预测建模的话。后者将向您介绍常见的数据科学算法和方法,同时保持数据科学和商业课程之间的良好平衡。
虽然许多人建议从事计算机科学或数学密集型项目,但我觉得这对心理学家来说是一个太多不同的方向。
MOOC
对于许多人来说,由于经济困难或者他们已经全职工作,很难注册一个新的硕士项目。一个很好的解决方案是效仿 MOOC,即大规模开放在线课程。换句话说,你可以在网上学习简单的课程。
MOOCs 对于学习一门新专业如此完美的原因在于,只要你觉得合适,你就可以在业余时间学习这些课程。他们往往比正规的硕士学位还要便宜!
这些课程的问题是需要一些研究来确定哪些课程值得你花时间。有些被认为是很棒的课程,比如吴恩达在 Coursera 上开设的机器学习和深度学习课程。
我个人对平台的偏好是:
注意:Udemy 上的课程经常打折,可以为你节省数百欧元/美元!
对我来说,这种转变需要几年的努力。这是一段艰难的旅程,但是相信我,这绝对是值得的!
如果你和我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我。
MLflow 实验跟踪的 5 个技巧
将 MLflow 推向极限:可视化、组织、更改和纠正您的 mlflow 运行
这篇文章是关于 MLflow 的——一个开源 MLOps 工具。如果你从未听说过,这里有一个教程。
我关注的是ml flow Tracking——允许记录和查看您的每个模型/实验的参数、度量和工件(文件)的功能。
当您记录您试验的模型时,您可以在 MLflow UI(以及其他)中总结和分析您的运行。您可以了解它们中哪一个性能最好,排除故障,并选择部署的最佳候选。我每天都在使用这个工具,并且发现了许多让我的生活变得更加轻松的特性。尽情享受吧!
由 Sebastian Staines 在 Unsplash 上拍摄的照片
1.交互式工件— HTML、GeoJSON 和其他
工件查看器是一个很棒的特性,它被设计用来深入到您记录的模型中。您可以用任何格式保存文件,并且可以下载这些文件,但是只有部分文件可以在工件查看器窗口中预览或呈现。目前分别是(来源: FileUtils.js ):
正文:。txt,。日志,。py,。js,。yaml,。yml,。json,。csv,。tsv,。md,。rst,。jsonnet
图片:。jpg,。bmp,。jpeg,。png,。gif,。svg
互动:。html,。杰奥森
下面是保存其中一些文件的示例片段:
测试 MLflow 工件查看器的全部功能—代码
下面是这次运行的 UI 外观,在工件查看器窗口中呈现得非常好:
测试 MLflow 工件查看器的全部功能—演示
最重要的是,因为它可以在 HTML 中呈现 iframe,你实际上可以使用这个片段嵌入一个网站(比如一个仪表板)。如果你的仪表板通过 URI 参数化,这可以很好地利用。
嵌入在工件查看器中的维基百科页面(作为一个例子)。
限制:如果您的嵌入式网站需要外部环境或一些认证,它可能不会工作。你可以在本期中了解更多信息。
这个用例真的将工具推到了极限,看起来有点不靠谱,但这是可能的。我无法想象会有很多用户嵌入这样的网站。
2.用文件夹组织的工件
当您在运行中有许多工件时,您可能想要将它们组织在文件夹中。方法如下:
在文件夹中记录工件—代码
结果是:
在文件夹中记录工件—演示
3.使用 nested=True 按部分组织的运行
有时,您的跑步有许多部分,每个部分都有自己的一套参数和指标。您可以使用嵌套管路来分隔它们。
嵌套运行—代码
看看这个分离得很好的运行树:
嵌套运行—演示
限制:正如您在上面看到的,UI 只显示了第一级嵌套的树结构,但是,“父运行”属性对于任何嵌套运行都是正确的。我希望在 MLflow 的下一个版本中,UI 能够反映一个完整的嵌套树。
4.使用 pandas 以编程方式运行查询
因此,您运行了您的实验,进行了您的批量分析,MLflow 自动图很棒,但您可能想要更多。您可以将您的运行和实验以及所有参数、指标和工件导出到 pandas df 中!
mlflow.search_runs(experiment_ids=["your_exprmnt_id"])
这会给你一个漂亮的熊猫数据框,里面有你需要的所有信息!
作为熊猫 DF 获得所有跑步记录
5.纠正运行
假设您前段时间运行了您的实验,但是您在代码中发现了一个乏味的 bug。例如,你忘了用秒除以 3600 得到小时。以下是纠正的方法:
更正 MLflow 运行
完成后,您可以随时更正、添加或删除任何 MLflow 运行。从 UI 或者通过使用上面解释的 search_runs API 获得 run_id。
6.MLflow 不仅仅是为了 ML
(与其说是提示,不如说是观察)
我们所有的程序员都在做实验:调整输入参数以优化输出指标。
我发现ML flow Tracking&UI在许多非 ML 实验中非常有用,例如剖析算法或更通用的 AI。由于自动化绘图和总结,它的用途超出了机器学习。这主要归功于 API 的易用性和简单但实用的 UI。MLflow 的日志记录功能几乎是无限的,自动绘图简单但信息量大!