原文:
www.kdnuggets.com/2020/11/build-data-science-project.html
评论
由 Mathang Peddi,数据科学和机器学习爱好者。
1. Google 网络安全证书 - 快速进入网络安全职业的捷径。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持您组织的 IT 需求
数据科学家是所有统计学家中最优秀的程序员,也是所有程序员中最优秀的统计学家。
每个数据科学家都需要一个有效的策略来解决数据科学问题。
数据科学职位在全国范围内是独特的,因此我们可以尝试根据职位名称、公司和地理位置等预测数据科学职位的薪资。这里我构建了一个项目,任何用户都可以输入信息,它会将薪资范围拆分开来,因此,如果有人在谈判薪资时,这将是一个相当不错的工具。
业务理解
这个阶段很重要,因为它有助于明确客户的目标。任何项目的成功取决于提问的质量。如果你正确理解了业务需求,那么这将帮助你收集正确的数据。提出正确的问题将帮助你缩小数据获取的范围。
分析方法
在这个阶段,一旦业务问题被明确陈述,数据科学家可以定义解决问题的分析方法。此步骤包括从统计和机器学习技术的角度解释问题,这一点很重要,因为它有助于确定解决问题所需的趋势类型,以最有效的方式解决问题。如果问题是确定某事的概率,则可能需要使用预测模型;如果问题是展示关系,则可能需要描述性方法;如果我们的目标是计数,那么统计分析是解决它的最佳方法。对于每种方法,我们可以使用不同的算法。
数据要求
我们找出初始数据收集所需的数据内容、格式和来源,并在我们选择的方法的算法中使用这些数据。
数据揭示影响,通过数据,你可以为你的决策带来更多的科学性。
数据收集
我们识别与问题领域相关的可用数据资源。为了获取数据,我们可以对相关网站进行网页抓取,或者使用包含现成数据集的存储库。如果你想从任何网站或存储库收集数据,可以使用 Pandas 库,这是一个非常有用的工具,用于下载、转换和修改数据集。
为此,我已经调整了网络爬虫,以从 glassdoor.com 上抓取 1000 条职位发布信息。每个职位的信息包括:职位名称、薪资估算、职位描述、评分、公司、地点、公司总部、公司规模、公司成立日期、所有权类型、行业、部门、收入、竞争对手。这些都是确定数据科学领域从业人员薪资的各种属性。
要查看 Web Scraper 文章,请点击这里。
要查看 Web Scraper 的 Github 代码,请点击这里。
你可以没有信息的数据,但你不能没有数据的信息。
数据理解
数据科学家会尝试更多地了解以前收集的数据。我们需要检查每个数据的类型,并学习更多关于属性及其名称的知识。
有些薪资数据包含 -1,因此这些值对我们不太重要,可以将其移除。由于薪资估算列目前是字符串格式,所以我们需要将 -1 以字符串格式呈现。
现在我们可以看到,行数已经减少到 742。我们观察到大多数变量是分类变量而非数值变量。这个数据集包含 2 个数值变量和 12 个分类变量。但实际上,我们的依赖变量,薪资估算,必须是数值型的。因此,我们需要将其转换为数值变量。
数据准备
数据可以是任何格式。为了进行分析,你需要将数据转换为特定的格式。数据科学家必须为建模准备数据,这是最关键的步骤之一,因为模型必须干净且不包含任何错误或空值。
在现实世界中,数据科学家花费 80% 的时间清理数据,只花费 20% 的时间提供见解和结论。
这是一个相当繁琐的过程,所以你应该做好准备。
在抓取数据后,我需要清理数据,以便它可以用于我们的模型。我进行了一些更改并创建了新的变量。
当我们在左括号处分割时,发生的情况是,所有行的‘(’左侧和右侧部分进入两个不同的列表。这就是为什么我们需要包括 [0] 来获取薪资。获得薪资后,将‘K’,‘$’替换为空字符串。在一些条目中,薪资被标记为‘雇主提供’和‘按小时计算’,这些是不一致的,需要处理。
现在我们不应使用雇主提供的或按小时计算的薪资。所以我们返回包含每个条目最小和最大薪资的两个列表。这成为我们最终的因变量(用于预测一个人的平均薪资)。
探索性数据分析
EDA 在这一阶段扮演着非常重要的角色,因为清理数据的总结有助于识别数据的结构、异常值、异常现象和模式。这些见解可以帮助我们构建模型。然而,我将详细讨论 EDA 并在我的 Medium 个人资料中找到它。
模型构建
数据科学家有机会了解他的工作是否准备好提交,或是否需要审查。建模专注于开发描述性或预测性的模型。所以在这里,我们执行预测建模,这是一个利用数据挖掘和概率来预测结果的过程。对于预测建模,数据科学家使用一个训练集,这是一组已知结果的历史数据。这一步可以重复多次,直到模型理解问题和答案。
如果我们有分类数据,则需要创建虚拟变量,所以我将分类变量转换为虚拟变量。我还将数据分成训练集和测试集,测试集大小为 20%。我尝试了三种不同的模型,并使用平均绝对误差进行了评估。我选择 MAE,因为它相对容易解释,而且异常值对这种类型的模型没有特别大的影响。
转换后,我们的数据集的列数从 14 增加到了 178!!
我已经实现了三种不同的模型:
-
多重线性回归——模型的基准
-
Lasso 回归——由于来自许多分类变量的数据稀疏,我认为像 lasso 这样的正规化回归会有效。
-
随机森林——同样,由于数据的稀疏性,我认为这会是一个很好的选择。
现在开始时,它稍微有点差。所以我们尝试找到 alpha 的最佳值,使得误差最小。
在这里我也选择了 i/10,但误差仍然很高,所以我减少了 alpha 的值。
在绘制图表并检查 alpha 值后,我们发现 alpha 值为 0.13 可以得到最佳的误差项。现在我们的误差从 21.09 降低到 19.25(这意味着 19.25K 美元)。我们还可以通过调整 GridSearch 来改进模型。
GridSearch 是进行超参数调优的过程,以确定给定模型的最佳值。GridSearchCV 基本上就是将所有你想要的参数输入,然后它会运行所有模型,并筛选出结果最佳的模型。
我们还可以使用支持向量回归、XGBoost 或其他任何模型。
随机森林回归是一种基于树的决策过程,并且我们的数据集中有很多 0 和 1,所以我们期望它是一个更好的模型。这就是为什么我在这里选择了随机森林回归。
因此,我们现在获得的误差值比之前的更小,所以随机森林模型比之前的模型更好。我将随机森林模型与线性回归模型结合起来进行预测。所以我取了两者的平均值,即对每个模型给予了 50% 的权重。
大多数情况下,结合不同的模型进行预测更为有效,因为这样可以提高我们的准确性。这些类型的模型被称为集成模型,并且被广泛使用。误差可能会增加也可能不会,因为某一个模型可能会过拟合。
调优后的随机森林模型在这里表现最佳,因为与 Lasso 和线性回归相比,它的误差最小。因此,我们不仅可以取两者的平均值,还可以将 90% 的随机森林模型与 10% 的其他模型合并,测试准确性/性能。通常,这些类型的集成模型对于分类问题更好。
项目不应仅仅是尝试所有模型,而应选择最有效的模型,并能够讲述为什么选择这些特定模型的理由。通常,Lasso 回归应比线性回归效果更好,因为它具有归一化效果,而我们有稀疏矩阵,但在这里 Lasso 的表现却不如线性回归。因此,这取决于具体的模型,我们不能一概而论。
数据科学家可以通过两种方式评估模型:Hold-Out 和交叉验证。在 Hold-Out 方法中,数据集被分为三个子集:训练集、用于评估训练阶段模型表现的验证集和用于测试模型未来可能表现的测试集。在大多数情况下,训练:验证:测试集的比例为 3:1:1,这意味着 60% 的数据用于训练集,20% 的数据用于验证集,20% 的数据用于测试集。
所以我创建了一个基础网页,使其易于理解。给定员工和公司信息,该模型可以预测员工的预期薪资。
我已使用 flask 在 Heroku 部署了我的机器学习模型。我使用线性回归训练了模型(因为它易于理解),但你也可以使用任何其他机器学习模型,甚至可以使用集成模型,因为它们提供了良好的准确性。
在部署模型后,我尝试预测一位机器学习工程师的薪资,其中公司的评级为 4,公司成立 39 年前。根据我的模型,员工的预期薪资为 117.31K 美元。
在本文中,我没有详细讨论所有内容。但你可以随时参考我的GitHub 仓库来获取整个项目。我的结论是,你不应期待一个完美的模型,而是期望一个你今天可以在自己的公司/项目中使用的工具!
对于Ken Jee在数据科学领域的出色贡献和项目,表示由衷的感谢。
“目标是将数据转化为信息,再将信息转化为洞察。”–Carly Fiorina
原文。已获许可转载。
相关: