在这篇博客文章中,你将学习:
- 什么是 Amazon SageMaker,以及它为机器学习带来的价值。
- 为什么网页数据对于成功的特征工程至关重要。
- 在哪里获取用于特征工程和其他机器学习场景的高质量网页数据。
- 如何使用存储网页数据的数据集在 Amazon SageMaker 中执行特征工程。
让我们开始吧!
什么是 Amazon SageMaker?
Amazon SageMaker 是一项完全托管的服务,旨在帮助你大规模构建、训练和部署机器学习模型以及 AI 应用程序。它为分析和 AI 提供统一的端到端环境。
它允许你访问来自多个来源的数据,无论这些数据存储在 Amazon S3 数据湖、Redshift 数据仓库,还是第三方和联合系统中。同时,它还能保证企业级的安全性和治理能力。
简而言之,SageMaker 简化了 ML 工作流程,并加速了模型开发,从特征工程到模型部署。以下是它为你提供的主要功能和能力:
- SageMaker Unified Studio:一个单一的开发环境,用于使用完全托管的基础设施和集成工具构建、训练和部署 ML 及生成式 AI 模型。
- 模型开发和 MLOps:包括预构建模板、HyperPod 和 JumpStart,用于快速原型设计、训练和模型运维。
- 生成式 AI 支持:使用 Amazon Bedrock 构建和扩展应用程序,并利用内置 AI 助手,例如 Amazon Q Developer。
- 数据处理和 SQL 分析:使用 Amazon Athena、EMR、Glue 和 Redshift 上的开源框架准备、分析和集成数据。
- 湖仓架构:统一访问跨存储系统的孤岛数据,以支持全面的分析和 AI。
使用网页数据进行特征工程简介
特征工程 是将原始数据转换为有意义变量的过程,这些变量称为“特征”,机器学习模型可以更有效地使用它们。其理念不是将未处理的数据输入模型,而是创建派生指标,以便更好地捕捉源数据集中的模式。
示例包括聚合值、标准化分数、组合相关变量,或创建突出不同字段之间关系的比率。优秀的特征工程对模型性能的影响甚至可能大于算法选择本身。这是因为设计良好的特征可以帮助模型识别原本会被隐藏的信号。
网页数据对于特征工程尤其有价值,因为它大规模反映了真实世界的活动。公开网站包含大量有关公司、产品、职位、评论、定价和用户行为的信息。这些信号可以转换为诸如受欢迎程度指标、市场需求指标、情感分数或招聘趋势等特征。此类特征可以显著提高你的机器学习流水线的性能。
然而,处理网页数据也带来了若干挑战。数据可能有噪声、不完整或不一致。这会极大影响输入数据的质量。此外,许多网站会采用反机器人措施。
因此,使用网页抓取来驱动机器学习并不简单。它要求在将收集到的数据用于 ML 流水线之前,对其进行清洗、验证和准备。
在哪里大规模获取高质量网页数据
正如你可能已经理解的,网页数据在特征工程中发挥着关键作用。与此同时,要可靠地获取它并将其用于企业级场景也很困难。如果你遵循网页爬虫路线图,从少数页面收集数据可能看起来很直接,但要在许多域名或大型网站上持续做到这一点,则复杂得多。
网站经常更改结构、执行速率限制,并部署会阻止自动化请求的反机器人防护。此外,即使你设法收集到了数据,确保它高质量、完整且最新也可能具有挑战性。
因此,许多组织依赖网页数据集公司以及 Bright Data 等网页数据提供商。这些平台让你能够访问大量网页数据,因此你不必构建和维护抓取基础设施。
Bright Data 提供来自 215 多个热门网页域名的数百个数据集,总记录数超过 170 亿。这些数据集包含持续更新的网页数据,结构化、可直接使用,并针对 ML 和 AI 应用程序进行了优化。探索数据集市场!
如果预先收集的数据集无法满足你的需求,Bright Data 还提供网页爬虫工具 API 和其他数据收集工具。这些工具可帮助你按需从网站获取新鲜数据,而无需自行处理爬虫挑战。
Bright Data 的与众不同之处在于其数据收集基础设施。它建立在一个全球代理网络之上,该网络在 195 多个国家/地区拥有超过 1.5 亿个 IP,实现 99.99% 的正常运行时间和 99.95% 的成功率。这个基础使构建由可信网页数据驱动的数据驱动型应用程序和 ML 流水线变得更加容易。
如何在 Amazon SageMaker 中对网页数据执行特征工程
在这个分步部分中,你将被引导完成在 Amazon SageMaker 中执行特征工程的过程。
你将从 Bright Data Glassdoor 数据集开始,将其上传到 Amazon S3,将其加载到 SageMaker 笔记本中,并应用特征工程来创建有意义的指标。特征准备好后,你将使用它们来训练一个用于预测高员工满意度的机器学习模型。
请记住,这只是一个示例,并且还有许多其他可能的用例。
按照说明操作!
先决条件
要遵循本指南,请确保你具备:
- 一个 AWS 账户(即使是免费试用也可以)。
- 一个 Bright Data 账户。
- 一个在你的 AWS 账户中定义的 S3 存储桶。
- 基本的 Python 知识,尤其是在机器学习开发和数据科学方面。
从现在开始,我们将假设你的 S3 存储桶名为 bright-data-sagemaker:

