Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Навчайте моделі машинного навчання, використовуючи Amazon Keyspaces як джерело даних

Багато додатків, призначених для обслуговування промислового обладнання, моніторингу торгівлі, керування автопарком та оптимізації маршрутів, створено з використанням API та драйверів Cassandra з відкритим кодом для обробки даних з високою швидкістю та низькою затримкою. Самостійне керування таблицями Cassandra може зайняти багато часу та дорого. Amazon Keyspaces (для Apache Cassandra) дозволяє налаштовувати, захищати та масштабувати таблиці Cassandra в хмарі AWS, не керуючи додатковою інфраструктурою.

У цій публікації ми розповімо вам про служби AWS, пов’язані з навчанням моделей машинного навчання (ML) із використанням Amazon Keyspaces на високому рівні, і надамо покрокові інструкції щодо отримання даних із Amazon Keyspaces в Amazon SageMaker і навчання моделі, яку можна використовувати для конкретного випадку сегментації клієнтів.

AWS має кілька сервісів, які допомагають підприємствам впроваджувати процеси ML у хмарі.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

AWS ML Stack має три шари. У середньому шарі є SageMaker, який надає розробникам, науковцям з даних та інженерам з машинного навчання можливість створювати, навчати та розгортати моделі машинного навчання в масштабі. Це усуває складність кожного кроку робочого процесу ML, щоб ви могли легше розгортати свої варіанти використання ML. Сюди входить будь-що, від прогнозного обслуговування до комп’ютерного зору до прогнозування поведінки клієнтів. За допомогою SageMaker клієнти досягають у 10 разів підвищення продуктивності дослідників даних.

Apache Cassandra є популярним вибором для важких випадків використання з неструктурованими або напівструктурованими даними. Наприклад, популярний бізнес з доставки їжі оцінює час доставки, і роздрібний клієнт може продовжувати часто використовувати інформацію з каталогу продуктів у базі даних Apache Cassandra. Простір ключів Amazon — це масштабована, високодоступна й керована безсерверна служба баз даних, сумісна з Apache Cassandra. Вам не потрібно надавати, виправляти чи керувати серверами, а також не потрібно встановлювати, підтримувати або експлуатувати програмне забезпечення. Таблиці можуть автоматично збільшуватися і зменшуватися, і ви платите лише за ресурси, які використовуєте. Amazon Keyspaces дозволяє запускати робочі навантаження Cassandra на AWS, використовуючи той самий код програми Cassandra та інструменти розробника, які ви використовуєте сьогодні.

SageMaker надає набір вбудовані алгоритми щоб допомогти науковцям з даних і практикам ML швидко розпочати навчання та розгортати моделі машинного навчання. У цій публікації ми покажемо вам, як роздрібний клієнт може використовувати історію покупок клієнта в базі даних Keyspaces і орієнтуватися на різні сегменти клієнтів для маркетингових кампаній.

K-означає є алгоритмом навчання без нагляду. Він намагається знайти дискретні угруповання в даних, де члени групи максимально схожі один на одного і максимально відрізняються від членів інших груп. Ви визначаєте атрибути, які ви хочете, щоб алгоритм використовував для визначення схожості. SageMaker використовує модифіковану версію алгоритм кластеризації k-середніх у веб-масштабі. У порівнянні з оригінальною версією алгоритму, версія, використана SageMaker, є більш точною. Однак, як і оригінальний алгоритм, він масштабується до масивних наборів даних і забезпечує покращення часу навчання.

Огляд рішення

В інструкціях передбачається, що ви будете використовувати SageMaker Studio для запуску коду. Пов’язаний код опубліковано на Зразок AWS GitHub. Дотримуючись інструкцій в лабораторії, ви можете зробити наступне:

  • Встановіть необхідні залежності.
  • Підключіться до Amazon Keyspaces, створіть таблицю та отримайте зразки даних.
  • Побудуйте модель класифікації ML, використовуючи дані в Amazon Keyspaces.
  • Досліджуйте результати моделі.
  • Очищення новостворених ресурсів.

