شروع کار با BigQuery ML

۱. مرور کلی

BigQuery ML (BQML) کاربران را قادر می‌سازد تا با استفاده از کوئری‌های SQL، مدل‌های یادگیری ماشین را در BigQuery ایجاد و اجرا کنند. هدف، دموکراتیزه کردن یادگیری ماشین با قادر ساختن متخصصان SQL برای ساخت مدل‌ها با استفاده از ابزارهای موجود و افزایش سرعت توسعه با حذف نیاز به جابجایی داده‌ها است.

آنچه خواهید ساخت

شما از مجموعه داده نمونه Analytics 360 برای ایجاد مدلی استفاده خواهید کرد که پیش‌بینی می‌کند آیا یک بازدیدکننده تراکنشی انجام خواهد داد یا خیر.

آنچه یاد خواهید گرفت

نحوه ایجاد، ارزیابی و استفاده از مدل‌های یادگیری ماشین در BigQuery

آنچه نیاز دارید

۲. تنظیمات و الزامات

تنظیم محیط خودتنظیم

  1. وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب Gmail یا Google Workspace ندارید، باید یکی ایجاد کنید .

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه‌های Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.

  1. در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .

اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعمل‌های بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش می‌دهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

کنسول BigQuery را باز کنید

در کنسول توسعه‌دهندگان گوگل، روی آیکون منو در سمت چپ بالای صفحه کلیک کنید.

انتخاب-bq_0.png

از منو به پایین اسکرول کنید و روی BigQuery کلیک کنید:

انتخاب-bq.png

این کار کنسول BigQuery را در یک تب جدید مرورگر باز می‌کند که به شکل زیر است:

8b0218390329e8cf.png

اما اینجا چیزی وجود ندارد! خوشبختانه، کلی مجموعه داده عمومی در BigQuery موجود است که می‌توانید آنها را بررسی کنید.

۳. ایجاد یک مجموعه داده

برای ایجاد یک مجموعه داده، روی فلش کنار نام پروژه خود کلیک کنید و گزینه create new dataset را انتخاب کنید.

4f51bf57291a59db.png

در مرحله بعد، نام مجموعه داده خود را bqml_codelab قرار دهید و روی تأیید کلیک کنید.

63e32478a5652fbc.png

۴. یک مدل ایجاد کنید

رگرسیون لجستیک برای آنالیتیکس ۳۶۰

حالا، بیایید به سراغ وظیفه خودمان برویم. در اینجا نحوه ایجاد مدلی برای پیش‌بینی اینکه آیا یک بازدیدکننده تراکنشی انجام خواهد داد یا خیر، آورده شده است.

#standardSQL
CREATE OR REPLACE MODEL `bqml_codelab.sample_model` 
OPTIONS(model_type='logistic_reg') AS
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20160801' AND '20170631'
LIMIT 100000;

در اینجا، ما از سیستم عامل دستگاه بازدیدکننده، اینکه آیا دستگاه مورد نظر یک دستگاه تلفن همراه است، کشور بازدیدکننده و تعداد بازدیدهای صفحه به عنوان معیارهای انجام تراکنش استفاده می‌کنیم.

در این مورد، "codelab" نام مجموعه داده و "sample_model" نام مدل ما است. نوع مدل مشخص شده، رگرسیون لجستیک دودویی است. در این مورد، label چیزی است که ما سعی داریم آن را برازش دهیم. توجه داشته باشید که اگر فقط به ۱ ستون علاقه‌مند هستید، این یک روش جایگزین برای تنظیم input_label_cols است. ما همچنین داده‌های آموزشی خود را به داده‌های جمع‌آوری‌شده از ۱ آگوست ۲۰۱۶ تا ۳۱ ژوئن ۲۰۱۷ محدود می‌کنیم. ما این کار را برای ذخیره داده‌های ماه گذشته برای "پیش‌بینی" انجام می‌دهیم. علاوه بر این، ما برای صرفه‌جویی در زمان، تعداد نقاط داده را به ۱۰۰۰۰۰ محدود می‌کنیم. اگر عجله ندارید، می‌توانید خط آخر را حذف کنید.

اجرای دستور CREATE MODEL یک Query Job ایجاد می‌کند که به صورت ناهمگام اجرا می‌شود، بنابراین می‌توانید، برای مثال، پنجره BigQuery UI را ببندید یا رفرش کنید.

[اختیاری] اطلاعات مدل و آمار آموزشی

در صورت تمایل، می‌توانید با کلیک بر روی sample_model در زیر مجموعه داده bqml_codelab در رابط کاربری، اطلاعاتی در مورد مدل کسب کنید. در زیر Details ، باید برخی از اطلاعات اولیه مدل و گزینه‌های آموزشی مورد استفاده برای تولید مدل را پیدا کنید. در زیر Training Stats ، باید جدولی مشابه این را ببینید:

