AWS Glue Data Qualityが異常検出と動的ルールに対応 (プレビュー)#AWSreInvent

潜在的なデータの問題や異常検知を自動化
2023.11.30

データアナリティクス事業本部インテグレーション部コンサルティングチーム・新納(にいの)です。

re:Invent真っ最中の2023年11月26日、AWS Glue Data Qualityで機械学習を利用し、統計的な異常や異常なパターンを検出する機能が発表されました。なお、本機能は2023年11月現在のパブリックプレビュー段階のものであり、GA(General Availability:一般利用可能)なステータスとなった際には仕様が変更されている可能性があることをご留意ください。

AWS Glue Data Qualityとは

ユーザーが定義したルールに従って、データの品質検査を実施できる機能です。AWSが開発したOSSであるDeequを利用したデータ品質チェックをAWS Glueで実行できます。ルールの定義にはDQDL(Data Quality Definition Language)という言語を用います。

どんな機能?

データの変化を監視し、監視しているメトリクスが予想される値の範囲外であった場合に検知します。時間の経過によるデータの変化や、静的なルールセットで定義していない異常を検出可能です。実例については後述します。

何が嬉しい?

従来のGlue Data Qualityでは、「顧客テーブルのCountryカラムが"USA"に合致するかどうかチェックする」というような静的なルール定義のみが可能でした。

データはビジネスに従って変化し、静的なルール定義だけでは品質検査対応が難しいケースがあります。挙げた例ですと、USAだけでなく日本にビジネスが進出してCountryカラムに"JAN"が入るようになった場合、静的なルールチェックは当然エラーを検出します。このような、決して不正データというわけではないデータの変化が発生する可能性は大いにありますよね。

こうしたケースでは品質検査ルールの変更が必要でしたが、今回の異常検出と動的ルールに対応したことにより、明確にルールを定義することなく意図しない変化や異常を自動的に検出できるようになりました。

試してみた

この機能は現在のところ、AWS Glue Studio Visual ETLとAWS Glue ETL、そしてGlue 4.0で利用可能です。今回はVisualエディタで作成してみました。

サンプルとして、S3バケット上に置いたダミーの顧客データ(csv形式)に対して品質検査を実施します。

CustomerID,FirstName,LastName,Email,Phone,Address,City,State,PostalCode,Country,CreditCardNumber
1,John,Smith,john.smith@example.com,555-123-4567,123 Main Street,New York,NY,10001,USA,4012-8888-8888-8888
2,Jane,Doe,jane.doe@example.com,555-234-5678,456 Elm Avenue,Los Angeles,CA,90001,USA,5432-1234-5678-8765
3,Robert,Johnson,robert.johnson@example.com,555-345-6789,789 Oak Lane,Chicago,IL,60001,USA,6011-1111-1111-1117
4,Emily,Wilson,emily.wilson@example.com,555-456-7890,321 Maple Drive,Miami,FL,33001,USA,5100-2222-3333-4444
5,Michael,Brown,michael.brown@example.com,555-567-8901,654 Pine Road,Dallas,TX,75001,USA,4111-5555-5555-5111
:
:

Evaluate Data Qualityのノードを追加し、Anomaly detectionタブからAdd Analyzerを選択します。

どのカラムに対してどのようなパターンの検知を行うかを指定します。指定可能なのは以下の通り。

Statistics 説明
ColumnLength 文字列の長さ
ColumnValues カラムの値が指定した値と合致するか
Completeness 完全性(NULLがないか)チェック
DistinctValuesCount カラム内の異なる値の数をチェック
RowCount レコードの量

検知の対象とするカラムを選択します。

Analyzerを追加すると、DQDLエディタで確認可能です。従来の静的なRulesとは別枠でAnalyzerが定義されます。

試しに、サンプル顧客データのCountryカラムがUSAのみの場合で何度か実行しました。Data QualityタブからObservationsとData Statisticsが確認可能です。それぞれの役割は以下の通り。

  • Observations
    • データの傾向を表示し、品質検査のルールセットを改善するための推奨ルールを提示。推奨ルールをRuleとして適用可能。
  • Data Statistics
    • RuleとAnalyzerのルールに適合しているか判断するために必要なメトリクスを表示。

Observationsには今のところ推奨ルールが表示されていません。

今度はカナダやドイツにビジネスが進出したと想定し、CountryカラムにCANやGERを追加します。

