概要
機械学習パイプラインで機密データ(PII:Personally Identifiable Information)を扱う際には、プライバシー保護とコンプライアンス遵守のために、適切な 匿名化(Anonymization) や マスキング(Masking) の処理が必須です。本記事では、GCP認定MLエンジニア試験で問われる「Handling Sensitive Data」に関するベストプラクティスを、代表的な出題形式をもとに体系的に整理します。
1. 基本原則と必要な対応
対応項目 | 概要 |
---|---|
機密列の削除 | クレジットカード番号や氏名などは、不要であれば完全に削除するのが最も安全な対応。 |
ハッシュ化(Hashing) | データを一方向に変換し、復元不能にする手法。クレジットカード番号やメールアドレスなどで使用。 |
マスキング(Masking) | 部分的に見せて、一部を伏せる。名前や電話番号などの一部可視が許容されるケースで使用。 |
フォーマット変更(日付など) | 生年月日は DATE_TRUNC() などで日単位→月単位に変換し、特定性を下げる。 |
暗号化(Encryption) | 一部のデータでは保存時の暗号化が要求されるが、マスキングやハッシュと併用することもある。 |
2. 出題パターンと対応例
📌 パターン1:SQLベースのデータ匿名化(BigQuery)
代表問題
SELECT
name,
address,
credit_card_number,
birthdate,
hash(email) AS anonymized_email
FROM customer_data;
対応
- ✅
credit_card_number
の削除 - ✅
credit_card_number
のハッシュ化(両方OK。出題意図次第) - ⚠️
name
,address
はマスキング不要な場合もあり - ❌
DATE_TRUNC()
だけでは不十分な場合あり
📌 パターン2:Apache Beam によるJavaコードのマスキング
代表コード抜粋
fields[2] = "*****"; // クレジットカード番号のマスキング
対応
- ✅ より安全なマスキング手法に変更(例えば
SHA256
+ サルト) - ✅ 他の機密列(氏名など)もマスキング
- ❌ この場面では暗号化は不要とされることが多い
📌 パターン3:Python(pandas)でのHIPAA対応
代表コード抜粋
df['name'] = 'REDACTED'
df['ssn'] = 'XXX-XX-XXXX'
df['birthdate'] = df['birthdate'].apply(lambda x: x.strftime('%Y-%m'))
対応
- ✅
name
カラムの削除 - ✅ 全ての機密列が正しく匿名化されているか確認
- ⚠️
birthdate
の処理は緩やかな対応でも許容されることが多い
📌 パターン4:BigQueryでのPII処理とマスキング
代表コード抜粋
SELECT
full_name,
email,
REGEXP_REPLACE(phone, r'\d', '*') AS masked_phone
FROM raw_data;
対応
- ✅
full_name
のマスキング - ✅
email
のハッシュ化または部分マスキング - ❌ 暗号化はこの文脈では不要
3. 試験対策ポイント
✅ EXAM FOCUS
- 機密情報(クレジットカード番号、氏名、住所、メール、電話番号)は削除 or ハッシュ化 or マスキング
- SQL/Java/Python問わず データ処理ロジックを読める力 が必要
- 暗号化やスキーマ検証は、問題文の文脈次第で「不要」とされるケースあり
⚠️ CAUTION ALERT
hash()
やREGEXP_REPLACE()
のような関数処理が適切かを吟味- HIPAA, GDPR などの規制準拠かどうかに注意
- 一部の出題では「暗号化は不要」「検証は仮定済み」とされることもある
まとめ
GCP MLエンジニア試験では、「実装の文脈」と「規制の目的」を両立して考える力が求められます。単なる暗号化・マスキングだけでなく、不要な列の削除や、処理の十分性判断も含めて対策しましょう。