1. بررسی اجمالی
BigQuery ML (BQML) کاربران را قادر می سازد تا با استفاده از پرس و جوهای SQL مدل های یادگیری ماشین را در BigQuery ایجاد و اجرا کنند. هدف، دموکراتیک کردن یادگیری ماشین از طریق فعال کردن متخصصان SQL برای ساخت مدلها با استفاده از ابزارهای موجود و افزایش سرعت توسعه با حذف نیاز به انتقال داده است.
چیزی که خواهی ساخت
شما از نمونه مجموعه داده Analytics 360 برای ایجاد مدلی استفاده خواهید کرد که پیش بینی می کند بازدیدکننده تراکنش انجام دهد یا خیر.
چیزی که یاد خواهید گرفت
نحوه ایجاد، ارزیابی و استفاده از مدل های یادگیری ماشین در BigQuery
آنچه شما نیاز دارید
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
کنسول BigQuery را باز کنید
در Google Developer Console، روی نماد منو در سمت چپ بالای صفحه کلیک کنید.
منو به پایین اسکرول کنید و روی BigQuery کلیک کنید:
با این کار کنسول BigQuery در یک برگه مرورگر جدید باز می شود که به شکل زیر است:
اما، اینجا چیزی نیست! خوشبختانه، هزاران مجموعه داده عمومی در BigQuery وجود دارد که میتوانید آنها را کاوش کنید.
3. یک مجموعه داده ایجاد کنید
برای ایجاد یک مجموعه داده، روی فلش کنار نام پروژه خود کلیک کرده و ایجاد مجموعه داده جدید را انتخاب کنید.
در مرحله بعد، مجموعه داده خود را bqml_codelab نامگذاری کنید و روی ok کلیک کنید.
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، اطلاعاتی در مورد مدل دریافت کنید. در قسمت جزئیات ، باید برخی از اطلاعات اولیه مدل و گزینه های آموزشی مورد استفاده برای تولید مدل را بیابید. در بخش آمار آموزش ، باید جدولی مشابه این ببینید:
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
صدا می زنیم. شما باید جدولی شبیه به این ببینید:
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 نتیجه برتر را دریافت میکنیم. شما باید جدولی شبیه به این ببینید:
پیش بینی خرید برای هر کاربر
در اینجا یک مثال دیگر وجود دارد. این بار سعی می کنیم تعداد تراکنش هایی که هر بازدیدکننده انجام می دهد را پیش بینی کنیم، نتایج را مرتب کنیم و 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;
شما باید جدولی شبیه به این ببینید:
7. تبریک می گویم!
کار شما با این کد لبه تمام شده است. به دنبال چالش هستید؟ سعی کنید یک مدل رگرسیون خطی با BQML ایجاد کنید.
آنچه را پوشش داده ایم
- یک مدل رگرسیون لجستیک باینری ایجاد کنید
- مدل را ارزیابی کنید
- از مدل برای پیش بینی استفاده کنید
مراحل بعدی
- برای اطلاعات بیشتر در مورد BQML، لطفاً به مستندات مراجعه کنید.