رگرسیون خطی و لجستیک مدلهای یادگیری ماشینی هستند که به شما امکان میدهند پیشبینیهای معناداری را از دادههای تبلیغاتی ایجاد کنید.
- رگرسیون خطی تابعی را ایجاد می کند تا یک خط را به داده ها برازش دهد به طوری که فاصله بین نقاط داده و خط به حداقل برسد. سپس می توان از این مدل برای پیش بینی یک مقدار عددی بر اساس ورودی ها استفاده کرد، مانند پیش بینی ارزش طول عمر کاربر بر اساس خریدها، تعاملات قبلی و غیره.
- رگرسیون لجستیک برای مسائل طبقه بندی پیش بینی استفاده می شود. بسته به تعداد متغیرهایی که ارائه می کنید، مدل می تواند یکی از دو نوع باشد:
- رگرسیون لجستیک باینری به سوالات "بله/خیر" پاسخ می دهد، مانند اینکه چقدر احتمال دارد یک رویداد تبدیل رخ دهد.
- رگرسیون لجستیک چند طبقه ای برای پیش بینی چندین مقدار ممکن استفاده می شود، مانند تعیین اینکه آیا مشتری "کم ارزش"، "متوسط ارزش" یا "با ارزش" است.
رگرسیون خطی و لجستیک هر دو از دادههای آموزشی یاد میگیرند (در این مورد، دادههای تبلیغاتی شما) و به شما یک مدل پیشبینی برای تصمیمگیری تبلیغات میدهند. به طور کلی، ارائه داده های بیشتر و اطمینان از کیفیت بالای داده های ارائه شده، دقت مدل شما را بهبود می بخشد. هر دو مدل زمانی که داده های آموزشی کاملاً خوشه ای داده می شوند، عملکرد بهتری دارند.
حریم خصوصی متفاوت
رگرسیون خطی و لجستیک هر دو از حریم خصوصی تفاضلی استفاده می کنند، که سیستمی متفاوت از بررسی حریم خصوصی نسبت به سایر عملیات ها در Ads Data Hub است. حریم خصوصی دیفرانسیل با تزریق نویز به نتایج شما در طول فرآیند آموزش، حریم خصوصی کاربر نهایی را تضمین می کند. این سطح از نویز به قدری کم می ماند که نتایج نهایی همچنان مفید هستند، اما به اندازه ای بالاست که کاربران نهایی را نمی توان شناسایی کرد. علاوه بر این، سطح نویز غیر قطعی است، به طوری که نتایج دارای سطح ناهماهنگی از نویز هستند که بیشتر از حفظ حریم خصوصی کاربر نهایی اطمینان حاصل می کند.
محدودیت پرس و جو
وقتی از EPSILON_PER_MODEL
پیشفرض استفاده میکنید، به 100 عبارت مدلسازی رگرسیون لجستیک در «روز داده» محدود میشوید. روز داده به رویدادهای ایجاد شده در یک روز معین اشاره دارد. این رویدادها با تاریخهای شروع و پایانی که هنگام اجرای پرس و جو ارائه میدهید، و تاریخهای شروع و پایانی که هنگام ایجاد هر جدولی که درخواست شما استفاده میکند، مطابقت دارد - مانند جداول موقتی که برای آموزش استفاده میشود. این بدان معنی است که داده های 1 روزه را نمی توان در بیش از 100 مدل استفاده کرد. اگر مقدار EPSILON_PER_MODEL را بیشتر از مقدار پیشفرض تعیین کنید، میتوانید مدلهای کمتری ایجاد کنید، اما کیفیت بالاتری خواهند داشت. و اگر مقادیر کمتری از EPSILON_PER_MODEL انتخاب کنید، میتوانید مدلهای بیشتری را آموزش دهید، اما کیفیت پایینتری خواهند داشت.
چگونه کار می کند
گردش کار این مراحل ضروری را دنبال می کند:
- داده های آموزشی را آماده کنید.
- یک مدل ایجاد کنید.
- بینش را از مدل جمع آوری کنید.
داده های آموزشی را آماده کنید
همانطور که در بالا ذکر شد، استفاده از مجموعه داده های بزرگتر و با کیفیت به طور کلی به نتایج بهتری منجر می شود. علاوه بر این، از آنجایی که دادههای ورودی با استفاده از مقیاسبندی حداقل-حداکثر مقیاسبندی میشوند، دادههای خوشهای پراکنده یا دادههایی با نقاط پرت قابل توجه میتوانند با جابجایی میانگین بر مدل تأثیر منفی بگذارند.
به طور پیش فرض، Ads Data Hub به طور تصادفی 18 درصد از داده های آموزشی شما را برای اعتبار سنجی انتخاب می کند. درصد داده های مورد استفاده برای اعتبارسنجی را می توان با گزینه data_split_eval_fraction
کنترل کرد.
یک مدل ایجاد کنید
پارامترها و داده های ورودی را برای آموزش مدل خود مشخص کنید.
بهترین شیوه ها
یکی از عوامل مهم در کیفیت یک مدل، اندازه مجموعه آموزشی است. با این حال، بسته به مشکل و عواملی که در زیر ذکر شده است، معاوضه اندازه/کیفیت متفاوت خواهد بود. لطفا تجربه خود را با ما در میان بگذارید.
- ما دقت > 0.70 را برای مدل های رگرسیون لجستیک ساخته شده از مجموعه های آموزشی با حداقل 100000 کاربر دیده ایم.
- R-squared > 0.70 را برای مدل های رگرسیون خطی ساخته شده از مجموعه های آموزشی با حداقل 800000 کاربر دیده ایم.
عوامل دیگری نیز وجود دارد که می تواند کیفیت یک مدل را کاهش دهد.
- مدلهای لجستیکی که در آن یک طبقه بسیار بیشتر از سایرین ارائه شده است. به طور خاص، وقتی یک برچسب تعداد کمی از کاربران مجموعه آموزشی دارد، احتمالاً داشتن تعداد زیادی از کاربران مجموعه آموزشی با برچسب های دیگر کمک زیادی به دقت مدل روی برچسب کوچک نخواهد کرد. به عنوان مثال، 20000 و 1000 کاربر مجموعه آموزشی برای دو برچسب بدتر از 10000 و 2000 است.
- دادههای ویژهای که سیگنال قوی برای برچسبها ارائه نمیکنند.
- داده های خام که به مهندسی ویژگی های گسترده تری نیاز دارند. به عنوان مثال، برخی از فیلدها ممکن است تعداد بسیار زیادی از مقادیر ممکن را داشته باشند. یکی از راههای بهبود این نوع دادهها، تبدیل مقادیر به یک ویژگی با تعداد دستهها یا سطلهای کمتر است.
جمع آوری بینش
میتوانید برای ارزیابی عملکرد مدل خود در دادههای اعتبارسنجی، ویژگیها و اطلاعات مربوط به تکرارهای آموزشی (مانند وزنهای زیربنایی که توسط یک مدل در طول پیشبینی استفاده میشود)، و پیشبینی دادههای دیده نشده، توابع را فراخوانی کنید.
عبارت CREATE MODEL
دستور CREATE MODEL
یک مدل با نام و مجموعه داده ای که شما مشخص می کنید ایجاد می کند. اگر نام مدل از قبل وجود داشته باشد، CREATE MODEL
جایگزین مدل موجود می شود.
CREATE MODEL syntax
CREATE MODEL
model_name
OPTIONS
(
// model_option_list:
// Required parameter.
MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}
// Optional tuning parameters.
[, L1_REG = float64_value ]
[, L2_REG = float64_value ]
[, DATA_SPLIT_EVAL_FRACTION = float64_value ]
[, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
'NORMAL_EQUATION' } ]
[, MAX_ITERATIONS = int64_value ]
[, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
[, LEARN_RATE = float64_value ]
[, EARLY_STOP = { TRUE | FALSE } ]
[, MIN_REL_PROGRESS = float64_value ]
[, LS_INIT_LEARN_RATE = float64_value ]
[, EPSILON_PER_MODEL = float64_value ]
[, AUTOMATIC_IMPUT_SCALING = bool_value ]
[, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
[, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
[, QUANTILE_BUCKETIZED_COLS = [
STRUCT(string_value AS col_name, int64_value AS num_buckets),
STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement
مدل_نام
یک نام الفبایی، شامل زیرخط و خط تیره. نمی تواند شامل نقطه باشد. اگر نام مدلی که ارائه میکنید از قبل وجود داشته باشد، مدل قدیمیتر بازنویسی میشود.
query_statement
پرس و جوی استاندارد SQL را مشخص می کند که برای تولید داده های آموزشی استفاده می شود. اگر چندین مدل را با استفاده از داده های آموزشی مشابه ایجاد می کنید، یک جدول موقت با داده های آموزشی ایجاد کنید و به آن در اینجا مراجعه کنید. این تاکتیک از خطاهای احتمالی بررسی اختلاف به دلیل پاک کردن یا تاخیر در هرزنامه جلوگیری می کند.
model_option_list
مدل_نوع
(الزامی) تنها گزینه مورد نیاز. می تواند " adh_linear_regression
" یا " adh_logistic_regression
" باشد
l1_reg
(اختیاری) مقدار تنظیم L1 اعمال شده. تنظیم L1 وزن ها را متناسب با مجموع مقادیر مطلق وزن ها جریمه می کند. ممکن است هر عدد غیر منفی باشد، پیش فرض صفر است.
l2_reg
(اختیاری) مقدار تنظیم L2 اعمال شده. منظمسازی L2 وزنها را متناسب با جذر مجموع مجذورات اوزان جریمه میکند. ممکن است هر عدد غیر منفی باشد، پیش فرض صفر است.
data_split_eval_fraction
(اختیاری) باید بین 0.01 و 0.99 باشد که پیشفرض آن 0.18 است. کسری از داده ها را که به مجموعه ارزیابی ختم می شود را تعیین می کند. این امر با کاهش تعداد ردیفهایی که به مدل ختم میشوند بر دقت مدل تأثیر میگذارد، اما همچنین تعداد مدلهایی را که کاربر میتواند اجرا کند افزایش میدهد. در اینجا نموداری از این رابطه وجود دارد که فرض کنیم هر مدل در یک مجموعه داده معین دارای کسر یکسان است:
کسر اعتبار سنجی | پرس و جوهای مجاز |
---|---|
0.01 | 7 |
0.1 | 8 |
0.15 | 8 |
0.18 | 9 |
0.2 | 9 |
0.3 | 10 |
0.5 | 14 |
0.9 | 50 |
بهینه سازی_استراتژی
(اختیاری) استراتژی آموزش مدل های رگرسیون خطی.
استدلال ها
" AUTO_STRATEGY
" استراتژی آموزشی را به صورت زیر تعیین می کند:
- اگر
l1_reg
یاwarm_start
مشخص شده باشد، از استراتژیbatch_gradient_descent
استفاده می شود. - اگر تعداد کل ویژگی های آموزشی بیش از 10000 باشد، از استراتژی
batch_gradient_descent
استفاده می شود. - اگر مشکلی بیش از حد برازش وجود داشته باشد (تعداد نمونههای آموزشی کمتر از 10 نمونه است)، استراتژی
batch_gradient_descent
استفاده میشود. - استراتژی
NORMAL_EQUATION
برای همه موارد دیگر استفاده می شود.
' BATCH_GRADIENT_DESCENT
' (فقط لجستیک) مدل را با استفاده از روش شیب نزولی دسته ای آموزش می دهد، که تابع تلفات را با استفاده از تابع گرادیان بهینه می کند.
' NORMAL_EQUATION
' (فقط خطی) به طور مستقیم حداقل مربعات مسئله رگرسیون خطی را با فرمول تحلیلی محاسبه می کند. معادله نرمال را نمی توان در موارد زیر استفاده کرد:
-
l1_reg
مشخص شده است. -
warm_start
مشخص شده است. - مجموع ویژگی های آموزشی بیش از 10000 است.
- مقدار پیشفرض «
AUTO_STRATEGY
» است.
max_iterations
(اختیاری) تعداد تکرارها یا مراحل آموزشی. از آنجایی که این پرس و جو برای هر تکرار یک درخت می سازد، این تعداد درخت نیز می باشد. باید یک عدد صحیح بزرگتر از 1 باشد. پیش فرض 20 باشد.
نرخ_استراتژی یادگیری
(اختیاری، فقط لجستیک) استراتژی برای تعیین میزان یادگیری در طول آموزش.
استدلال ها
' LINE_SEARCH
' از روش جستجوی خط برای محاسبه نرخ یادگیری استفاده می کند. نرخ یادگیری اولیه جستجوی خط مقدار مشخص شده برای LS_INIT_LEARN_RATE
است.
- جستجوی خط سرعت آموزش را کاهش میدهد و تعداد بایتهای پردازش شده را افزایش میدهد، اما به طور کلی حتی با نرخ یادگیری مشخص شده اولیه بیشتر همگرا میشود.
' CONSTANT
' نرخ یادگیری را روی مقدار مشخص شده برای LEARN_RATE
تنظیم می کند.
مقدار پیشفرض " LINE_SEARCH
" است.
نرخ_آموزش
(اختیاری، فقط تدارکات) نرخ یادگیری برای نزول گرادیان زمانی که LEARN_RATE_STRATEGY
روی CONSTANT
تنظیم شده است. اگر LEARN_RATE_STRATEGY
روی " LINE_SEARCH
" تنظیم شود، یک خطا برگردانده می شود.
استدلال ها
float64_value
می تواند هر عدد ممیز شناور 64 بیتی باشد. پیشفرض 0.1 (10%).
زود_توقف
(اختیاری) آیا آموزش باید پس از اولین تکرار متوقف شود که در آن بهبود نسبی ضرر کمتر از مقدار مشخص شده برای MIN_REL_PROGRESS
باشد.
استدلال ها
TRUE
برای "بله"، FALSE
برای "نه". پیشفرض به TRUE
میرسد.
min_rel_progress
(اختیاری) حداقل بهبود زیان نسبی که برای ادامه آموزش در زمانی که EARLY_STOP
روی true تنظیم شده است ضروری است. به عنوان مثال، مقدار 0.01 مشخص می کند که هر تکرار باید 1% از دست دادن را کاهش دهد تا آموزش ادامه یابد.
استدلال ها
float64_value
می تواند هر عدد ممیز شناور 64 بیتی باشد. پیشفرض 0.1 (10%).
ls_init_learn_rate
(اختیاری) نرخ یادگیری اولیه را که LEARN_RATE_STRATEGY='LINE_SEARCH'
استفاده می کند، تنظیم می کند. این گزینه فقط در صورتی قابل استفاده است که LINE_SEARCH
مشخص شده باشد.
اگر به نظر میرسد LEARN_RATE
مدل هر تکرار را دو برابر میکند، همانطور که ML.TRAINING_INFO
نشان میدهد، سعی کنید LS_INIT_LEARN_RATE
روی آخرین نرخ یادگیری دو برابر شده تنظیم کنید. نرخ یادگیری اولیه بهینه برای هر مدل متفاوت است. نرخ یادگیری اولیه خوب برای یک مدل ممکن است نرخ یادگیری اولیه خوبی برای مدل دیگر نباشد.
استدلال ها
float64_value
می تواند هر عدد ممیز شناور 64 بیتی باشد.
epsilon_per_model
(اختیاری) میزان بودجه حفظ حریم خصوصی مورد استفاده برای آموزش این مدل را مشخص می کند. به هر مشتری داده تبلیغات، بودجه حفظ حریم خصوصی 10.0 در روز داده تعلق می گیرد. یک مدل با موفقیت آموزش دیده، EPSILON_PER_MODEL از بودجه را برای هر روز داده در محدوده تاریخی مشخص شده هنگام اجرای پرس و جو خرج می کند. استفاده از مقدار پیش فرض ln(3)/10 امکان ایجاد حدود 100 مدل را فراهم می کند. اگر از مقدار بالاتری استفاده کنید، می توانید مدل های کمتری ایجاد کنید، اما کیفیت بالاتری خواهند داشت. اگر از مقدار کمتری استفاده کنید، میتوانید مدلهای بیشتری با کیفیت پایینتر ایجاد کنید.
استدلال ها
float64_value
می تواند هر عدد نقطه شناور مثبت 64 بیتی کمتر از ln(3) باشد که حدود 1.0986 است. پیشفرض ln(3)/10 است.
مقیاس_ورودی_خودکار
(اختیاری) وقتی TRUE
، همه ستونهای ویژگی عددی بهطور خودکار دارای min_max_scaling
اعمال میشوند، گویی که نام ستونها به صراحت در گزینه min_max_scaled_cols
فراخوانی شدهاند، به استثنای ستونهایی که صراحتاً در گزینههای standard_scaled_cols
یا quantile_bucketized_cols
فراخوانی شدهاند.
استدلال ها
bool_value
یک BOOL
است، مقدار پیشفرض TRUE
است.
min_max_scaled_cols
(اختیاری) هر یک از ستون های مشخصه numerical_expression را در محدوده 0 تا 1 مقیاس بندی می کند که با MIN
و MAX
در تمام ردیف ها محدود می شود. همان MIN
و MAX
به طور خودکار در پیش بینی استفاده می شود. اگر دادههای پیشبینی خارج از محدوده MIN
، MAX
باشد، به 0 یا 1 محدود میشود.
استدلال ها
آرایه string_value
، که در آن هر string_value
یک STRING است که نشان دهنده نام ستونی است که باید تبدیل شود.
standard_scaled_cols
(اختیاری) ستون های مشخصه numerical_expression
را در تمام ردیف ها استاندارد می کند. STDDEV
و MEAN
محاسبه شده برای استاندارد کردن عبارت به طور خودکار در پیش بینی استفاده می شوند.
استدلال ها
آرایه string_value
، که در آن هر string_value
یک STRING
است که نشان دهنده نام ستونی است که باید تبدیل شود.
quantile_bucketized_cols
ستونهای مشخصه عددی پیوسته مشخص شده را در یک STRING
با نام سطل بهعنوان مقدار بر اساس چندک سطل میکند. از همان چندک ها به طور خودکار در پیش بینی استفاده می شود.
استدلال ها
آرایه ای از STRUCT(string_value AS col_name, int64_value AS num_buckets)
، که در آن هر string_value یک STRING
است که نشان دهنده نام ستون عددی پیوسته است که باید تبدیل شود و هر int64_value
تعداد سطل هایی است که مقادیر عددی را به آنها تقسیم می کنند.
اعتبار سنجی
- هر روز داده در محدوده تاریخ مشخص شده برای این عبارت باید دارای بودجه حریم خصوصی کافی باشد، یعنی بیش از EPSILON_PER_MODEL، در غیر این صورت پرس و جو ناموفق خواهد بود.
- پارامترهای تنظیم اختیاری، در صورت مشخص شدن، برای محدوده های نشان داده شده در بالا تأیید می شوند.
- فقط یک پارامتر model_type مورد نیاز باید به صراحت مشخص شود.
- یک ستون در مجموعه آموزشی باید "برچسب" نامیده شود. چندین برچسب در حال حاضر پشتیبانی نمی شوند.
- ستون برچسب نمی تواند حاوی مقادیر NULL باشد. اگر ستون برچسب حاوی مقادیر NULL باشد، پرس و جو با شکست مواجه می شود.
- هیچ یک از ستون های ویژگی ممکن است از user_id مشتق نشده باشد.
- هر ردیف باید دقیقاً یک کاربر منحصر به فرد را نشان دهد. یک ردیف نمی تواند داده های بیش از یک کاربر را نشان دهد. این می تواند با اتصالات خاصی اتفاق بیفتد، به عنوان مثال یک اتصال متقاطع.
- هیچ کاربری نمی تواند در دو ردیف مجزا باشد.
- به دلایل حفظ حریم خصوصی، فقط گزینه های توضیح داده شده در بخش نحو قابل استفاده هستند. گزینه های دیگری که ممکن است در مستندات درخواست BQML CREATE MODEL یافت شوند در حال حاضر پشتیبانی نمی شوند.
توابع ارزیابی
ML.EVALUATE
برای ارزیابی معیارهای مدل از تابع ML.EVALUATE
استفاده کنید. تابع ML.EVALUATE
را می توان با مدل های رگرسیون خطی یا رگرسیون لجستیک استفاده کرد.
SELECT
*
FROM ML.EVALUATE(MODEL `linear_model_test`);
ML.ROC_CURVE
از تابع ML.ROC_CURVE
برای ارزیابی معیارهای رگرسیون لجستیک خاص استفاده کنید. ML.ROC_CURVE
فقط مدل های رگرسیون لجستیک را ارزیابی می کند.
SELECT
*
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);
توابع پیش بینی
ML.PREDICT
تابع ML.PREDICT
می تواند برای پیش بینی نتایج با استفاده از مدل استفاده شود. نتایج بهدستآمده با استفاده از ML.PREDICT
مانند سایر نتایج در Ads Data Hub مشمول بررسی حریم خصوصی میشوند. درباره بررسی حریم خصوصی بیشتر بدانید
رگرسیون خطی
/* This example outputs the average value for labels that the model predicted */
SELECT
AVG(predicted_label) AS average_predicted_label
FROM
ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);
رگرسیون لجستیک
/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
label,
predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
COUNT(*) AS num /* a tally of users */
FROM
ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;
توابع بازرسی مدل و ویژگی
ML.TRAINING_INFO
تابع ML.TRAINING_INFO
به شما امکان می دهد اطلاعاتی در مورد تکرارهای آموزشی یک مدل ببینید.
SELECT
*
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);
ML.FEATURE_INFO
تابع ML.FEATURE_INFO
به شما امکان می دهد اطلاعات مربوط به ویژگی های ورودی مورد استفاده برای آموزش یک مدل را مشاهده کنید
SELECT
*
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);
ML.WEIGHTS
تابع ML.WEIGHTS
به شما امکان میدهد وزنهای زیربنایی مورد استفاده یک مدل را در طول پیشبینی ببینید.
SELECT
*
FROM ML.WEIGHTS(MODEL `linear_model_test`);
نمونه ها
ایجاد مدل
نمونههای زیر همگی از جدول نمونه natality
برای نشان دادن نحوه ایجاد یک مدل استفاده میکنند.
داده های آموزشی در انتخاب داخلی (خطی)
مثال زیر از وزن هنگام تولد، جنسیت، هفتههای بارداری، سن مادر و نژاد مادر برای پیشبینی وزن تولد کودک استفاده میکند.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_linear_regression') AS
SELECT
weight_pounds as label,
is_male,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
داده های آموزشی در انتخاب داخلی (لجستیک)
مثال زیر از وزن تولد، جنسیت، هفته های بارداری، سن مادر و نژاد مادر برای پیش بینی جنسیت کودک استفاده می کند.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_logistic_regression') AS
SELECT
weight_pounds,
is_male as label,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
فعال سازی مخاطب
شما می توانید با استفاده از یک مدل رگرسیون خطی موجود - با وزن های شناخته شده - بدون استفاده از ML.PREDICT
، حتی بدون دسترسی به خود مدل، پیش بینی کنید. برای یادگیری نحوه انجام، به مدلسازی رگرسیون برای کد فعالسازی مخاطب مراجعه کنید.