步骤 #1:从 Bright Data 获取输入数据集
第一步是获取输入网页数据。对于特征工程,最好从一个大型、高质量的数据集开始。在此示例中,我们将利用 Bright Data 丰富的数据集集合,重点使用先前规划的 Glassdoor 数据集。
替代方案:如果你更愿意收集新数据,可以使用 Bright Data 网页爬虫工具 API 之一来收集新鲜、结构化、适合 ML 的数据集。这些 API 提供一种交付选项,可以将数据直接发送到你的 Amazon S3 账户,使其与 SageMaker 的集成无缝衔接。
现在,如果你还没有 Bright Data 账户,请先创建一个。否则,直接登录。
在 Bright Data 控制面板中,选择“Web 数据集”菜单选项。导航到“数据集市场”选项卡以浏览可用数据集:

在这里,你可以探索来自 155 多个域名的 200 多个抓取数据集,其中包含数十亿条记录。
现在,查找“Glassdoor 公司概览信息”数据集并打开其页面:

该数据集包括公司评论、员工满意度评分、薪资和企业文化信息。常见用例包括雇主品牌、人才招聘和劳动力分析。它包含超过 246 万条条目和 50 个数据字段。
你可以选择购买筛选后的子集,也可以下载免费样本。在生产场景中,输入数据集越大,你的特征工程结果就越可靠。
对于本教程,由于它只是一个示例,我们将依赖免费样本。要获取它,请点击“Download sample”下拉菜单并选择“Download as JSON”选项:

你将收到一个名为 Glassdoor companies overview information.json 的样本文件。该文件包含 1,000 条公司记录,每条记录有 50 个字段。
将文件重命名为 glassdoor-companies.json,并准备将其上传到你的 S3 存储桶。这将作为你的 SageMaker 特征工程笔记本的输入。做得好!
步骤 #2:将网页数据上传到你的 S3 存储桶
前往你的 Amazon S3 存储桶页面,然后点击“Upload”按钮添加 glassdoor-companies.json 文件。上传后,它将像这样出现在你的存储桶中:

或者,你可以使用众多 Amazon S3 客户端之一上传该文件。
请记住:借助 Bright Data 网页爬虫工具 API,你可以将抓取的数据直接发送到 Amazon S3。
太棒了!你现在已经有了一些用于 Amazon SageMaker 特征工程的输入网页数据。
步骤 #3:开始使用 Amazon SageMaker
登录 AWS Console 并搜索“SageMaker”。选择该服务以打开其主页:

点击“Get started”按钮以启动你的 Amazon SageMaker 体验。
在设置页面上,对于自动 IAM 设置,请检查是否已选择“Auto-create a new role with admin permissions”。按下“Set up”按钮继续:

初始化过程可能需要几分钟,所以请耐心等待。在运行期间,你将看到“Setting up Amazon SageMaker Unified Studio…”消息。
设置完成后,你将到达以下页面:

点击“Open”以启动 Amazon SageMaker Unified Studio:

从这里,你可以探索和管理你的 SageMaker 环境,包括开发和运行笔记本。很酷!
步骤 #4:创建新笔记本
在 Amazon SageMaker Unified Studio 中,点击“Build in the notebook”按钮创建一个新笔记本:

你的 新 SageMaker 笔记本 应该如下所示:

考虑为你的笔记本起一个描述性名称,例如“Company Data Feature Engineering”。
Amazon SageMaker 笔记本 是一个运行 Jupyter Notebook 的托管机器学习计算实例。它提供你准备和处理数据、编写和测试训练代码、将模型部署到 SageMaker 托管服务以及验证模型所需的一切。
太好了!你现在已经拥有实现 SageMaker 特征工程逻辑所需的所有构建模块。
步骤 #5:加载输入网页数据
第一步是将来自 Bright Data 的输入 Glassdoor 网页数据加载到你的 SageMaker 笔记本中。
在左侧的“Data Explorer”面板中,展开“Buckets”下拉菜单。找到你的 S3 存储桶并找到 glassdoor-companies.json 文件。点击文件旁边的汉堡菜单,然后选择“Read as dataframe”选项:

这将使用从 S3 加载文件的逻辑填充初始笔记本单元:
import pandas as pd
data = pd.read_json("s3://bright-data-sagemaker/glassdoor-companies.json")
注意:将 bright-data-sagemaker 替换为你的 S3 存储桶名称。
按如下方式完成第一个单元中的数据导入逻辑:
import pandas as pd
# Load the input data from the S3 bucket
data = pd.read_json("s3://bright-data-sagemaker/glassdoor-companies.json")
# Normalize the structured JSON fields
df = pd.json_normalize(data.to_dict(orient="records"))
# Print the first 10 lines
df.head(10)
此代码片段从 S3 存储桶加载并预处理 JSON 数据集,以便在 Python 中进行分析。它使用 pd.read_json() 读取文件,然后使用 pd.json_normalize() 将嵌套 JSON 字段展平为表格型 DataFrame。最后,df.head(10) 显示前 10 行,提供结构化数据的快速预览。
按下“▶”按钮运行该单元。你应该会看到如下预览:

如你所见,数据集已正确加载。它包含 50 个数据字段,如 Bright Data 数据集页面上的“Dictionary”选项卡所列:

你已经准备好了用于特征工程的输入网页数据。太棒了!
步骤 #6:预处理输入数据
现在你已经将数据集导入笔记本,下一步是清洗并准备它,以进行特征工程。
在你的 SageMaker 笔记本中添加一个新单元,并输入以下代码:
# Select only the columns of interest
columns = [
"company",
"ratings_overall",
"ratings_work_life_balance",
"ratings_culture_values",
"ratings_compensation_benefits",
"ratings_career_opportunities",
"ratings_senior_management",
"ratings_ceo_approval",
"reviews_count",
"jobs_count",
"salaries_count",
"benefits_count",
"details_size",
"region"
]
df = df[columns]
# Remove all rows containing missing values
df = df.dropna()
此代码片段仅选择感兴趣的列,使你的数据集聚焦于相关指标和标识符。然后,它利用 df.dropna() 删除在所选列中包含缺失值的任何行。这确保你的数据对于特征工程而言干净且一致。
你的新单元将如下所示:

