مدل سازی رگرسیون در Ads Data Hub

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

  • رگرسیون خطی تابعی را ایجاد می کند تا یک خط را به داده ها برازش دهد به طوری که فاصله بین نقاط داده و خط به حداقل برسد. سپس می توان از این مدل برای پیش بینی یک مقدار عددی بر اساس ورودی ها استفاده کرد، مانند پیش بینی ارزش طول عمر کاربر بر اساس خریدها، تعاملات قبلی و غیره.
  • رگرسیون لجستیک برای مسائل طبقه بندی پیش بینی استفاده می شود. بسته به تعداد متغیرهایی که ارائه می کنید، مدل می تواند یکی از دو نوع باشد:
    • رگرسیون لجستیک باینری به سوالات "بله/خیر" پاسخ می دهد، مانند اینکه چقدر احتمال دارد یک رویداد تبدیل رخ دهد.
    • رگرسیون لجستیک چند طبقه ای برای پیش بینی چندین مقدار ممکن استفاده می شود، مانند تعیین اینکه آیا مشتری "کم ارزش"، "متوسط ​​ارزش" یا "با ارزش" است.

رگرسیون خطی و لجستیک هر دو از داده‌های آموزشی یاد می‌گیرند (در این مورد، داده‌های تبلیغاتی شما) و به شما یک مدل پیش‌بینی برای تصمیم‌گیری تبلیغات می‌دهند. به طور کلی، ارائه داده های بیشتر و اطمینان از کیفیت بالای داده های ارائه شده، دقت مدل شما را بهبود می بخشد. هر دو مدل زمانی که داده های آموزشی کاملاً خوشه ای داده می شوند، عملکرد بهتری دارند.

حریم خصوصی متفاوت

رگرسیون خطی و لجستیک هر دو از حریم خصوصی تفاضلی استفاده می کنند، که سیستمی متفاوت از بررسی حریم خصوصی نسبت به سایر عملیات ها در Ads Data Hub است. حریم خصوصی دیفرانسیل با تزریق نویز به نتایج شما در طول فرآیند آموزش، حریم خصوصی کاربر نهایی را تضمین می کند. این سطح از نویز به قدری کم می ماند که نتایج نهایی همچنان مفید هستند، اما به اندازه ای بالاست که کاربران نهایی را نمی توان شناسایی کرد. علاوه بر این، سطح نویز غیر قطعی است، به طوری که نتایج دارای سطح ناهماهنگی از نویز هستند که بیشتر از حفظ حریم خصوصی کاربر نهایی اطمینان حاصل می کند.

محدودیت پرس و جو

وقتی EPSILON_PER_MODEL پیش‌فرض استفاده می‌کنید، به 100 عبارت مدل‌سازی رگرسیون لجستیک در «روز داده» محدود می‌شوید. روز داده به رویدادهای ایجاد شده در یک روز معین اشاره دارد. این رویدادها با تاریخ‌های شروع و پایانی که هنگام اجرای پرس و جو ارائه می‌دهید، و تاریخ‌های شروع و پایانی که هنگام ایجاد هر جدولی که درخواست شما استفاده می‌کند، مطابقت دارد - مانند جداول موقتی که برای آموزش استفاده می‌شود. این بدان معنی است که داده های 1 روزه را نمی توان در بیش از 100 مدل استفاده کرد. اگر مقدار EPSILON_PER_MODEL را بیشتر از مقدار پیش‌فرض تعیین کنید، می‌توانید مدل‌های کمتری ایجاد کنید، اما کیفیت بالاتری خواهند داشت. و اگر مقادیر کمتری از EPSILON_PER_MODEL انتخاب کنید، می‌توانید مدل‌های بیشتری را آموزش دهید، اما کیفیت پایین‌تری خواهند داشت.

چگونه کار می کند

گردش کار این مراحل ضروری را دنبال می کند:

  1. داده های آموزشی را آماده کنید.
  2. یک مدل ایجاد کنید.
  3. بینش را از مدل جمع آوری کنید.

داده های آموزشی را آماده کنید

همانطور که در بالا ذکر شد، استفاده از مجموعه داده های بزرگتر و با کیفیت به طور کلی به نتایج بهتری منجر می شود. علاوه بر این، از آنجایی که داده‌های ورودی با استفاده از مقیاس‌بندی حداقل-حداکثر مقیاس‌بندی می‌شوند، داده‌های خوشه‌ای پراکنده یا داده‌هایی با نقاط پرت قابل توجه می‌توانند با جابجایی میانگین بر مدل تأثیر منفی بگذارند.

به طور پیش فرض، 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 باشد.

Learn_rate_strategy

(اختیاری، فقط لجستیک) استراتژی برای تعیین میزان یادگیری در طول آموزش.

استدلال ها

' 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