شروع کار با BigQuery ML

1. بررسی اجمالی

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

چیزی که خواهی ساخت

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

چیزی که یاد خواهید گرفت

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

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

2. راه اندازی و الزامات

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

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

  1. در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورت‌حساب را در Cloud Console فعال کنید .

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

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

در Google Developer Console، روی نماد منو در سمت چپ بالای صفحه کلیک کنید.

select-bq_0.png

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

select-bq.png

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

8b0218390329e8cf.png

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

3. یک مجموعه داده ایجاد کنید

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

4f51bf57291a59db.png

در مرحله بعد، مجموعه داده خود را bqml_codelab نامگذاری کنید و روی ok کلیک کنید.

63e32478a5652fbc.png

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

رگرسیون لجستیک برای Analytics 360

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

#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 چیزی است که ما سعی می کنیم با آن تطبیق دهیم. توجه داشته باشید که اگر فقط به 1 ستون علاقه دارید، این یک راه جایگزین برای تنظیم input_label_cols است. ما همچنین داده‌های آموزشی خود را به اطلاعات جمع‌آوری‌شده از ۱ اوت ۲۰۱۶ تا ۳۱ ژوئن ۲۰۱۷ محدود می‌کنیم. ما این کار را انجام می‌دهیم تا آخرین ماه داده‌ها را برای «پیش‌بینی» ذخیره کنیم. علاوه بر این، ما به 100000 نقطه داده محدود می کنیم تا در زمان خود صرفه جویی کنیم. اگر عجله ندارید خط آخر را بردارید.

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

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

اگر علاقه مند هستید، می توانید با کلیک بر روی sample_model زیر مجموعه داده bqml_codelab در UI، اطلاعاتی در مورد مدل دریافت کنید. در قسمت جزئیات ، باید برخی از اطلاعات اولیه مدل و گزینه های آموزشی مورد استفاده برای تولید مدل را بیابید. در بخش آمار آموزش ، باید جدولی مشابه این ببینید:

b8bd9548a0d89165.png

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

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

#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 . اگر با مدل رگرسیون لجستیک aa استفاده شود، کوئری بالا ستون های زیر را برمی گرداند: precision ، recall ، accuracy ، f1_score ، log_loss ، roc_auc . لطفاً برای درک نحوه محاسبه هر یک از این معیارها و معنای آنها، به واژه نامه یادگیری ماشین مراجعه کنید یا جستجوی Google را انجام دهید.

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

1c7779f6028730cc.png

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

پیش بینی خرید در هر کشور

در اینجا سعی می کنیم تعداد تراکنش های انجام شده توسط بازدیدکنندگان هر کشور را پیش بینی کنیم، نتایج را مرتب کنیم و 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

7. تبریک می گویم!

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

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

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

مراحل بعدی

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