分析和可视化 - 亚马逊 SageMaker
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

分析和可视化

亚马逊 SageMaker Data Wrangler 包含内置的分析,只需单击几下即可生成可视化和数据分析。您还可以使用自己的代码创建自定义分析。

要将分析添加到数据框中,方法是选择数据流中的一个步骤,然后选择添加分析. 要访问已创建的分析,请选择包含该分析的步骤,然后选择该分析。

所有分析均使用 100,000 行数据集生成。

可以向数据框中添加以下分析:

  • 数据可视化,包括直方图和散点图。

  • 数据集的快速摘要,包括条目数、最小值和最大值(对于数值数据)以及频率最高和最低的类别(对于分类数据)。

  • 数据集的快速模型,可用于为每个要素生成重要性分数。

  • 目标泄漏报告,可用于确定一个或多个要素是否与目标要素高度相关。

  • 使用您自己的代码的自定义可视化。

有关这些选项的更多信息,请参阅以下部分。

直方图

使用直方图查看特定要素的要素值计数。您可以使用检查特征之间的关系颜色依据选项。例如,以下直方图显示了 2009-2019 年亚马逊上最畅销图书的用户评分分布情况,按类型着色。

您可以使用分面功能为另一列中的每个值创建一列的直方图。例如,下图显示了亚马逊上畅销书的用户评论的直方图(如果按年份划分)。

散点图

使用散点图功能来检查要素之间的关系。要创建散点图,请选择要在X 轴Y 轴. 这两列都必须是数字类型的列。

您可以按附加列为散点图着色。例如,以下示例显示了一个散点图,该散点图将 2009 年至 2019 年亚马逊畅销书的评论数量与用户评分进行比较。散点图按书籍类型着色。

此外,您还可以按要素对散点图进行分面。例如,下图显示了相同评论与用户评分散点图的示例,该散点图按年份分面。

表摘要

使用表摘要分析以快速汇总您的数据。

对于包含数值数据(包括对数和浮点数据)的列,表格摘要报告每列的条目数(计数)、最小值(最小)、最大值(最大值)、平均值和标准差(stddev)。

对于包含非数字数据的列(包括包含字符串、布尔值或日期/时间数据的列),表格摘要将报告条目数(计数)、最不频繁值(最小)和最频繁值(最大值)。

快速模型

使用快速模型可视化,以快速评估您的数据并为每个要素生成重要性分数。一个特征重要性分数score 表示要素在预测目标标注方面的用处。要素重要性分数介于 [0, 1] 之间,较高的数字表示要素对整个数据集更为重要。在快速模型图表的顶部,有一个模型分数。分类问题显示的是 F1 分数。回归问题具有均方误差 (MSE) 分数。

创建快速模型图表时,需要选择要评估的数据集和要比较要素重要性的目标标签。数据牧马人将执行以下操作:

  • 推断目标标注和所选数据集中每个要素的数据类型。

  • 确定问题类型。根据标签列中不同值的数量,Data Wrangler 确定这是回归问题类型还是分类问题类型。Data Wrangler 将分类阈值设置为 100。如果标注列中的不同值超过 100 个,则 Data Wrangler 会将其归类为回归问题;否则,它被归类为分类问题。

  • 预处理要素和标签数据以进行训练。使用的算法要求将特征编码为矢量类型,将标签编码为双精度类型。

  • 使用 70% 的数据训练随机森林算法。SparkRandomForestRegressor用于训练回归问题的模型。这些区域有:RandomForestClassifier用于训练分类问题的模型。

  • 使用剩余的 30% 数据评估随机森林模型。Data Wrangler 使用 F1 分数评估分类模型,并使用 MSE 分数评估回归模型。

  • 使用基尼重要性方法计算每个要素的特征重要性。

下图显示了快速模型功能的用户界面。

目标泄漏

当机器学习训练数据集中的数据与目标标签高度相关,但在真实数据中不可用时,就会发生目标泄漏。例如,您的数据集中可能有一列用作要用模型预测的列的代理。

当您使用以下应用程序时:目标泄漏分析,则指定以下内容:

  • 目标:这是您希望机器学习模型能够进行预测的功能。

  • 问题类型:这是您正在处理的 ML 问题类型。问题类型可以是分类要么回归.

  • (可选)最长功能:这是要在可视化中显示的最大要素数,它显示了按其成为目标泄漏的风险对要素进行排名。