Після завершення ви інтегруєте SageMaker з Amazon Keyspaces для навчання моделей ML, як показано на наступному зображенні.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Тепер ви можете стежити за покрокова інструкція у цій публікації, щоб отримати вихідні дані, що зберігаються в Amazon Keyspaces за допомогою SageMaker, і дані, отримані таким чином для обробки ML.

Передумови

Спочатку перейдіть до SageMaker.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі, якщо ви вперше використовуєте SageMaker, виберіть Розпочати.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Потім виберіть Налаштуйте домен SageMaker.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі створіть новий профіль користувача з ім’ям – sagemakeruser, і виберіть Створити нову роль в Роль виконання за замовчуванням підрозділ.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі на екрані, що з’явиться, виберіть будь-який Служба простого зберігання Amazon (Amazon S3) і виберіть Створити роль.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Ця роль буде використовуватися на наступних кроках, щоб дозволити SageMaker отримати доступ до таблиці Keyspaces за допомогою тимчасових облікових даних з ролі. Це позбавляє від необхідності зберігати ім’я користувача та пароль у блокноті.

Далі отримайте роль, пов’язану з sagemakeruser який був створений на попередньому кроці з розділу підсумків.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Потім перейдіть до Консоль AWS і подивіться вгору AWS Identity and Access Management (IAM). У IAM перейдіть до Ролі. У межах Ролі знайдіть роль виконання, визначену на попередньому кроці.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі виберіть роль, визначену на попередньому кроці, і виберіть Додати дозволи. У спадному меню, що з’явиться, виберіть Створити вбудовану політику. SageMaker дозволяє надати детальний рівень доступу, який обмежує дії, які користувач/програма може виконувати на основі вимог бізнесу.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Потім виберіть вкладку JSON і скопіюйте політику з розділу «Примітка» на Github сторінка. Ця політика дозволяє блокноту SageMaker підключатися до Keyspaces і отримувати дані для подальшої обробки.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Потім знову виберіть Додати дозволи та зі спадного меню, а потім виберіть Вкласти політику.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Знайдіть політику AmazonKeyspacesFullAccess, поставте прапорець біля відповідного результату та виберіть Вкласти політики.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Переконайтеся, що розділ політики дозволів містить AmazonS3FullAccess, AmazonSageMakerFullAccess, AmazonKeyspacesFullAccess, а також нещодавно додану вбудовану політику.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі перейдіть до SageMaker Studio за допомогою консолі AWS і виберіть SageMaker Studio. Опинившись там, виберіть Запустити програму та виберіть Studio.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Покрокове керівництво по блокноту

Переважним способом підключення до Keyspaces із SageMaker Notebook є використання Процес AWS Signature версії 4 (SigV4) заснований Тимчасові повноваження для аутентифікації. У цьому сценарії нам НЕ потрібно створювати або зберігати облікові дані Keyspaces і можемо використовувати облікові дані для аутентифікації за допомогою плагіна SigV4. Тимчасові облікові дані безпеки складаються з ідентифікатора ключа доступу та секретного ключа доступу. Однак вони також містять маркер безпеки, який вказує, коли закінчується термін дії облікових даних. У цій публікації ми створимо роль IAM та створимо тимчасові облікові дані безпеки.

Спочатку встановлюємо драйвер (cassandra-sigv4). Цей драйвер дозволяє додавати інформацію автентифікації до запитів API за допомогою процесу підпису AWS версії 4 (SigV4). За допомогою плагіна ви можете надати користувачам і програмам короткострокові облікові дані для доступу до Amazon Keyspaces (для Apache Cassandra) за допомогою користувачів і ролей IAM. Після цього ви імпортуєте необхідний сертифікат разом із додатковими залежностями пакетів. Зрештою, ви дозволите ноутбуку взяти на себе роль спілкування з Keyspaces.

