

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 分析與視覺化
<a name="data-wrangler-analyses"></a>

Amazon SageMaker Data Wrangler 包含內建分析，只要按幾下滑鼠，即可協助您產生視覺化和資料分析。您還可以使用自己的程式碼建立自訂分析。

在資料流程中選取一個步驟，然後選擇**新增分析**，藉此將一項分析新增至資料框。若要存取您已建立的分析，請選取包含分析的步驟，然後選取分析。

所有分析資料都是使用您資料集的 100,000 列產生的。

您可以將下列分析新增至資料框：
+ 資料視覺化，包括長條圖和散佈圖。
+ 資料集的快速摘要，包括項目數量、最小值和最大值 (針對數值資料)，以及最常用和最不常用的類別 (針對分類資料)。
+ 資料集的快速模型，可用來產生每個功能的重要性分數。
+ 目標洩漏報告，可用於確定一個或多個功能是否與目標功能有密切關聯。
+ 使用您自己的程式碼自訂視覺化。

請參閱以下各節，進一步了解這些選項。

## 直方圖
<a name="data-wrangler-visualize-histogram"></a>

使用長條圖來查看特定功能的功能值計數。您可以使用**顏色顯示依據**選項，檢查功能之間的關係。例如，以下長條圖將 2009-2019 年 Amazon 上最暢銷書籍的使用者評分，按類型著色製成分佈圖表。

