AWS Lake Formation の FindMatches によるレコードのマッチング - AWS Glue

AWS Lake Formation の FindMatches によるレコードのマッチング

AWS Lake Formation には、カスタム変換を作成するための機械学習機能が用意されています。現在、FindMatches という名前の変換が 1 つあります。FindMatches 変換を使用すると、レコードに共通の一意の識別子がなく、正確に一致するフィールドがない場合でも、データセット内の重複レコードまたは一致するレコードを識別できます。そのため、コードを記述したり、機械学習の仕組みを知ったりする必要はありません。FindMatches は、次のようなさまざまな問題で役立ちます。

  • 一致する顧客: 多くの顧客フィールドがデータベース間で正確に一致しない場合でも(名前のスペルや住所の違い、データの欠落や不正確ななど)、異なる顧客データベース間で顧客レコードをリンクします。

  • 製品のマッチング: カタログ内の製品を、競合他社のカタログに対する製品カタログなど、他の製品ソースと照合します。エントリの構造は異なります。

  • 不正検出の向上: 重複した顧客アカウントを特定し、新しく作成したアカウントが、以前に知られている不正ユーザーと一致する(またはその可能性のある)タイミングを判断します。

  • マッチングに関するその他の問題: マッチアドレス、映画、パーツリストなど。一般的に、人間がデータベース行を見て、それらが一致していると判断した場合、FindMatches 変換が役に立つ可能性は非常にあります。

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

作成した変換は AWS Glue に保存されます。AWS Glue コンソールで、作成した変換を管理できます。AWS Glue の [ML 変換] タブで、機械学習変換を編集し、引き続きトレーニングできます。コンソールで変換を管理する方法の詳細については、「 AWS Glue コンソールでの機械学習変換の使用」を参照してください。

機械学習変換のタイプ

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

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

Find matches (一致の検索)

ソースデータの重複したレコードを見つけます。この機械学習変換をトレーニングするには、サンプルデータセットにラベルを付けて、どの行が一致するかを示します。機械学習変換は、ラベル付けしたサンプルデータを使用してトレーニングするほど、どの行が一致するかを学習します。変換の設定方法に応じて、出力は次のいずれかになります。

  • 入力テーブルのコピーと、一致するレコードのセットを示す値が入力された match_id 列。match_id 列は任意の識別子です。同じ match_id を持つレコードは、互いに一致するレコードとして識別されています。match_id が異なるレコードが一致しません。

  • 重複する行が削除された入力テーブルのコピー。複数の重複が見つかった場合、最も低いプライマリキーを持つレコードが保持されます。

一致の検索変換

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

Find Matches Transform (一致の検索変換) の使用開始

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

  1. 最適化するソースデータ用のテーブルを AWS Glue データカタログ に作成します。クローラの作成方法については、「AWS Glue コンソールでのクローラの使用」を参照してください。

    ソースデータがカンマ区切り値 (CSV) ファイルなどのテキストベースのファイルである場合は、以下の点を考慮してください。

    • 入力レコード CSV ファイルとラベリングファイルを別個のフォルダに保持します。そうしないと、AWS Glue クローラは 2 つのファイルを同じテーブルの複数の部分と見なして、Data Catalog でのテーブル作成を間違える場合があります。

    • CSV ファイルに ASCII 文字のみが含まれている場合を除き、CSV ファイルには必ず BOM (バイトオーダーマーク) なしの UTF-8 エンコードを使用します。Microsoft Excel は、UTF-8 CSV ファイルの先頭に BOM を追加することがよくあります。これを削除するには、CSV ファイルをテキストエディタで開き、ファイルを BOM なしの UTF-8 として保存し直します。

  2. AWS Glue コンソールでジョブを作成し、[Find matches (一致の検索)] 変換タイプを選択します。

    重要

    ジョブ用に選択するデータソーステーブルの列数は 100 を超えることはできません。

  3. [Generate labeling file(ラベル付けファイルの生成)]を選択して、AWS Glue にラベル付けファイルを生成するように指示します。AWS Glue は、それらのグループを確認できるように、それぞれの labeling_set_id に類似したレコードをグループ化します。label 列で一致のラベルを付けます。

    • ラベリングファイルが既にある場合 (つまり、一致する行を示すサンプルレコードがある場合) は、そのファイルを Amazon Simple Storage Service (Amazon S3) にアップロードします。ラベリングファイルの形式の詳細については、「ラベリングファイルの形式」を参照してください。ステップ 4 に進みます。

  4. ラベル付けファイルをダウンロードし、「ラベル貼り 」 セクションの説明に従ってファイルにラベルを付けます。

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

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

    • ラベルのインポート

    • ラベルのエクスポート

    • ラベルの生成

    • 品質の推定

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

  7. 変換を評価して微調整するには、一致の検索のパフォーマンスと結果を評価します。詳細については、「AWS Glue での機械学変換の調整」を参照してください。

