「Amazon SageMakerとSalesforce Data Cloudの統合を使用して、SalesforceアプリをAI/MLで強化しましょう」
Let's enhance Salesforce apps with AI/ML using the integration of Amazon SageMaker and Salesforce Data Cloud.
この投稿はSalesforce Einstein AIの製品ディレクターであるDaryl Martisと共同執筆されました。
これはSalesforce Data CloudとAmazon SageMakerの統合について説明するシリーズの2番目の投稿です。第1部では、Salesforce Data CloudとEinstein StudioがSageMakerと統合されている方法を示し、SageMakerを使用してSalesforceデータに安全にアクセスし、モデルを構築、トレーニング、デプロイし、SageMaker上でホストされるエンドポイントに展開できることを示しています。その後、エンドポイントをSalesforce Data Cloudに登録して、Salesforceで予測をアクティベートします。
この投稿では、Einstein Studioを使用して製品の推奨を行う方法を詳しく説明します。この統合は、従来のモデルだけでなく、大規模な言語モデル(LLM)にも使用できます。
ソリューションの概要
この投稿では、SageMakerで予測モデルを作成して、Salesforce Data Cloudからの顧客の次に最適な製品を推奨する方法を示します。顧客の人口統計データ、マーケティングの関与、およびSalesforce Data Cloudからの購入履歴などの過去のデータを使用します。
次のサンプルデータセットを使用します。このデータセットをData Cloudで使用するには、Data CloudでAmazon S3データストリームを作成してください。
モデルを作成するためには、次の属性が必要です:
- クラブ会員 – 顧客がクラブ会員かどうか
- キャンペーン – 顧客が参加しているキャンペーン
- 州 – 顧客が居住している州または都道府県
- 月 – 購入月
- ケース数 – 顧客が提起したケースの数
- ケースタイプ:返品 – 顧客が過去1年間に製品を返品したかどうか
- ケースタイプ:配送の損傷 – 顧客が過去1年間に配送の損傷を受けたかどうか
- 関与スコア – 顧客の関与レベル(メーリングキャンペーンへの応答、オンラインストアへのログインなど)
- テニュア – 会社との顧客関係の継続期間
- クリック数 – 購入の1週間前に顧客が平均的にクリックした回数
- 訪問ページ数 – 購入の1週間前に顧客が平均的に訪問したページ数
- 購入製品 – 実際に購入した製品
- ID – レコードのID
- 日時 – データセットのタイムスタンプ
製品推奨モデルはSageMakerで構築およびデプロイされ、Salesforce Data Cloud内のデータを使用してトレーニングされます。次の手順は、Salesforceによる新しいSageMakerの機能を使用して、統合を有効にする方法の概要を示しています:
- Amazon SageMaker StudioドメインとSalesforceとAWSアカウント間のOAuthのセットアップを行います。
- Salesforce Data Cloud向けのAmazon SageMaker Data Wranglerコネクタの新機能を使用して、Salesforce Data CloudからデータをコピーせずにSageMakerでデータを準備します。
- SageMaker Data Wranglerを使用して準備されたトレーニングデータを使用して、SageMaker Studioで推奨モデルをトレーニングします。
- SageMaker Data Wranglerコンテナとトレーニングされた推奨モデルコンテナをインファレンスパイプラインにパッケージ化し、インファレンスリクエストが同じデータ準備手順を使用してトレーニングデータを前処理できるようにします。リアルタイムの推論呼び出しデータは最初にSageMaker Data Wranglerコンテナに渡され、そこで前処理され、製品の推奨のためにトレーニングされたモデルに渡されます。このプロセスの詳細については、「Amazon SageMaker Data Wranglerでのリアルタイムおよびバッチ推論のサポート導入」を参照してください。この例では特定のアルゴリズムを使用してモデルをトレーニングしていますが、ユースケースに適した任意のアルゴリズムを使用できます。
- Salesforce Data Cloud統合のためのSageMaker提供のプロジェクトテンプレートを使用して、前述の手順を実装を容易にするための次のテンプレートを提供します:
- データの準備、モデルの構築、トレーニング、登録を紹介するサンプルノートブック。
- Salesforce Data Cloud統合のためのSageMaker提供のプロジェクトテンプレート。このテンプレートは、Amazon SageMaker Model Registryのモデルのバージョンが承認された場合、エンドポイントを作成し、カスタムSalesforce JSON Web Token(JWT)認可プログラムを使用してAmazon API Gatewayを介してエンドポイントを公開します。 Salesforce Data Cloudは、Salesforceが予測を行う際にリクエストと共に作成して渡すJWTトークンを使用して、Salesforce Data CloudからSageMakerエンドポイントに対して予測を行うためにAPI Gatewayが必要です。 JWTは、OpenID Connect(OIDC)およびOAuth 2.0フレームワークの一部として、クライアントのAPIへのアクセスを制限するために使用できます。
- APIを作成した後、Salesforce Einstein Studioにモデルエンドポイントを登録することをおすすめします。手順については、「Einstein Studioで独自のAIモデルをSalesforceに持ち込む」を参照してください。
以下の図はソリューションアーキテクチャを示しています。
SageMaker Studioドメインの作成
まず、SageMaker Studioドメインを作成します。手順については、「Amazon SageMakerドメインへのオンボード」を参照してください。作成されたドメインIDと実行ロールをメモしておき、ユーザープロファイルで使用されます。このロールには後続の手順でアクセス権限を追加します。
以下のスクリーンショットは、この記事で作成したドメインを示しています。
以下のスクリーンショットは、この記事の例のユーザープロファイルを示しています。
Salesforceの連携アプリの設定
次に、Salesforceの連携アプリを作成して、SageMaker StudioからSalesforce Data CloudへのOAuthフローを有効にします。以下の手順を完了してください:
- Salesforceにログインし、セットアップに移動します。
- アプリケーション マネージャーを検索し、新しい連携アプリを作成します。
- 次の入力を提供します:
- 連携アプリ名には名前を入力します。
- API名はデフォルトのままにします(自動的に入力されます)。
- 連絡先メールアドレスに連絡先のメールアドレスを入力します。
- OAuth設定の有効化を選択します。
- コールバックURLには、
https://<domain-id>.studio.<region>.sagemaker.aws/jupyter/default/lab
を入力し、SageMakerドメインの作成時にキャプチャしたドメインIDとSageMakerドメインのリージョンを指定します。
- 選択されたOAuthスコープの下にある以下を利用可能なOAuthスコープから選択されたOAuthスコープに移動し、保存を選択します:
- APIを介してユーザーデータを管理する(api)
- いつでもリクエストを実行する(
refresh_token
、offline_access
) - Salesforce Data CloudデータでANSI SQLクエリを実行する(Data Cloud_query_api)
- Salesforce Customer Data Platformプロファイルデータを管理する(Data Cloud_profile_api)
- アイデンティティURLサービスにアクセスする(id、profile、email、address、phone)
- 一意のユーザー識別子にアクセスする(
openid
)
連携アプリの作成に関する詳細は、「連携アプリの作成」を参照してください。
- 連携アプリに戻り、Consumer Key and Secretに移動します。
- Consumerの詳細を管理を選択します。
- キーとシークレットをコピーします。
ここで2要素認証の一環としてSalesforce組織にログインするように求められることがあります。
- 「接続済みアプリを管理する」ページに戻ります。
- 作成した接続済みアプリを開き、「管理」を選択します。
- 「ポリシーの編集」を選択し、「IPリラクゼーション」を「IP制限の緩和」に変更し、設定を保存します。
SageMakerのアクセス権限とライフサイクルルールの設定
このセクションでは、SageMakerのアクセス権限とライフサイクルルールの設定手順を説明します。
AWS Secrets Managerでシークレットを作成
以下の手順に従い、Salesforceの接続済みアプリの認証情報をAWS Secrets Managerに保存してSalesforce Data CloudとのOAuth連携を有効にします。
-
Secrets Managerコンソールで、「新しいシークレットを保存」を選択します。
-
「その他のタイプのシークレット」を選択します。
-
以下のキーと値のペアでシークレットを作成します。
{ "identity_provider": "SALESFORCE", "authorization_url": "https://login.salesforce.com/services/oauth2/authorize", "token_url": "https://login.salesforce.com/services/oauth2/token", "client_id": "<YOUR_CONSUMER_KEY>", "client_secret": "<YOUR_CONSUMER_SECRET>" “issue_url”: “<YOUR_SALESFORCE_ORG_URL>” }
-
キーに「sagemaker:partner」と値を追加します。
-
シークレットを保存し、シークレットのARNをメモしておきます。
SageMakerのライフサイクルルールの設定
SageMaker Studioドメインの実行ロールは、前の手順で作成したシークレットにアクセスするためにAWS Identity and Access Management(IAM)の権限が必要です。詳細については、「ロールの作成とポリシーの添付(コンソール)」を参照してください。
-
IAMコンソールで、次のポリシーをそれぞれの役割に添付します(これらの役割は、SageMakerプロジェクトの展開に使用されます):
- サービスロール「AmazonSageMakerServiceCatalogProductsCloudformationRole」にポリシー「AmazonSageMakerPartnerServiceCatalogProductsCloudFormationServiceRolePolicy」を追加します。
- サービスロール「AmazonSageMakerServiceCatalogProductsApiGatewayRole」にポリシー「AmazonSageMakerPartnerServiceCatalogProductsApiGatewayServiceRolePolicy」を追加します。
- サービスロール「AmazonSageMakerServiceCatalogProductsLambdaRole」にポリシー「AmazonSageMakerPartnerServiceCatalogProductsLambdaServiceRolePolicy」を追加します。
-
IAMコンソールで、SageMakerドメインの実行ロールに移動します。
-
「権限の追加」を選択し、「インラインポリシーの作成」を選択します。
-
JSONポリシーエディタに次のポリシーを入力します:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue" ], "Resource": "arn:aws:secretsmanager:*:*:secret:*", "Condition": { "ForAnyValue:StringLike": { "aws:ResourceTag/sagemaker:partner": "*" } } }, { "Effect": "Allow", "Action": [ "secretsmanager:UpdateSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:AmazonSageMaker-*" } ] }
SageMaker Studioのライフサイクル設定では、ノートブックの作成または開始時に実行されるシェルスクリプトが提供されます。ライフサイクル設定は、シークレットを取得し、SageMakerランタイムにインポートするために使用されます。
-
SageMakerコンソールで、ナビゲーションペインでライフサイクル設定を選択します。
-
設定の作成を選択します。
-
デフォルトの選択肢Jupyter Server Appを選択し、次へを選択します。
-
設定に名前を付けます。
-
以下のスクリプトをエディタに入力し、先に作成したシークレットのARNを指定します:
#!/bin/bash set -eux cat > ~/.sfgenie_identity_provider_oauth_config <<EOL { "secret_arn": "<YOUR_SECRETS_ARN>" } EOL
- 送信を選択してライフサイクル設定を保存します。
- ナビゲーションペインでドメインを選択し、ドメインを開きます。
- 環境タブで、アタッチを選択してライフサイクル設定をアタッチします。
- 作成したライフサイクル設定を選択し、ドメインにアタッチを選択します。
- デフォルトに設定を選択します。
SageMaker Studioへの再ログイン時に、Salesforce Data Cloudが有効になっていることを確認するために、最新のJupyterおよびSageMaker Data Wranglerカーネルにアップグレードしてください。
これで、Salesforce Data CloudからSageMaker Studioへのデータアクセスを有効にするためのセットアップが完了しました。AIおよび機械学習(ML)モデルの構築ができます。
SageMakerプロジェクトの作成
ソリューションを使用するには、まずAmazon SageMaker Projectsを使用してプロジェクトを作成します。次の手順を完了してください:
- SageMaker Studioで、ナビゲーションペインのデプロイの下で、プロジェクトを選択します。
- プロジェクトの作成を選択します。
- 「Salesforce向けモデルデプロイ」のプロジェクトテンプレートを選択します。
- プロジェクトテンプレートの選択を選択します。
- プロジェクトに名前とオプションの説明を入力します。
- モデルグループの名前を入力します。
- 先に作成したSecrets Managerシークレットの名前を入力します。
- プロジェクトの作成を選択します。
プロジェクトの初期化には1〜2分かかる場合があります。
2つの新しいリポジトリが表示されます。最初のリポジトリは、SageMakerモデルレジストリでノートブックの準備、トレーニング、モデルの作成、登録を行うために使用できるサンプルノートブックです。2番目のリポジトリは、SageMakerエンドポイントをAPIとして公開するモデルデプロイの自動化に使用されます。
- 両方のノートブックのリポジトリをクローンします。
この記事では、製品の推奨例を使用します。クローンしたsagemaker-<YOUR-PROJECT-NAME>-p-<YOUR-PROJECT-ID>-example-nb/product-recommendation
ディレクトリに見つけることができます。product-recommendation.ipynbノートブックを実行する前に、SageMaker Data Wranglerを使用してトレーニングデータを作成するためのデータの準備を行いましょう。
SageMaker Data Wranglerを使用してデータの準備を行う
以下の手順を完了します:
-
SageMaker Studioで、ファイルメニューから新規を選択し、Data Wranglerフローを選択します。
-
データフローを作成した後、タブを選択して(右クリック)名前の変更を選択してファイル名を変更します。
-
データのインポートを選択します。
-
接続の作成を選択します。
-
Salesforce Data Cloudを選択します。
-
名前に
salesforce-data-cloud-sagemaker-connection
を入力します。 -
Salesforce org URLにSalesforce orgのURLを入力します。
-
保存+接続を選択します。
-
Data Explorerビューで、Salesforce Data Cloudからテーブルを選択してプレビューし、必要なデータセットを抽出するためのクエリを作成して実行します。
-
クエリは以下のようになり、Salesforce Data Cloudにデータをアップロードする際に使用したテーブル名を使用することができます。
SELECT product_purchased__c, club_member__c, campaign__c, state__c, month__c, case_count__c,case_type_return__c, case_type_shipment_damaged__c, pages_visited__c,engagement_score__c, tenure__c, clicks__c, id__c FROM Training_Dataset_for_Sagemaker__dll
-
データセットの作成を選択します。
データセットの作成には時間がかかる場合があります。
データフローのビューでは、ビジュアルグラフに新しいノードが追加されていることが確認できます。
SageMaker Data Wranglerを使用してデータ品質と洞察レポートを作成する方法の詳細については、「データとデータ品質の洞察を取得する」を参照してください。
SageMaker Data Wranglerには300以上の組み込みの変換があります。このステップでは、これらの変換のいくつかを使用してデータセットを機械学習モデルに適した形式に整形します。これらの変換の実装方法の詳細な手順については、「データの変換」を参照してください。
-
列の管理ステップを使用して、列の削除変換を使用して
id__c
の列を削除します。 -
欠損値の処理ステップを使用して、さまざまな特徴の欠損値を持つ行を削除するために欠損値の削除変換を適用します。この変換はすべての列に対して適用されます。
-
カスタム変換ステップを使用して、
state__c
、case_count__c
、およびtenure
の特徴のカテゴリ値を作成します。次のコードを使用してこの変換を行います:from pyspark.sql.functions import when States_List = [‘Washington’, ‘Massachusetts’, ‘California’, ‘Minnesota’, ‘Vermont’, ‘Colorado’, ‘Arizona’] df.withColumn(“club_member__c”,df.club_member__c.cast(‘string’)) df.withColumn(“month__c”,df.month__c.cast(‘string’)) df.withColumn(“case_type_return__c”,df.case_type_return__c.cast(‘string’)) df.withColumn(“case_type_shipment_damaged__c”,df.case_type_shipment_damaged__c.cast(‘string’)) df = df.withColumn(‘state__c’, when(df.state__c.isin(States_List), df.state__c).otherwise(“Other”)) df = df.withColumn(‘case_count__c’, when(df.case_count__c == 0, “No Cases”).otherwise( when(df.case_count__c <= 2, “1 to 2 Cases”).otherwise(“Greater than 2 Cases”))) df = df.withColumn(‘tenure__c’, when(df.tenure__c < 1, “Less than 1 Year”).otherwise( when(df.tenure__c == 1, “1 to 2 Years”).otherwise(when(df.tenure__c ==2, “2 to 3 Years”).otherwise(when(df.tenure__c == 3, “3 to 4 Years”).otherwise(“Grater Than 4 Years”)))))
-
数値の処理ステップを使用して、値のスケーリング変換を適用し、
clicks__c
、engagement__score
、およびpages__visited__c
の特徴をスケーリングします。 <img src="https://d2908q01vomqb2.cloudfront.net/f1f836cb4eaモデルの構築、トレーニング、および展開
モデルを構築、トレーニング、展開するには、次の手順を完了してください:
- SageMakerプロジェクトに戻り、product-recommendation.ipynbノートブックを開き、作成したSageMaker Data Wranglerの構成を使用してデータの前処理を行う処理ジョブを実行します。
- ノートブックの手順に従って、モデルをトレーニングし、SageMakerモデルレジストリに登録します。
- モデルグループ名を、SageMakerプロジェクトの作成時に使用したモデルグループ名と一致するように更新してください。
モデルグループ名を見つけるには、以前作成したSageMakerプロジェクトを開き、設定タブに移動します。
同様に、ノートブックで参照されるフローファイルは、以前に作成したフローファイル名と一致する必要があります。
- この投稿では、モデルグループ名として
product-recommendation
を使用したため、ノートブックをproject-recommendation
として更新します。
ノートブックが実行されると、トレーニングされたモデルがモデルレジストリに登録されます。モデルレジストリについて詳しくは、「モデルレジストリを使用したモデルの登録と展開」を参照してください。
- 作成したモデルバージョンを選択し、ステータスを承認済みに更新します。
登録済みのモデルを承認したら、SageMaker Salesforceプロジェクトの展開手順がAWS CodePipelineをプロビジョニングし、トリガーします。
CodePipelineには、SageMaker Data Wranglerの前処理ステップとトレーニングされたモデルを含む推論用のSageMakerエンドポイントをビルドおよび展開する手順があります。エンドポイントはSalesforce Data CloudにAPIとして公開されます。次のスクリーンショットは、
Sagemaker-salesforce-product-recommendation-xxxxx
という接頭辞を付けたパイプラインを示しています。また、SageMakerプロジェクトによってSalesforceのために作成されるエンドポイントとAPIも表示されます。必要に応じて、カスタムJWT認証子を使用してSageMakerエンドポイントおよびAPI Gatewayを作成するためのAWS CloudFormationスクリプトを使用するCodePipelineデプロイステップを確認できます。
パイプラインの展開が完了すると、SageMakerコンソールでSageMakerエンドポイントを見つけることができます。
プロジェクトテンプレートによって作成されたAPI GatewayをAPI Gatewayコンソールで確認できます。
API GatewayのURLを見つけるためにリンクを選択してください。
API GatewayコンソールでAuthorizersを選択すると、JWT認証の詳細を見つけることができます。AWS Lambdaコンソールに移動して、プロジェクトテンプレートで作成されたLambda関数のコードを確認することもできます。
Einstein StudioからAPIを呼び出す際に使用されるスキーマを見つけるには、モデルレジストリのナビゲーションペインでInformationを選択してください。Amazon Simple Storage Service(Amazon S3)のメタデータファイルへのリンクが表示されます。リンクを新しいブラウザタブのURLにコピーして貼り付けてください。
ダウンロードせずにファイルを表示しましょう。ファイルの詳細ページで、Object actionsメニューを選択し、Query with S3 Selectを選択してください。
SQLクエリを実行を選択し、API GatewayのURLとスキーマをメモしておいてください。これらの情報は、Einstein Studioへの登録時に必要です。もし
APIGWURL
キーが表示されない場合は、モデルが承認されていないか、デプロイが進行中であるか、デプロイが失敗している可能性があります。Salesforce Einstein Studio APIを使用して予測を行う
Salesforce Einstein Studioは、データサイエンスとエンジニアリングチームが生成型AIで使用される伝統的なモデルとLLMに簡単にアクセスできるSalesforce Data Cloudの新しい中央集約型エクスペリエンスです。次に、Salesforce Einstein Studioで事前に設定したAPI URLと
client_id
をSecrets Managerに登録して、Salesforce Einstein Studioでモデルの推論を登録して使用するためにセットアップします。手順については、「Einstein Studioを使用してSalesforceにAIモデルを持ち込む」を参照してください。クリーンアップ
SageMakerプロジェクトで作成されたすべてのリソースを削除するには、プロジェクトページでActionメニューを選択し、Deleteを選択してください。
CodePipelineによって作成されたリソース(API GatewayおよびSageMakerエンドポイント)を削除するには、AWS CloudFormationコンソールに移動し、作成されたスタックを削除してください。
結論
この記事では、Salesforce Data CloudにホストされたデータをSageMaker Data Wranglerを使用してインポートおよび準備し、SageMaker Data WranglerでのSalesforce Data Cloudの統合にはSalesforce Data Cloud JDBCコネクタを使用し、SageMaker提供のSalesforceテンプレートを使用してSageMaker StudioでMLモデルを構築およびトレーニングする方法を説明しました。Salesforce用のSageMakerプロジェクトテンプレートは、モデルをデプロイし、エンドポイントを作成し、登録モデルのためのAPIをセキュリティで保護することができます。その後、Salesforce Einstein Studioでビジネスユースケースの予測を行うためにAPIを使用します。
製品の推奨事例を使用して、エンドツーエンドの統合を実装するための手順を紹介しましたが、Salesforce向けのSageMakerプロジェクトテンプレートを使用して、SageMakerモデルレジストリに登録された任意のSageMaker従来モデルとLLMのエンドポイントとAPIを作成することができます。Salesforce Data Cloudのデータを使用してSageMakerを使用して何を構築するか、そしてSageMakerホストされたMLモデルを使用してSalesforceアプリケーションを強化することを楽しみにしています!
この投稿は、Salesforce Data CloudとSageMakerの統合に関するシリーズの続きです。この統合アプローチでどのようなビジネスインパクトを実現できるかの概要と詳細については、Part 1を参照してください。
追加リソース
- SageMaker Data Wranglerを使用してデータをインポートする
- SageMaker Data Wranglerのトラブルシューティング
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles