原文:KDNuggets
协议:CC BY-NC-SA 4.0
你必须了解的 15 个 Python 编码面试问题
原文:www.kdnuggets.com/2022/04/15-python-coding-interview-questions-must-know-data-science.html
了解 Python 是每个数据科学家应掌握的关键技能之一。这并非没有理由。Python 的能力,加上 Pandas 库,能够以多种不同方式操控和分析数据,使其成为数据科学工作的理想工具。
我们的前 3 个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织 IT
不足为奇的是,所有寻求数据科学家的公司都会在面试中测试他们的 Python 技能。
我们将探讨你应熟悉的技术概念以及 Python/Pandas 函数,以获得数据科学职位。
这是我们将讨论的五个主题:
-
聚合、分组和排序数据
-
联接表
-
数据过滤
-
文本操作
-
日期时间操作
毋庸置疑,这些概念很少单独测试,因此通过解决一个问题,你将展示你对多个 Python 主题的知识。
聚合、分组和排序数据
这三个技术主题通常一起出现,它们是创建报告和进行任何数据分析的基础。
它们允许你执行一些数学操作,并以可表示和用户友好的方式展示你的发现。
我们将向你展示几个实际示例,以确保你了解我们所讨论的内容。
Python 编码面试问题 #1:类性能
这个 Box 面试问题问你:
“给定一个表,包含班级学生的作业分数。写一个查询,识别所有作业总分的最大差异。输出两个学生之间总分的差异。”
问题链接:platform.stratascratch.com/coding/10310-class-performance?python=1
你需要使用的表是 box_scores,它有以下列:
id | int64 |
---|---|
student | object |
assignment1 | int64 |
assignment2 | int64 |
assignment3 | int64 |
表中的数据如下所示:
作为回答问题的第一步,你应该汇总所有作业的评分:
import pandas as pd
import numpy as np
box_scores['total_score'] = box_scores['assignment1']+box_scores['assignment2']+box_scores['assignment3']
这部分代码将给你如下结果:
现在你知道了,下一步是找到总分之间的最大差异。你需要使用max()
和min()
函数来实现这一点。或者,更具体地说,就是这两个函数输出之间的差异。将这部分代码添加到上面的代码中,你就得到了最终答案:
import pandas as pd
import numpy as np
box_scores['total_score'] = box_scores['assignment1']+box_scores['assignment2']+box_scores['assignment3']
box_scores['total_score'].max() - box_scores['total_score'].min()
这是你要找的输出:
问题要求只输出这个差异,所以不需要其他列。
Python 编码面试题 #2:企业检查评分
前一个问题不需要任何数据分组和排序,这与旧金山城市提出的以下问题不同:
这是旧金山城市提出的一个问题:
“找出每个企业的检查评分中位数,并输出结果以及企业名称。根据检查评分的降序排列记录。尽量用你自己精确的中位数计算方法。在 Postgres 中有percentile_disc
函数可用,但它只是一个近似值。”
问题链接:platform.stratascratch.com/coding/9741-inspection-scores-for-businesses?python=1
在这里,你应该使用notnull()
函数来确保只获取那些有检查评分的企业。此外,你还需要按企业名称分组数据,并计算检查评分的中位数。使用median()
函数。此外,使用sort_values()
按降序排序输出。
Python 编码面试题 #3:按种类的记录数
看看这个微软的问题:
“找出数据集中每种类别的记录总数。输出类别及其对应的记录数量。按类别的升序排列记录。”
问题链接:platform.stratascratch.com/coding/10168-number-of-records-by-variety?python=1
在前两个示例之后,这个问题应该不难解决。首先,你应该按列的种类和萼片长度进行分组。要查找每种类的记录数,请使用count()
函数。最后,使用sort_values
按字母顺序对种类进行排序。
表连接
在所有之前的示例中,我们只给出了一张表。我们选择这些示例,以便你更容易理解 Python 中如何进行聚合、分组和排序。
然而,作为数据科学家,你通常需要知道如何编写查询来从多个表格中提取数据。
Python 编程面试题 #4:最低价格订单
在 Python 中连接两个表格的最简单方法之一是使用 merge() 函数。我们将使用它来解决亚马逊问题:
“查找每个客户的最低订单成本。输出客户 id 以及名字和最低订单价格。”
链接到问题:platform.stratascratch.com/coding/9912-lowest-priced-orders?python=1
你需要处理两个表格。第一个表格是 customers:
id | int64 |
---|---|
first_name | object |
last_name | object |
city | object |
address | object |
phone_number | object |
这是数据:
第二个表格名为 orders,包含以下列:
id | int64 |
---|---|
cust_id | int64 |
order_date | datetime64[ns] |
order_details | object |
total_order_cost | int64 |
数据如下:
由于你需要两个表格中的数据,因此你必须合并或进行内连接:
import pandas as pd
import numpy as np
merge = pd.merge(customers, orders, left_on="id", right_on="cust_id")
你可以在 customers 表的 id 列和 orders 表的 cust_id 列上进行此操作。结果显示为两个表格合并成一个:
一旦完成,使用 groupby() 函数按 cust_id 和 first_name 分组输出。这些是问题要求你展示的列。你还需要显示每个客户的最低订单成本,这可以通过 min() 函数来实现。
完整的答案如下:
import pandas as pd
import numpy as np
merge = pd.merge(customers, orders, left_on="id", right_on="cust_id")
result = merge.groupby(["cust_id", "first_name"])["total_order_cost"].min().reset_index()
该代码返回所需的输出。
Python 编程面试题 #5:按职位和性别统计收入
这里,我们还有一个来自旧金山的问题:
“根据员工的职位和性别计算平均总薪酬。总薪酬通过将每个员工的工资和奖金相加来计算。”
然而,并非每个员工都会收到奖金,因此在计算时忽略没有奖金的员工。员工可以收到多个奖金。
输出员工职位、性别(即 sex)以及平均总薪酬。
链接到问题:platform.stratascratch.com/coding/10077-income-by-title-and-gender?python=1
回答这个问题时,第一步应是按工人和奖金进行分组,同时使用 sum() 函数获取每个工人 id 的奖金。然后你应该合并你拥有的表格。这也是内连接。完成后,你可以通过将工资和奖金相加来获得总薪酬。最后一步是输出员工职位、性别和平均总薪酬,这可以通过使用 mean() 函数获得。
Python 编程面试问题 #6:产品交易数量
这是微软的问题:
“找出每个产品发生的交易数量。输出产品名称以及相应的交易数量,并按产品 ID 升序排列记录。你可以忽略没有交易的产品。”
问题链接:platform.stratascratch.com/coding/10163-product-transaction-count?python=1
下面是一些编写代码的提示。首先,你应该使用 notnull() 函数获取至少有一笔交易的产品。接下来,使用 merge() 函数将该表与 excel_sql_inventory_data 表进行内连接。使用 groupby() 和 transform() 函数获取交易数量。然后,去除重复的产品,并显示每个产品的交易数量。最后,按 product_id 排序输出。
数据过滤
当你使用 Python 时,通常会处理大量数据。然而,你不需要输出所有数据,因为那样做没有意义。
数据分析还包括设置某些标准以仅提取你想在输出中看到的数据。为此,你应该使用某些数据过滤方法。
虽然 merge() 也以某种方式过滤数据,但这里我们讨论的是使用比较操作符(==、<、>、<=、>=)、between() 或其他方法来限制输出中的行数。让我们看看在 Python 中是如何做到的!
Python 编程面试问题 #7:找到 2010 年排名前 10 的歌曲
这是你在 Spotify 面试中可能会被问到的问题:
“2010 年排名前 10 的歌曲是什么?输出排名、组合名称和歌曲名称,但不要重复显示相同的歌曲。根据 year_rank 升序排列结果。”
问题链接:platform.stratascratch.com/coding/9650-find-the-top-10-ranked-songs-in-2010?python=1
解决问题时,你只需要表 billboard_top_100_year_end:
id | int64 |
---|---|
year | int64 |
year_rank | int64 |
group_name | object |
artist | object |
song_name | object |
表中的数据如下:
这是我们解答问题的方法。
import pandas as pd
import numpy as np
conditions = billboard_top_100_year_end[(billboard_top_100_year_end['year'] == 2010) & (billboard_top_100_year_end['year_rank'].between(1,10))]
上述代码设置了两个条件。第一个是使用 ‘==’ 操作符,通过它我们选择 2010 年出现的歌曲。第二个条件选择排名在 1 到 10 之间的歌曲。
运行此代码的结果为:
之后,我们只需要选择三列:year_rank、group_name 和 song_name。我们还将使用 drop_duplicates() 函数删除重复项。
这使得代码完整:
import pandas as pd
import numpy as np
conditions = billboard_top_100_year_end[(billboard_top_100_year_end['year'] == 2010) & (billboard_top_100_year_end['year_rank'].between(1,10))]
result = conditions[['year_rank','group_name','song_name']].drop_duplicates()
它将给你 2010 年排名前 10 的歌曲:
Python 编码面试问题 #8:纽约市和哈莱姆区的公寓
尝试解决 Airbnb 的问题:
“找到纽约市哈莱姆区 50 个公寓搜索的详细信息。”
问题链接:platform.stratascratch.com/coding/9616-apartments-in-new-york-city-and-harlem?python=1
这里有一些提示。你需要设置三个条件,只获取公寓类别,只包含哈莱姆区的公寓,且城市必须是纽约市。所有三个条件将使用‘==’操作符设置。你不需要展示所有公寓,因此使用 head()函数限制输出的行数。
Python 编码面试问题 #9:重复邮箱
上一个问题集中于数据筛选,出自 Salesforce:
“找到所有有重复的邮箱。”
问题链接:platform.stratascratch.com/coding/9895-duplicate-emails?python=1
这个问题相对简单。你需要使用 groupby()函数按邮箱分组,并找出每个邮箱地址出现的次数。然后对邮箱地址数量使用‘>’操作符,以获取重复项。
操作文本
在处理数据时,你需要对数据进行操作,以使其更适合你的分析。这通常适用于文本数据。它包括根据存储的文本分配新的值,解析和合并文本,或查找其长度、特定字母的位置、符号等。
Python 编码面试问题 #10:评论数量的分类
下一个问题出自 Airbnb:
“为了更好地理解评论数量对住宿价格的影响,将评论数量分为以下几个组别,并考虑价格。”
* 0 条评论:没有*
* 1 到 5 条评论:少量*
* 6 到 15 条评论:一些*
* 16 到 40 条评论:许多*
* 超过 40 条评论:很多*
输出价格及其分类。按住宿级别进行分类。**“
问题链接:platform.stratascratch.com/coding/9628-reviews-bins-on-reviews-number?python=1
你正在处理的只有一个表,但列相当多。该表是 airbnb_search_details,列有:
id | int64 |
---|---|
price | float64 |
property_type | object |
room_type | object |
amenities | object |
accommodates | int64 |
bathrooms | int64 |
bed_type | object |
cancellation_policy | object |
cleaning_fee | bool |
city | object |
host_identity_verified | object |
host_response_rate | object |
host_since | datetime64[ns] |
neighbourhood | object |
number_of_reviews | int64 |
review_scores_rating | float64 |
zipcode | int64 |
bedrooms | int64 |
beds | int64 |
这是表格中的几行前几条数据:
编写代码的第一步应该是获取评论数量。
import pandas as pd
import numpy as np
num_reviews = airbnb_search_details['number_of_reviews']
你得到的是:
接下来,你需要获取评论数为 0 的住宿,然后是 1-5,6-15,16-40 和超过 40 条评论的住宿。为了实现这一点,你需要‘==’和‘>’运算符的组合,以及 between()函数。
import pandas as pd
import numpy as np
num_reviews = airbnb_search_details['number_of_reviews']
condlist = [num_reviews == 0, num_reviews.between(1,5),num_reviews.between(5,15),num_reviews.between(15,40),num_reviews>40]
这是你当前的输出应如下所示:
现在开始处理文本,以分配类别。这些类别包括:NO、FEW、SOME、MANY、A LOT。到目前为止,你的代码是:
import pandas as pd
import numpy as np
num_reviews = airbnb_search_details['number_of_reviews']
condlist = [num_reviews == 0, num_reviews.between(1,5),num_reviews.between(5,15),num_reviews.between(15,40),num_reviews>40]
choicelist = ['NO','FEW','SOME','MANY','A LOT']
好的,这是你的类别:
最后一步是将这些类别分配给住宿,并列出其价格:
import pandas as pd
import numpy as np
num_reviews = airbnb_search_details['number_of_reviews']
condlist = [num_reviews == 0, num_reviews.between(1,5),num_reviews.between(5,15),num_reviews.between(15,40),num_reviews>40]
choicelist = ['NO','FEW','SOME','MANY','A LOT']
airbnb_search_details['reviews_qualification'] = np.select(condlist,choicelist)
result = airbnb_search_details[['reviews_qualification','price']]
这段代码将为你提供所需的输出:
Python 编程面试题 #11: 商业名称长度
下一个问题是由旧金山市提出的:
“找出每个商业名称中的单词数量。避免将特殊符号计入单词(例如 &)。输出商业名称及其单词数量。”
问题链接: platform.stratascratch.com/coding/10131-business-name-lengths?python=1
在回答问题时,你应该首先使用 drop_duplicates()函数找到唯一的商业名称。然后使用 replace()函数将所有特殊符号替换为空白,这样你就不会在后续计算中计入这些符号。使用 split()函数将文本拆分为列表,然后使用 len()函数计算单词数量。
Python 编程面试题 #12: 字母’a’的位置
这个问题由亚马逊提出,要求你:
“找到工人’Amitah’名字中字母’a’的位置。使用基于 1 的索引,例如第二个字母的位置是 2。”
问题链接: platform.stratascratch.com/coding/9829-positions-of-letter-a?python=1
解决方案中有两个主要概念。第一个是使用‘==’运算符过滤工人‘Amitah’。第二个是对字符串使用 find()函数以获取字母‘a’的位置。
操作日期时间
作为数据科学家,你将经常处理日期。根据可用的数据,你可能需要将数据转换为日期时间格式,提取某个时间段(如月份或年份),或以其他适当的方式操作日期时间。
Python 编码面试题#13:过去 30 天每个用户的评论数量
Meta/Facebook 提出的问题如下:
“返回每位用户在过去 30 天内收到的评论总数。不输出在定义时间段内未收到任何评论的用户。假设今天是 2020 年 2 月 10 日。”
问题链接: platform.stratascratch.com/coding/2004-number-of-comments-per-user-in-past-30-days?python=1
你可以在表格 fb_comments_count 中找到数据。
user_id | int64 |
---|---|
created_at | datetime64[ns] |
number_of_comments | int64 |
数据也在这里:
查看解决方案,然后我们将下面解释:
import pandas as pd
from datetime import timedelta
result = fb_comments_count[(fb_comments_count['created_at'] >= pd.to_datetime('2020-02-10') - timedelta(days=30)) & (
fb_comments_count['created_at'] <= pd.to_datetime('2020-02-10'))].groupby('user_id')[
'number_of_comments'].sum().reset_index()
要查找 2020 年 2 月 10 日不超过三十天的评论,首先需要使用to_datetime()
函数将日期转换为 datetime 格式。为了得到你感兴趣的评论的最新日期,使用timedelta()
函数从今天的日期中减去 30 天。所有你感兴趣的评论日期都等于或大于这个差值。此外,你还需要排除所有在 2020 年 2 月 10 日之后发布的评论。这就是为什么有第二个条件。最后,根据user_id
进行分组,并使用sum()
函数得到每个用户的评论数量。
如果你做对了所有的步骤,你会得到如下输出:
Python 编码面试题#14:查找用户购买记录
这是 Amazon 提出的问题:
“编写一个查询以识别回访的活跃用户。回访活跃用户是指在任何其他购买后的 7 天内进行了第二次购买的用户。输出这些回访活跃用户的 user_ids 列表。”
问题链接: platform.stratascratch.com/coding/10322-finding-user-purchases?python=1
为了解决这个问题,你需要使用strftime()
函数将购买日期格式化为 MM-DD-YYYY 格式。然后使用sort_values()
按照用户 ID 和购买日期的升序排序输出。要得到前一个订单,应用shift()
函数,按user_id
分组,并显示购买日期。
使用to_datetime
将订单及前一订单的日期转换为 datetime 格式,然后找出两个日期之间的差异。最后,过滤结果,使其只输出在第一次和第二次购买之间相差七天或更少的用户,并使用unique()
函数得到唯一用户。
Python 编码面试题#15:3 月份客户收入
最后的问题由 Meta/Facebook 提出:
“计算 2019 年 3 月每位客户的总收入。仅包括 2019 年 3 月活跃的客户。”
“输出收入及客户 ID,并根据收入按降序排列结果。”
问题链接:platform.stratascratch.com/coding/9782-customer-revenue-in-march?python=1
你需要对列 order_date 使用 to_datetime()。然后从同一列中提取 2019 年 3 月。最后,按 cust_id 分组并对列 total_order_cost 求和,这将是你要找的收入。使用 sort_values() 根据收入降序排列输出结果。
结论
通过展示来自顶级公司的 15 个面试问题,我们涵盖了面试官在测试你的 Python 技能时感兴趣的五个主要话题。
我们从数据的聚合、分组和排序开始。然后我们展示了如何连接表格和过滤输出。最后,你学会了如何操作文本和日期时间数据。
这些当然不是你应该知道的唯一概念。但它应该为你的面试准备和回答一些 更多 Python 面试问题 提供一个良好的基础。
要练习更多的 Python Pandas 函数,请查看我们的帖子“Python Pandas 面试问题”,它将为你提供 Pandas 数据操作的概述以及在 数据科学面试 中常见的 Pandas 问题类型。
内特·罗西迪 是一名数据科学家和产品战略专家。他还是一位兼职教授,教授分析课程,并且是 StrataScratch 的创始人,这个平台帮助数据科学家准备面试,提供来自顶级公司的真实面试问题。你可以在 Twitter: StrataScratch 或 LinkedIn 上与他联系。
更多相关话题
-
KDnuggets 新闻,5 月 4 日:9 门免费哈佛课程以学习数据…
-
你必须知道的 10 个高级数据科学 SQL 面试问题…
-
3 个难度较大的 Python 编码面试问题(适用于数据科学)
-
如何回答数据科学编码面试问题
-
7 个必须知道的 Python 编码面试技巧
-
你应该知道的 26 个数据科学面试问题
优化数据科学管道的 15 个 Python 代码片段
原文:www.kdnuggets.com/2021/08/15-python-snippets-optimize-data-science-pipeline.html
评论
由 Lucas Soares,K1 Digital 的机器学习工程师
由 Carlos Muza 在 Unsplash 上提供的照片
为什么代码片段对数据科学很重要
我们的前三个课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您组织的 IT
在我的日常工作中,我需要处理很多类似的情况,从加载 csv 文件到可视化数据。因此,为了帮助简化我的工作流程,我养成了存储在不同情况下有用的代码片段的习惯,从加载 csv 文件到可视化数据。
在这篇文章中,我将分享 15 个代码片段,帮助您处理数据分析管道的不同方面
1. 使用 glob 和列表推导式加载多个文件
import glob
import pandas as pd
csv_files = glob.glob("path/to/folder/with/csvs/*.csv")
dfs = [pd.read_csv(filename) for filename in csv_files]
2. 从列表中获取唯一值
import pandas as pd
df = pd.read_csv("path/to/csv/file.csv")
df["Item_Identifier"].unique()array(['FDA15', 'DRC01', 'FDN15', ..., 'NCF55', 'NCW30', 'NCW05'],
dtype=object)
3. 并排显示 pandas 数据框
from IPython.display import display_html
from itertools import chain,cycledef display_side_by_side(*args,titles=cycle([''])):
# source: https://stackoverflow.com/questions/38783027/jupyter-notebook-display-two-pandas-tables-side-by-side
html_str=''
for df,title in zip(args, chain(titles,cycle(['</br>'])) ):
html_str+='<th style="text-align:center"><td style="vertical-align:top">'
html_str+="<br>"
html_str+=f'<h2>{
title}</h2>'
html_str+=df.to_html().replace('table','table style="display:inline"')
html_str+='</td></th>'
display_html(html_str,raw=True)
df1 = pd.read_csv("file.csv")
df2 = pd.read_csv("file2")
display_side_by_side(df1.head(),df2.head(), titles=['Sales','Advertising'])
### Output
作者提供的图片
4. 删除 pandas 数据框中的所有 NaNs
df = pd.DataFrame(dict(a=[1,2,3,None]))
df
df.dropna(inplace=True)
df
5. 显示 DataFrame 列中的 NaN 条目数量
def findNaNCols(df):
for col in df:
print(f"Column: {
col}")
num_NaNs = df[col].isnull().sum()
print(f"Number of NaNs: {
num_NaNs}")
df = pd.DataFrame(dict(a=[1,2,3,None],b=[None,None,5,6]))
findNaNCols(df)# OutputColumn: a
Number of NaNs: 1
Column: b
Number of NaNs: 2
6. 使用 .apply
和 lambda 函数转换列
df = pd.DataFrame(dict(a=[10,20,30,40,50]))
square = lambda x: x**2
df["a"]=df["a"].apply(square)
df
7. 将两个 DataFrame 列转换为字典
df = pd.DataFrame(dict(a=["a","b","c"],b=[1,2,3]))
df_dictionary = dict(zip(df["a"],df["b"]))
df_dictionary{
'a': 1, 'b': 2, 'c': 3}
8. 绘制具有条件的分布网格
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
import pandas as pd
df = pd.DataFrame(dict(a=np.random.randint(0,100,100),b=np.arange(0,100,1)))
plt.figure(figsize=(15,7))
plt.subplot(1,2,1)
df["b"][df["a"]>50].hist(color="green",label="bigger than 50")
plt.legend()
plt.subplot(1,2,2)
df["b"][df["a"]<50].hist(color="orange",label="smaller than 50")
plt.legend()
plt.show()
作者提供的图片
9. 在 pandas 中对不同列的值进行 t 检验
from scipy.stats import ttest_rel
data = np.arange(0,1000,1)
data_plus_noise = np.arange(0,1000,1) + np.random.normal(0,1,1000)
df = pd.DataFrame(dict(data=data, data_plus_noise=data_plus_noise))
print(ttest_rel(df["data"],df["data_plus_noise"]))# Output
Ttest_relResult(statistic=-1.2717454718006775, pvalue=0.20375954602300195)
10. 在指定列上合并数据框
df1 = pd.DataFrame(dict(a=[1,2,3],b=[10,20,30],col_to_merge=["a","b","c"]))
df2 = pd.DataFrame(dict(d=[10,20,100],col_to_merge=["a","b","c"]))
df_merged = df1.merge(df2, on='col_to_merge')
df_merged
11. 使用 sklearn 标准化 pandas 列中的值
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scores = scaler.fit_transform(df["a"].values.reshape(-1,1))
12. 在 pandas 中删除特定列中的 NaNs
df.dropna(subset=["col_to_remove_NaNs_from"],inplace=True)
13. 使用条件和 or
语句选择数据框的子集
df = pd.DataFrame(dict(result=["Pass","Fail","Pass","Fail","Distinction","Distinction"]))
pass_index = (df["result"]=="Pass") | (df["result"]=="Distinction")
df_pass = df[pass_index]
df_pass
14. 基础饼图
import matplotlib.pyplot as plt
df = pd.DataFrame(dict(a=[10,20,50,10,10],b=["A","B","C","D","E"]))
labels = df["b"]
sizes = df["a"]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=140)
plt.axis('equal')
plt.show()
15. 使用 .apply()
将百分比字符串转换为数值
def change_to_numerical(x):
try:
x = int(x.strip("%")[:2])
except:
x = int(x.strip("%")[:1])
return x
df = pd.DataFrame(dict(a=["A","B","C"],col_with_percentage=["10%","70%","20%"]))
df["col_with_percentage"] = df["col_with_percentage"].apply(change_to_numerical)
df
结论
我认为代码片段非常有价值,重写代码可能是时间的真正浪费,因此拥有一个包含所有简单解决方案的完整工具包来简化你的数据分析过程可以提供极大的帮助。
如果你喜欢这篇文章,可以在 Twitter、LinkedIn 上与我联系,并在 Medium 上关注我。谢谢,下次见!😃
更多内容请访问plainenglish.io
个人简介:卢卡斯·索亚雷斯 是一位 AI 工程师,专注于深度学习应用于各种问题。
原文。已获许可转载。
相关内容:
-
如何在 Python 中工程化日期特征
-
在本地开发和测试 AWS 的 ETL 管道
-
Prefect:如何用 Python 编写和调度你的第一个 ETL 管道
更多相关内容
-
如何优化 SQL 查询以加快数据检索速度
-
优化和管理机器学习生命周期的 10 大 MLOps 工具
-
如何优化 Dockerfile 指令以加快构建时间
-
构建供应链管道所需的 6 种数据科学技术
-
ETL 与 ELT:哪个更适合你的数据管道?
-
使用 Bash 构建你的第一个 ETL 管道
我对数据科学候选人的 15 个期望
原文:www.kdnuggets.com/2021/08/15-things-data-science-candidates.html
评论
由Mathias Gruber,LEO Pharma 首席数据科学家
Office 矢量图由 macrovector 创建 — www.freepik.com
数据科学一如既往地受欢迎,但矛盾的是,它似乎也比以往任何时候都更加支离破碎和定义模糊。对于新手来说,弄清楚如何进入这个领域可能相当困难,更困难的是,管理者可能很难确定如何招聘合适的职位,除非你确切知道你在寻找什么。
在这篇文章中,我总结了我对数据科学候选人的期望。免责声明:这些反思基于我在生物技术和制药公司工作的经历,在这些公司中,数据科学是一个 支持性的 功能,而不是业务的核心部分;即,不是那种你可以 专门 从事销售预测的 AI 架构工作的职位,而是你需要端到端地工作以在 多个 业务领域创造价值的职位。
1. 激情与好奇心
热情和好奇心,当然,是任何从事技术工作的人的可取品质。数据科学作为一种巨大的领域,我认为在这个特定领域,它是一种更普遍的前提。在许多其他技术领域,你可以专注于一套技能,并利用这些技能为业务创造价值多年 — 也许每隔 X 年 需要学习一种新的编程语言或工具。然而,数据科学本质上是一个 科学的 学科,每天都在发展。
对于那些持续研究新数据科学发展并与团队分享这些信息的充满激情的候选人,价值巨大。
此外,候选人需要一定程度的热情和韧性,才能持续愿意从事数据科学工作,而不是因挫折而频繁跳槽;调试一个算法为什么不起作用可能比调试一个软件或基础设施为什么不起作用要复杂和令人沮丧得多。你需要一种特殊的疯狂才能多次经历这些挫折。???♂ 正如我之前所述 在这里:
如果选项在一位普通的资深数据科学家和一位眼中充满火焰的极度热情的候选人之间,所有其他条件相等时,选择后者。
如果你对数据科学没有热情,就不要进入这个领域;这不值得。漫画来自 xkcd.com
2. 心理承受能力
数据科学作为一种职业并不适合所有人。我们应该停止假装它适合所有人。
Alberto Romero
最近写了一篇有趣的 文章 ,描述了许多人存在的误解;如果你付出足够的努力,你可以成为一名数据科学家。这是不真实的。它是一项艰难的工作:
你需要理解数学和算法,你需要进行编码和软件开发,你需要理解商业问题,还需要具备良好的讲故事和人际交往能力。不是每个人都能同时做得很好。
我并不是说你需要 130 以上的智商才能成为数据科学家。我也不是试图吓退那些想要转行做数据科学的人。相反,如果你现在在其他学术级别的职位上,你很可能在数据科学领域表现良好。但如果你处于智商分布的低端,并且难以理解新概念和流程,那真的会是一场艰苦的战斗;不断学习新事物和挑战现状是数据科学工作的核心。注意,我这里说的不是使用低代码/无代码工具的普通数据科学家。
你不必是天才,但需要一定程度的智力。漫画来自 xkcd.com
3. 将现实问题转化为机器学习(ML)问题的能力
擅长工程化机器学习(ML)算法是一回事,擅长理解商业问题又是另一回事。然而,将这两者结合起来并找出如何用 ML 解决商业问题则是完全不同的挑战。
你需要能够将现实世界的问题转化为可以解决的机器学习问题。
最近 Brian Kent 写了一篇很棒的 文章 ,详细描述了数据科学的这一方面。实际上,当你作为数据科学家工作时(至少在我曾经工作的职位上),你很少会遇到“这是你的数据集,为这个目标拟合一个回归模型”这样的任务。你更常面临的商业问题可能是以下这些:
-
“我们希望利用一些新的人工智能技术来改善我们的现金流,”
-
“我们希望通过机器学习将这个化学品的产量提高 10%。”
-
“我们想要提高这个或那个过程/机器的效率。”
将这些现实世界的目标转化为可解决的 ML 问题是一个极其被低估的技能——你需要对相关业务过程和可用数据有透彻的理解,需要对 ML 能做什么有坚实的基础,最后,你需要对如何有效地应用不同技术以实现业务目标有良好的直觉。
这种技能稀缺,但你可以通过熟悉大量的 ML 应用程序并实际花时间思考这些问题来加以练习。
什么数据?什么模型?弄清楚要解决什么并不容易。漫画来自 xkcd.com
4. 诚实与谦逊
想象一下:业务想用 AI/ML 来优化一些过程。大家都很兴奋,你也很兴奋,所有人都期待看到结果。你做了一个模型,最初看起来很棒,大家都很兴奋。你随之意识到你在评估模型的方式上犯了一个错误,实际上它非常糟糕——数据中根本没有信号。
你需要成为一个完全承担责任的人,并承认自己犯错,无论后果如何。
错误是不可避免的。我们都会犯错。但没有人会因将错误掩盖在地毯下或更糟糕的,将错误归咎于他人而得到好处。上述情况应通过在展示结果时始终保持一定的谦逊来避免;如果结果是尚未经过同行验证的初步结果,那么在展示时清晰地说明这一点。不夸大其词。此外,一个优秀的候选人将始终是自己最严格的批评者:
花费与你得出结论一样多的时间来尝试反驳自己的结论,这样会建立自信。
诚实对数据科学至关重要。漫画来自 xkcd.com
5. 自动化与优化
每个人都讨厌重复性的任务。有些人讨厌到极点,尽可能地去自动化这些任务。我们说的是从自动化机器学习(autoML)和 GitHub copilot 这样的流行术语,到自动化代码环境的设置,以及普遍的“代码即一切”,甚至自动化日常时间记录等。对我来说,自动化和优化是优秀开发者/数据科学家的标志性思维方式。
自动化一切。在有意义的时候。漫画来自 xkcd.com
6. 实用主义与价值追求
数据科学是一个科学的学科。然而,当你被雇佣为数据科学家时,这份工作通常是将数据科学工具应用于创造商业价值。很少涉及做研究、提出新算法、开创新领域等。虽然有时会涉及,但很少。我们通常是被雇佣来创造商业价值的。
我们工作的目标是创造商业价值。
在从事工业数据科学工作的过程中,你必须对这一总体目标持务实态度。我在之前的一篇文章中写到了在我进入行业后学到的几个应避免的陷阱;你可以在这里阅读更多内容:
从初级数据科学家到首席数据科学家的 20 条经验教训
总结来说,我会说务实的方法包括:
-
始终以客户为中心——如果业务部门不支持,终止项目,它永远不会创造价值。
-
创造并选择正确的想法——不要仅仅因为上级认为某个问题/想法是个好主意就去做。如果技术上不可行,你需要转移注意力。
-
避免过度工程化——如果一种更简单的方法可以在一半的时间内解决问题,就使用那种方法。
-
关注执行——不要陷入过多的演示、讨论、如果这样和如果那样的情境中。开始做些事情吧。
我认为在 Medium 上有很多文章可以帮助你成为一个更务实的数据科学家。我最近读了这篇文章,作者是丹尼斯·艾勒斯,这篇文章描述了如何在工作中变得更加高效和有影响力,以及这篇文章,作者是阿奇·德·伯克,讲述了从学术界转型到工业界的注意事项。
务实并创造商业价值。不要关注那些不创造价值的事情。漫画来源于xkcd.com
7. 人格与团队契合
显然,候选人的性格及其与团队其他成员的契合度是重要的。这对所有候选人和所有工作都是如此。这也是为什么许多公司有 HR 部门,并在就业前进行性格测试的原因。心理学家通常使用 “五大性格特质” 来评估你刚认识的人。在这些性格特质中,我认为某些特质是相当重要的,例如一定程度的 尽责性(高效/有组织)、不讨好(发表你的意见,不做傻瓜)和 外向性(与业务交流,进行演示等),以及 开放性(研究新技术并打破固有思维)。总体来说,我不认为数据科学家有一个“理想”的性格特征,因此主要是避免有毒的性格。
只要保持冷静和友好即可。漫画来自 xkcd.com
8. 编码经验
编码是数据科学的核心部分。通常,你编写的代码必须与同事共享,以便将其投入生产,使你和未来的同事可以在未来多年维护它。因此,拥有一般软件开发和良好实践的经验是数据科学家最重要的素质之一。
如果另一个开发人员必须花费你编写代码的 2 倍时间来审查和修复这些代码,才能将其投入生产,那么你对团队来说是一个负担,而不是资产。
请注意,我不太在意不同的编码范式,也不在乎你是偏好笔记本还是纯脚本等。这些是各个团队可以制定的标准。我说的是,我见过初级开发者编写的代码完全可以理解,并且可以在几分钟内进行审查,而我也见过拥有 30 多年经验的高级开发者将 2 周的工作浓缩成 4 行难以理解的 R 代码。
如果你有一个公开的 Github 账户,展示了你能够编写易于理解的代码并提供良好的文档,这将是一个巨大的加分项。
编写其他人可以理解的代码。漫画来自 xkcd.com
9. 调试技能
我们常开玩笑说,工作的一部分就是花时间在 StackOverflow 上找代码片段。虽然你可以通过这种方式找到很多优秀的解决方案,但 调试 技能远不止于此。
不要成为唯一的调试技能是 StackOverflow 的人。
在纯代码方面,你需要阅读文档以了解事物的实际运作,有时甚至需要查看你所使用的开源库的源代码。在数据科学方面,情况可能会更加复杂;你可能需要阅读论文来理解事物的工作原理,然后找出为什么它没有按预期工作——这可能真的是一次艰难的经历,尤其是因为人们在实现算法时的所有数值细节并不总是记录在代码或论文中。
我会觉得看到候选人如何调试一段损坏的代码比他们通过查看在线资源解决特定问题的能力更有趣。
调试是一种技能和艺术。漫画来自xkcd.com
10. 适应性
适应性可能已经涵盖了关于务实和个性的要点。尽管如此,适应性是如此重要,以至于我希望它作为一个单独的要点。领域发展迅速,我们必须能够舍弃我们的宠儿。花了数百小时在一个项目上,但结果没有创造业务价值?放弃它。花了数百小时在 Tensorflow 上,但现在整个团队想使用 PyTorch?放弃它,学习 PyTorch。花了数千小时在 Python 上,但现在它无法满足你的需求?放弃它,学习一种新的足够的语言。不要沉迷于你花了多少时间做某事;那只会拖慢你的进度。
当你停止适应时,就是你开始在数据科学游戏中失去竞争力的那一天。
保持开放的心态并保持适应性。漫画来自xkcd.com
11. 全栈潜力
我曾经描述过我认为典型的数据科学建议,即在特定领域专注以避免成为“样样精通却无一专长”的建议是糟糕的。相反,应该努力成为“样样精通,几乎都精通”。
不要回避“数据科学独角兽”的想法,而是努力成为其中之一。
尽管如此,我不会寻找数据科学独角兽;人才库太稀缺,定义也不够明确。然而,我会筛选那些抱怨“成为数据科学独角兽是不可能的”的人。在我看来,这种在行业中相当普遍的说法是有害的,表明对动手实践和完成任务的厌恶。
自然,你不需要成为一个完整的前端/后端开发者和云/数据工程师。但我发现那些愿意涉猎其他领域的人在交付成果方面要有效得多。
保持开放的心态拓展你的视野,即使你可能不会成为大师。漫画来自 xkcd.com
12. 背景
在生物信息学、量子物理学或其他科学领域有背景显然在进入数据科学领域时有优势;这意味着你习惯阅读研究论文,曾经做过统计分析,也许有些编程经验等等。然而,拥有高级教育绝不是必需的。这不过是几年结构化的学习。但自然,你以前所做的和取得的成就会在申请新工作时被考虑。
我宁愿雇佣一个从零开始成为 Kaggle 比赛大师的人,也不愿雇佣一个有华丽教育背景的人,其他条件相同的话。
你的背景自然会影响你当前的技能。漫画来自 xkcd.com
13. 讲故事
这一点已经被无数次提及,所以我不会花太多时间讲解,尽管它很重要:数据科学家需要讲好故事。这意味着什么?学习创建吸引人的可视化效果,制作精美的演示文稿,进行有趣的演讲,撰写博客文章等。
你做得越多,尝试比上次做得更好,你就会变得越好。
学会讲有影响力的故事。漫画来自 xkcd.com
14. 协作
我的一个弱点是我在协作方面不太擅长——我认为这是因为在获得“真正”工作之前,我已经做了 10 多年的一人军队。这一事实使我更加欣赏那些擅长协作的人;创造商业价值的数据科学是一项团队工作,因此你必须擅长协作,包括所有相关内容;配对编程、适当的文档编制、合理的 git 提交、冲刺计划、回顾会议等。这种经验绝对是一个优势!如果你刚开始接触协作,找一个有趣的开源项目参与其中。
你需要能够在团队中工作!数据科学不能由一人完成。漫画由 xkcd.com
15. 数据科学经验
我列表上的最后一点是实际的 数据科学 经验。自然,如果候选人接触过该领域的各种学科,那将是有利的;例如,计算机视觉、自然语言处理、预测、经典监督/无监督技术、通用深度学习等。
根据我的经验,你很少会多次得到“相同”的任务。因此,拥有尽可能 广泛 的知识基础是有利的——有一天,你可能在做销售预测,另一天你可能在预测分子的化学属性或优化生产过程。如果我在招聘销售预测方面的人才,我不会过于担心候选人是否之前从未做过销售预测,只要这个人有做其他类型机器学习的丰富历史。学习如何解决新问题只是工作的另一天。
获得广泛经验的障碍相对较低;积极参与几个不同领域的 Kaggle 竞赛,你应该能开始获得基本的概览。此外,通过这样做,你还会建立一个展示你能力的作品集。我不是说这 容易,只是说开始起来容易。确保在遇到新概念时你能充分理解。
不要 仅仅将算法作为黑箱使用,而要让自己理解它们实际上在做什么。
你在这一领域的时间越长,你获得的经验就越多;我们都在不断学习。漫画来自 xkcd.com
最后的备注
我最后写了一篇相当长的文章。如果你读完了所有内容,我感谢你 ??? 我意识到许多提到的点适用于许多职业,特别是类似的数据工程、云工程等工作。这些是我从数据科学的角度出的反思。请注意,我从未期望一个初级开发者能完全符合所有提到的点——而是希望找到一个能够在所有这些方面成长的人。最后,我非常希望了解其他人在数据科学候选人身上寻找什么,所以欢迎留言或通过其他渠道与我联系。
简介: Mathias Gruber 在自然科学方面有广泛的背景,特别是在纳米科学和生物物理学方面。Mathias 在具有挑战性的环境中茁壮成长,热衷于获得知识和开发前沿技术。目前主要兴趣是数据科学的一切,即利用机器学习算法解决大规模数据问题,特别强调最前沿的深度学习方法。
原文。经授权转载。
相关:
-
你如何从数百名其他数据科学候选人中脱颖而出?
-
数据科学家与机器学习工程师的区别
-
你为什么以及如何学习“高效数据科学”?
更多相关内容
-
KDnuggets™ 新闻 22:n03,1 月 19 日:深入了解 13 个数据……
-
深入了解 13 种数据科学家角色及其职责
-
选择下一个数据科学职位前要牢记的 5 件事
-
你不知道的关于 SAS 数据科学学院的 3 件事
-
我开始数据科学时希望知道的 3 件事
-
学生在数据科学简历中遗漏的 7 件事
数据科学的 16 个关键 DVC 命令
原文:www.kdnuggets.com/2022/07/16-essential-dvc-commands-data-science.html
图片由作者提供
DVC(数据版本控制)是一个有用的工具,用于跟踪数据和机器学习模型、管道及实验。它与 Git 无缝协作,提供代码和数据版本控制环境。
我们的 3 个最佳课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你在 IT 领域的组织
DVC 命令与 Git 相似,除了版本控制外,它还提供了一个丰富的环境来训练、验证和部署机器学习模型。类似于 Git,你可以共享和协作处理机器学习项目。
在这篇文章中,我们将学习用于初始化、管理和共享 DVC 项目的重要命令。
16 个关键命令概览:
-
init
-
remote
-
add
-
remove
-
status
-
commit
-
checkout
-
push
-
pull
-
run
-
exp
-
repro
-
metrics
-
plots
-
dag
-
gc
1. init
DVC 初始化依赖于 Git。如果你在一个新目录中,请先初始化 Git,然后按照下面的示例初始化 DVC。
git init
dvc init
init 命令已创建一个 .dvc 目录。它包含与 DVC 配置和文件相关的所有元数据。
2. remote
DVC 远程命令用于与团队共享数据或在远程存储中创建副本。
只需添加一个远程名称和远程 URL。如我之前所说,这个命令与 Git 非常相似。
dvc remote add dagshub https://dagshub.com/kingabzpro/Urdu-ASR-SOTA.dvc
要查看远程存储列表,请使用:
dvc remote list
>>> dagshub https://dagshub.com/kingabzpro/Urdu-ASR-SOTA.dvc
要修改现有的远程配置,你可以使用下面的命令。它需要一个远程名称和一个新 URL。
dvc remote modify dagshub https://dagshub.com/kingabzpro/solar-radiation-ISB-MLOps.dvc
你可以使用上述模式重命名或移除远程。相对来说比较简单。
3. add
使用此命令来跟踪单个或多个文件和目录。
dvc add ./model ./data
当你将文件添加到 DVC 时,该命令会使用 .gitignore 从 Git 中移除它。相反,Git 将使用 .dvc 跟踪指针,以跟踪和提交更改。
在运行 add 命令后,你需要将文件添加到 Git 暂存区。
git add model.dvc data.dvc .gitignore
4. remove
要停止跟踪文件和目录,请使用 dvc remove <file>
命令。确保目录或文件具有扩展名 .dvc。你还可以使用此命令从 dvc.yml 中移除一个阶段。
dvc remove model.dvc
5. status
它将显示项目管道中的更改,并展示缓存和工作区或远程存储之间的更改。
dvc status
6. commit
commit 命令用于记录 DVC 跟踪的文件和文件夹中的更改。
dvc commit
7. checkout
当你使用 git checkout
更改仓库到较旧版本时,dvc checkout
用于根据 dvc.lock 和 .dvc 文件更新工作区中的跟踪文件。
dvc checkout
8. push
类似于 Git,你可以使用 dvc push
将文件从本地工作区推送到默认远程。push 命令对于团队协作和保持多个数据副本以避免灾难是必要的。
我使用 DagsHub 的远程存储来存储和更新生产中的模型。
对于默认远程:
dvc push
对于特定的远程存储:
dvc push -r <remote-name>
9. pull
pull 命令用于使用远程存储更新本地工作区。push 和 pull 的工作方式类似于 Git。
从默认远程提取文件:
dvc pull
从特定远程提取文件:
dvc pull -r <remote-name>
10. run
它帮助你在dvc.yml中创建和修改管道阶段。run 命令可用于组装机器学习和数据管道。
-
-n 是阶段名称
-
-d 是依赖项
-
-o 是输出
dvc run -n printer -d write.sh -o pages ./write.sh
11. exp
exp 或 experiment 命令用于生成、管理和运行机器学习实验。这是一个新功能。你可以在这里阅读更多关于实验管理的信息。
dvc exp {
show,apply,diff,run,gc,branch,list,push,pull,remove,init}
图片来自 DVC experiments
12. repro
repro 类似于 Make。你可以使用它来重现完整或部分管道。它按正确的顺序执行在其阶段中定义的命令。
dvc repro
13. metrics
通过使用 dvc repro
运行机器学习管道后,将生成模型性能指标。它表示标量数字,如 AUC。
要在终端查看指标,请使用:
dvc metrics show
并且要比较指标,请使用:
dvc metrics diff
metric diff 命令将比较工作区的指标与 HEAD。你也可以与特定的提交进行比较。
14. plots
plots 用于可视化数据系列,如 RMSE 与周期和损失函数。plots 可以与图像文件(JPEG、GIF 或 PNG)和数据系列文件(JSON、YAML、CSV 或 TSV)一起使用。它使用数据系列文件通过 Vega-Lite 渲染折线图。
显示机器学习结果:
dvc plots show logs.csv
图片来自 DVC Doc
与 HEAD 比较结果:
dvc plots diff HEAD^ --targets logs.csv
图片来自 DVC Doc
注意: 在DVC VSCode 新扩展中运行实验和可视化结果非常互动。
15. dag
它用于以一个或多个连接阶段的图形形式可视化管道。
dvc dag
16. gc
它用于从缓存或远程存储中删除未使用的文件或目录。类似于 Git,它用于优化仓库。
dvc gc -w
结论
DVC 已经成为数据科学和机器学习操作的一个重要工具。你可以对数据和模型进行版本控制,跟踪实验,开发管道,分享和协作,并将模型部署到生产环境。在这篇文章中,我们学习了 DVC 的基本命令。阅读文档以了解更多命令和功能。
如果你是新手并想互动体验 DVC,可以尝试DagsHub。该平台专为数据科学家和机器学习工程师而设计。你可以查看我的个人资料这里以获得灵感。
注意: 如果你想从 Git 仓库中删除 dvc 文件、管道、实验和指标,请使用
dvc destroy
。
更多关于数据科学命令的主题
-
数据科学家的 14 个必备 Git 命令
-
数据科学初学者的 20 个基础 Linux 命令
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学专业人士,喜欢构建机器学习模型。目前,他专注于内容创作,并撰写有关机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络构建一个 AI 产品,帮助那些在心理健康方面挣扎的学生。
更多相关主题
-
数据科学的 10 个必备 SQL 命令
-
数据科学家的 14 个必备 Git 命令
-
Streamlit 的 12 个必备命令
-
KDnuggets 新闻,6 月 29 日:数据科学的 20 个基础 Linux 命令…
-
数据科学初学者的 20 个基础 Linux 命令
-
每个数据科学家都应该知道的 12 个 Docker 命令
17 个必知数据科学面试问题及答案,第二部分
原文:www.kdnuggets.com/2017/02/17-data-science-interview-questions-answers-part-2.html
编辑注: 另见17 个必知数据科学面试问题及答案 第一部分。这是第二部分。这里是 第三部分。
本文回答了以下问题:
-
Q7. 过拟合是什么?如何避免?
-
Q8. 维度诅咒是什么?
-
Q9. 如何确定模型中哪些特征最重要?
-
Q10. 并行处理何时可以加速算法运行?何时可能使算法运行变慢?
-
Q11. 集成学习的基本思想是什么?
-
Q12. 在无监督学习中,如果数据集的真实情况未知,我们如何确定最有用的聚类数量?
Q7. 过拟合是什么?如何避免?
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升您的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您的组织 IT
Gregory Piatetsky 回答:
(注意:这是对 21 个必知数据科学面试问题及答案,第二部分的修订版*)*
过拟合 是指你构建了一个“过于紧密”地拟合数据的预测模型,以至于它捕捉到了数据中的随机噪声,而不是实际模式。因此,当应用于新数据时,模型预测将是错误的。
我们经常听到报道异常结果的研究(特别是如果你听《等待等待别告诉我》),或看到像“橙色的二手车最不可能是柠檬”这样的发现,或者得知研究推翻了以前确立的发现(鸡蛋现在对你没有坏处)。
许多此类研究产生了无法重复的可疑结果。
这是一个大问题,特别是在社会科学或医学领域,当研究人员经常犯数据科学的致命罪——过拟合数据。
研究人员在没有适当统计控制的情况下测试太多的假设,直到他们偶然发现一些有趣的东西,然后就报告出来。不出所料,下次这种效果(部分由于偶然性)会大大减小或消失。
这些研究实践中的缺陷由 John P. A. Ioannidis 在其开创性论文为什么大多数已发表的研究结果是错误的(PLoS Medicine,2005 年)中进行了识别和报告。Ioannidis 发现,结果往往被夸大或无法复制。他在论文中提供了统计证据,表明大多数声称的研究结果确实是错误的!
Ioannidis 指出,为了使研究结果可靠,应该具备以下条件:
-
大样本量和显著效果
-
测试关系的数量更多且选择更少
-
设计、定义、结果和分析模式的更大灵活性
-
最小化由于财务和其他因素(包括该科学领域的受欢迎程度)造成的偏差
不幸的是,这些规则往往被违反,产生虚假结果,例如 S&P 500 指数与孟加拉国黄油生产的强相关,或美国在科学、空间和技术上的支出与悬挂、窒息和勒死的自杀率相关(来自 http://tylervigen.com/spurious-correlations)
(来源:Tylervigen.com)
在虚假相关中查看更多奇怪和虚假的发现,或使用Google correlate等工具自行发现。
可以使用几种方法来避免“过拟合”数据:
-
尝试寻找最简单的假设
-
正则化(对复杂性进行惩罚)
-
随机化测试(随机化类别变量,尝试在此数据上应用你的方法——如果找到相同的强结果,说明存在问题)
-
嵌套交叉验证(在一个层级上进行特征选择,然后在外层级上进行整个方法的交叉验证)
-
调整假发现率
-
使用可重用的保留方法——2015 年提出的突破性方法
优秀的数据科学处于对世界科学理解的前沿,数据科学家有责任避免数据过拟合,并向公众和媒体普及糟糕数据分析的危险。
另见:
-
你的机器学习模型为何错误的 4 个原因(以及如何修正)
-
当好的建议变坏
-
数据挖掘和数据科学的根本罪过:过拟合
-
避免过拟合的大主意:可重用的保留集以保持适应性数据分析中的有效性
-
通过可重用保留集克服过拟合:保持适应性数据分析中的有效性
-
11 种聪明的过拟合方法及其避免方法
Q8. 什么是维度灾难?
普拉萨德·波雷 回答:
“随着特征或维度数量的增加,我们需要准确泛化的数据量呈指数增长。”
- 查尔斯·伊斯贝尔,乔治亚理工学院互动计算学院教授及高级副院长
下面是一个例子。图 1(a)显示了一个维度中的 10 个数据点,即数据集中只有一个特征。它可以用只有 10 个值的线轻松表示,x=1, 2, 3… 10。
但如果我们再添加一个特征,相同的数据将在 2 维中表示(图 1(b)),导致维度空间增加到 1010 =100。再添加第 3 个特征,维度空间将增加到 1010*10 = 1000。随着维度的增加,维度空间呈指数增长。
10¹ = 10
10² = 100
10³ = 1000 and so on...
数据的指数增长导致数据集的高度稀疏,并不必要地增加了特定建模算法的存储空间和处理时间。想象一下高分辨率图像的图像识别问题,1280 × 720 = 921,600 像素,即 921600 维。天哪。这就是为什么它被称为维度灾难。额外维度带来的价值比其对算法增加的开销要小得多。
总而言之,原本可以用 10 个空间单位表示的数据,在添加了 2 个维度后,需要 1000 个空间单位,仅仅因为我们在实验中观察到了这些维度。真正的维度是指准确泛化数据的维度,观察到的维度是指我们在数据集中考虑的其他维度,这些维度可能对准确泛化数据有或没有贡献。
Q9. 如何确定模型中哪些特征最为重要?
翠玉·范 回答:
在应用机器学习中,成功在很大程度上依赖于数据表示(特征)的质量。高度相关的特征可以使分类模块中的学习/排序步骤变得容易。相反,如果标签类别是特征的非常复杂的函数,可能很难建立一个良好的模型 [Dom 2012]。因此,通常需要所谓的特征工程,即将数据转化为与问题最相关的特征的过程。
一个特征选择方案通常涉及自动从大规模探索性特征池中选择显著特征的技术。冗余和无关的特征已知会导致准确性较差,因此丢弃这些特征应当是首要任务。相关性通常通过互信息计算进行评分。此外,输入特征应提供较高的类别区分度。特征的可分离性可以通过类别之间的距离或方差比来测量。最近的工作 [Pham 2016] 提出了基于系统投票的特征选择方法,这是一种结合上述标准的数据驱动方法。这可以作为广泛类别问题的通用框架。
一种数据驱动的特征选择方法,结合了几种显著性标准 [Pham 2016]。
另一种方法是对那些不太重要的特征(例如,导致高错误度量的特征)进行惩罚,这些方法包括 Lasso 或 Ridge 等正则化方法。
参考文献:
-
[Dom 2012] P. Domingos. 关于机器学习的一些有用知识。ACM 通讯,55(10):78–87, 2012。 2.4
-
[Pham 2016] T. T. Pham, C. Thamrin, P. D. Robinson, 和 P. H. W. Leong. 强迫振荡测量中的呼吸伪影去除:一种机器学习方法。生物医学工程,IEEE 汇刊,已接受,2016。
Q10. 何时并行化能使你的算法运行得更快?何时可能使你的算法运行得更慢?
Anmol Rajpurohit 回答:
当任务可以分解为可以独立执行而无需通信或共享资源的子任务时,并行计算是一个好主意。即便如此,效率的实现是实现并行化好处的关键。在实际应用中,大多数程序有些部分需要以串行方式执行,并且并行可执行的子任务需要某种同步或数据传输。因此,很难预测并行化是否真的能使算法比串行方法运行得更快。
相比于顺序完成任务所需的计算周期,并行计算总是会有开销。至少,这些开销包括将任务分解为子任务和汇总子任务结果。
并行计算相对于顺序计算的性能主要取决于这些开销所消耗的时间与并行化带来的时间节省的比较。
注意:并行化带来的开销不仅限于代码的运行时间,还包括编码和调试所需的额外时间(并行化与顺序代码)。
评估并行化收益的一个广为人知的理论方法是阿姆达尔定律,它提供了以下公式来测量并行运行子任务(在不同处理器上)与顺序运行(在单一处理器上)相比的加速:
其中:
-
S**延迟是整个任务执行的理论加速;
-
s 是受益于改进系统资源的任务部分的加速;
-
p 是受益于改进资源的部分在原始执行时间中所占的比例。
要理解阿姆达尔定律的含义,请查看以下图示,该图展示了针对不同水平的可并行化任务,理论上随着处理器核心数量的增加而加速的情况:
重要的是要注意,并不是每个程序都可以有效地并行化。实际上,由于顺序部分、通讯成本等限制,很少有程序能实现完美的加速。通常,大数据集构成了并行化的一个有力理由。然而,不应假设并行化会带来性能上的好处。应该在投入并行化努力之前,将并行化和顺序执行的性能在问题的子集上进行比较。
Q11. 集成学习背后的思想是什么?
Prasad Pore 回答:
“在统计学和机器学习中,集成方法使用多种学习算法来获得比任何单一学习算法更好的预测性能。”
– 维基百科。
想象你在玩“谁想成为百万富翁?”并且达到了最后一个百万美元的问题。你对这个问题毫无头绪,但你还有观众投票和电话朋友的救生圈。谢天谢地。在这个阶段,你不想冒任何风险,那么你会怎么做以确保得到正确答案,成为百万富翁呢?
你会使用两个生命线,对吗?假设 70%的观众说正确答案是 D,而你的朋友也以 90%的信心说正确答案是 D,因为他是该问题领域的专家。使用两个生命线可以给你 80%的平均信心,认为 D 是正确的,并使你更接近成为百万富翁。
这就是 集成方法 的方法。
著名的 Netflix 奖 竞赛花费了近 3 年时间才实现 10%的改进 目标。获胜者使用了梯度提升决策树来结合超过 500 个模型。
在集成方法中,使用的模型越多样,最终结果的稳健性就会越高。
集成中使用的不同模型通过人口差异、生成的假设差异、使用的算法差异以及参数化差异来改善整体方差。主要有 3 种广泛使用的集成技术:
-
装袋
-
提升
-
堆叠
如果你为相同的数据和相同的响应变量构建了不同的模型,你可以使用上述方法之一来构建集成模型。由于集成中使用的每个模型都有其自身的性能指标,因此一些模型的表现可能会优于最终的集成模型,而一些模型的表现可能会差于或与集成模型相当。但总体而言,集成方法将提高模型的整体准确性和稳定性,尽管这会以模型可理解性为代价。
更多关于集成方法的信息请参见:
-
集成方法:优雅的技巧以提高机器学习结果
-
数据科学基础:集成学习者简介
Q12. 在无监督学习中,如果数据集的真实情况未知,我们如何确定最有用的聚类数量?
马修·梅奥 回答:
在 有监督 学习中,数据集中类的数量是明确知道的,因为每个数据实例都标记为某个现存类别的成员。在最坏的情况下,我们可以扫描类别属性并计算存在的唯一条目数量。
在无监督学习中,类属性和明确的类成员关系并不存在;事实上,无监督学习的一种主要形式——数据聚类——旨在通过最小化类间实例相似性和最大化类内相似性来近似类成员关系。聚类的一个主要缺点是需要在开始时以某种形式提供未标记数据集中存在的类数。如果幸运的话,我们可能会提前知道数据的真实情况——实际的类数。然而,这并不总是如此,原因有很多,其中之一是数据中可能根本没有定义的类数(从而没有定义的簇),无监督学习任务的整个重点就是调查数据并尝试强加某些有意义的最优簇和类数结构。
在不知道数据集的真实情况的情况下,我们如何知道数据簇的最优数量?正如预期的那样,实际上有许多方法可以回答这个问题。我们将查看两种特别流行的方法来尝试回答这个问题:肘部法则和轮廓法。
肘部法则
肘部法则通常是一个最佳的起点,尤其因为它易于解释和通过可视化进行验证。肘部法则旨在解释方差作为簇数(k 在 k-均值中的那个 k)的函数。通过绘制解释的方差百分比与 k 的关系,前 N 个簇应该提供显著的信息,解释方差;然而,某个最终的 k 值将导致信息增益显著减少,此时图表将呈现出明显的角度。这个角度将是肘部法则视角下的最优簇数。
显然,为了将方差绘制与不同簇数的关系,必须测试不同数量的簇。必须进行连续的完整聚类方法迭代,然后可以绘制和比较结果。
图片来源。
轮廓法
轮廓法衡量对象与其自身簇的相似性——称为凝聚度——与其他簇的相似性——称为分离度。轮廓值是这种比较的手段,其范围为[-1, 1];值接近 1 表示与自身簇中的对象关系紧密,而值接近-1 则表示相反。在模型中产生大多数高轮廓值的聚类数据集可能是一个可接受且合适的模型。
图片来源。
了解轮廓法的更多信息请点击这里。关于计算轮廓值的具体内容请见这里。
相关内容:
-
17 个更多必须知道的数据科学面试问题及答案
-
17 个更多必须知道的数据科学面试问题及答案,第三部分
-
21 个必须知道的数据科学面试问题及答案
-
21 个必须知道的数据科学面试问题及答案,第二部分
更多相关话题
-
20 个问题(带答案)检测虚假数据科学家:ChatGPT…
-
20 个问题(带答案)检测虚假数据科学家:ChatGPT…
-
7 个数据分析面试问题与答案
-
5 个 Python 面试问题与答案
-
3 个更多 SQL 聚合函数数据科学面试问题
-
数据科学面试指南 - 第二部分:面试资源
17 个必知的数据科学面试问题及答案,第三部分
原文:www.kdnuggets.com/2017/03/17-data-science-interview-questions-answers-part-3.html/2
Q15. 在 A/B 测试中,我们如何确保各个桶的分配是真正随机的?
Matthew Mayo 回答:
首先,让我们考虑如何在桶分配之前最好地确保桶之间的可比性,而不需要知道人群属性的任何分布。
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织 IT
答案很简单:随机选择和桶分配。在不考虑人群属性的情况下进行随机选择和桶分配是一种统计上合理的方法,只要人群足够大。
例如,假设你正在测试网站功能的更改,并且只对特定区域(例如美国)的响应感兴趣。通过首先将样本分为 2 组(对照组和处理组),而不考虑用户区域(且人群足够大),美国访问者应当在这两组之间分配。从这 2 个桶中,可以检查访问者属性以进行测试,例如:
if (region == "US" && bucket == "treatment"):
# do something treatment-related here
else:
if (region == "US" && bucket == "control"):
# do something control-related here
else:
# catch-all for non-US (and not relevant to testing scenario)
图片来源。
请记住,即使在进行了一轮随机桶分配后,也可以利用统计测试来检查/验证桶成员属性的随机分布(例如,确保没有显著更多的美国访问者被分配到桶 A)。如果没有,可以尝试新的随机分配(并进行类似的检查/验证过程),或者–如果确定人群不符合合作分布–可以采取如下方法。
如果我们事先知道某些不均匀的人群属性分布,分层随机抽样 可能有助于确保更均匀的抽样。这种策略可以帮助消除选择偏差,这是 A/B 测试的死敌。
参考文献:
-
检测和避免 A/B 测试中的桶不平衡
-
有哪些方法可以确保 A/B 测试中的人群分割是随机的?
-
A/B 测试
Q16. 你会如何对选择功能进行 A/B 测试?
Matthew Mayo 答复:
这个问题似乎有些模糊,有多种可解释的含义(这一点可以参考这篇文章)。让我们首先看看这个问题的不同可能解释,然后再讨论。
-
你会如何对选择版本的功能与非选择版本的功能进行 A/B 测试?
这将不允许进行公平或有意义的 A/B 测试,因为一个桶会从整个网站的用户中填充,而另一个桶则从已经选择的用户组中填充。这样的测试就像将一些苹果与所有橙子进行比较,因此是不明智的。
-
你会如何对选择功能的采纳(或使用)进行 A/B 测试(即测试实际的选择)?
这将是测试实际的选择过程——例如测试两个“点击这里注册”功能的版本——因此这只是一个常规的 A/B 测试(有关一些见解,请参见上述问题)。
-
你会如何对不同版本的选择功能(即那些已经选择的用户)进行 A/B 测试?
这可能再次被解读为几种含义之一,但我打算将其视为事件链的复杂场景,下面将详细展开。
让我们详细探讨上面列表中的第 3 点。我们先来看一个可以测试的简单事件链,然后再进行概括。假设你在对一封电子邮件营销活动进行 A/B 测试。假设变量是主题行,内容在两个版本之间保持不变。假设主题行如下:
-
我们有一些东西给你
-
本周末最好的在线数据科学课程免费!立即尝试,无需承诺!
确实是人为构造的。撇开其他不谈,直觉上说,主题 #2 会获得更多的点击。
但除此之外,还有心理学因素在起作用。即使点击任何一个主题后的内容是相同的,点击第二个主题的个人可能会有更高的兴奋感和对后续内容的期待。不同群体之间这种期望和投入程度的差异可能会导致主题行 #2 所在组的点击率更高——即使内容相同。
稍微转移话题… 你会如何对不同版本的选择功能(即对那些已经选择的人)进行 A/B 测试?
如果我对评估一系列链式事件的解释是正确的,那么这样的 A/B 测试可以从不同的输入位置开始,都是相同内容的选择,然后转到选择后的不同后续着陆页,目的是测量用户在结果着陆页上的行为。
不同来源位置对相同的选择程序是否会导致不同的后续行为?当然,这仍然是一个 A/B 测试,具有相同的目标、设置和评估;然而,所测量的具体用户心理是不同的。
这与面试问题有什么关系?除了能够识别 A/B 测试的基本概念,能够处理不精确的问题对于从事分析和数据科学工作的人来说是一项资产。
Q17. 如何确定 Twitter 用户的影响力?
Gregory Piatetsky 回答:
社交网络是当今网络的核心,而在社交网络中确定影响力是一个巨大的研究领域。Twitter 影响力是整体社交网络影响力研究中的一个狭窄领域。
Twitter 用户的影响力超越了简单的关注者数量。我们还希望检查推文的有效性——它们被转发、收藏的可能性,或其中的链接被点击的频率。什么算作有影响力的用户取决于定义——讨论的不同类型的影响包括名人、意见领袖、影响者、讨论者、创新者、主题专家、策展人、评论员等。
一个关键挑战是高效地计算影响力。Twitter 上的另一个问题是区分人类和机器人。
用于量化 Twitter 上影响力的常见测量方法包括许多版本的网络中心性——节点在网络中的重要性,以及基于 PageRank 的度量。
KDnuggets Twitter 社交网络,在 2014 年 5 月由 NodeXL 可视化。
使用的传统网络测量方法包括
-
接近中心性,基于从一个节点到所有其他节点的最短路径的长度。它测量每个节点相对于整个网络的可见性或可达性。
-
间接中心性考虑了每个节点 i 的所有最短路径,这些路径应通过 i 连接网络中的所有其他节点。它测量每个节点在网络内促进通信的能力。
其他提出的测量方法包括转发影响(推文被转发的可能性)和 PageRank 的变体,如 TunkRank——参见 A Twitter Analog to PageRank。
对整体影响力的一个重要补充是查看话题内的影响力——由 Agilience 和 RightRelevant 完成。例如,贾斯汀·比伯可能整体影响力很高,但在数据科学领域,他的影响力不如 KDnuggets。
Twitter 提供了一个REST API,允许访问关键指标,但对请求数量和返回的数据有限制。
许多网站曾测量 Twitter 用户的影响力,但由于许多业务模型未能实现,许多网站被收购或倒闭。目前仍然活跃的网站包括以下内容:
免费:
-
Agilience(KDnuggets 在机器学习领域排名第 1,在数据挖掘领域排名第 1,在数据科学领域排名第 2)
-
Klout,klout.com(KDnuggets 的 Klout 评分为 79)
-
Influence Tracker,www.influencetracker.com,KDnuggets 影响力评分 39.2
-
Right Relevance——衡量 Twitter 用户在某一话题中的具体相关性。
付费:
-
Brandwatch(购买了 PeerIndex)
-
Hubspot
-
Simplymeasured
相关的 KDnuggets 文章:
-
Agilience 顶级数据挖掘、数据科学权威
-
Twitter 上的 12 位数据分析思想领袖
-
数据科学领域的 123 位最具影响力人物
-
RightRelevance 帮助寻找大数据、数据科学及其他领域的关键话题和顶级影响者
相关的 KDnuggets 标签:
-
/tag/influencers
-
/tag/big-data-influencers
若需更深入的分析,请参阅以下技术文章:
-
什么是衡量 Twitter 用户影响力的好方法?,Quora
-
在 Twitter 上测量用户影响力:百万关注者的误区,AAAI,2010
-
在 Twitter 上测量用户影响力:一项调查,arXiv,2015
-
在 Twitter 上测量影响力,I. Anger 和 C. Kittl
-
一位数据科学家解释如何最大化你在 Twitter 上的影响力,Business Insider,2014
相关:
-
17 个必须知道的数据科学面试问题和答案
-
17 个必须知道的数据科学面试问题和答案,第二部分
-
21 个必须知道的数据科学面试问题和答案
-
21 个必知的数据科学面试问题及答案,第二部分
更多相关内容
-
识别伪数据科学家的 20 个问题(含答案):ChatGPT…
-
识别伪数据科学家的 20 个问题(含答案):ChatGPT…
-
7 个数据分析面试问题及答案
-
5 个 Python 面试问题及答案
-
停止学习数据科学以寻找目标并通过寻找目标来…
-
数据科学学习统计的最佳资源
性? -
我们是否应该根据清洗工作的成本、数据的使用频率还是其在数据模型中的相对重要性来选择数据进行清洗?或者,这些因素的组合?是什么样的组合?
-
通过去除不完整或错误的数据来提高数据准确性是否是一个好主意?在删除某些数据时,我们如何确保不会引入偏差?
鉴于工作范围广泛和资源极其有限(相对而言!),在大数据项目中的数据质量工作常见的一种方法是采用基线方法,其中,对数据用户进行调查,以确定和记录确保支持的业务流程不被干扰所需的最低数据质量。这些最低满意的数据质量水平被称为基线,数据质量工作集中在确保每个数据的质量不低于其基线水平。这看起来是一个不错的起点,之后你可以根据业务需求和预算情况深入到更高级的工作中。
改进大数据项目数据质量的建议总结:
-
识别并优先考虑业务用例(然后,利用这些用例定义数据质量指标、测量方法、改进目标等)。
-
基于对业务用例的深入理解和为实现这些用例所实施的大数据架构,设计并实施一个最佳的数据治理层(数据定义、元数据要求、数据所有权、数据流图等)。
-
记录关键数据的基线质量水平(考虑“关键路径”图和“吞吐瓶颈”评估)。
-
定义数据质量工作回报率(以创建回馈循环,用于改进效率并维持数据质量工作的资金支持)。
-
整合数据质量工作(通过减少冗余来提高效率)。
-
自动化数据质量监控(以降低成本并让员工专注于复杂任务)。
不要依赖机器学习自动处理差的数据质量(机器学习是科学,而不是魔法!)。
下一页还有 3 个有趣的答案 - 继续阅读…
更多相关话题
-
检测伪数据科学家的 20 个问题(附答案):ChatGPT…
-
检测伪数据科学家的 20 个问题(附答案):ChatGPT…
-
7 个数据分析面试问题及答案
-
5 个 Python 面试问题及答案
-
停止学习数据科学以寻找目标,并以寻找目标…
-
学习数据科学统计的顶级资源
17 个必须知道的数据科学面试问题及答案
原文:https://www.kdnuggets.com/2017/02/17-data-science-interview-questions-answers.html/2
Q4. 为什么包含较少的预测变量比包含许多预测变量更可取?
Anmol Rajpurohit 的回答:
这里有几个理由说明为什么使用较少的预测变量可能比使用许多预测变量更好:
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌IT支持专业证书 - 支持你的组织IT。
冗余/不相关:
如果你处理了许多预测变量,那么很可能其中一些变量之间存在隐藏的关系,导致冗余。除非在数据分析的早期阶段识别并处理这些冗余(通过仅选择非冗余的预测变量),否则它可能对后续步骤造成巨大阻碍。
也有可能并非所有预测变量对因变量都有显著影响。你应该确保你选择的预测变量集合中没有任何不相关的变量——即使你知道数据模型会通过赋予这些变量较低的重要性来处理它们。
注意:冗余和不相关是两个不同的概念——一个相关的特征由于存在其他相关特征而可能变得冗余。
过拟合:
即使你有大量的预测变量,并且它们之间没有任何关系,仍然建议使用较少的预测变量。具有大量预测变量的数据模型(也称为复杂模型)通常会出现过拟合的问题,这种情况下,数据模型在训练数据上表现很好,但在测试数据上表现不佳。
生产力:
假设你有一个项目,其中包含大量的预测变量,并且所有这些变量都是相关的(即对因变量有可测量的影响)。显然,你会希望使用所有这些变量,以便构建一个成功率非常高的数据模型。尽管这种方法听起来非常诱人,但实际考虑(如可用数据量、存储和计算资源、完成所需时间等)使得这种做法几乎不可能实现。
因此,即使你有大量相关的预测变量,使用较少的预测变量(通过特征选择筛选或通过特征提取开发)也是一个好主意。这本质上类似于帕累托原则,该原则指出,对于许多事件,约80%的效果来自20%的原因。
关注那20%最重要的预测变量,将对在合理时间内构建成功率较高的数据模型非常有帮助,而不需要大量数据或其他资源。
训练误差与测试误差 vs 模型复杂性(来源:Quora 发布者:Sergul Aydore)
可理解性:
使用较少预测变量的模型更易于理解和解释。由于数据科学步骤将由人类执行,结果将由人类呈现(并且希望被使用),因此考虑到人脑的综合能力非常重要。这基本上是一个权衡——你放弃了一些潜在的好处,以提高数据模型的成功率,同时使数据模型更易于理解和优化。
如果在项目结束时你需要向他人展示你的结果,而这些人不仅对高成功率感兴趣,还对“幕后”发生的情况感兴趣,这一点特别重要。
Q5. 你会使用什么误差指标来评估一个二分类器的好坏?如果类别不平衡呢?如果有多于2个组呢?
Prasad Pore 回答:
二分类涉及将数据分类为两个组,例如,客户是否购买某一特定产品(是/否),基于性别、年龄、位置等独立变量。
由于目标变量不是连续的,二分类模型预测目标变量为“是/否”的概率。为了评估这样的模型,使用了一种称为混淆矩阵的指标,也叫分类矩阵或一致性矩阵。借助混淆矩阵,我们可以计算出重要的性能指标:
-
真阳性率(TPR)或命中率或召回率或敏感性 = TP / (TP + FN)
-
假阳性率(FPR)或假警报率 = 1 - 特异性 = 1 - (TN / (TN + FP))
-
准确率 = (TP + TN) / (TP + TN + FP + FN)
-
错误率 = 1 – 准确率 或 (FP + FN) / (TP + TN + FP + FN)
-
精确度 = TP / (TP + FP)
-
F-measure: 2 / ( (1 / 精确度) + (1 / 召回率) )
-
ROC(接收操作特征曲线)= FPR vs TPR的图示
-
AUC(曲线下面积)
-
Kappa统计量
你可以在这里找到更多关于这些指标的详细信息:测量分类模型准确性的最佳指标。
所有这些措施都应结合领域技能并加以平衡,例如,如果你仅在预测无癌症患者时获得更高的TPR,那么在诊断癌症时将没有帮助。
在癌症诊断数据的相同示例中,如果只有2%或更少的患者有癌症,则这是一个类别不平衡的情况,因为癌症患者的比例相对于其他人群非常小。处理此问题的主要有2种方法:
- 使用成本函数:在这种方法中,借助成本矩阵(类似于混淆矩阵,但更关注假阳性和假阴性)来评估与数据误分类相关的成本。主要目的是减少误分类的成本。假阴性的成本总是高于假阳性的成本。例如,错误地预测癌症患者为无癌症比错误地预测无癌症患者为癌症更危险。
总成本 = 假阴性的成本 * 假阴性的数量 + 假阳性的成本 * 假阳性的数量
- 使用不同的采样方法:在这种方法中,你可以使用过采样、欠采样或混合采样。在过采样中,少数类观察值被复制以平衡数据。观察值的复制会导致过拟合,导致训练中准确度高但在未见数据中准确度低。在欠采样中,去除多数类观察值会导致信息丢失。这有助于减少处理时间和存储,但仅在你有大量数据集时才有用。
如果目标变量中有多个类别,则会形成一个与类别数量相等的混淆矩阵,并可以计算每个类别的所有性能指标。这称为多类混淆矩阵。例如,如果响应变量中有3个类别X、Y、Z,那么每个类别的召回率计算如下:
Recall_X = TP_X/(TP_X+FN_X)
Recall_Y = TP_Y/(TP_Y+FN_Y)
Recall_Z = TP_Z/(TP_Z+FN_Z)
Q6. 我可以通过哪些方法使我的模型对异常值更具鲁棒性?
Thuy Pham 回答:
有多种方法可以使模型对异常值更具鲁棒性,从不同的角度(数据准备或模型构建)。异常值在问答中被认为是人类知识中不需要的、意外的或必须是错误的值(例如,没有人200岁),而不是可能但稀有的事件。
异常值通常是相对于分布来定义的。因此,可以在预处理步骤(任何学习步骤之前)中通过使用标准差(对于正态分布)或四分位数范围(对于非正态/未知分布)作为阈值水平来移除异常值。
异常值。 图片来源
此外,数据转换(例如对数转换)可能有助于当数据存在明显尾部时。当异常值与收集仪器的灵敏度有关,这些仪器可能无法准确记录小值时,Winsorization可能会有用。这种类型的转换(以Charles P. Winsor (1895–1951)的名字命名)具有与剪切信号相同的效果(即用不那么极端的值替换极端数据值)。 另一种减少异常值影响的选项是使用平均绝对差而不是均方误差。
对于模型构建,一些模型对异常值具有抗性(例如,基于树的方法)或非参数测试。类似于中位数效应,树模型在每次分裂时将每个节点分成两个。因此,在每次分裂时,所有数据点在一个桶中都可以被平等对待,无论它们可能有多极端。研究[Pham 2016]提出了一种检测模型,该模型结合了数据的四分位数信息来预测数据的异常值。
参考文献:
[Pham 2016] T. T. Pham, C. Thamrin, P. D. Robinson, 和 P. H. W. Leong. 在强迫振荡测量中的呼吸伪影去除:一种机器学习方法。IEEE生物医学工程学报,2016。
这个Quora回答包含了更多信息。
相关话题
-
建立稳固的数据团队
-
使用管道编写干净的Python代码
-
7个数据分析面试问题与答案
-
5个Python面试问题与答案
-
检测伪数据科学家的20个问题(附答案):ChatGPT…
-
检测伪数据科学家的20个问题(附答案):ChatGPT…
中客户行为随时间变化。例如,一家电话公司开发了一个预测客户流失的模型,或一家信用卡公司开发了一个预测交易欺诈的模型。训练数据是历史数据,而(新)测试数据是当前数据。
这样的模型需要定期重新训练,并且要确定何时可以比较旧数据(训练集)和新数据中的关键变量分布,如果有足够显著的差异,则需要重新训练模型。
有关更详细和技术性的讨论,请参见下面的参考文献。
参考文献:
[1] Marco Saerens, Patrice Latinne, Christine Decaestecker: 调整分类器输出以适应新的先验概率:一个简单的过程。Neural Computation 14(1): 21-41 (2002)
[2] 《非平稳环境中的机器学习:协变量转移适应导论》,Masashi Sugiyama, Motoaki Kawanabe,MIT出版社,2012,ISBN 0262017091,9780262017091
[3] Quora 对于 测试数据分布与训练数据分布显著不同可能会有什么问题?
[4] 分类中的数据集转移:方法与问题,Francisco Herrera 邀请讲座,2011。
[5] 当训练集和测试集不同:学习迁移的特征,Amos Storkey,2013。
Q3. 偏差和方差是什么,它们与建模数据的关系是什么?
Matthew Mayo 回答:
偏差是模型预测与正确性之间的偏离程度,而方差是这些预测在模型迭代间变化的程度。
偏差与方差,图像来源
举个例子,通过一个简单的有缺陷的总统选举调查作为示例,通过偏差和方差的双重视角解释调查中的错误:从电话簿中选择调查参与者是一个偏差来源;小样本量是方差的来源。
最小化总模型误差依赖于偏差和方差误差的平衡。理想情况下,模型是低方差的无偏数据的集合。然而,不幸的是,模型越复杂,其倾向于减少偏差但增加方差;因此,最佳模型需要考虑这两种属性之间的平衡。
交叉验证的统计评估方法既有助于展示这种平衡的重要性,也有助于实际寻找这种平衡。使用的数据折数——即k-折交叉验证中的k值——是一个重要决策;值越低,误差估计的偏差越高,而方差则较少。
偏差和方差对总误差的贡献,图像来源 相反,当k等于实例数量时,误差估计的偏差非常低,但方差可能很高。
最重要的要点是偏差和方差是构建模型时两个重要的权衡方面,即使是最常规的统计评估方法也直接依赖于这种权衡。
在下一页,我们回答
-
为什么选择较少的预测变量可能比选择更多的预测变量更优?
-
你会使用什么错误度量来评估一个二分类器的好坏?
-
有哪些方法可以使我的模型对异常值更加稳健?
更多相关话题
-
建立一个稳固的数据团队
-
使用管道编写干净的 Python 代码
-
7 个数据分析面试问题及答案
-
5 个 Python 面试问题及答案
-
识别假数据科学家的 20 个问题(附答案):ChatGPT…
-
识别假数据科学家的 20 个问题(附答案):ChatGPT…
数据科学中的业务直觉
www.kdnuggets.com/2017/10/business-intuition-data-science.html (原文)
评论
作者:Jahnavi Mahanta
通常,当我们考虑数据科学任务时,首先想到的是需要应用的算法技术。虽然这非常重要,但典型的数据科学任务还需要同等的关注其他许多步骤。
我们的前三个课程推荐
1. Google 网络安全证书 - 加入网络安全职业速成班
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 为 IT 部门提供支持
典型的数据科学任务可能包含以下阶段:
让我通过一个简单的案例研究来解释:
这是一个在线零售商,在假日季节之前的十一月份举办购物节。他们的产品目录中有一百万个产品,并且在过去的时期有一亿个客户购买了他们的商品。
零售商希望向其客户群体发送促销电子邮件。目标是运营一系列“成功的电子邮件营销活动”。
现在让我们了解这个特定任务的不同生命周期阶段:
1. 定义业务目标:
这是一个非常关键的阶段,因为对当前业务问题/目标的错误解释可能导致错误的解决方案和不可取的结果。如果你真的考虑一下,数据科学的角色是使用数据和洞察力来解决现实世界的问题。从这个角度来看,准确地识别问题和定义目标对于成功的结果至关重要。在这个例子中,营销人员想要向每位客户发送定制电子邮件,展示根据客户的偏好和口味精心策划的产品优惠列表:
图片来源
在这种情况下,为了定义业务目标,我们需要提出一些问题:
1. 我们是给所有 1 亿客户发送电子邮件,还是给一部分客户发电子邮件?
来源:daric.classtell.com/
零售商正在组织一次购物节,因此向所有 1 亿客户发送电子邮件可能是有意义的,但还是需要考虑一些要点:
a. 通过向所有客户发送大量电子邮件,会让一些客户感到不满意。例如,那些不活跃地在零售商那里购物的客户。
b. 由于我们希望向客户展示经过策划的产品列表(基于个人的偏好),所以,如果考虑了所有的 1 亿客户,我们可能会得到一组客户,这些客户对任何产品的偏好可能不是很高(可能是因为他们并没有在这家零售商那里购买很多东西,因此,零售商没有足够的信息来了解他们的偏好)
c. 有时,数据处理和存储成本也可能是一个考虑因素。处理 1 亿客户及其特征,运行机器学习算法可能非常耗时和资源密集。虽然基础设施可以处理,但结合前两个考虑因素,排除一些客户可能有意义,特别是为了加快上市时间。
来源:mobileadvertisingwatch.com
2、我们如何定义和量化成功度量标准?这是一个非常重要的决定,直接关系到业务目标。在上述情况下,我们可以有几种可能的成功度量标准:
a. 营销活动的购买率(购买数/发送的电子邮件数):这个度量标准将告诉我们营销活动有多有效说服客户去消费。所以,如果零售商只关心整个营销活动带来了多少销售额,那么这个度量就是要注意的!
来源:https://www.jaroop.com/web-traffic/
b. 营销活动的电子邮件打开率(打开的电子邮件数/发送的电子邮件数):如果零售商想要了解其他因素,比如电子邮件活动内容的有效性,那么这可能很重要,特别是在这种情况下,电子邮件主题有多“吸引人”。同样地,电子邮件点击率(在打开邮件后,点击邮件中提供的网站链接,以登陆零售商网站)显示了电子邮件内容的有效性。
c. 营销活动的盈利能力: 有时,与其只吸引更多的客户做出反应(即提高反馈率),零售商可能对吸引每位客户的花费更感兴趣。这样想吧 – 一个旨在吸引更多客户消费的活动可能吸引购买很多产品但价值较低的客户,逃避购买较少但购买高价值产品的客户。
2、数据处理和分析:
这同样是另一个非常重要的阶段,我们详细了解手头可用的数据以及如何使用它准确地解决手头的问题。
大致来说,这个阶段可能包括以下步骤:
-
缺失值处理
-
异常值处理
-
数据细分
-
特征工程
一个接一个地浏览它们,以便对为什么需要这一步有所直觉。在上面的案例中,假设您有以下的数据,来自过去的促销电子邮件活动:
上面的数据是在线零售商的一部分信息的三个客户的快照(总共有 1 亿客户)。
可以看到第 2 个客户的性别是未知的。性别可能是有力的信息,因此,如果大部分客户的性别是“未知”或“缺失”的,则我们将失去一条非常重要的信息。可以有许多方法来对性别进行插补(通过称谓或姓名),因此可用于缺失值处理。 类似地,如果报告的年收入丢失了(因为这个信息仅由客户提供,他/她可能不愿提供),我们可以使用过去 12 个月的支出来插补/预测年收入。
异常值处理 也很重要。例如,我们可能会看到一些“过去 12 个月支出”或“年收入”的非常高的值。在支出方面,这可能是因为某些客户的一次性高额支出,这种情况可能不持续并可能对整个数据造成偏见,因此将支出值设定在某个阈值上限(例如“过去 12 个月支出”的 99 或 95 分位数值)可以帮助减少这种偏见。
有时,我们可能会看到数据中存在行为非常不同的不同客户细分。例如,如果我们看看最近的客户(过去 6 个月成为在线零售商的会员),这些客户的行为方式可能与其他客户截然不同(他们可能非常好奇,因此电子邮件的开启率可能非常高,但购买率可能很低)。 因此将这些客户与其他客户混合在一起可能会对某些参数的数据造成偏见,或者这些客户的特征可能会被其他客户所掩盖,在构建任何预测算法时降低了它们的代表性。 在这种情况下,为这两个***“数据细分”***(新客户和其余客户)建立单独的算法可能是有意义的。
特征工程: 特征或变量真的能为算法提供预测能力。因此,拥有正确的特征集对于构建强健的算法至关重要 – 因此重点放在特征工程上。 特征工程的类型:
-
特征选择:选择对问题最有用的特征子集。有许多特征选择算法,例如基于相关性、信息价值或其他特征重要性概念的得分算法。然而,随着越来越多的计算能力和机器学习技术,特征选择越来越多地在算法内部处理。
-
特征构建:从原始数据中手动构建新的特征,例如在上述案例研究中,我们有一个“最后消费日期”的特征,本身可能不提供任何预测能力。然而,我们可以创建一个“距离最后消费的天数”的特征,这可能非常有用(最近消费的客户可能有更高的再次消费意愿,因此对电子邮件优惠更具响应性)。
-
特征提取:一些数据,如图像、声音、文本,可能有多个特征,因此,通过特征提取,我们可以自动降低这些类型特征的维度,并从数据中提取隐藏的特征。例如,在像下面的 Pokemon 图像识别中,每个图像可以有成百上千个特征(像素)。因此,任何图像识别算法都必须处理来自多个图像的大量特征。因此,算法必须能够自动提取和减少这些大量特征到一个较小的有意义的特征集。
更多关于此主题的信息
-
稳定扩散:生成型人工智能背后的基本思想
-
如何更好地利用数据科学推动业务增长
-
学习数据科学和商业分析推动创新和增长
-
数据科学方法推动业务成功
-
解锁商业成功:对数据科学领导者的需求日益增长
-
大数据分析:为什么对于商业智能如此重要?
数据科学中的业务直觉
原文:www.kdnuggets.com/2017/10 业务直觉-数据科学.html/2
3. 建模和评估:
这一步是我们必须选择“正确的算法”来得到“适合我们业务问题的正确解集”的步骤。正如您所见,这是一个非常重要的步骤,关键是找到最适合给定业务目标的算法。在上述情况下,不必详细介绍,我们有两组目标 - (1)从 1 亿客户中找到最敏感的客户 - 假设为 x(2)针对每个客户,展示与其偏好最相关的优惠。对于第一个目标,我们需要一种响应预测算法(例如回归技术),它将为每个客户提供一个响应可能性分数/概率,然后可用于对客户进行排名并选择最具响应性的客户进行活动。对于目标(2) - 查找客户的优惠偏好,我们需要能够帮助选择客户最可能喜欢的产品优惠的算法(例如推荐者算法或分类技术)
一旦我们建立了算法,它们的评估也基于它们如何满足当前目标。让我们使用上述案例研究来理解这一点。假设我们已经建立了一个响应预测算法,根据客户在看到电子邮件优惠后购买产品的概率对 1 亿名客户进行排名:
客户 ID | 响应概率 |
---|---|
1 | 98.0% |
2 | 95.0% |
3 | 90.0% |
4 | 89.0% |
5 | 88.0% |
. | . |
. | . |
. | . |
1 亿 | 0.1% |
我们的前三个课程推荐
1. Google 网络安全证书 - 快速迈向网络安全职业路线。
2. Google 数据分析专业证书 - 提升数据分析能力
3. Google IT 支持专业证书 - 支持您的 IT 组织
现在,我们将这 1 亿名客户分成 10 个相等的桶,按照从最高概率到最低概率的降序进行排名。对于这些客户桶中的每个客户,我们查看他们对先前发送的电子邮件优惠活动的实际响应率,该优惠活动发送给了所有的 1 亿名客户:
A | B | C | C/B | |
---|---|---|---|---|
客户桶 | 平均响应率 | 上次活动中发送电子邮件的客户数 | 上次电子邮件活动中的响应者数 | 每个客户桶中对上次电子邮件活动的实际响应率(响应者数/客户数) |
Bucket 1 | 98.0% | 1,00,00,000 | 1,00,00,000 | 100.0% |
Bucket 2 | 97.0% | 1,00,00,000 | 92,00,000 | 92.0% |
Bucket 3 | 78.0% | 1,00,00,000 | 68,00,000 | 68.0% |
Bucket 4 | 65.0% | 1,00,00,000 | 50,00,000 | 50.0% |
Bucket 5 | 45.0% | 1,00,00,000 | 42,50,000 | 42.5% |
Bucket 6 | 23.0% | 1,00,00,000 | 25,00,000 | 25.0% |
Bucket 7 | 15.0% | 1,00,00,000 | 13,00,000 | 13.0% |
Bucket 8 | 4.0% | 1,00,00,000 | 14,80,000 | 14.8% |
Bucket 9 | 1.0% | 1,00,00,000 | 5,00,000 | 5.0% |
Bucket 10 | 0.1% | 1,00,00,000 | 30,000 | 0.3% |
总计 | 10,00,00,000 | 4,10,60,000 | 41.1% |
请注意:这里的回应是在看到电子邮件提供后的产品购买
因此,为了实现目标 1,我们只需决定向哪个桶发送电子邮件提供。
现在,在上表中,您可以看到某些“平均响应概率”值和一些存量的“实际响应率”值之间存在差异,例如,3 和 4 桶。因此,与实际值相比,预测并不是非常“准确”。然而,由于这里的目标是选择一组响应概率高的客户,我们更关心的是模型在排名客户的响应方面做得如何。从实际比例来看,它似乎做得相当好(过去广告活动的实际响应率也基本上按降序排序)。
因此,在这里,模型结果的评估更多地围绕着按照客户的响应概率对其进行排名,而不是预测的准确性。
但是,当我们评估第二个模型的结果时,为每个客户的每个产品提供优先权分数,预测精度可能更重要。比方说,在上述情况下,有 10 份产品提供。因此,我们建立了一个模型,为每个客户为这 10 份产品提供每一个的偏好分数:
客户 ID | 产品提供 1 | 产品提供 2 | 产品提供 3 | 产品提供 4 | 产品提供 5 |
---|---|---|---|---|---|
1 | 0.7 | 0.13 | 0.01 | 0.15 | 0.01 |
2 | 0.8 | 0.5 | 0.02 | 0.005 | 0.4 |
3 | 0.01 | 0.02 | 0.002 | 0.03 | 0.04 |
在这里,顾客 1 对产品 1、2 和 4 有更高的偏好。对于产品 3 和 5,由于偏好分数非常低,我们可以假设他对这些产品没有任何偏好。同样,我们可以说客户 2 并没有显示对任何特定产品的偏好。我们可以创建一个阈值分数,如果客户的分数高于该阈值,则我们将考虑其偏好,否则不考虑。
因此,您可以看到,我们根据得分值进行这样的评估,因此,有准确反映客户真正偏好的得分非常重要。因此,在这种模型评估中,预测的准确性非常重要。
4. 原型:
通过构建数据原型,我们指的是创建必要的基础设施来在生产环境中实施解决方案。鉴于实施是一个耗费时间和资源的过程,需要给予适当的考虑。在上述情况下,其中一些可能是:
-
这个邮件活动是一次性的营销倡议还是更常规的?如果是常规的,那么创建生产平台来执行这样的活动是有意义的。
-
对于这样的平台,如何将来自不同来源的所有数据源汇总在一起?需要评估数据清洗的工作量和成本、其更新频率、内部数据卫生检查与平衡等。
-
所有这些数据将如何存储和处理?这涉及决策,比如需要并行处理(如果数据量庞大)或实时处理以及存储基础设施的需求。
-
邮件将如何投递?再次,在这里需要做出决策,包括-需要第三方邮件投递商、客户数据隐私的检查与平衡、市场速度包括实时处理等。
这些是一些考虑因素,但根据任务的规模和复杂性,可能还有许多其他需要评估和评价的事情。
因此,正如你所看到的,数据科学的任务是许多阶段的总和,需要领域专业知识和对业务目标的详细了解,以及技术专业知识。缺一不可!!
想了解更多?加入由www.deeplearningtrack.com提供的基于案例的为期 8 周的数据科学课程。
个人简介:Jahnavi Mahanta 是 Deeplearningtrack 的联合创始人。
相关:
-
人工智能如何改变你的业务
-
应用数据科学:解决预测维护业务问题
-
为什么你的公司应该投资于#BUSINESSOFBOTS
关于这个话题更多信息
-
稳定扩散:生成式人工智能背后的基本直觉
-
如何更好地利用数据科学促进业务增长
-
学习数据科学和商业分析来推动创新和增长
-
数据科学方法推动业务成功
-
释放业务成功:数据科学领导者需求不断增长
-
大数据分析:为什么对商业智能如此重要?
想成为一名数据科学家?首先阅读本次采访
原文:www.kdnuggets.com/2017/10/成为数据科学家,先看这个采访.html
评论
市场学家 Kevin Gray 询问 Jennifer Priestley,肯尼索州立大学研究生学院副院长和统计学与数据科学教授,数据科学到底是什么,成为一个好的数据科学家需要什么,以及如何成为一名数据科学家。
Kevin Gray: 你能用简单易懂的话给我们定义数据科学吗?
我们的前 3 个课程推荐
1. Google 网络安全证书 - 加快专业网络安全职业发展步伐。
2. Google 数据分析专业证书 - 提高你的数据分析能力
3. Google IT 支持专业证书 - 在 IT 方面提供组织支持
Jennifer Priestly: 我喜欢 Josh Wills 在推特上恰当发表的定义 - “作为一个人,在统计学方面要比任何软件工程师更擅长,在软件工程方面要比任何统计学家更优秀”。我还想添加我称之为”The Priestley Corollary”的定义 - “作为一个人,在解释分析结果的商业影响方面要比任何科学家更擅长,在分析科学方面要比任何 MBA 更优秀”。
统计学家和数据科学家之间有什么区别?
这是一个很好的问题。我经常被问到计算机科学家和数据科学家有什么区别。两个领域都贡献了重要且有意义的方式来推动这一新兴学科发展,但二者都不是独立足够的。
数据不仅在规模上增长,而且我们甚至认为什么是数据的定义也在不断扩展。例如,文本和图像正越来越成为集成到分类和风险建模等分析方法中的常见数据形式。 数据定义的这种扩展将统计学和计算机科学推出了它们的传统核心,并进入各自的边缘领域 - 而正是在这些边缘领域进行新的思考 - 边缘的融合正在形成数据科学的基础。大部分传统统计学核心不能轻易地处理由上亿条记录和/或非结构化数据定义的问题。同样,虽然计算机科学的核心能够有效地捕获和存储大量结构化和非结构化数据,但该学科无法适应通过建模、分类然后可视化将这些数据转化为信息的过程。
我同意,在数据科学领域,统计学家更有可能得到糟糕的结果。我认为这是不幸的。几年前,Simply Statistics 博客上有一篇文章《大数据出问题了:他们忘记了应用统计学》。这篇文章突出了一种急于追求机器学习、文本挖掘和神经网络的兴奋,错过了与数据行为相关的基本统计概念的重要性,包括变异性、置信度和分布。这导致了糟糕的决策。虽然数据科学并不是统计学,但统计学以一种基础性的方式为这门学科做出了贡献。
直到几年前,我们中的很少有人听说过数据科学。你能给我们提供它的历史概述吗?
这个术语可以追溯到 1960 年计算机科学家彼得·勒,但“数据科学”也在统计学中拥有进化的基础。1962 年,约翰·W·图基(我们这个时代最知名和受尊敬的统计学家之一)写道:“很长一段时间,我认为我是一名统计学家,对从特定到一般的推断感兴趣。但当我看着数学统计学发展时,我……开始感觉到我的中心兴趣在于数据分析……数据分析本质上是一个经验科学。”
术语“数据科学”在 1996 年国际分类学会第五届大会论文集中有所提及。这篇文章的标题是《数据科学,分类学和相关方法》。在 1997 年,宾夕法尼亚大学创始教授 C. F. Jeff Wu(目前在乔治亚理工学院)在密歇根大学担任 H.C. Carver 统计学教授的就职演说中,实际上呼吁将统计学命名为数据科学,统计学家命名为数据科学家。
数据科学的一个关键里程碑发生在 2002 年,当时推出了首本专门致力于数据科学的学术同行评审期刊——《数据科学杂志》……接下来的一年又推出了《数据科学杂志》。此后,还出现了几本其他期刊,专门促进和传播该领域的学术研究。
专门的学术期刊的出现对学术界尤为重要——这些期刊现在为新兴的博士项目(比如我们的项目)和新兴的学术部门建立了独特的研究、学术和出版平台。现在数据科学教员和博士生可以在自己的社区内从事知识生产和思想领导。
2011 年麦肯锡的一项被广泛宣传的研究预测到 2018 年时,“……仅美国就可能面临 19 万名具备深厚分析能力以及 150 万名具备运用大数据分析做出有效决策能力的经理和分析师的短缺”。这一预测的准确性如何?现在是否有其他预测我们应该使用?
我经常被问到这个问题—具体来说,很多公司高管问类似的问题,“数据科学这个东西是时尚吗?”。我认为我们需要重新构思讨论。
我的观点是,我们不需要“19 万人”或“150 万管理人员”具有深厚的分析能力。我认为每个人都需要一定水平的分析能力。我认为基本的数据素养应该与阅读和数学一样成为我们教育体系的基础。看到基本编码能力越来越多地在小学教育中教授是令人鼓舞的。在大学阶段,我认为数据科学应该成为通识教育课程的一部分(现在我能听到我们学术事务办公室的惊叹声)。
因此,尽管目前的人才缺口非常真实,但这是教育体系与市场需求不相匹配的结果。各个层次的教育仍在转变,未来将继续如此。我预计,在一代人的时间内,对这些技能的需求不会减少,但供给将更加紧密地对齐。
普里斯特利推论—(这是)一个比任何科学家更擅长解释分析结果的业务影响,也比任何工商管理硕士更擅长分析科学的人。
许多人,包括那些考虑职业转换的人,都将职业目标设定为数据科学。不过,并不是每个人都适合这个职业。在数据科学领域工作需要哪些资质和技能?成为一名数据科学家有哪些最佳途径?
这是一个很好的问题。我们可以讨论后辈们…以及我们需要做些什么来使他们准备好…但现实情况是,目前有很多 20 多岁、30 多岁和 40 多岁的人正在寻找转向数据科学的机会。
我在办公室里看到了很多这样的人。我曾有过一次以上这样的对话:“我刚向 XX 大学支付了 1 万美元完成了数据科学证书…但我仍然找不到工作。”虽然一些这类“证书”项目是经过精心开发且具有高价值的,但不幸的是,很多项目却并非如此。
首先,你不能通过参加一个为期 5 天的证书项目从诗人变成数据科学家。或者更糟的是,一个在线证书项目。
其次,我认为人们需要对实现职业目标真正需要付出的努力抱有现实的期望。这些技能需求量很大,薪水很高,因为它们很难-或者至少需要主动去发展和完善。
第三,我认为人们需要评估一下现有技能和目标位置之间的差距。这个问题的答案自然会决定如何达到目标。那些陷入易于在线证书项目的诱惑的人们应该记住《爱丽丝梦游仙境》中的猫猫:“如果你不知道你要去哪里的话,你走哪条路都无所谓”。
我告诉问我在这个领域寻求建议的人们-
(1) 如果你是一位诗人,并且你希望真正地、深入地以数据科学作为职业,那么你需要放下你的羽毛笔,取而代之的是你的牛仔裤和背包,然后回到学校。全日制。大多数数据科学研究生项目不到两年,并且大多数都提供某种形式的研究生研究助理职位。你应该寻找包括编程、统计、建模的项目。但也要有充分的机会与当地公司、非营利组织、地方政府等合作,参与真实世界的项目。我再次强调,实践、动手经验对于任何数据科学项目至关重要。这就是为什么在线或短期证书项目对于从零开始的人来说行不通的原因所在。通过实践经验,人们才能理解数据科学中更隐秘的方面,比如叙事的作用、创造力(被低估了)和项目管理。
(2)如果你是计算机科学家/程序员,找一个商学院专业有分析方向或者应用统计学项目的学校。可能你的编码和数学技能已经到位了-你可能需要统计/建模/分析-再次强调-来讲述故事,并学会如何与思想和你不同的团队合作。
(3)我鼓励每个人考虑学习像 Tableau 这样的基本可视化工具。我还鼓励任何人定期考虑参加在线/异步编程课程。这些课程通常价格不高(甚至免费),可以让你继续保持技能的熟练。
我能理解并同意并非所有人都想成为计算机程序员-我并不特别喜欢编程。我不得不学习编程来找到对我提出的研究问题的答案。如果我能够使用我那可靠的 HP-12C 和一支自动铅笔找到答案,我会满意的。你必须懂一些基本的数学,必须能够阅读和写作,而且,在 21 世纪,你还必须精通基本的编程。
数据科学家经常评论,在许多组织中,管理层并不真正知道如何利用分析进行决策。决策仍然主要是凭直觉做出的,并且受到组织政治的重大影响。这也是你的经验吗?
我经常在公司活动上发表演讲,在那里这个问题存在于房间中-即使没有被表达出来。我会这样来框架谈话-组织可以大致分为数据本土化和非本土化。
符合“本土化数据”的例子是主宰头条新闻和股票市场的公司-亚马逊,谷歌和 Facebook。这些公司在 30 年前是无法存在的。它们是如此基础性的数据甚至不存在,但即使存在,我们也没有捕获它或执行与人工智能,机器学习,深度学习相关的深度分析方法的计算能力,使它们能够做他们所做的事情。
但通常被忽视的是,这些公司的另一个维度是,由于它们是数据本土化的,这具有巨大的文化影响。这些公司从组织结构的最高到最低都是以数据驱动的。它们的基因中流淌着数据。几乎每个进入这些公司的人都有数据为中心的取向,很可能学过计算学科,越来越多地是数据科学。Facebook 员工的中位年龄是 29 岁。谷歌也是 29 岁,亚马逊是 30 岁(不包括仓库员工)。
那些与数据无关的公司是在我们听到“数据科学”和“大数据”等术语之前就取得成功的公司。例如沃尔玛和阿比。这些是非常成功的公司,最初并没有数据贯穿其业务。尽管这些公司现在非常依赖数据来指导决策和提供产品和服务,但在组织结构中计算素养存在很大的差异。但他们的领导在文化转变中非常前瞻,使这些公司成为市场领导者,因为它们成为基于事实、数据驱动的组织。他们所在的市场中的其他公司(西尔斯、梅西百货……麦当劳、温迪)却没有做到这一点。
最后,您认为人工智能和自动化将在未来 10-15 年对数据科学产生什么影响?
我并不是这个领域的专家,但我认为任何因自动化而导致统计学、计算机科学或数据科学的衰亡的预测都是为时过早的。计算器“自动化”了数学……但如今的数学比使用计算器之前更广泛、更复杂。我相信在数据科学领域也将是如此。
谢谢你,詹!
**凯文·格雷**是Cannon Gray的总裁,这是一家市场科学和分析咨询公司。
詹妮弗·刘易斯·普雷斯特利是肯尼索州立大学研究生院副院长、统计学和数据科学教授。
原始链接。经许可重新发布。
本文首次发布于 2017 年 7 月的 Greenbook 杂志。
相关链接:
-
统计建模:入门指南
-
时间序列分析:入门指南
-
回归分析:入门指南
更多关于这个话题
-
成为优秀数据科学家所需的 5 种关键技能
-
初学者数据科学家应掌握的 6 种预测模型
-
2021 年最佳 ETL 工具
-
成功数据科学家的 5 个特征
-
每位数据科学家都应该了解的三个 R 语言库(即使你使用 Python)
-
停止学习数据科学以寻找目的,寻找目的以…
如何构建数据科学管道
原文
由 Balázs Kégl 撰写,数据科学家,RAMP 的共同创建者。
当一个良好运作的预测工作流最终投入生产时,如何运作没有争议。数据源被转化为一组特征或指标 X,描述每个实例(客户、设备、资产)在预测中将会受到的影响。预测器然后将 X 转化为一个可操作的信息 y_pred(客户会流失吗?设备会故障吗?资产价格会上涨吗?)。在某些流动性市场(例如广告定向)中,预测通过完全自动化的过程变现,而在其他情况下,则作为决策支持,涉及人为干预。
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT
数据科学管道中的数据流在生产环境中。
这听起来简单,但成功和盈利的预测工作流的例子却很少。公司在构建过程中面临困难。他们需要问的问题是:
-
谁负责构建这个工作流?我需要覆盖哪些角色和专业知识?
-
建造过程是什么?每一步需要什么样的专业知识?
-
在这些步骤中有哪些费用和风险,我该如何控制它们?
对数据挑战的炒作给人一种错误的印象,即数据科学家和预测评分是过程的主要驱动因素。即使是自九十年代以来就存在的工业流程(例如,CRISP-DM 和 Dataiku)通常将数据科学家置于中心,将部署放在过程的最后。虽然它们并非完全错误,但大多无关紧要。构建和优化预测器很容易。困难的是找到业务问题和它将改善的 KPI,搜寻并将数据转化为可消化的实例,定义工作流的步骤,将其投入生产,并组织模型维护和定期更新。
公司通常从看似简单的任务开始:要求 IT 部门建立大数据基础设施并构建数据湖。随后,他们会雇佣首批数据科学家。这些专家刚从学校毕业,经过一些 Kaggle 挑战,装备了数据科学工具包,渴望动手处理数据。他们可以预测任何东西,而且他们确实这样做了!他们与业务部门沟通,找到已有标签的合理预测目标,尝试多种模型,进行超参数优化,并选择最佳模型。他们构建 POC 并将报告发送给业务部门,然后重新开始。
构建数据科学工作流的常见方式。
这些 POC 中大多数从未投入生产。 业务部门不知道如何处理它们。他们无法解读分数。预测目标似乎合理,但他们不知道如何利用他们的 y_pred 赚钱。如果他们知道,将 POC 投入生产似乎不可逾越。代码必须重写。实时数据必须纳入工作流。需要满足操作约束。决策支持系统需要与用户现有工作工具集成。需要进行模型维护、用户反馈和回滚。这些操作通常比数据科学家工作中的安全 POC 成本更高、风险更大,而 POC 仅仅无法推动过程。
我在下面描述的过程不会解决这些问题,但它为你提供了一个顺序,使你至少可以处理和控制成本和风险。首先,无论如何找到一位首席数据官(或者说是数据价值架构师),他/她已经将预测工作流投入生产。你的 CDO 不需要了解最新的深度学习架构,但她应该对公司的业务和数据科学过程有广泛的理解。她应该发挥核心作用,推动过程。
早期将 IT 纳入是重要的。你需要数据湖,但更重要的是,你需要数据工程师从第一天起就以生产的角度思考。但这并不是第一步。第一步是弄清楚你是否真的需要预测。
所以,从 y 开始,即预测目标。
你的 CDO 应与业务部门密切且长期合作,弄清楚他们想了解什么。是什么* y* 驱动他们的决策?* y* 的更好预测如何改善底线(降低成本、提高利润、提高生产力)?一旦确定了 y,尽量最大化预测误差的货币化。没有什么比一个良好的货币化指标更能让(未来的)数据科学家感到高兴了。他们会知道提高 2% 的分数能为你带来一百万美元;更重要的是,你 会知道你可以在数据科学团队上花多少钱。
一旦你巩固了 y 和指标,
进行数据探索,
找到你数据湖及其他地方的指标,这些指标可能与预测目标相关。原则上,你仍然不需要数据科学家来完成这项工作,这个过程应该由首席数据官和业务单位推动(毕竟,他们 知道他们在决策中使用了哪些信息,这通常是一个很好的基准)。但是,有一个了解开放和可购买数据的人可能会有所帮助。在这里,你绝对需要与 IT 沟通,以了解在实时收集这些指标时运营成本会是多少。数据科学家需要这些信息。如果在每个客户上存储一个新特征的成本是每天 4TB,那么这个单一事实决定了预测器的样子。
现在 雇佣一个数据科学家,最好是一个能够开发生产质量软件的人。让他
建立实验设置和基线工作流
进行简单的预测,并检查其是否可以投入生产。此时你已经准备好进行全规模的实验数据科学循环,这个循环数据科学家知道如何处理。你可能需要一个深度学习专家,但很可能你可以外包并众包你的第一个模型,例如,通过与我们一起进行一个RAMP。
如果你喜欢你所读的内容,可以在 Medium、LinkedIn 和 Twitter 上关注我。
简介:Balázs Kégl 是 CNRS 的高级研究科学家,并且是巴黎-萨克雷大学数据科学中心的负责人。他是 RAMP 的共同创始人 (www.ramp.studio)。
原文。经许可转载。
相关:
-
教授数据科学流程
-
数据科学会消除数据科学吗?
-
接受随机:随机化边界论文接受的案例
更多相关主题
-
停止学习数据科学以寻找目的,并寻找目的来……
-
数据科学统计学习的顶级资源
-
建立一个坚实的数据团队
-
成功数据科学家的 5 个特征
-
成为优秀数据科学家所需的 5 项关键技能
-
每个初学者数据科学家都应该掌握的 6 种预测模型
探索大数据领域的前 12 大有趣职业
译文:www.kdnuggets.com/2016/10/top-12-interesting-careers-explore-big-data.html
评论
由 Simplilearn 提供。
大数据不再是未来能力的流行词,而是已经被各种行业的企业所使用。从数据驱动的策略到决策,大数据的真正价值已经显现,并且带来了令人惊叹的职业选择。
我们的前 3 名课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升您的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您的 IT 组织
顶级大数据职业
-
数据科学家
这些人利用他们的分析和技术能力从数据中提取有意义的见解。
薪资:$65,000 - $110,000
-
数据工程师
他们确保服务器和应用程序之间数据的连续流动,并负责数据架构。
薪资:$60,0945 - $124,635
-
大数据工程师
大数据工程师根据解决方案架构师创建的设计进行构建。他们在组织内部开发、维护、测试和评估大数据解决方案。
薪资:$100,000 - $165,000
-
机器学习科学家
他们从事用于自适应系统的算法研发。他们构建预测产品建议和需求预测的方法,探索大数据以自动提取模式。
薪资:$78,857 - $124,597
-
商业分析专家
商业分析专家支持各种开发计划,协助测试活动和测试脚本的开发,进行研究以了解业务问题,并开发切实可行的经济解决方案。
薪资:$50,861 - $94,209
-
数据可视化开发者
他们设计、开发并提供企业范围内互动数据可视化的生产支持。他们具备艺术思维,能够构思、设计和开发可重用的图形/数据可视化,并运用强大的技术知识使用最新技术实现这些可视化。
薪资:$108,000 - $130,000
-
商业智能(BI)工程师
他们具备数据分析专业知识和设置报告工具、查询及维护数据仓库的经验。他们亲自处理大数据,采取数据驱动的方法解决复杂问题。
薪资:$96,710 - $138,591
-
BI 解决方案架构师
他们迅速提出解决方案,帮助企业做出时间敏感的决策,拥有较强的沟通与分析能力,对数据可视化充满热情,并且具有追求卓越和自我激励的动力。
薪资:$107,000 - $162,000
-
BI 专家
他们负责支持企业范围内的商业智能框架。此职位需要批判性思维、关注细节以及有效的沟通技巧。
薪资:$77,969 - $128,337
-
分析经理
分析经理负责数据分析解决方案或 BI 工具的配置、设计、实施和支持。他们特别需要分析通过事务活动收集的大量信息。
薪资:$83,910 - $134,943
-
机器学习工程师
机器学习工程师的最终“输出”是工作的软件,他们的“受众”是其他自动运行的组件,几乎无需人工监督。决策由机器做出,影响产品或服务的行为。
薪资:$96,710 - $138,591
-
统计学家
他们收集数值数据并展示它,帮助公司理解定量数据,发现趋势并进行预测。
薪资:$57,000 - $80,110
建议的认证
-
Hadoop
-
SAS
-
Excel
-
R
-
MongoDB
-
Python
-
Pandas
-
Apache Spark & Scala
-
Apache Storm
-
Apache Cassandra
-
MapReduce
-
Cloudera
-
HBase
-
Pig
-
Flume
-
Hive
-
Zookeeper
相关:
-
帮助你进入行业的前 5 名大数据课程
-
进入数据科学或大数据职业前要读的 5 本电子书
-
大数据大师课程,改变你的职业生涯
更多相关话题
-
轻松在笔记本电脑上探索 LLMs,使用 openplayground
-
开放助手:探索开放和协作聊天机器人的可能性…
-
Python 的上下文管理器的 3 个有趣用途
-
数据科学家、数据工程师及其他数据职业解析
-
数据科学职业的现状
-
KDnuggets 新闻,11 月 2 日:数据科学的现状…
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84075.html