ラベル貼り

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

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

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

スプレッドシートでファイルをラベル付けするためのヒント

スプレッドシートアプリケーションでラベリングファイルを編集する場合は、以下の点を考慮してください。

  • ファイルを開いたときに、列フィールドが完全に展開されていない場合があります。必要に応じて labeling_set_id 列と label 列を展開し、これらのセルの内容を表示してください。

  • プライマリキー列が数値 (long データ型など) である場合、スプレッドシートはこれを数値として解釈し、値を変更する場合があります。このキー値は、テキストとして扱う必要があります。この問題を修正するには、プライマリキー列のすべてのセルを テキストデータとしてフォーマットします。

ラベリングファイルの形式

FindMatches 変換をトレーニングするために AWS Glue により生成されたラベリングファイルは、次の形式を使用します。AWS Glue 用に独自のファイルを生成する場合は、次の形式にも従う必要があります。

  • これは、カンマ区切り値 (CSV) ファイルです。

  • UTF-8 でエンコードする必要があります。Microsoft Windows を使用してファイルを編集すると、ファイルは cp1252 でエンコードされる場合があります。

  • このファイルを AWS Glue に渡すには、ファイルを Amazon S3 の場所に配置する必要があります。

  • ラベリングタスクごとに標準的な行数を使用します。タスクあたりに許容される行数は 2~30 行ですが、推奨される行数は 10~20 行です。50 行を超えるタスクは推奨されません。粗悪な結果やシステム障害を引き起こす可能性があります。

  • 「一致」または「不一致」とラベリングされたレコードのペアで構成される、ラベリングされたデータがすでにある場合、これは問題ありません。これらのラベリングされたペアは、サイズ 2 のラベリングセットとして表すことができます。この場合、両方のレコードに一致する場合は文字「A」とラベリングし、一致しない場合は「B」とラベリングします。

    注記

    ラベリングファイルには追加の列が含まれているため、ソースデータが含まれているファイルとはスキーマが異なります。ラベリングファイルは、他のすべての変換入力 CSV ファイルとは異なるフォルダに配置し、Data Catalog のテーブルの作成時に AWS Glue クローラによって同種のファイルと見なされないようにします。そうしないと、AWS Glue クローラで作成されたテーブルではデータが正しく表現されない場合があります。

  • 最初の 2 つの列 (labeling_set_idlabel) は AWS Glue の必須列です。残りの列は、処理するデータのスキーマと一致する必要があります。

  • labeling_set_id ごとに、同じラベルを使用してすべての一致するレコードを特定します。ラベルは label 列に配置されている一意の文字列です。シンプルな文字 (A、B、C など) を含むラベルを使用することをお勧めします。ラベルは、大文字と小文字が区別され、 label 列に入力されます。

  • 同じ labeling_set_id と同じラベルを含む行は、一致とみなされ、ラベリングされます。

  • 同じ labeling_set_id と異なるラベルを含む行は、一致とみなされ、ラベリングされます。

  • 異なる labeling_set_id を含む行は、一致に関するいかなる情報も伝達しないとみなされます。

    以下に示しているのは、データのラベル付けの例です。

    labeling_set_id label first_name last_name 誕生日
    ABC123 A John Doe 04/01/1980
    ABC123 B Jane Smith 04/03/1980
    ABC123 A Johnny Doe 04/01/1980
    ABC123 A Jon Doe 04/01/1980
    DEF345 A Richard Jones 12/11/1992
    DEF345 A Rich Jones 11/12/1992
    DEF345 B Sarah Jones 12/11/1992
    DEF345 C Richie Jones Jr. 05/06/2017
    DEF345 B Sarah Jones-Walker 12/11/1992
    GHI678 A Robert Miller 1/3/1999
    GHI678 A Bob Miller 1/3/1999
    XYZABC A William Robinson 2/5/2001
    XYZABC B Andrew Robinson 2/5/1971
  • 上記の例では、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 ロールのその場所に対してアクセス許可を追加します。