

# AWS Lake Formation FindMatches によるレコードのマッチング
<a name="machine-learning"></a>

**注記**  
レコードの照合は現在、次のリージョンの AWS Glue コンソールではご利用いただけません: 中東 (アラブ首長国連邦)、欧州 (スペイン)、アジアパシフィック (ジャカルタ)、欧州 (チューリッヒ)。

AWS Lake Formation には、カスタム変換を作成するための機械学習機能が用意されています。現在、FindMatches という名前の変換が 1 つあります。FindMatches 変換を使用すると、レコードに共通の一意の識別子がなく、正確に一致するフィールドがない場合でも、データセット内の重複レコードまたは一致するレコードを識別できます。そのため、コードを記述したり、機械学習の仕組みを知ったりする必要はありません。FindMatches は、次のようなさまざまな問題で役立ちます。
+ **一致する顧客**: 多くの顧客フィールドがデータベース間で正確に一致しない場合でも（名前のスペルや住所の違い、データの欠落や不正確ななど）、異なる顧客データベース間で顧客レコードをリンクします。
+ **製品のマッチング**: カタログ内の製品を、競合他社のカタログに対する製品カタログなど、他の製品ソースと照合します。エントリの構造は異なります。
+ **不正検出の向上**: 重複した顧客アカウントを特定し、新しく作成したアカウントが、以前に知られている不正ユーザーと一致する（またはその可能性のある）タイミングを判断します。
+ **マッチングに関するその他の問題**: マッチアドレス、映画、パーツリストなど。一般的に、人間がデータベース行を見て、それらが一致していると判断した場合、FindMatches 変換が役に立つ可能性は非常にあります。

 これらの変換は、ジョブの作成時に作成できます。作成する変換は、ラベル付けするソースデータセットからのストアスキーマとサンプルデータに基づいています (このプロセスを変換の「トレーニング」と呼びます)。ラベルを付けるレコードは、ソースデータセットに存在する必要があります。このプロセスでは、ラベル付けしたファイルを生成し、変換が学習する方法でアップロードし直します。変換を教えたら、Spark ベースの AWS Glue ジョブ (PySpark または Scala Spark) から呼び出し、互換性のあるソースデータストアを持つ他のスクリプトで使用できます。

 作成した変換は AWS Glue に保存されます。AWS Glue コンソールで、作成した変換を管理できます。**[データ統合とETL]** のナビゲーションペインで **[データ分類ツール] > [レコードのマッチング]** の順に移動して、機械学習変換を編集し、トレーニングを継続できます。コンソールで変換を管理する方法の詳細については、「 [機械学習変換の使用](console-machine-learning-transforms.md)」を参照してください。

**注記**  
AWS Glue version 2.0 FindMatchesジョブは、transformがデータを処理している間、`aws-glue-temp-<accountID>-<region>` 一時ファイルを保存するためにAmazon S3バケットを使用します。このデータは、手動または Amazon S3 ライフサイクルルールを設定して、実行の完了後に削除する事ができます。

## 機械学習変換のタイプ
<a name="machine-learning-transforms"></a>

機械学習変換を作成して、データを最適化できます。これらの変換は、ETL スクリプトから呼び出すことができます。データは、変換から変換へと *DynamicFrame* というデータ構造で渡されます。これは、Apache Spark SQL `DataFrame` を拡張したものです。`DynamicFrame` にはデータが含まれており、データを処理するためにそのスキーマを参照します。

次のタイプの機械学習変換を利用できます。

*Find matches (一致の検索)*  
ソースデータの重複したレコードを見つけます。この機械学習変換をトレーニングするには、サンプルデータセットにラベルを付けて、どの行が一致するかを示します。機械学習変換は、ラベル付けしたサンプルデータを使用してトレーニングするほど、どの行が一致するかを学習します。変換の設定方法に応じて、出力は次のいずれかになります。  
+ 入力テーブルのコピーと、一致するレコードのセットを示す値が入力された `match_id` 列。`match_id` 列は任意の識別子です。同じ `match_id` を持つレコードは、互いに一致するレコードとして識別されています。`match_id` が異なるレコードが一致しません。
+ 重複する行が削除された入力テーブルのコピー。複数の重複が見つかった場合、最も低いプライマリキーを持つレコードが保持されます。

*インクリメンタルマッチを検索する*  
Find matches トランスフォームは、既存のフレームとインクリメンタルフレーム間で一致を検索し、一致グループごとに一意の ID を含む列を出力として返すように構成することもできます。  
詳細については、「[インクリメンタルマッチを検索する。](machine-learning-incremental-matches.md)」を参照してください。

### FindMatches 変換の使用
<a name="machine-learning-find-matches"></a>

`FindMatches` 変換を使用してソースデータの重複したレコードを見つけることができます。変換をトレーニングするために役立つラベリングファイルが生成または提供されます。