CustomerID,FirstName,LastName,Email,Phone,Address,City,State,PostalCode,Country,CreditCardNumber
:
105,Sophia,Hill,sophia.hill@example.com,555-012-3456,753 Birch Road,Sacramento,CA,M5A 1A1,CAN,1122-3333-4444-5555
106,Logan,Jones,logan.jones@example.com,555-123-4567,852 Oak Lane,Atlanta,GA,M5G 2J2,CAN,9900-8765-4321-5678
107,Amelia,Clark,amelia.clark@example.com,555-234-5678,369 Pine Street,Kansas City,MO,M5H 2S6,CAN,5544-2345-6789-7890
108,Ethan,Martin,ethan.martin@example.com,555-345-6789,951 Maple Road,Mesa,AZ,M5H 2M9,CAN,1122-3456-7890-2345
109,Lucas,Schmidt,lucas.schmidt@example.com,555-456-7890,357 Elm Drive,Berlin,BE,10115,GER,9900-5678-1234-5678
110,Sophia,Weber,sophia.weber@example.com,555-567-8901,753 Oak Road,Munich,BY,80331,GER,8899-3456-7890-9012
111,Noah,Fischer,noah.fischer@example.com,555-678-9012,852 Cedar Lane,Frankfurt,HE,60311,GER,7788-9876-5432-1098
:

この状態でData Qualityを実行したところ、Obsarvationsに推奨ルールが表示されました。CountryカラムのDistinctValuesCountが3.0で、これまで検出された上限値1.0よりも高いことが検出されています。これまではUSAという値1つのみだったのが、GERとCANが増えて3つになっているためです。時系列順でDistinctValuesCountの推移もグラフで確認できるようになっています。

品質検査結果は以下のような形で出力されます。CloudWatch Logsに結果を出力することも可能ですので、検知した結果を通知させると便利ですね。

[
	{
		"ResultId": "dqresult-d4dcbd0f069a8590dbcf2fc262edb7be786ae9c9",
		"Score": 1,
		"RulesetName": "EvaluateDataQuality_node1701247019487",
		"EvaluationContext": "EvaluateDataQuality_node1701247019487",
		"StartedOn": "2023-11-30T02:45:10.563Z",
		"CompletedOn": "2023-11-30T02:46:05.067Z",
		"JobName": "analyzer-test-job",
		"JobRunId": "jr_0f61567ea8013579f0cf2bd7358c71c6f15501125cbe2a89357781ab78b05d7c",
		"RuleResults": [
			{
				"Name": "Rule_1",
				"Description": "IsComplete \"customerid\"",
				"EvaluatedMetrics": {
					"Column.customerid.Completeness": 1
				},
				"Result": "PASS"
			},
			{
				"Name": "Rule_2",
				"Description": "ColumnLength \"creditcardnumber\" = 19",
				"EvaluatedMetrics": {
					"Column.creditcardnumber.MaximumLength": 19,
					"Column.creditcardnumber.MinimumLength": 19
				},
				"Result": "PASS"
			}
		],
		"AnalyzerResults": [
			{
				"Name": "Analyzer_1",
				"Description": "DistinctValuesCount of AllColumns",
				"EvaluatedMetrics": {
					"Column.postalcode.DistinctValuesCount": 90,
					"Column.city.DistinctValuesCount": 57,
					"Column.email.DistinctValuesCount": 63,
					"Column.address.DistinctValuesCount": 66,
					"Column.lastname.DistinctValuesCount": 44,
					"Column.country.DistinctValuesCount": 3,
					"Column.firstname.DistinctValuesCount": 30,
					"Column.creditcardnumber.DistinctValuesCount": 44,
					"Column.phone.DistinctValuesCount": 10,
					"Column.state.DistinctValuesCount": 35,
					"Column.customerid.DistinctValuesCount": 125
				}
			},
			{
				"Name": "Analyzer_2",
				"Description": "ColumnValues \"country\"",
				"EvaluatedMetrics": {}
			}
		],
		"Observations": [
			{
(中略)
			{
				"Description": "DistinctValuesCount for column country of 3.0 is higher than the detected upper bound of 1.0.",
				"MetricBasedObservation": {
					"MetricName": "Column.country.DistinctValuesCount",
					"MetricValues": {
						"ActualValue": 3,
						"ExpectedValue": 1,
						"LowerLimit": 1,
						"UpperLimit": 1
					},
					"ModifiedRules": [],
					"NewRules": [
						"DistinctValuesCount \"country\" = 1.0"
					]
				}
			},
(中略)
			}
		]
	}
]

最後に

AWS Glue Data Qualityの異常検出と動的ルールをご紹介しました。静的ルールだけで対応しきれないデータの変化を自動的に検出してくれるのはとても助かる機能だと感じます。明らかな異常値を検出してエラーを発生させるのではなく、時間と共に変化するデータ品質の要件に柔軟に対応でき、潜在的なデータの問題にもいち早く気づくことで早めにアクションを取れそうです。検知した結果をEventBridgeやSNSと連携して通知させるとより便利に使えそうですね。現在はプレビューですが、一般提供開始が待ち遠しいです!

参考