为了进行分类,目标泄漏分析使用接收器工作特性下的面积,或每列的 AUC-ROC 曲线,直至最长功能. 对于回归,它使用确定系数或 R2 度量。

AUC-ROC 曲线提供了一个预测指标,该指标使用交叉验证为每列单独计算,最多约为 1000 行的样本。分数为1表示完美的预测能力,这通常表示目标泄漏。分数为0.5或更低表示该栏中的信息本身无法提供任何有用的信息来预测目标。尽管列本身可能没有信息,但在与其他要素一起使用时有助于预测目标,但分数较低可能表示该功能是多余的。

例如,下图显示了糖尿病分类问题的目标泄漏报告,即预测一个人是否患有糖尿病。AUC-ROC曲线用于计算五个特征的预测能力,并且所有特征都被确定为免受目标泄漏的影响。

多重共线性

多重共线性是指两个或多个预测变量相互关联的情况。预测变量是数据集中用于预测目标变量的要素。当您具有多重共线性时,预测变量不仅可以预测目标变量,还可以相互预测。

您可以使用方差膨胀系数 (VIF)主成分分析 (PCA),或者套索的功能作为数据中多重共线性的度量。有关更多信息,请参阅下列内容。

Variance Inflation Factor (VIF)

方差膨胀因子 (VIF) 是变量对之间共线性的度量。Data Wrangler 返回一个 VIF 分数,用以衡量变量之间的紧密关系。VIF 分数是大于或等于 1 的正数。

分数为 1 表示该变量与其他变量不相关。分数大于 1 表示相关性较高。

从理论上讲,您可以获得值为无穷大的 VIF 分数。Data Wrangler 将高分削减为 50 分。如果你的 VIF 分数大于 50,数据牧马人会将分数设置为 50。

您可以使用以下准则来解释您的 VIF 分数:

  • VIF 分数小于或等于 5 表示变量与其他变量的相关性适中。

  • VIF 分数大于或等于 5 表示变量与其他变量高度相关。

Principle Component Analysis (PCA)

主成分分析 (PCA) 测量数据在特征空间中沿不同方向的方差。要素空间由用于预测数据集中目标变量的所有预测变量组成。

例如,如果你想预测谁在RMS登上冰山后,你的特色空间可以包含乘客的年龄、性别和他们支付的票价。

PCA 从特征空间生成有序的方差列表。这些方差也称为奇异值。方差列表中的值大于或等于 0。我们可以使用它们来确定我们的数据中有多少多重共线性。

当数字大致均匀时,数据的多重共线性实例很少。当值之间存在很大差异时,我们有许多多重共线性的实例。在执行 PCA 之前,Data Wrangler 将各个特征标准化为具有零并获得标准值零并获得标准偏差 1。

注意

在这种情况下,PCA 也可以称为奇异值分解 (SVD)。

Lasso feature selection

套索要素选择使用 L1 正则化技术仅包含数据集中预测性最强的要素。

对于分类和回归,正则化技术都会为每个要素生成一个系数。系数的绝对值提供要素的重要性得分。重要性分数越高表示它对目标变量的预测性越强。常见的特征选择方法是使用套索系数非零的所有要素。

检测时间序数据

您可以使用异常检测可视化来查看时间序列数据中的异常值。要了解是什么决定了异常,您需要了解我们将时间序列分解为预测项和误差项。我们将时间序列的季节性和趋势视为预测项。我们将残差视为误差项。

对于误差项,您可以指定一个阈值作为残差可以远离均值的标准差数,以将其视为异常。例如,您可以将阈值指定为 3 个标准差。任何距离均值大于 3 个标准差的残差均为异常。

您可以使用下列过程来执行异常检测分析。

  1. 打开你的 Data Wrangler 数据流。

  2. 在你的数据流中,在数据类型,选择+,然后选择添加分析.

  3. 适用于分析类型,选择时间序.

  4. 适用于可视化,选择异常检测.

  5. 适用于异常阈值中,选择将某个值视为异常的阈值。

  6. 选择预览以生成分析预览。

  7. 选择Add将转换添加到 Data Wrangler 数据流中。

时间序列数据中的季节性趋势分解

您可以使用季节性趋势分解可视化来确定时间序列数据中是否存在季节性。我们使用STL(使用LOESS进行季节性趋势分解)方法来执行分解。我们将时间序列分解为季节性、趋势和残差分量。这一趋势反映了该系列的长期发展。季节性分量是在某个时间段内反复出现的信号。从时间序列中移除趋势和季节性分量后,您就有了残差。

您可以使用下列过程来执行季节性趋势分解分析。

  1. 打开你的 Data Wrangler 数据流。

  2. 在你的数据流中,在数据类型,选择+,然后选择添加分析.

  3. 适用于分析类型,选择时间序.

  4. 适用于可视化,选择季节性趋势分解.

  5. 适用于异常阈值中,选择将某个值视为异常的阈值。

  6. 选择预览生成分析的预览。

  7. 选择Add将转换添加到 Data Wrangler 数据流中。

Bias 报告

您可以使用 Data Wrangler 中的偏差报告来发现数据中的潜在偏差。要生成偏差报告,必须指定目标列,或者标签,您要预测的还有分面,或者您要检查偏差的列。

标签:您希望模型进行预测的特征。例如,如果您正在预测买家转化率,则可以选择一个列,其中包含有关客户是否已下订单的数据。还必须指定此要素是标注还是阈值。如果您指定标签,则必须指定积极的结果看起来像你的数据。在买家转化示例中,“订单” 列中的正面结果可能是 1,表示买家在过去三个月内下单的正面结果。如果指定阈值,则必须指定定义正结果的下限。例如,如果您的 “买家订单” 列包含去年下达的订单数,则可能需要指定 1。

分面:您要检查其偏差的列。例如,如果您尝试预测客户转化率,则您的方面可能是客户的年龄。你可以选择这个方面,因为你认为自己的数据偏向于某个年龄组。您必须确定该刻面是作为值还是阈值进行测量。例如,如果要检查一个或多个特定年龄,则选择并指定这些年龄。如果您要查看年龄段,请选择Threshold并指定要检查的年龄阈值。

选择要素和标签后,选择要计算的偏差量度类型。

要了解更多信息,请参阅生成训练前数据中的偏差报告.

创建自定义可视化

您可以在 Data Wrangler 流程中添加分析以创建自定义可视化。您的数据集包含了您应用的所有变换,可以作为pandas DataFrame. 数据牧马人使用df变量来存储数据框。您可以通过调用变量来访问数据框。

您必须提供输出变量,chart,以存储Altair输出图表。例如,您可以使用以下代码块使用 Titanic 数据集创建自定义直方图。

import altair as alt df = df.iloc[:30] df = df.rename(columns={"Age": "value"}) df = df.assign(count=df.groupby('value').value.transform('count')) df = df[["value", "count"]] base = alt.Chart(df) bar = base.mark_bar().encode(x=alt.X('value', bin=True, axis=None), y=alt.Y('count')) rule = base.mark_rule(color='red').encode( x='mean(value):Q', size=alt.value(5)) chart = bar + rule
创建自定义可视化:
  1. 在包含要可视化的变换的节点旁边,选择+.

  2. 选择添加分析.

  3. 适用于分析类型,选择自定义可视化.

  4. 适用于分析名称,指定名称。

  5. 在代码框中输入您的验证码。

  6. 选择预览以预览您的可视化。

  7. 选择Save(保存)以添加您的可视化。

如果你不知道如何在 Python 中使用 Altair 可视化包,你可以使用自定义代码片段来帮助你入门。

Data Wrangler 有一个可搜索的可视化片段集合。要使用可视化代码片段,请选择搜索示例代码段并在搜索栏中指定查询。

以下示例使用分档散点图代码段。它绘制了 2 个维度的直方图。

这些片段包含注释,可帮助您了解需要对代码进行的更改。通常需要在代码中指定数据集的列名。

import altair as alt # Specify the number of top rows for plotting rows_number = 1000 df = df.head(rows_number) # You can also choose bottom rows or randomly sampled rows # df = df.tail(rows_number) # df = df.sample(rows_number) chart = ( alt.Chart(df) .mark_circle() .encode( # Specify the column names for binning and number of bins for X and Y axis x=alt.X("col1:Q", bin=alt.Bin(maxbins=20)), y=alt.Y("col2:Q", bin=alt.Bin(maxbins=20)), size="count()", ) ) # :Q specifies that label column has quantitative type. # For more details on Altair typing refer to # https://altair-viz.github.io/user_guide/encoding.html#encoding-data-types