

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

# 在 AWS Glue 中調校機器學習轉換
<a name="add-job-machine-learning-transform-tuning"></a>

您可以在 AWS Glue 中調校您的機器學習轉換，改善資料清理任務的結果來滿足您的目標。若要改善轉換，您可以產生標記集、新增標籤，然後重複這些步驟多次來教導它，直到您取得所需要的結果為止。您也可以變更一些機器學習參數來進行調校。

如需機器學習轉換的詳細資訊，請參閱[記錄與 AWS Lake Formation FindMatches 相符](machine-learning.md)。

**Topics**
+ [機器學習度量](machine-learning-terminology.md)
+ [在精確度和取回率之間進行選擇](machine-learning-precision-recall-tradeoff.md)
+ [在正確性和成本之間進行選擇](machine-learning-accuracy-cost-tradeoff.md)
+ [使用相符項目可信度分數估計相符項目的品質](match-scoring.md)
+ [教導尋找相符項目轉換](machine-learning-teaching.md)

# 機器學習度量
<a name="machine-learning-terminology"></a>

若要了解用來調校您機器學習轉換的度量，建議您先熟悉以下術語：

**真肯定 (TP)**  
轉換在資料中正確找到的相符項目，有時候稱為「命中」**。

**真否定 (TN)**  
轉換在資料中正確拒絕的不相符項目。

**假肯定 (FP)**  
轉換在資料中不正確地分類為相符項目的不相符項目，有時候稱為「錯誤警示」**。

**假否定 (FN)**  
轉換在資料中並未找到的相符項目，有時候稱為「未中」**。