很好!你的输入数据集现在已准备好在 SageMaker 中进行特征工程。
步骤 #7:定义特征
现在是时候定义你将用于机器学习的特征了。请记住,特征是派生列,用于将原始数据总结或转换为有意义的指标,以更好地表示底层模式。
在此示例中,你将添加捕捉公司文化、薪酬、受欢迎程度和增长活动的特征。
首先,culture_score 特征将多个相关评分组合成一个单一指标,表示公司的整体文化环境:
df["culture_score"] = (
df["ratings_culture_values"] +
df["ratings_work_life_balance"] +
df["ratings_senior_management"]
) / 3
它对三个评分列求平均值:
ratings_culture_values:描述公司对其所声明价值观的体现程度。ratings_work_life_balance:评价员工对工作与生活平衡的看法。ratings_senior_management:跟踪对领导力和管理层的看法。
将三个评分相加并除以 3 会生成一个标准化分数。所得分数保持与原始评分相同的尺度,并对文化的每个方面赋予相同权重。
其次,compensation_score 特征表示员工对薪酬和职业发展满意度的综合视图:
df["compensation_score"] = (
df["ratings_compensation_benefits"] +
df["ratings_career_opportunities"]
) / 2
它涉及:
ratings_compensation_benefits:标记员工对薪酬和福利的满意度。ratings_career_opportunities:跟踪员工对职业晋升机会的满意度。
通过求平均值,该特征将与其他分数保持一致的尺度,以平衡两个方面并赋予同等权重。
第三,review_popularity 特征衡量一家公司在 Glassdoor 上被评论的频率:
df["review_popularity"] = df["reviews_count"].apply(lambda x: x ** 0.5)
这是通过对评论数量应用平方根转换得到的。为什么是平方根?因为评论数量通常高度偏斜(一些公司有数千条评论,许多公司则很少)。取平方根可以降低极高值的影响并稳定方差,使其更易于处理和分析。
第四,hiring_intensity 特征估计一家公司相对于其评论活动的招聘活跃程度:
df["hiring_intensity"] = df["jobs_count"] / (df["reviews_count"] + 1)
它通过将开放职位列表数量(jobs_count)除以评论数量加 1 来计算(以避免对没有评论的公司出现除以零)。
较高的值表示与留下评论的员工数量相比,公司正在积极招聘。这可以作为增长或扩张活动的代理指标。
将其全部整合起来,你将得到:

运行这些转换后,你的数据集现在包含了派生特征,这些特征将原始评分和计数组合成更具信息量的指标。很棒!
步骤 #8:设置目标变量
现在你的特征已经定义完成,下一步是为你的机器学习任务设置目标变量。目标变量表示你希望模型预测的结果。在这种情况下,你将预测一家公司是否具有高员工满意度。
要设置目标,请在你的笔记本中添加一个新单元,并添加以下代码:
# Define the target variable
df["high_satisfaction"] = (df["ratings_overall"] >= 4).astype(int)
这会创建一个布尔字段,其中总体评分为 4 或更高的公司被标记为 True(高满意度),其他公司则标记为 False(低满意度)。

许多机器学习算法要求目标变量为数值型。通过将满意度评分转换为二元 0/1 布尔标签,你可以训练用于分类任务的模型。这有助于你基于所创建的特征预测一家公司是否可能拥有高度满意的员工。在下一步实现它!
步骤 #9:训练用于满意度预测的 ML 模型
在定义好特征和目标变量后,你现在可以训练一个机器学习模型来预测高员工满意度。
所选择的 ML 模型是 XGBoost,这是一种梯度提升算法,在表格数据和分类任务上表现非常出色。它适合基于数值特征和派生特征的组合来预测 high_satisfaction 变量。
在你的笔记本中添加一个新单元,并添加用于训练模型的逻辑:
from sklearn.model_selection import train_test_split
from xgboost import XGBClassifier
# Define the features to use for prediction
features = [
"culture_score",
"compensation_score",
"ratings_ceo_approval",
"review_popularity",
"hiring_intensity"
]
# Separate input features (X) and target variable (y)
X = df[features]
y = df["high_satisfaction"]
# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Initialize the XGBoost classifier with some reasonable hyperparameters
model = XGBClassifier(
n_estimators=500,
max_depth=5,
learning_rate=0.05,
eval_metric="logloss"
)
# Train the model on the training data
model.fit(X_train, y_train)
上述代码片段准备并训练一个机器学习模型,用于预测高员工满意度。它选择工程化后的特征,并将数据拆分为训练集和测试集。然后,它使用调优后的超参数初始化 XGBoost 分类器。最后,它将模型拟合到训练数据。
执行该单元以实际训练预测模型:

完成此步骤后,你的 XGBoost 分类器已训练完毕,并准备好进行评估和预测。下一步是评估其性能!
步骤 #10:评估模型性能
最后一步是评估你的模型在未见数据上的表现。在你的笔记本中添加一个包含以下代码的新单元:
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix, roc_auc_score, accuracy_score
# Use the trained model to predict labels on the test set
pred = model.predict(X_test)
print(classification_report(y_test, pred))
# Confusion matrix
cm = confusion_matrix(y_test, pred)
print("\nConfusion Matrix:\n", cm)
# ROC-AUC score
roc = roc_auc_score(y_test, model.predict_proba(X_test)[:,1])
print("\nROC-AUC:", roc)
按下“Run All”按钮以执行所有步骤并计算指标:

最后一个单元执行后,你应该会看到类似如下的输出:

这些结果表明,对于这个示例数据集,该模型表现相当不错。凭借 86% 的准确率和 0.95 的 ROC-AUC,它展示了区分高满意度和低满意度公司的强大能力。
两个类别都显示出均衡的精确率和召回率,这意味着该模型在正确识别高满意度公司(1)和满意度较低的公司(0)方面同样有效。
然而,仍然存在一些误分类……如混淆矩阵所反映的,10 家低满意度公司被错误预测为高满意度,6 家高满意度公司被错误预测为低满意度。
这表明,虽然模型捕捉到了数据中的主要模式,但它并不完美,并且可以通过额外特征(或更多数据)进一步改进。
Et voilà!借助 Bright Data 输入网页数据集,你能够在 Amazon SageMaker 中执行特征工程并训练预测模型。这只是你可以探索的众多用例之一,这要归功于 Bright Data 提供的各种结构化网页数据集。
后续步骤
当前模型使用通过特征工程派生的字段来预测高员工满意度,取得了不错的结果。不过,仍有改进空间。有几种方法可以增强其性能,包括:
- 创建更多派生特征:以新的方式组合现有评分。例如,你可以从
ratings_senior_management和ratings_ceo_approval计算leadership_score,或计算work_life_compensation_ratio以捕捉薪酬与工作生活平衡之间的权衡。探索特征之间的比率、差异或交互,这些都可以揭示隐藏模式。 - 转换偏斜分布:
reviews_count或jobs_count等特征通常是偏斜的。我们已经应用了平方根转换,但可以考虑对数转换或 Box-Cox 转换以进一步稳定方差。 - 纳入分类特征:目前,
region和details_size不是数值型。使用独热编码或目标编码对它们进行编码,可能会提供额外的预测信号。 - 聚合多个数据点:如果你可以获得历史评论或招聘趋势,则创建诸如一段时间内
jobs_count的平均增长或culture_score的变化等特征,可以捕捉动态的公司行为。 - 特征选择和重要性分析:训练后,检查 XGBoost 特征重要性,以识别哪些特征对预测贡献最大。你可以受到最具预测性的特征启发,设计新特征。
- 外部数据丰富:考虑合并其他 Bright Data 数据集,以创建更丰富、更具上下文的特征。
结论
在本教程中,你了解了 Amazon SageMaker 为机器学习场景带来的价值。具体来说,你学习了为什么抓取的数据集是特征工程的优秀来源,以及它们如何用于训练预测性 ML 模型。
如所示,Bright Data 提供了丰富的数据集市场,覆盖数百个域名和数十亿条网页数据记录。这些数据集通过网页抓取持续更新,使其非常适合支持机器学习和 AI 工作流程。重要的是,它们可以与 Amazon SageMaker 无缝集成,正如本指南所展示的那样。
立即创建一个免费的 Bright Data 账户,开始探索我们的网页数据解决方案!