۱. مرور کلی
BigQuery ML (BQML) کاربران را قادر میسازد تا با استفاده از کوئریهای SQL، مدلهای یادگیری ماشین را در BigQuery ایجاد و اجرا کنند. هدف، دموکراتیزه کردن یادگیری ماشین با قادر ساختن متخصصان SQL برای ساخت مدلها با استفاده از ابزارهای موجود و افزایش سرعت توسعه با حذف نیاز به جابجایی دادهها است.
آنچه خواهید ساخت
شما از مجموعه داده نمونه Analytics 360 برای ایجاد مدلی استفاده خواهید کرد که پیشبینی میکند آیا یک بازدیدکننده تراکنشی انجام خواهد داد یا خیر.
آنچه یاد خواهید گرفت
نحوه ایجاد، ارزیابی و استفاده از مدلهای یادگیری ماشین در BigQuery
آنچه نیاز دارید
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد Cloud Console شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب Gmail یا Google Workspace ندارید، باید یکی ایجاد کنید .



شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژههای Google Cloud (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً در این آزمایشگاه کد به آن PROJECT_ID گفته خواهد شد.
- در مرحله بعد، برای استفاده از منابع گوگل کلود، باید پرداخت را در Cloud Console فعال کنید .
اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، نباید هزینه زیادی داشته باشد. حتماً دستورالعملهای بخش «پاکسازی» را که به شما نحوه خاموش کردن منابع را آموزش میدهد، دنبال کنید تا پس از این آموزش، متحمل هزینه نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
کنسول BigQuery را باز کنید
در کنسول توسعهدهندگان گوگل، روی آیکون منو در سمت چپ بالای صفحه کلیک کنید.

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

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

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

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

۴. یک مدل ایجاد کنید
رگرسیون لجستیک برای آنالیتیکس ۳۶۰
حالا، بیایید به سراغ وظیفه خودمان برویم. در اینجا نحوه ایجاد مدلی برای پیشبینی اینکه آیا یک بازدیدکننده تراکنشی انجام خواهد داد یا خیر، آورده شده است.
#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 ، باید جدولی مشابه این را ببینید:

۵. مدل را ارزیابی کنید
مدل ما را ارزیابی کنید
#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 را فراخوانی میکنیم. باید جدولی مشابه این را ببینید:

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

پیشبینی خرید به ازای هر کاربر
یک مثال دیگر. این بار سعی میکنیم تعداد تراکنشهایی که هر بازدیدکننده انجام میدهد را پیشبینی کنیم، نتایج را مرتب کنیم و 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;
شما باید جدولی مشابه این را ببینید:

۷. تبریک میگویم!
کار شما با این آزمایشگاه کد تمام شد. دنبال یک چالش هستید؟ سعی کنید یک مدل رگرسیون خطی با BQML بسازید.
آنچه ما پوشش دادهایم
- ایجاد یک مدل رگرسیون لجستیک دودویی
- مدل را ارزیابی کنید
- استفاده از مدل برای پیشبینی
مراحل بعدی
- برای اطلاعات بیشتر در مورد BQML، لطفاً به مستندات مراجعه کنید.