# 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)

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Далі підготуйте дані для навчання на наборі необроблених даних. У блокноті Python, пов’язаному з цією публікацією, використовуйте набір роздрібних даних, завантажений з тут, і обробити його. Наша бізнес-ціль, враховуючи набір даних, полягає в тому, щоб об’єднати клієнтів у групу за допомогою певної метрики виклику RFM. Модель RFM заснована на трьох кількісних факторах:

  • Недавність: як нещодавно клієнт зробив покупку.
  • Частота: як часто клієнт робить покупку.
  • Грошова вартість: скільки грошей клієнт витрачає на покупки.

Аналіз RFM чисельно оцінює клієнта в кожній із цих трьох категорій, як правило, за шкалою від 1 до 5 (чим більше число, тим кращий результат). «Кращий» клієнт отримає найвищий бал у кожній категорії. Ми будемо використовувати функцію дискретизації на основі квантилів (qcut) від pandas. Це допоможе дискретизувати значення в сегменти однакового розміру на основі або на основі квантилів вибірки.

# 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 для читання записів із таблиці Keyspace. У деяких випадках використання ML вам може знадобитися кілька разів прочитати одні й ті самі дані з однієї таблиці Keyspaces. У цьому випадку ми рекомендуємо вам зберегти ваші дані у відро Amazon S3, щоб уникнути додаткових витрат коштуватичитання з Amazon Keyspaces. Залежно від вашого сценарію, ви також можете використовувати Amazon EMR до приймати всередину дуже великий файл Amazon S3 в 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())

Далі ми навчаємо ML-модель за допомогою алгоритму KMeans і переконаємося, що кластери створені. У цьому конкретному сценарії ви побачите, що створені кластери друкуються, що показує, що клієнти в набір необроблених даних були згруповані разом на основі різних атрибутів у наборі даних. Цю інформацію про кластер можна використовувати для цільових маркетингових кампаній.

# 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);

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

(Необов’язково) Далі ми зберігаємо сегменти клієнтів, які були визначені моделлю ML, назад у таблицю Amazon Keyspaces для цільового маркетингу. Пакетне завдання може зчитувати ці дані та запускати цільові кампанії для клієнтів у певних сегментах.

# 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 )

Для завершення видалення простору ключів і таблиць може знадобитися від кількох секунд до хвилини. Коли ви видаляєте простір ключів, простір ключів і всі його таблиці видаляються, і ви припиняєте нараховувати з них витрати.

Висновок

Ця публікація показала вам, як отримати дані про клієнтів із Amazon Keyspaces в SageMaker та навчити модель кластеризації, яка дозволила б сегментувати клієнтів. Ви можете використовувати цю інформацію для цільового маркетингу, таким чином значно покращуючи KPI свого бізнесу. Щоб дізнатися більше про Amazon Keyspaces, перегляньте такі ресурси:


Про авторів

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Вадим Ляхович є старшим архітектором рішень в AWS в районі затоки Сан-Франциско, який допомагає клієнтам перейти на AWS. Він співпрацює з організаціями, починаючи від великих підприємств і закінчуючи невеликими стартапами, щоб підтримати їхні інновації. Він також допомагає клієнтам розробляти масштабовані, безпечні та економічно ефективні рішення на AWS.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Парт Патель є архітектором рішень в AWS в районі затоки Сан-Франциско. Parth допомагає клієнтам прискорити свій шлях до хмари та допомогти їм успішно запровадити хмару AWS. Він зосереджується на ML та модернізації додатків.

Навчіть моделі машинного навчання за допомогою Amazon Keyspaces як джерела даних PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Рам Патангі є архітектором рішень в AWS в районі затоки Сан-Франциско. Він допомагав клієнтам у сферах сільського господарства, страхування, банківської справи, роздрібної торгівлі, охорони здоров’я та природничих наук, гостинності та високих технологій успішно вести свій бізнес у хмарі AWS. Він спеціалізується на базах даних, аналітиці та ML.

Часова мітка:

Більше від AWS Машинне навчання