如需機器學習中所使用術語的詳細資訊，請參閱 Wikipedia 中的 [Confusion matrix](https://en.wikipedia.org/wiki/Confusion_matrix)。

若要調校您的機器學習轉換，您可以在轉換的 **Advanced properties (進階屬性)** 中變更下列度量的值。
+ **Precision (精確度)** 會測量轉換在識別為肯定 (真肯定和假肯定) 的記錄總數中，找到真肯定的效果有多好。如需詳細資訊，請參閱 Wikipedia 中的 [Precision and recall](https://en.wikipedia.org/wiki/Precision_and_recall)。
+ **Recall (取回率)** 會測量從來源資料的所有記錄中，轉換找到真肯定的效果有多好。如需詳細資訊，請參閱 Wikipedia 中的 [Precision and recall](https://en.wikipedia.org/wiki/Precision_and_recall)。
+ **Accuracy (準確性)** 會測量轉換找到真肯定和真否定的效果有多好。提高正確性需要更多的機器資源和成本。但也會增加回收率。如需詳細資訊，請參閱 Wikipedia 中的 [Accuracy and precision](https://en.wikipedia.org/wiki/Accuracy_and_precision#In_information_systems)。
+ **Cost (成本)** 會測量執行轉換需要使用多少運算資源 (以及因此產生的金錢成本)。

# 在精確度和取回率之間進行選擇
<a name="machine-learning-precision-recall-tradeoff"></a>

每個 `FindMatches` 轉換都包含了 `precision-recall` 參數。您可以使用此參數來指定以下其中一個項目：
+ 若您更擔心轉換在兩筆記錄實際上不相符時錯誤地報告成相符，建議您強調「精確度」**。
+ 如果您更擔心轉換無法偵測到相符的記錄，建議您強調「取回率」**。

您可以在 AWS Glue 主控台上進行這項取捨，或是使用 AWS Glue 機器學習 API 操作。

**何時應著重在精確度**  
若您更擔心 `FindMatches` 在兩筆記錄不相符報告成相符的風險，建議您著重在精確度。若要著重在精確度，請選擇「較高」**的精確度取回率取捨值。使用更高的值，`FindMatches` 轉換便需要更多證據來判斷兩筆記錄是否相符。轉換會調校成較傾向於將記錄視為不相符。

例如，假設您正在使用 `FindMatches` 偵測影片目錄中的重複項，並且您為轉換提供了較高的精確度取回率值。若您的轉換不正確地將「星際大戰四部曲：曙光乍現」**視為與「星際大戰：帝國反擊戰」**相同，想要「星際大戰四部曲：曙光乍現」**的客戶便可能會看到「星際大戰：帝國反擊戰」**。這會是不佳的客戶體驗。

但是，若轉換無法偵測到「星際大戰四部曲：曙光乍現」**與「星際大戰：四部曲 ‒ 曙光乍現」**相同，客戶一開始可能會感到困惑，但最後還是會了解到他們是相同的項目。這會是一項錯誤，但不會像先前的案例那樣不佳。

**何時應著重在取回率**  
若您更擔心 `FindMatches` 轉換可能無法偵測到兩筆記錄實際上是相符項目的風險，建議您著重在取回率。若要著重在取回率，請選擇「較低」**的精確度取回率取捨值。使用較低的值，`FindMatches` 轉換便需要較少證據來判斷兩筆記錄是否相符。轉換會調校成較傾向於將記錄視為相符。

例如，這可能會是安全組織的優先事項。假設您正在將客戶與已知詐騙犯的清單進行比對，此時判斷客戶是否為詐騙犯便非常重要。您正在使用 `FindMatches` 將詐騙犯清單和客戶清單進行比對。每次 `FindMatches` 在兩個清單間找到相符項目，便會指派一名稽核人員來驗證該客戶是否確實是詐騙犯。相較於精確度，您的組織可能會偏好選擇取回率。換句話說，您會寧願讓稽核人員手動檢閱並拒絕客戶並非詐騙犯時的一些案例，也不願意在識別確實位於詐騙犯清單上的客戶時失敗。

**如何同時著重精確度和取回率**  
同時改善精確度和取回率的最佳方式是標記更多資料。隨著您標記更多資料，`FindMatches` 轉換的整體正確性便會獲得改善，進而同時改善精確度和取回率。但是，即使是使用最正確的轉換，仍然還是會有您必須實驗著重精確度或取回率，或是在這兩者之間選擇一個值的灰色地帶。

# 在正確性和成本之間進行選擇
<a name="machine-learning-accuracy-cost-tradeoff"></a>

每個 `FindMatches` 轉換都包含 `accuracy-cost` 參數。您可以使用此參數來指定以下其中一個項目：
+ 若您更希望轉換能夠正確地報告兩個記錄相符，建議您強調「正確性」**。
+ 若您更擔心執行轉換的成本或速度，建議您強調「較低成本」**。

您可以在 AWS Glue 主控台上進行這項取捨，或是使用 AWS Glue 機器學習 API 操作。

**何時應著重在正確性**  
若您更擔心 `find matches` 結果不包含任何相符項目的風險，建議您著重在正確性。若要著重在正確性，請選擇「較高」**的正確性成本取捨值。使用較高的值，`FindMatches` 轉換便需要更多時間執行更完整的搜尋，以正確地取得相符記錄。請注意，此參數不會讓錯誤地將不相符兩筆記錄視為相符項目的機率降低。轉換會調校成傾向花費更多時間尋找相符項目。

**何時應著重在成本**  
若您更擔心執行 `find matches` 轉換的成本，而非找到多少相符項目，建議您著重在成本。若要著重在成本，請選擇「較低」**的正確性成本取捨值。使用較低的值，`FindMatches` 轉換執行時需要的資源便會更少。轉換會調校成傾向尋找較少相符項目。若您可以接受著重在較低成本時的結果，請使用此設定。

**如何同時著重正確性及較低成本**  
檢查更多筆記錄來判斷他們是否為相符項目時，會需要更多的電腦處理時間。若您希望減少成本，卻又不想犧牲品質，以下是一些您可以採取的步驟：
+ 消除資料來源中您不在乎是否相符的記錄。
+ 從資料來源中消除您確定在判斷相符/不相符時實用性不高的資料行。一個良好的判斷方式便是消除您認為不會在您決定一組記錄是否為「相同」記錄時影響您決策的資料行。

# 使用相符項目可信度分數估計相符項目的品質
<a name="match-scoring"></a>

相符項目可信度分數提供 FindMatches 所找到之相符項目的品質估計，以區分機器學習模型中具有高度自信、不確定或不太可能的相符記錄。相符項目可信度分數介於 0 到 1 之間，其中分數越高，表示相似度越高。檢查相符項目可信度分數可讓您區分系統高度可信 (您可能會決定合併) 的相符項目叢集、系統不確定的叢集 (您可能會決定安排人工檢閱)，以及系統認為不太可能的叢集 (可能會決定拒絕)。

如果您看到高相符項目可信度分數，但確定沒有相符項目；或是看到低分數，但實際上確定有相符項目，則可能要調整自己的訓練資料。

存在大規模產業資料集時，可信度分數就特別有用，因為檢閱每個 FindMatches 決定是不切實際的行為。

相符項目可信度分數在 AWS Glue 2.0 或更高版本中推出。

## 產生相符項目可信度分數
<a name="specifying-match-scoring"></a>

您可以在呼叫 `FindMatches` 或 `FindIncrementalMatches` API 時將 `computeMatchConfidenceScores` 的布林值設定為 True，即可產生相符項目可信度分數。

AWS Glue 將新的 `column match_confidence_score` 新增至輸出。

## 相符項目評分範例
<a name="match-scoring-examples"></a>

例如，請考慮下列相符的記錄：

**分數 >= 0.9**  
相符記錄的摘要：

```
  primary_id  |   match_id  | match_confidence_score

3281355037663    85899345947   0.9823658302132061
1546188247619    85899345947   0.9823658302132061
```

詳細資訊:

![\[網際網路閘道的路由表範例。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/match_score1.png)


在此範例中，我們可以看到兩條記錄非常相似，共同具有 `display_position`、`primary_name` 和 `street name`。

**分數 >= 0.8 和分數 < 0.9**  
相符記錄的摘要：

```
  primary_id  |   match_id  | match_confidence_score

309237680432     85899345928   0.8309852373674638
3590592666790    85899345928   0.8309852373674638
343597390617     85899345928   0.8309852373674638
249108124906     85899345928   0.8309852373674638
463856477937     85899345928   0.8309852373674638
```

詳細資訊:

![\[網際網路閘道的路由表範例。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/match_score2.png)


在此範例中，我們可以看到這些記錄具有相同的 `primary_name` 和 `country`。

**分數 > = 0.6 和分數 < 0.7**  
相符記錄的摘要：

```
  primary_id  |   match_id  | match_confidence_score

2164663519676    85899345930   0.6971099896480333
 317827595278    85899345930   0.6971099896480333
 472446424341    85899345930   0.6971099896480333
3118146262932    85899345930   0.6971099896480333
 214748380804    85899345930   0.6971099896480333
```

詳細資訊:

![\[網際網路閘道的路由表範例。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/match_score3.png)


在此範例中，我們可以看到這些記錄僅具有相同的 `primary_name`。

如需詳細資訊，請參閱：
+ [步驟 5：使用您的機器學習轉換新增和執行任務](machine-learning-transform-tutorial.md#ml-transform-tutorial-add-job)
+ PySpark：[FindMatches 類別](aws-glue-api-crawler-pyspark-transforms-findmatches.md)
+ PySpark：[FindIncrementalMatches 類別](aws-glue-api-crawler-pyspark-transforms-findincrementalmatches.md)
+ Scala：[FindMatches 類別](glue-etl-scala-apis-glue-ml-findmatches.md)
+ Scala：[FindIncrementalMatches 類別](glue-etl-scala-apis-glue-ml-findincrementalmatches.md)

# 教導尋找相符項目轉換
<a name="machine-learning-teaching"></a>

每個 `FindMatches` 轉換都必須經過教導，來了解哪些項目應視為相符項目，哪些項目又應視為不相符的項目。您可以透過新增標籤至檔案，並將您的選擇上傳至 AWS Glue 來教導您的轉換。

您可以在 AWS Glue 主控台中協調此標記，或是使用 AWS Glue 機器學習 API 操作。

**我應該新增多少次標籤？ 我需要多少標籤？**  
這些問題的解答大部分都取決於您。您必須評估 `FindMatches` 是否交付了您所需要的正確性等級，以及您是否認為進行更多標記對您來說確實有價值。決定這一點的最佳方式是查看在 AWS Glue 主控台中選擇 **Estimate quality (估計品質)** 時可以產生的「Precision (精確度)」、「Recall (取回)」和「Area under the Precision-Recall curve (精確度取回率曲線下方的區域)」指標。在您標記更多組任務後，請重新執行這些指標並驗證他們是否獲得改善。若在標記幾組任務之後，您仍然沒有在您關注的指標上看到改善，表示轉換的品質可能已到達極限。

**為何同時需要真肯定和真否定標籤？**  
`FindMatches` 轉換需要肯定和否定範例，才能了解您視為相符的項目有哪些。若您標記 `FindMatches` 產生的培訓資料 (例如使用 **I do not have labels (我沒有標籤)** 選項)，`FindMatches` 會嘗試為您產生一組「標籤組 ID」。在每個任務中，您都會將相同的「標籤」給予一些記錄，並將不同的「標籤」給予其他記錄。換句話說，任務通常不是全部相同或是全部不同 (但若特定任務為全部「相同」或全部「不同」也沒什麼問題)。

如果您正在使用 **Upload labels from S3 (從 S3 上傳標籤)** 選項教導您的 `FindMatches` 轉換，請嘗試同時包含相符記錄和不相符記錄的範例。您也可以只擁有一個類型。這些標籤可協助您建置更正確的 `FindMatches` 轉換，但您仍然需要使用 **Generate labeling file (產生標記檔案)** 選項標記一些您產生的記錄。

**我該如何強制讓轉換完全照我教導的方式進行比對？**  
`FindMatches` 轉換會從您提供的標籤學習，因此它可能會產生與您所提供標籤不相符的記錄對。若要強制 `FindMatches` 轉換遵守您的標籤，請選取 **FindMatchesParameter** 中的 **EnforceProvidedLabels**。

**當機器學習轉換將實際上不相符的項目識別為相符項目時，您可以使用哪些技術？**  
您可以使用下列技術：
+ 將 `precisionRecallTradeoff` 提高到更高的值。這最後會導致尋找到的相符項目數減少，但應該也會在到達夠高的值時細分您的龐大叢集。
+ 擷取對應至不正確結果的輸出資料列，然後將他們重新格式化成標記集 (移除 `match_id` 資料行並新增 `labeling_set_id` 和 `label` 資料行)。若有需要，請分散 (細分) 成多個標記集，確保標記程式能在指派標籤時記住每個標記集。然後，正確地標記相符的資料集、上傳標籤檔案，然後將它附加到您現有的標籤。這可能會足以教導您的轉換程式要了解模式時應尋找的項目為何。
+ (進階) 最後，請觀察該資料，查看是否有您可以偵測，但系統並未注意到的模式。使用標準 AWS Glue 函數預先處理該資料，來「正常化」**資料。分離您知道對其自身資料行而言重要程度不同的資料，來強調您希望演算法學習的內容。或是從您知道其資料彼此相關的資料行建構合併資料行。