データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

データソースとしてAmazonキースペースを使用して機械学習モデルをトレーニングする

産業機器のメンテナンス、貿易監視、フリート管理、ルート最適化を目的とした多くのアプリケーションは、オープンソースのCassandra APIとドライバーを使用して構築され、データを高速かつ低遅延で処理します。 Cassandraテーブルを自分で管理することは、時間と費用がかかる可能性があります。 Amazonキースペース(Apache Cassandra用) 追加のインフラストラクチャを管理することなく、AWSクラウドでCassandraテーブルをセットアップ、保護、スケーリングできます。

この投稿では、Amazon Keyspacesを使用した機械学習(ML)モデルのトレーニングに関連するAWSサービスを高レベルで説明し、AmazonKeyspacesからにデータを取り込むためのステップバイステップの手順を提供します。 アマゾンセージメーカー 特定の顧客セグメンテーションのユースケースに使用できるモデルをトレーニングします。

AWSには、企業がクラウドにMLプロセスを実装するのを支援する複数のサービスがあります。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

AWSMLスタックにはXNUMXつのレイヤーがあります。 中間層には セージメーカー、開発者、データサイエンティスト、MLエンジニアに、MLモデルを大規模に構築、トレーニング、デプロイする機能を提供します。 MLワークフローの各ステップの複雑さが解消されるため、MLのユースケースをより簡単にデプロイできます。 これには、予知保全から顧客の行動を予測するためのコンピュータービジョンまであらゆるものが含まれます。 顧客は、SageMakerを使用してデータサイエンティストの生産性を最大10倍向上させることができます。

Apache Cassandraは、非構造化データまたは半構造化データを使用する読み取りの多いユースケースでよく使用されます。 たとえば、人気のある食品配達業者は配達時間を見積もり、小売顧客はApacheCassandraデータベースの製品カタログ情報を頻繁に使用し続ける可能性があります。 Amazonキースペース は、スケーラブルで可用性が高く、管理されたサーバーレスのApacheCassandra互換データベースサービスです。 サーバーのプロビジョニング、パッチ適用、または管理は必要ありません。また、ソフトウェアのインストール、保守、または操作も必要ありません。 テーブルは自動的にスケールアップおよびスケールダウンでき、使用したリソースに対してのみ料金を支払います。 Amazon Keyspacesを使用すると、現在使用しているものと同じCassandraアプリケーションコードと開発者ツールを使用して、AWSでCassandraワークロードを実行できます。

SageMakerは一連の 組み込みアルゴリズム データサイエンティストとML実践者が、MLモデルのトレーニングと展開を迅速に開始できるように支援します。 この投稿では、小売顧客がキースペースデータベースの顧客購入履歴を使用して、マーケティングキャンペーンのさまざまな顧客セグメントをターゲットにする方法を紹介します。

K平均 教師なし学習アルゴリズムです。 これは、データ内の個別のグループを見つけようとします。グループのメンバーは、互いに可能な限り類似しており、他のグループのメンバーとは可能な限り異なります。 類似性を判断するためにアルゴリズムで使用する属性を定義します。 SageMakerは、の修正バージョンを使用します Webスケールのk-meansクラスタリングアルゴリズム。 アルゴリズムの元のバージョンと比較して、SageMakerで使用されるバージョンはより正確です。 ただし、元のアルゴリズムと同様に、大規模なデータセットにスケーリングし、トレーニング時間の改善を実現します。

ソリューションの概要

手順は、SageMakerStudioを使用してコードを実行することを前提としています。 関連するコードはで共有されています AWSサンプルGitHub。 ラボの指示に従って、次のことを実行できます。

  • 必要な依存関係をインストールします。
  • Amazon Keyspacesに接続し、テーブルを作成して、サンプルデータを取り込みます。
  • Amazon Keyspacesのデータを使用して、分類MLモデルを構築します。
  • モデルの結果を調べます。
  • 新しく作成されたリソースをクリーンアップします。

完了すると、次の画像に示すように、SageMakerをAmazon Keyspacesと統合して、MLモデルをトレーニングできるようになります。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

