Databricksでデータの実験を安全に行うためのベストプラクティス

[Best Practices for Safe Data Experimentation with Databricks](https://community.databricks.com/t5/technical-blog/best-practices-for-safe-data-experimentation-with-databricks/ba-p/94421)の翻訳です。

:::note warn
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

現代のデータ中心の世界において、開発者やデータサイエンティストが最先端のモデルを作成し、仮説を検証し、堅牢なデータパイプラインを構築するためには実験が重要となっています。しかし、これらのチームにプロダクションデータへのアクセスを与えると、特にGDPRのような規制によるコンプライアンスにおいては特に深刻な懸念を引き起こすことになります。リアルなデータによる実験は、多くの場合プライバシーやセキュリティ要件と競合し、**企業はどのようにして自分たちのチームがプロダクション相当のデータで安全に実験できるように支援できるのか？** という質問につながります。

適切なバランスをとるために企業は、データプライバシーの法律を侵害したり、プロダクションシステムにダメージを与えることなしに、実験を可能にするデータに対して、セキュアでコントロールされたアクセスを提供する必要があります。この記事では、企業がこのバランスを達成する助けになるように、[Databricks](https://www.databricks.com/jp)が革新的なソリューションをどのように提供するのかを探索します。

# 課題：実験でのプロダクションデータへのアクセスがなぜリスキーなのか

開発者やデータサイエンティストがデータで実験を行う際、彼らはプロダクション環境に似たデータセットを操作する必要があります。しかし、完全なプロダクションデータを公開することによるリスクがあります:

- **GDPRとデータプライバシー:** プロダクションデータへのアクセスは、個人特定情報(PII)のような機微な情報への許可されない公開につながります。
- **セキュリティの脅威:** 多くの人がプロダクションデータにアクセスするほど、事故による誤用やセキュリティ漏洩のリスクが高まります。
- **プロダクションシステムへの影響:** プロダクションデータに対して直接実験を行うことで、データの一貫性を損ない、重要なビジネスオペレーションを阻害することがあります。

これらのリスクに対応しつつも生産的な実験を可能にするには、企業は代表的なデータに対する安全なアクセスを可能にする戦略を導入しなくてはなりません。[Databricks](https://www.databricks.com/jp)では、これを達成する助けとなるいくつかの機能を提供しており、実験が安全で効率的、規制に準拠していることを確実なものとします。

# Databricksにおける安全な実験の鍵となる戦略

最も効果的な戦略の一つが、開発者やデータサイエンティストに機微なデータを共有する前に匿名化、仮名化することです。[Databricksのレイクハウス](https://www.databricks.com/jp/blog/2020/01/30/what-is-a-data-lakehouse.html)は、GDPRに準拠するプラクティスを通じたスキーマ強制や機微データの管理をサポートしています。

## 1. 匿名化

データを共有する前に匿名化するために、Delta Lakeの変換機能を使います。

**例: 機微なカラムの仮名化**

```py
from pyspark.sql import functions as F

# Load your production data
df = spark.read.format("delta").load("/mnt/production-data")

# Pseudonymize sensitive columns (e.g., replacing names with random UUIDs)
pseudonymized_df = df.withColumn("user_id", F.expr("uuid()"))

# Save the pseudonymized data back to Delta Lake
pseudonymized_df.write.format("delta").mode("overwrite").save("/mnt/pseudonymized-data")
```

この仮名化によって、分析のために他のデータを維持しつつも機微なカラムがマスクされることを確実にします。

## 2. Databricksによる合成データの生成

合成データの生成によって、機微な情報の詳細を公開することなしにプロダクションのようなデータセットを提供します。Databricksの**高度な機械学習**テクニックのサポートによって、大規模な合成データの作成が可能となります。

- **動作原理:** プロダクションデータでモデルをトレーニングすることで、オリジナルのデータセットの統計的特性を保持する合成データを生成することができます。

**例: DatabricksでGAN(Generative Adversarial Network)を用いた合成データの生成**

```py
from pyspark.sql import SparkSession
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy as np

# Load production data
df = spark.read.format("delta").load("/mnt/production-data")

# Convert data to Pandas for model training
data = df.toPandas()

# Build a simple GAN for synthetic data generation
generator = Sequential()
generator.add(Dense(128, activation='relu', input_dim=100))
generator.add(Dense(data.shape1, activation='sigmoid'))

# Train your GAN on the production data (this is a simplified example)
In practice, you would need more training and tuning steps
synthetic_data = generator.predict(np.random.rand(1000, 100))

# Convert synthetic data back to a Spark DataFrame and save
synthetic_df = spark.createDataFrame(synthetic_data.tolist())
synthetic_df.write.format("delta").mode("overwrite").save("/mnt/synthetic-data")
```

この手法を用いることで、オリジナルのデータの統計的な特性を模倣するデータセットを開発者に提供することができ、機微情報の保護の助けとなります。

## 3. Databricks SQLとDelta Lakeによるデータマスキング

Databricksでは、[Delta Lake](https://www.databricks.com/jp/product/delta-lake-on-databricks)に対するSQLクエリーを通じた[動的なデータマスキング](https://docs.databricks.com/ja/views/dynamic.html)のテクニックを提供しており、ユーザーのロールに基づいて動的に機微なフィールドをマスキングすることができます。

**例: SQLを用いた動的データマスキングの実装**

```sql
CREATE OR REPLACE VIEW masked_data AS
SELECT
    CASE
        WHEN current_user() = 'data_scientist'
        THEN ''
        ELSE email
    END AS email,
    name,
    age,
    transaction_amount
FROM delta./mnt/production-data;
```

このSQLクエリーは、`data_scientist`ロールに属しているユーザーに対してメールアドレスをマスキングし、必要で機微ではないフィールドのみを参照することを確実なものとします。

:::note info
**訳者註**
今では、[行フィルターや列マスク](https://docs.databricks.com/ja/tables/row-and-column-filters.html)を活用することもできます。
:::


## 4. Databricksによるロールベースのアクセスコントロール(RBAC)

Databricksは、**Role-Based Access Control (RBAC)** を実装するために、Azure Active DirectoryやAWS IAMと連携します。これによって、Databricksのデータを誰が参照、変更できるのかに関するきめ細かいアクセス制御を可能にします。

- **きめ細かい権限管理:** Databricksの[クラスターアクセスコントロール](https://docs.databricks.com/administration-guide/access-control/workspace-acl.html)を用いることで、許可されたユーザーのみが特定のデータ資産やテーブルにアクセスできることを確実なものとします。

:::note info
**訳者註**
上記クラスターのアクセスコントロールは非推奨となっており、現在は[Unity CatalogのRBAC](https://docs.databricks.com/ja/data-governance/unity-catalog/manage-privileges/index.html)を使う形となっています。
:::

**例: ロールベースのアクセスコントロールの適用**

```py
# Apply RBAC to allow access to only authorized roles
spark.sql("GRANT SELECT ON delta./mnt/production-data TO data_scientists")
```

これによって、`data_scientists`グループのユーザーのみがプロダクションデータにアクセスできることを確実なものとします。

## 5. Databricksワークスペースでのデータサンドボックス

[Databricksワークスペース](https://docs.databricks.com/ja/workspace/index.html)は、開発者やデータサイエンティストが安全にプロダクションデータを操作できる分離された環境を提供します。

- **環境の分離:** ワークスペース内のDatabricksノートブックは異なるチームに対するサンドボックス環境を作成することに使うことができます。

**例: サンドボックス環境の作成**

```py

# Load a subset of data into a sandbox environment
df = spark.read.format("delta").load("/mnt/production-data").sample(fraction=0.1)

# Anonymize the data before saving it to the sandbox
sandbox_df = df.withColumn("user_id", F.expr("uuid()"))
sandbox_df.write.format("delta").save("/mnt/sandbox-environment")
```

このサンドボックス環境は、完全なプロダクションデータにアクセスすることなしに実験を行うための安全な分離された場所を提供します。

## 6. Databricks Deltaによるデータの最小化と集計

Databricksの[レイクハウス](https://www.databricks.com/jp/product/data-lakehouse)は、分析に必要なデータのみを抽出することで、データの最小化の実装を容易にし、GDPRへの準拠を確実なものとします。

**例: Databricks Delta Lakeによるデータの集計**

```py

# Aggregate production data to minimize exposure to sensitive details
aggregated_df = df.groupBy("region").agg(F.avg("transaction_amount").alias("avg_transaction"))

# Save the aggregated data
aggregated_df.write.format("delta").save("/mnt/aggregated-data")
```

この集計データは、開発者やデータサイエンティストに対する機微データの公開を減らし、有用な洞察を提供する助けとなります。

# まとめ

[Databricks](https://www.databricks.com/jp)では、企業がGDPRのコンプライアンスに準拠しつつも、プロダクションデータに対する安全なアクセスを提供する助けとなる、堅牢なツールセットと機能を提供しています。データの匿名化や合成データの生成から、ロールベースのアクセス制御やサンドボックス環境に至る機能を通じて、Databricksは開発者やデータサイエンティストが安全にプロダクション相当のデータで作業することを支援します。

**Delta Lake**、**RBAC**、**ワークスペース**のようなDatabricksの機能を活用することで、企業は自分たちのチームがイノベーションを行い、データドリブンのソリューションを構築できるようにしつつも、データ漏えいのリスクを削減し、個人情報を保護し、GDPRのようなプライバシー規制に対する準拠を維持することができます。

これらの戦略は、データセキュリティやコンプライアンスを確実にするだけではなく、責任あるデータの取り扱いに関する文化を醸成し、開発者やデータサイエンティストがプロダクションデータを自信を持って取り扱えるようにすることを促進します。

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)