b8bd9548a0d89165.png

۵. مدل را ارزیابی کنید

مدل ما را ارزیابی کنید

#standardSQL
SELECT
  *
FROM
  ml.EVALUATE(MODEL `bqml_codelab.sample_model`, (
SELECT
  IF(totals.transactions IS NULL, 0, 1) AS label,
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(geoNetwork.country, "") AS country,
  IFNULL(totals.pageviews, 0) AS pageviews
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'));

اگر از پرس‌وجوی بالا با یک مدل رگرسیون خطی استفاده شود، ستون‌های زیر را برمی‌گرداند: mean_absolute_error ، mean_squared_error ، mean_squared_log_error ، median_absolute_error ، r2_score ، explained_variance . اگر از پرس‌وجوی بالا با یک مدل رگرسیون لجستیک استفاده شود، ستون‌های زیر را برمی‌گرداند: precision ، recall ، accuracy ، f1_score ، log_loss ، roc_auc . لطفاً برای درک نحوه محاسبه هر یک از این معیارها و معنای آنها، به واژه‌نامه یادگیری ماشین مراجعه کنید یا در گوگل جستجو کنید.

به طور مشخص، متوجه خواهید شد که بخش‌های SELECT و FROM در پرس‌وجو با بخش‌هایی که در طول آموزش استفاده شده‌اند، یکسان هستند. بخش WHERE نشان‌دهنده تغییر در بازه زمانی است و بخش FROM نشان می‌دهد که ما ml.EVALUATE را فراخوانی می‌کنیم. باید جدولی مشابه این را ببینید:

1c7779f6028730cc.png

۶. از مدل استفاده کنید

پیش‌بینی خریدها به ازای هر کشور

در اینجا سعی می‌کنیم تعداد تراکنش‌های انجام‌شده توسط بازدیدکنندگان هر کشور را پیش‌بینی کنیم، نتایج را مرتب کنیم و 10 کشور برتر را بر اساس خرید انتخاب کنیم.

#standardSQL
SELECT
  country,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY country
ORDER BY total_predicted_purchases DESC
LIMIT 10;

توجه داشته باشید که این پرس‌وجو بسیار شبیه به پرس‌وجوی ارزیابی است که در بخش قبلی نشان دادیم. به جای ml.EVALUATE ، ما در اینجا از ml.PREDICT استفاده می‌کنیم و بخش BQML پرس‌وجو را با دستورات استاندارد SQL پوشش می‌دهیم. به طور مشخص، ما به کشور و مجموع خریدهای هر کشور علاقه‌مند هستیم، بنابراین برای این کار از SELECT ، GROUP BY و ORDER BY استفاده می‌کنیم. در اینجا LIMIT استفاده شده است تا مطمئن شویم که فقط 10 نتیجه برتر را دریافت می‌کنیم. شما باید جدولی مشابه این را ببینید:

e639f7a409741dcb.png

پیش‌بینی خرید به ازای هر کاربر

یک مثال دیگر. این بار سعی می‌کنیم تعداد تراکنش‌هایی که هر بازدیدکننده انجام می‌دهد را پیش‌بینی کنیم، نتایج را مرتب کنیم و 10 بازدیدکننده برتر را بر اساس تراکنش‌ها انتخاب کنیم.

#standardSQL
SELECT
  fullVisitorId,
  SUM(predicted_label) as total_predicted_purchases
FROM
  ml.PREDICT(MODEL `bqml_codelab.sample_model`, (
SELECT
  IFNULL(device.operatingSystem, "") AS os,
  device.isMobile AS is_mobile,
  IFNULL(totals.pageviews, 0) AS pageviews,
  IFNULL(geoNetwork.country, "") AS country,
  fullVisitorId
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20170701' AND '20170801'))
GROUP BY fullVisitorId
ORDER BY total_predicted_purchases DESC
LIMIT 10;

شما باید جدولی مشابه این را ببینید:

2be1d8fa96e10178.png

۷. تبریک می‌گویم!

کار شما با این آزمایشگاه کد تمام شد. دنبال یک چالش هستید؟ سعی کنید یک مدل رگرسیون خطی با BQML بسازید.

آنچه ما پوشش داده‌ایم

  • ایجاد یک مدل رگرسیون لجستیک دودویی
  • مدل را ارزیابی کنید
  • استفاده از مدل برای پیش‌بینی

مراحل بعدی

  • برای اطلاعات بیشتر در مورد BQML، لطفاً به مستندات مراجعه کنید.