今、あなたは従うことができます ステップバイステップの説明 この投稿では、SageMakerを使用してAmazon Keyspacesに保存されている生データと、ML処理のために取得されたデータを取り込みます。

前提条件

まず、SageMakerに移動します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、SageMakerを初めて使用する場合は、[ 始める.

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、 SageMakerドメインをセットアップする.

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、Name –を使用して新しいユーザープロファイルを作成します。 セージメーカーユーザー、および選択 新しい役割を作成します。 セクションに デフォルトの実行ロール サブセクション。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、ポップアップする画面で、 Amazon Simple Storage Service(Amazon S3) バケットをクリックし、[役割の作成]を選択します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

このロールは、SageMakerがロールからの一時的なクレデンシャルを使用してキースペーステーブルにアクセスできるようにするために、次の手順で使用されます。 これにより、ユーザー名とパスワードをノートブックに保存する必要がなくなります。

次に、に関連付けられている役割を取得します セージメーカーユーザー これは、前のステップで要約セクションから作成されました。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、に移動します AWS Console 見上げる AWS Identity and Access Management(IAM)。 IAM内で、[役割]に移動します。 ロール内で、前の手順で特定された実行ロールを検索します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、前の手順で特定した役割を選択し、[権限の追加]を選択します。 表示されるドロップダウンで、[インラインポリシーの作成]を選択します。 SageMakerを使用すると、ビジネス要件に基づいてユーザー/アプリケーションが実行できるアクションを制限するきめ細かいレベルのアクセスを提供できます。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、[JSON]タブを選択し、Githubの[メモ]セクションからポリシーをコピーします ページ。 このポリシーにより、SageMakerノートブックはキースペースに接続し、さらに処理するためにデータを取得できます。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、ドロップダウンから[権限の追加]を再度選択し、[ポリシーの添付]を選択します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

AmazonKeyspacesFullAccessポリシーを検索し、一致する結果の横にあるチェックボックスを選択して、[ポリシーの添付]を選択します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

権限ポリシーセクションに含まれていることを確認します AmazonS3FullAccess, AmazonSageMakerFullAccess, AmazonKeyspacesFullAccess、および新しく追加されたインラインポリシー。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、AWSコンソールを使用してSageMaker Studioに移動し、SageMakerStudioを選択します。 そこで、[アプリの起動]を選択し、[スタジオ]を選択します。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

ノートブックのウォークスルー

SageMaker Notebookからキースペースに接続するための推奨される方法は、 AWS署名バージョン4プロセス(SigV4) ベース 一時的な資格情報 認証用。 このシナリオでは、キースペースのクレデンシャルを生成または保存する必要はなく、クレデンシャルを使用してSigV4プラグインで認証できます。 一時的なセキュリティクレデンシャルは、アクセスキーIDとシークレットアクセスキーで構成されます。 ただし、資格情報の有効期限が切れる時期を示すセキュリティトークンも含まれています。 この投稿では、IAMロールを作成し、一時的なセキュリティクレデンシャルを生成します。

まず、ドライバー(cassandra-sigv4)をインストールします。 このドライバーを使用すると、AWS署名バージョン4プロセス(SigV4)を使用してAPIリクエストに認証情報を追加できます。 プラグインを使用すると、IAMユーザーとロールを使用してAmazon Keyspaces(Apache Cassandraの場合)にアクセスするための短期的なクレデンシャルをユーザーとアプリケーションに提供できます。 これに続いて、追加のパッケージ依存関係とともに必要な証明書をインポートします。 最後に、ノートブックがキースペースと通信する役割を引き受けることを許可します。

# Install missing packages and import dependencies
# Installing Cassandra SigV4
%pip install cassandra-sigv4 # Get Security certificate
!curl https://certs.secureserver.net/repository/sf-class2-root.crt -O # Import
from sagemaker import get_execution_role
from cassandra.cluster import Cluster
from ssl import SSLContext, PROTOCOL_TLSv1_2, CERT_REQUIRED
from cassandra_sigv4.auth import SigV4AuthProvider
import boto3 import pandas as pd
from pandas import DataFrame import csv
from cassandra import ConsistencyLevel
from datetime import datetime
import time
from datetime import timedelta import pandas as pd
import datetime as dt
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler # Getting credentials from the role
client = boto3.client("sts") # Get notebook Role
role = get_execution_role()
role_info = {"RoleArn": role, "RoleSessionName": "session1"}
print(role_info) credentials = client.assume_role(**role_info)

次に、Amazon Keyspacesに接続し、システムデータをKeyspacesからPandas DataFrameに読み込んで、接続を検証します。

# Connect to Cassandra Database from SageMaker Notebook # using temporary credentials from the Role.
session = boto3.session.Session() ###
### You can also pass specific credentials to the session
###
#session = boto3.session.Session(
# aws_access_key_id=credentials["Credentials"]["AccessKeyId"],
# aws_secret_access_key=credentials["Credentials"]["SecretAccessKey"],
# aws_session_token=credentials["Credentials"]["SessionToken"],
#) region_name = session.region_name # Set Context
ssl_context = SSLContext(PROTOCOL_TLSv1_2)
ssl_context.load_verify_locations("sf-class2-root.crt")
ssl_context.verify_mode = CERT_REQUIRED auth_provider = SigV4AuthProvider(session)
keyspaces_host = "cassandra." + region_name + ".amazonaws.com" cluster = Cluster([keyspaces_host], ssl_context=ssl_context, auth_provider=auth_provider, port=9142)
session = cluster.connect() # Read data from Keyspaces system table. # Keyspaces is serverless DB so you don't have to create Keyspaces DB ahead of time.
r = session.execute("select * from system_schema.keyspaces") # Read Keyspaces row into Panda DataFrame
df = DataFrame(r)
print(df)

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

次に、生データセットでトレーニングするためのデータを準備します。 この投稿に関連付けられているPythonノートブックでは、からダウンロードした小売データセットを使用します こちら、そしてそれを処理します。 データセットが与えられた場合の私たちのビジネス目標は、RFMと呼ばれる特定のメトリックを使用して顧客をクラスター化することです。 RFMモデルは、次のXNUMXつの定量的要因に基づいています。

  • 最新性:顧客が購入したのはどのくらい最近ですか。
  • 頻度:顧客が購入する頻度。
  • 金銭的価値:顧客が購入に費やす金額。

RFM分析では、これら1つのカテゴリのそれぞれで、一般に5からXNUMXのスケールで顧客を数値でランク付けします(数値が大きいほど、結果は良くなります)。 「最高の」顧客は、すべてのカテゴリーで最高のスコアを獲得します。 パンダの分位数ベースの離散化関数(qcut)を使用します。 これは、サンプルの分位数に基づいて、またはサンプルの分位数に基づいて、値を同じサイズのバケットに離散化するのに役立ちます。

# Prepare Data
r = session.execute("select * from " + keyspaces_schema + ".online_retail") df = DataFrame(r)
df.head(100) df.count()
df["description"].nunique()
df["totalprice"] = df["quantity"] * df["price"]
df.groupby("invoice").agg({"totalprice": "sum"}).head() df.groupby("description").agg({"price": "max"}).sort_values("price", ascending=False).head()
df.sort_values("price", ascending=False).head()
df["country"].value_counts().head()
df.groupby("country").agg({"totalprice": "sum"}).sort_values("totalprice", ascending=False).head() returned = df[df["invoice"].str.contains("C", na=False)]
returned.sort_values("quantity", ascending=True).head() df.isnull().sum()
df.dropna(inplace=True)
df.isnull().sum()
df.dropna(inplace=True)
df.isnull().sum()
df.describe([0.05, 0.01, 0.25, 0.50, 0.75, 0.80, 0.90, 0.95, 0.99]).T
df.drop(df.loc[df["customer_id"] == ""].index, inplace=True) # Recency Metric
import datetime as dt today_date = dt.date(2011, 12, 9)
df["customer_id"] = df["customer_id"].astype(int) # create get the most recent invoice for each customer
temp_df = df.groupby("customer_id").agg({"invoice_date": "max"})
temp_df["invoice_date"] = temp_df["invoice_date"].astype(str)
temp_df["invoice_date"] = pd.to_datetime(temp_df["invoice_date"]).dt.date
temp_df["Recency"] = (today_date - temp_df["invoice_date"]).dt.days
recency_df = temp_df.drop(columns=["invoice_date"])
recency_df.head() # Frequency Metric
temp_df = df.groupby(["customer_id", "invoice"]).agg({"invoice": "count"})
freq_df = temp_df.groupby("customer_id").agg({"invoice": "count"})
freq_df.rename(columns={"invoice": "Frequency"}, inplace=True) # Monetary Metric
monetary_df = df.groupby("customer_id").agg({"totalprice": "sum"})
monetary_df.rename(columns={"totalprice": "Monetary"}, inplace=True)
rfm = pd.concat([recency_df, freq_df, monetary_df], axis=1) df = rfm
df["RecencyScore"] = pd.qcut(df["Recency"], 5, labels=[5, 4, 3, 2, 1])
df["FrequencyScore"] = pd.qcut(df["Frequency"].rank(method="first"), 5, labels=[1, 2, 3, 4, 5])
df["Monetary"] = df["Monetary"].astype(int)
df["MonetaryScore"] = pd.qcut(df["Monetary"], 5, labels=[1, 2, 3, 4, 5])
df["RFM_SCORE"] = ( df["RecencyScore"].astype(str) + df["FrequencyScore"].astype(str) + df["MonetaryScore"].astype(str)
)
seg_map = { r"[1-2][1-2]": "Hibernating", r"[1-2][3-4]": "At Risk", r"[1-2]5": "Can't Loose", r"3[1-2]": "About to Sleep", r"33": "Need Attention", r"[3-4][4-5]": "Loyal Customers", r"41": "Promising", r"51": "New Customers", r"[4-5][2-3]": "Potential Loyalists", r"5[4-5]": "Champions",
} df["Segment"] = df["RecencyScore"].astype(str) + rfm["FrequencyScore"].astype(str)
df["Segment"] = df["Segment"].replace(seg_map, regex=True)
df.head()
rfm = df.loc[:, "Recency":"Monetary"]
df.groupby("customer_id").agg({"Segment": "sum"}).head()

この例では、CQLを使用してキースペーステーブルからレコードを読み取ります。 一部のMLユースケースでは、同じキースペーステーブルから同じデータを複数回読み取る必要がある場合があります。 この場合、追加のデータが発生しないように、データをAmazonS3バケットに保存することをお勧めします コスト■Amazonキースペースからの読み取り。 シナリオによっては、 アマゾンEMR 〜へ 摂取する 非常に大きなAmazonS3ファイルをSageMakerに入れます。

## Optional Code to save Python DataFrame to S3
from io import StringIO # python3 (or BytesIO for python2) smclient = boto3.Session().client('sagemaker')
sess = sagemaker.Session()
bucket = sess.default_bucket() # Set a default S3 bucket
print(bucket) csv_buffer = StringIO()
df.to_csv(csv_buffer)
s3_resource = boto3.resource('s3')
s3_resource.Object(bucket, ‘out/saved_online_retail.csv').put(Body=csv_buffer.getvalue())

次に、KMeansアルゴリズムを使用してMLモデルをトレーニングし、クラスターが作成されていることを確認します。 この特定のシナリオでは、作成されたクラスターが印刷され、生データセットの顧客がデータセットのさまざまな属性に基づいてグループ化されていることがわかります。 このクラスター情報は、ターゲットを絞ったマーケティングキャンペーンに使用できます。

# Training sc = MinMaxScaler((0, 1))
df = sc.fit_transform(rfm) # Clustering
kmeans = KMeans(n_clusters=6).fit(df) # Result
segment = kmeans.labels_ # Visualize the clusters
import matplotlib.pyplot as plt final_df = pd.DataFrame({"customer_id": rfm.index, "Segment": segment})
bucket_data = final_df.groupby("Segment").agg({"customer_id": "count"}).head()
index_data = final_df.groupby("Segment").agg({"Segment": "max"}).head()
index_data["Segment"] = index_data["Segment"].astype(int)
dataFrame = pd.DataFrame(data=bucket_data["customer_id"], index=index_data["Segment"])
dataFrame.rename(columns={"customer_id": "Total Customers"}).plot.bar( rot=70, title="RFM clustering"
)
# dataFrame.plot.bar(rot=70, title="RFM clustering");
plt.show(block=True);

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。

(オプション)次に、MLモデルによって識別された顧客セグメントを、ターゲットマーケティングのためにAmazonKeyspacesテーブルに保存します。 バッチジョブはこのデータを読み取り、特定のセグメントの顧客にターゲットを絞ったキャンペーンを実行できます。

# Create ml_clustering_results table to store results createTable = """CREATE TABLE IF NOT EXISTS %s.ml_clustering_results ( run_id text, segment int, total_customers int, run_date date, PRIMARY KEY (run_id, segment)); """
cr = session.execute(createTable % keyspaces_schema)
time.sleep(20)
print("Table 'ml_clustering_results' created") insert_ml = ( "INSERT INTO " + keyspaces_schema + '.ml_clustering_results' + '("run_id","segment","total_customers","run_date") ' + 'VALUES (?,?,?,?); '
) prepared = session.prepare(insert_ml)
prepared.consistency_level = ConsistencyLevel.LOCAL_QUORUM run_id = "101"
dt = datetime.now() for ind in dataFrame.index: print(ind, dataFrame['customer_id'][ind]) r = session.execute( prepared, ( run_id, ind, dataFrame['customer_id'][ind], dt, ), )

最後に、私たちは リソースをクリーンアップします 追加料金の発生を避けるために、このチュートリアル中に作成されました。

# Delete blog keyspace and tables
deleteKeyspace = "DROP KEYSPACE IF EXISTS blog"
dr = session.execute(deleteKeyspace) time.sleep(5)
print("Dropping %s keyspace. It may take a few seconds to a minute to complete deletion keyspace and table." % keyspaces_schema )

キースペースとテーブルの削除が完了するまでに数秒からXNUMX分かかる場合があります。 キースペースを削除すると、キースペースとそのすべてのテーブルが削除され、それらからの料金の発生が停止します。

まとめ

この投稿では、Amazon KeyspacesからSageMakerに顧客データを取り込み、顧客をセグメント化できるクラスタリングモデルをトレーニングする方法を紹介しました。 この情報をターゲットを絞ったマーケティングに使用できるため、ビジネスのKPIが大幅に向上します。 Amazon Keyspacesの詳細については、次のリソースを確認してください。


著者について

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。ヴァディム・リャホビッチ サンフランシスコベイエリアにあるAWSのシニアソリューションアーキテクトであり、お客様のAWSへの移行を支援しています。 彼は大企業から小規模の新興企業に至るまでの組織と協力して、彼らの革新をサポートしています。 彼はまた、お客様がAWSでスケーラブルで安全で費用効果の高いソリューションを設計するのを支援しています。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。パート・パテル サンフランシスコベイエリアにあるAWSのソリューションアーキテクトです。 Parthは、クラウドへの移行を加速し、AWSクラウドの採用を成功させるためにお客様をガイドします。 彼はMLとアプリケーションのモダナイゼーションに焦点を当てています。

データソースPlatoBlockchainDataIntelligenceとしてAmazonKeyspacesを使用して機械学習モデルをトレーニングします。 垂直検索。 愛。ラム・パタンギ サンフランシスコベイエリアにあるAWSのソリューションアーキテクトです。 彼は、農業、保険、銀行、小売、ヘルスケア&ライフサイエンス、ホスピタリティ、ハイテク業界の顧客がAWSクラウドでビジネスを成功させるのを支援してきました。 彼はデータベース、分析、MLを専門としています。

タイムスタンプ:

より多くの AWS機械学習