**注記**  
現在、カスタム暗号化キーを使用する `FindMatches` 変換は、次のリージョンではサポートされていません。  
アジアパシフィック (大阪) - `ap-northeast-3`

 FindMatches 変換の使用を開始する場合は、以下の手順に従ってください。より高度で詳細な例については、**AWS ビッグデータブログ**の「[Harmonize data using AWS Glue and AWS Lake Formation FindMatches ML to build a customer 360 view](https://aws.amazon.com/blogs/big-data/harmonize-data-using-aws-glue-and-aws-lake-formation-findmatches-ml-to-build-a-customer-360-view/)」を参照してください。

#### Find Matches Transform (一致の検索変換) の使用開始
<a name="machine-learning-find-mathes-workflow"></a>

`FindMatches` 変換の使用を開始するには、次の手順に従います。

1. 最適化するソースデータ用のテーブルを AWS Glue Data Catalog に作成します。クローラーの作成方法については、「[Working with Crawlers on the AWS Glue Console](https://docs.aws.amazon.com/glue/latest/dg/console-crawlers.html)」を参照してください。

   ソースデータがカンマ区切り値 (CSV) ファイルなどのテキストベースのファイルである場合は、以下の点を考慮してください。
   + 入力レコード CSV ファイルとラベリングファイルを別個のフォルダに保持します。そうしないと、AWS Glue クローラーはこれらのファイルを同じテーブルの複数の部分と見なして、データカタログに誤ったテーブルを作成する場合があります。
   + CSV ファイルに ASCII 文字のみが含まれている場合を除き、CSV ファイルには必ず BOM (バイトオーダーマーク) なしの UTF-8 エンコードを使用します。Microsoft Excel は、UTF-8 CSV ファイルの先頭に BOM を追加することがよくあります。これを削除するには、CSV ファイルをテキストエディタで開き、ファイルを **BOM なしの UTF-8** として保存し直します。

1. AWS Glue コンソールでジョブを作成し、[**Find matches (一致の検索)**] 変換タイプを選択します。
**重要**  
ジョブ用に選択するデータソーステーブルの列数は 100 を超えることはできません。

1. [**Generate labeling file**] (ラベルファイルを生成) を選択して、ラベル付けファイルを生成するように AWS Glue に伝えます。AWS Glue は、各 `labeling_set_id` に対して類似のレコードをグループ化する最初のパスを実行し、グループ化を確認できるようにします。`label` 列で一致のラベルを付けます。
   + ラベル付けファイルが既にある場合 (つまり、一致する行を示すサンプルレコードがある場合) は、そのファイルを Amazon Simple Storage Service (Amazon S3) にアップロードします。ラベリングファイルの形式の詳細については、「[ラベリングファイルの形式](#machine-learning-labeling-file)」を参照してください。ステップ 4 に進みます。

1. ラベル付けファイルをダウンロードし、「[ラベリング](#machine-learning-labeling) 」 セクションの説明に従ってファイルにラベルを付けます。

1. 修正したラベル付きファイルをアップロードします。AWS Glue は一致の検索方法について変換をトレーニングするためのタスクを実行します。

   [**Machine learning transforms (機会学習変換)**] リストのページで、[**History (履歴)**] タブを選択します。このページは、AWS Glue で以下のタスクを実行するタイミングを指定します。
   + **ラベルのインポート**
   + **ラベルのエクスポート**
   + **ラベルの生成**
   + **品質の推定**

1. より適切な変換を作成するには、ラベル付きファイルのダウンロード、ラベル付け、アップロードを繰り返すことができます。初期の実行では、レコードのミスマッチがより多く発生しがちです。ただし、ラベリングファイルを検証して継続的にトレーニングすることで、AWS Glue は学習します。

1. 変換を評価して微調整するには、一致の検索のパフォーマンスと結果を評価します。詳細については、「[AWS Glue での機械学変換の調整](add-job-machine-learning-transform-tuning.md)」を参照してください。

#### ラベリング
<a name="machine-learning-labeling"></a>

`FindMatches` がラベル付けファイルを生成すると、ソーステーブルからレコードが選択されます。これまでのトレーニングに基づき、`FindMatches` は最も学習価値が高いレコードを特定します。

*ラベル付け*では、ラベリングファイル（Microsoft Excel などのスプレッドシートの使用を推奨）を編集し、一致するレコードと一致しないレコードを識別する `label` 列に識別子またはラベルを追加します。ソースデータの一致について一貫した明確な定義を持つことが重要です。`FindMatches` は、ユーザーが一致 (または不一致) として指定したレコードから学習します。また、ユーザーの判断を使用して重複するレコードを見つける方法を学習します。

ラベリングファイルが `FindMatches` で生成されると、約 100 個のレコードが生成されます。これらの 100 個のレコードは通常 10 個の*ラベリングセット*に分割され、各ラベリングセットは `FindMatches` により生成される一意の `labeling_set_id` により識別されます。各ラベリングセットは、他のラベリングセットとは独立した個別のラベリングタスクとして表示する必要があります。タスクは、各ラベリングセット内の一致レコードと非一致レコードを識別することです。

##### スプレッドシートでラベル付けファイルを編集するためのヒント
<a name="machine-learning-labeling-tips"></a>

スプレッドシートアプリケーションでラベリングファイルを編集する場合は、以下の点を考慮してください。
+ ファイルを開いたときに、列フィールドが完全に展開されていない場合があります。必要に応じて `labeling_set_id` 列と `label` 列を展開し、これらのセルの内容を表示してください。
+ プライマリキー列が数値 (`long` データ型など) である場合、スプレッドシートはこれを数値として解釈し、値を変更する場合があります。このキー値は、テキストとして扱う必要があります。この問題を修正するには、プライマリキー列のすべてのセルを **テキストデータ**としてフォーマットします。

#### ラベリングファイルの形式
<a name="machine-learning-labeling-file"></a>

`FindMatches` 変換をトレーニングするために AWS Glue により生成されたラベリングファイルは、次の形式を使用します。AWS Glue 用に独自のファイルを生成する場合は、次の形式にも従う必要があります。
+ これは、カンマ区切り値 (CSV) ファイルです。
+ `UTF-8` でエンコードする必要があります。Microsoft Windows を使用してファイルを編集すると、ファイルは `cp1252` でエンコードされる場合があります。
+ このファイルを AWS Glue に渡すには、ファイルを Amazon S3 の場所に配置する必要があります。
+ 各ラベル付けタスクに使用する行は多すぎないようにします。タスクごとに許容される行数は 2～30 行ですが、10～20 行をお勧めします。50 行を超えるタスクは推奨されません。粗悪な結果やシステム障害を引き起こす可能性があります。
+ 「一致」または「不一致」とラベリングされたレコードのペアで構成される、ラベリングされたデータがすでにある場合、これは問題ありません。これらのラベリングされたペアは、サイズ 2 のラベリングセットとして表すことができます。この場合、両方のレコードに一致する場合は文字「A」とラベリングし、一致しない場合は「Ｂ」とラベリングします。
**注記**  
 ラベリングファイルには追加の列が含まれているため、ソースデータが含まれているファイルとはスキーマが異なります。ラベリングファイルは、他のすべての変換入力 CSV ファイルとは異なるフォルダに配置し、データカタログのテーブルの作成時に AWS Glue クローラーによって同種のファイルと見なされないようにします。そうしないと、AWS Glue クローラーで作成されたテーブルではデータが正しく表現されない場合があります。
+ 最初の 2 つの列 (`labeling_set_id`、`label`) は AWS Glue の必須列です。残りの列は、処理するデータのスキーマと一致する必要があります。
+ `labeling_set_id` ごとに、同じラベルを使用してすべての一致するレコードを特定します。ラベルは `label` 列に配置されている一意の文字列です。シンプルな文字 (A、B、C など) を含むラベルを使用することをお勧めします。ラベルは、大文字と小文字が区別され、 `label` 列に入力されます。
+ 同じ `labeling_set_id` と同じラベルを含む行は、一致とみなされ、ラベリングされます。
+ 同じ `labeling_set_id` と異なるラベルを含む行は、*不*一致とみなされ、ラベリングされます。
+ 異なる `labeling_set_id` を含む行は、一致に関するいかなる情報も伝達しないとみなされます。

  以下に示しているのは、データのラベル付けの例です。    
<a name="table-labeling-data"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/machine-learning.html)
+ 上記の例では、John/Johnny/Jon Doe を一致と認識し、これらのレコードは Jane Smith と一致しないことをシステムにトレーニングします。これとは別に、Richard と Rich Jones は同一人物であるが、これらのレコードは Sarah Jones/Jones-Walker および Jones Jr. とは一致しないとシステムをトレーニングします。
+ ご覧のとおり、ラベルの範囲は `labeling_set_id` に制限されています。したがって、ラベルは `labeling_set_id` 境界を超えません。たとえば、`labeling_set_id` 1 のラベル「A」は、`labeling_set_id` 2 のラベル「A」とは何の関係もありません。
+ ラベリングセット内に一致するものがほかにないレコードには、一意のラベルを割り当てます。たとえば、Jane Smith はラベリングセット ABC123 内のどのレコードとも一致しないため、そのラベリングセット内で唯一の、ラベル B を持つレコードです。
+ ラベリングセット「GHI678」は、ラベリングセットが、同じラベルが付与された 2 つのレコードのみで構成されることを表示し、一致していることを示します。同様に、「XYZABC」は、異なるラベルが付与された 2 つのレコードを表示し、一致しないことを示します。
+ ラベリングセットには一致が含まれていないこと（ラベリングセット内のレコードそれぞれに異なるラベルを付ける）も、ラベリングセットがすべて「同じ」こと（すべてに同じラベルを付けた）もあります。これは、ラベリングセットに、基準によって「同じ」レコードと「同じでない」レコードの例がまとめて含まれている限り、問題ありません。

**重要**  
AWS Glue に渡す IAM ロールに、ラベリングファイルが格納されている Amazon S3 バケットへのアクセス権があることを確認してください。慣例として、AWS Glue ポリシーでは、名前に「**aws-glue-**」というプレフィックスが付いている Amazon S3 バケットまたはフォルダにアクセス許可を付与します。ラベリングファイルが別の場所にある場合、IAM ロールで、その場所に対してアクセス許可を追加します。