![\[Data Wrangler 主控台中的範例直方圖。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/histogram.png)


您可以使用**構面顯示依據**功能，為另一欄中的每個值，建立一欄的長條圖。例如，下圖顯示 Amazon 上暢銷書籍的使用者評論之長條圖 (按年份劃分)。

![\[Data Wrangler 主控台中的範例直方圖。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/review_by_year.png)


## 散佈圖
<a name="data-wrangler-visualize-scatter-plot"></a>

使用**散佈圖**功能檢查功能之間的關係。若要建立散佈圖，請選取要在 **X 軸**和 **Y 軸**上繪製的功能。這兩個資料欄都必須是數字類型的資料欄。

您可以按附加資料欄為散佈圖著色。例如，以下範例顯示了一個散佈圖，比較 2009 年至 2019 年之間 Amazon 上最暢銷書籍的使用者評分與評論數量。散佈圖按書籍類別著色。

![\[Data Wrangler 主控台中的範例散佈圖。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/scatter-plot.png)


此外，您可以按功能構面劃分散佈圖。例如，以下影像顯示相同評論與使用者評分的散佈圖範例，並依年份劃分。

![\[Data Wrangler 主控台中的範例面向散佈圖。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/scatter-plot-facet.png)


## 資料表摘要
<a name="data-wrangler-table-summary"></a>

使用**資料表摘要**分析來快速總結資料。

對於包含數值資料的資料欄，包括對數和浮點資料，表格摘要裡會告訴您每欄的條目數 (count)、最小值 (min)、最大值 (max)、平均值 (mean)和標準差 (stddev)。

對於包含非數值資料的資料欄，像是字串、布林值或日期/時間資料的，表格摘要會告訴您每欄的項目數 (計數)、最少出現的值 (最小值) 和最常出現的值 (最大值)。

## 快速模型
<a name="data-wrangler-quick-model"></a>

使用**快速模型**視覺化可快速評估您的資料，並為每項功能產生重要性分數。[功能重要性評分](http://spark.apache.org/docs/2.1.0/api/python/pyspark.ml.html#pyspark.ml.classification.DecisionTreeClassificationModel.featureImportances)評分代表該功能在預測目標標籤方面的有用程度。功能重要性評分介於 [0, 1] 之間，較高的數字表示該功能對整個資料集更為重要。在快速模型圖表的頂部，有一個模型分數。分類問題顯示 F1 評分。迴歸問題具有均方錯誤 (MSE) 評分。

建立快速模型圖表時，您可以選取要評估的資料集，以及要比較功能重要性的目標標籤。Data Wrangler 會進行以下項目：
+ 推論所選資料集中，目標標籤和每項功能的資料類型。
+ 決定問題類型。基於標籤欄中的數字相異值，Data Wrangler 判斷這是迴歸還是分類問題類型。Data Wrangler 設置一個分類閾值為 100。如果標籤欄中有超過 100 個相異值，則 Data Wrangler 會將其歸類為迴歸問題；沒有的話，會歸類為分類問題。
+ 預先處理功能和訓練用標籤資料。使用的演算法需要將功能編碼成向量類型，並將標籤編碼成雙精度浮點數類型。
+ 使用 70％ 資料訓練一組隨機森林演算法。Spark 的[RandomForestRegressor](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-regression)用於訓練迴歸問題的模型。[RandomForestClassifier](https://spark.apache.org/docs/latest/ml-classification-regression.html#random-forest-classifier)用於訓練分類問題的模型。
+ 使用剩餘 30% 的資料評估隨機森林模型。Data Wrangler 使用 F1 分數評估分類模型，並使用 MSE 分數評估迴歸模型。
+ 使用 Gini 重要性方法計算每個功能的功能重要性。

下列影像展示快速模型功能的使用者介面。

![\[Data Wrangler 主控台中快速模型功能的範例 UI。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/quick-model.png)


## 目標洩漏
<a name="data-wrangler-analysis-target-leakage"></a>

當機器學習訓練資料集中存在與目標標籤密切關聯的資料，但在實際資料中無法使用時，就會發生目標洩漏。例如，您的資料集中可能有一個資料欄，作為您要使用模型預測資料欄的代理。

使用**目標洩漏**分析時，請指定下列項目：
+ **目標**：這是您希望機器學習 (ML) 模型能夠進行預測的功能。
+ **問題類型**：這是您正在使用的機器學習 (ML) 問題類型。問題類型可以是**分類**或**迴歸**。
+  (選用) **最大功能數**：這是視覺化中顯示的功能數量上限，顯示依據其目標洩漏風險進行排序。

在分類問題中，目標洩漏分析使用接收者操作特性下的區域，或每欄使用 AUC-ROC 曲線，最多到**功能最大值**。迴歸問題中，它使用判定係數或 R2 指標。

AUC-ROC 曲線提供了一個預測指標，在最多約 1000 個資料列的樣本中，針對每個資料欄使用交叉驗證個別運算。分數為 1 代表完美的預測能力，這通常表示目標洩漏。分數為 0.5 或更低，表示資料欄上的資訊本身無法提供任何有用的預測目標資訊。雖然資料欄本身可能不具有效資訊，但在與其他功能串聯使用來預測目標很有用，但分數較低可能表示該功能是多餘的。

例如，下列影像顯示了糖尿病分類問題的目標洩漏報告，即預測一個人是否患有糖尿病。AUC-ROC 曲線用來計算五個功能的預測能力，並確定所有功能都是安全的，不會發生目標洩漏。

![\[Data Wrangler 主控台中的範例目標洩漏報告。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/target-leakage.png)


## 多共線性
<a name="data-wrangler-multicollinearity"></a>

多共線性是兩個或多個預測器變數彼此相關的情況。預測器變數是資料集內，用來預測目標變數的功能。當您具有多重共線性時，預測器變數不僅可以預測目標變數，還可以預測彼此。

您可以使用**變異數膨脹因子 (VIF)**、**主成份分析 (PCA)**或**套索功能選擇**，以測量資料中多重共線性。如需更多資訊，請參閱下列內容。

------
#### [ Variance Inflation Factor (VIF) ]

變異數膨脹因子 (VIF) 是對變數對之間共線性的測量方法。Data Wrangler 會傳回 VIF 評分，以衡量變數彼此相關的程度。VIF 分數是大於或等於 1 的正數。

分數為 1 表示變數與其他變數不相關。分數大於 1 表示相關性較高。

理論上，您可以獲得值為無限大的 VIF 分數。Data Wrangler 的評分上限為 50。如果您的 VIF 分數大於 50，Data Wrangler會將分數設定為 50。

您可以使用下列指南來解讀 VIF 評分：
+ VIF 分數小於或等於 5，表示變數與其他變數適度相關。
+ VIF 分數大於或等於 5，表示變數與其他變數高度相關。

------
#### [ Principle Component Analysis (PCA) ]

主成份分析 (PCA) 測量功能空間中沿不同方向的資料變異。功能空間包含了您用來預測資料集中，目標變數的所有預測器變數。

例如，如果您試圖預測在 *RMS 鐵達尼號*撞上冰山後仍存活下來的人，您的功能空間可以包括乘客的年齡、性別以及他們支付的票價。

從功能空間中，PCA 會產生變異數的排序清單。這些變異數也稱為奇異值。變異數清單中的值大於或等於 0。我們可以使用它們來確定資料中有多少的多重共線性。

當數字大致一致時，資料具有極少數多重共線性的執行個體。當值之間存在很多變異性時，就有許多的多重共線性的執行個體。在執行 PCA 之前，Data Wrangler 將每個功能標準化，使其平均值為 0，標準偏差為 1。

**注意**  
在這種情況下，PCA 也可以稱為奇異值分解 (SVD)。

------
#### [ Lasso feature selection ]

套索功能選擇使用 L1 正則化技術，只在資料集中包含最多的預測功能。

不論是分類或迴歸，正則化技術都會為每個功能產生一個係數。係數的絕對值為功能提供重要性分數。較高的重要性分數表示它對目標變數的預測性較高。一種常見的功能選擇方法，是使用所有非零套索係數的功能。

------

## 偵測時間序列資料中的異常狀況
<a name="data-wrangler-time-series-anomaly-detection"></a>

您可以使用異常偵測視覺化來查看時間序列資料中的極端值。要了解決異常狀況的原因，您需要了解我們將時間序列分解為預測項和錯誤項。我們將時間序列的季節性和趨勢視為預測項。我們將殘差視為錯誤項。

錯誤項的話，您可以指定閾值，作為殘差可偏離平均值的標準差數，以便將其視為異常狀況。例如，您可以將閾值指定為 3 個標準差。任何超過 3 個偏離平均值標準差的殘差都是異常狀況。

您可以使用下列程序來執行**異常偵測**分析。

1. 開啟 Data Wrangler 資料流程。

1. 在資料流程中的**資料類型**下，選擇 **\$1**，然後選取**新增分析**。

1. 在**分析類型**部分，選擇**時間序列**。

1. 在**視覺化**部分，選擇**異常偵測**。

1. 在**異常狀況閾值**部分，選擇閾值以判定異常的值。

1. 選擇**預覽**以產生分析的預覽。

1. 選擇**新增**，將轉換作業新增至 Data Wrangler 資料流程。

## 時間序列資料中的季節趨勢分解
<a name="data-wrangler-seasonal-trend-decomposition"></a>

您可以使用季節性趨勢分解視覺化，來判斷時間序列資料中是否有季節性。我們使用 STL (使用 LOESS 分解季節趨勢) 方法進行分解。我們將時間序列分解為季節性、趨勢和殘差部分。該趨勢反映了該系列的長期進展。季節性部分是在一段時間內反覆出現的訊號。從時間序列中移除趨勢和季節性部分後，就是殘差部分。

您可以使用下列程序來執行**季節性-趨勢分解**分析。

1. 開啟 Data Wrangler 資料流程。

1. 在資料流程中的**資料類型**下，選擇 **\$1**，然後選取**新增分析**。

1. 在**分析類型**部分，選擇**時間序列**。

1. 在**視覺化**中，選擇**季節性-趨勢分解**。

1. 在**異常狀況閾值**部分，選擇閾值以判定異常的值。

1. 選擇**預覽**以產生分析的預覽。

1. 選擇**新增**，將轉換作業新增至 Data Wrangler 資料流程。

## 偏差報告
<a name="data-wrangler-bias-report"></a>

您可以使用 Data Wrangler 中的偏差報告，發現資料中的潛在偏差。若要產生偏差報告，您必須指定要預測的目標欄或**標籤**以及一個**構面**，或是您要檢查偏差的欄。

**標籤**：關於您希望模型進行預測的功能。例如，如果您要預測客戶轉換率，則可以選取包含客戶是否已下訂單之資料的資訊欄。您還必須指定此功能是標籤還是閾值。如果您指定標籤，則必須指定*正向結果*在資料中的模樣。在客戶轉換率範例中，正向結果可以是訂單欄中的 1，代表客戶在過去三個月內下過訂單的正向結果。如果您指定閾值，則必須指定正向結果的下限。例如，如果您的客戶訂單欄包含去年下達的訂單數量，您可能需要指定 1。

**構面**：您要檢查偏差的資料欄。例如，如果您試圖預測客戶轉換率，則您的構面可能是客戶的年齡。您可以選擇此構面，因為您認為資料偏向於特定年齡群組。您必須確認構面是以值還是閾值來進行測量。例如，如果您想要檢查一或多個特定年齡，請選取**值**並指定這些年齡。如果您想要查看年齡群組，請選取**閾值**並指定您要檢查的年齡閾值。

選取功能和標籤後，您可以選取要計算的偏差指標類型。

如需進一步了解，請參閱[透過訓練前資料產生偏差報告](https://docs.aws.amazon.com/sagemaker/latest/dg/data-bias-reports.html)。

## 建立自訂視覺化
<a name="data-wrangler-visualize-custom"></a>

您可以將分析新增至 Data Wrangler 流程，以建立自訂視覺化。您的資料集和已套用的所有轉換，都可以作為[Pandas DataFrame](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)使用。Data Wrangler 使用`df`變數來儲存資料框。您可以透過呼叫變數來存取資料框。

您必須提供輸出變數`chart`，才能儲存 [Altair](https://altair-viz.github.io/) 輸出圖表。例如，您可以透過下列程式碼區塊，使用 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. 在包含您想要視覺化之轉換的節點旁邊，選擇 **\$1**。

1. 選擇 **新增分析**。

1. **分析類型**部分，請選擇**自訂視覺化**。

1. **分析名稱**部分，指定一個名稱。

1. 在程式碼方框中輸入您的代碼。

1. 選擇**預覽**以預覽視覺化。

1. 選擇**儲存**以新增視覺化。

![\[如何在 Data Wrangler 主控台中新增視覺化的範例。\]](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/studio/mohave/custom-visualization.png)


如果您不知道如何在 Python 使用 Altair 視覺化套裝元件，可以使用自訂程式碼片段來協助您入門。

Data Wrangler 有一個可搜尋的視覺化程式碼片段集合。若要使用視覺化程式碼片段，請選擇**搜尋範例程式碼片段**，然後在搜尋列中指定查詢。

下面的範例使用**量化散點圖**程式碼片段。它繪製出一份二維的長條圖。

這些程式碼片段有註解，可協助您了解您需要對程式碼進行的變更。您通常需要在程式碼中指定資料集的資料欄名稱。

```
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
```