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 विकल्प से कंट्रोल किया जा सकता है.

मॉडल बनाना

अपने मॉडल की ट्रेनिंग के लिए, पैरामीटर और इनपुट डेटा तय करें.

ध्यान में रखने वाली बातें

किसी मॉडल की क्वालिटी में सबसे अहम फ़ैक्टर, ट्रेनिंग सेट का साइज़ होता है. हालांकि, समस्या और नीचे दिए गए फ़ैक्टर के आधार पर साइज़/क्वालिटी के लिए ट्रेडऑफ़ अलग-अलग होगा. कृपया हमें अपने अनुभव के बारे में बताएं.

  • हमने देखा है कि ट्रेनिंग सेट से बनाए गए लॉजिस्टिक रिग्रेशन मॉडल में कम से कम 1,00,000 उपयोगकर्ताओं वाले लॉजिस्टिक रिग्रेशन मॉडल को 1,00,000 से ज़्यादा सटीक होते हैं.
  • हमने देखा है कि कम से कम 8,00,000 उपयोगकर्ताओं वाले ट्रेनिंग सेट से बनाए गए लीनियर रिग्रेशन मॉडल के लिए, आर-स्क्वेयर > 0.70 से ज़्यादा है.

ऐसे अन्य फ़ैक्टर हैं जिनकी वजह से मॉडल की क्वालिटी खराब हो सकती है.

  • लॉजिस्टिक मॉडल, जिनमें एक क्लास को दूसरों के मुकाबले ज़्यादा बेहतर तरीके से दिखाया जाता है. खास तौर पर, जब किसी लेबल के लिए ट्रेनिंग सेट के उपयोगकर्ता कम हों, तो ऐसे में अगर कई उपयोगकर्ताओं की ट्रेनिंग सेट में अन्य लेबल का इस्तेमाल होता है, तो छोटे लेबल पर मॉडल को सटीक बनाने में कोई बड़ी मदद नहीं मिलेगी. उदाहरण के लिए, दो लेबल के लिए 20,000 और 1,000 ट्रेनिंग सेट के उपयोगकर्ता, 10,000 और 2,000 से कम हैं.
  • सुविधा का डेटा, जो लेबल के लिए अच्छा सिग्नल नहीं देता.
  • ऐसा रॉ डेटा जिसके लिए ज़्यादा बेहतर फ़ीचर इंजीनियरिंग की ज़रूरत है. उदाहरण के लिए, कुछ फ़ील्ड में बड़ी संख्या में संभावित वैल्यू हो सकती हैं. इस तरह के डेटा को बेहतर बनाने का एक तरीका यह है कि वैल्यू को कैटगरी या बकेट की कम संख्या वाली सुविधा में बदला जाए.

अहम जानकारी इकट्ठा करना

पुष्टि करने वाले डेटा पर अपने मॉडल की परफ़ॉर्मेंस का आकलन करने, ट्रेनिंग के दोहरावों (जैसे कि अनुमान के दौरान मॉडल में इस्तेमाल की जाने वाली वैल्यू) की जानकारी और सुविधाओं की जांच करने के लिए, फ़ंक्शन को कॉल किया जा सकता है, और अनदेखे डेटा का अनुमान लगाया जा सकता है.

मॉडल स्टेटमेंट बनाएं

CREATE MODEL स्टेटमेंट, आपके तय किए गए नाम और डेटासेट के साथ एक मॉडल बनाता है. अगर मॉडल का नाम पहले से मौजूद है, तो CREATE MODEL मौजूदा मॉडल को बदल देगा.

मॉडल सिंटैक्स बनाएं

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

model_name

अक्षर और अंक वाला नाम, जिसमें अंडरस्कोर और डैश शामिल होते हैं. बिंदु शामिल नहीं किए जा सकते. अगर आपके ज़रिए दिया गया मॉडल नाम पहले से मौजूद है, तो पुराने मॉडल को ओवरराइट कर दिया जाएगा.

query_statement

यह उस स्टैंडर्ड एसक्यूएल क्वेरी के बारे में बताता है जिसका इस्तेमाल ट्रेनिंग डेटा जनरेट करने के लिए किया जाता है. अगर एक ही ट्रेनिंग डेटा का इस्तेमाल करके कई मॉडल बनाए जा रहे हैं, तो ट्रेनिंग डेटा के साथ एक अस्थायी टेबल बनाएं और यहां उसका रेफ़रंस दें. यह रणनीति, वाइपआउट या देरी से स्पैम की वजह से होने वाली गड़बड़ियों की जांच से बचा जा सकता है.

model_option_list

model_type

(ज़रूरी है) सिर्फ़ एक ज़रूरी विकल्प है. यह 'adh_linear_regression' या 'adh_logistic_regression' हो सकता है

l1_reg

(ज़रूरी नहीं) L1 रेगुलराइज़ेशन की लागू संख्या. L1 रेगुलराइज़ेशन की मदद से, वेट की कुल वैल्यू के कुल अनुपात के अनुपात में महत्व की गिनती की जाती है. यह कोई भी ऋणात्मक संख्या हो सकती है, जो डिफ़ॉल्ट रूप से शून्य होती है.

l2_reg

(ज़रूरी नहीं) L2 रेगुलराइज़ेशन की लागू संख्या. L2 रेगुलराइज़ेशन की मदद से, उन वैल्यू के स्क्वेयर के योग के स्क्वेयर रूट के अनुपात में भार का हिसाब लगाया जाता है. यह कोई भी ऋणात्मक संख्या हो सकती है, जो डिफ़ॉल्ट रूप से शून्य होती है.

data_split_eval_fraction

(ज़रूरी नहीं) यह .01 और .99 के बीच होना चाहिए और डिफ़ॉल्ट वैल्यू .18 होनी चाहिए. इवैलुएशन सेट में आने वाले डेटा के हिस्से को तय करता है. यह मॉडल में खत्म होने वाली पंक्तियों की संख्या को कम करके मॉडल को ज़्यादा सटीक बनाता है. हालांकि, इससे उपयोगकर्ता के चलाए जा सकने वाले मॉडल की संख्या भी बढ़ जाती है. यह मानते हुए कि किसी डेटासेट पर हर मॉडल का एक ही अंश है, उस संबंध का चार्ट यहां दिया गया है:

पुष्टि से जुड़ा फ़्रैक्शन अनुमति वाली क्वेरी
0.01 7
0.1 8
0.15 8
यूरो 9
0.2 9
0.3 10
0.5 14
0.9 50

optimize_strategy

(ज़रूरी नहीं) लीनियर रिग्रेशन मॉडल को ट्रेनिंग देने की रणनीति.

आर्ग्यूमेंट

'AUTO_STRATEGY' के आधार पर ट्रेनिंग की रणनीति इस तरह तय की जाती है:

  • अगर l1_reg या warm_start बताया गया है, तो batch_gradient_descent रणनीति का इस्तेमाल किया जाता है.
  • अगर ट्रेनिंग की सुविधाओं के एलिमेंट की कुल संख्या 10,000 से ज़्यादा है, तो batch_gradient_descent रणनीति का इस्तेमाल किया जाता है.
  • अगर ज़्यादा फ़िटिंग की समस्या है (ट्रेनिंग के उदाहरणों की संख्या 10 से कम है • एलिमेंट की कुल संख्या), तो batch_gradient_descent रणनीति का इस्तेमाल किया जाता है.
  • अन्य सभी मामलों के लिए NORMAL_EQUATION कार्यनीति का उपयोग किया जाता है.

'BATCH_GRADIENT_DESCENT' (सिर्फ़ लॉजिस्टिक के लिए) बैच ग्रेडिएंट डिसेंट तरीके का इस्तेमाल करके मॉडल को ट्रेनिंग देता है. इसमें ग्रेडिएंट फ़ंक्शन का इस्तेमाल करके लॉस फ़ंक्शन को ऑप्टिमाइज़ किया जाता है.

'NORMAL_EQUATION' (सिर्फ़ लीनियर), ऐनलिटिकल फ़ॉर्मूला की मदद से, लीनियर रिग्रेशन की समस्या के कम से कम स्क्वेयर सलूशन का पता लगाता है. सामान्य समीकरण का इस्तेमाल इन मामलों में नहीं किया जा सकता:

  • l1_reg के बारे में बताया गया है.
  • warm_start के बारे में बताया गया है.
  • ट्रेनिंग सुविधाओं में एलिमेंट की कुल संख्या 10,000 से ज़्यादा है.
  • डिफ़ॉल्ट वैल्यू 'AUTO_STRATEGY' है.

max_iterations

(ज़रूरी नहीं) ट्रेनिंग के दोहराव या चरणों की संख्या. इस क्वेरी में हर इटरेशन के लिए एक ट्री बनाया गया है, इसलिए यह ट्री की संख्या भी है. 1 से बड़ा कोई पूर्णांक होना चाहिए. डिफ़ॉल्ट वैल्यू 20 होती है.

learn_rate_strategy

(वैकल्पिक, सिर्फ़ लॉजिस्टिक) ट्रेनिंग के दौरान लर्निंग रेट तय करने की रणनीति.

आर्ग्यूमेंट

'LINE_SEARCH' लर्निंग रेट कैलकुलेट करने के लिए, लाइन खोजने के तरीके का इस्तेमाल करता है. लाइन खोज की शुरुआती सीखने की दर, LS_INIT_LEARN_RATE के लिए दी गई वैल्यू है .

  • लाइन सर्च, ट्रेनिंग की रफ़्तार को धीमा कर देता है और प्रोसेस होने वाले बाइट की संख्या को बढ़ाता है, लेकिन आम तौर पर, सीखने की शुरुआती दर ज़्यादा होने पर भी इसमें बदलाव किया जाता है.

'CONSTANT' सीखने की दर को LEARN_RATE के लिए दिए गए मान पर सेट करता है.

डिफ़ॉल्ट वैल्यू 'LINE_SEARCH' है.

learn_rate

(ज़रूरी नहीं, सिर्फ़ लॉजिस्टिक के लिए) LEARN_RATE_STRATEGY को CONSTANT पर सेट करने पर, ग्रेडिएंट डिसेंट का सीखने की दर. अगर LEARN_RATE_STRATEGY को 'LINE_SEARCH' पर सेट किया जाता है, तो गड़बड़ी दिखती है.

आर्ग्यूमेंट

float64_value, कोई भी 64-बिट का फ़्लोटिंग पॉइंट नंबर हो सकता है. डिफ़ॉल्ट वैल्यू 0.1 (10%) होती है.

early_stop

(ज़रूरी नहीं) अगर पहली बार किए जाने वाले सुधार के बाद ट्रेनिंग बंद हो, जिसमें तुलनात्मक नुकसान में सुधार, MIN_REL_PROGRESS के लिए तय की गई वैल्यू से कम हो.

आर्ग्यूमेंट

“हां” के लिए TRUE, “नहीं” के लिए FALSE. डिफ़ॉल्ट तौर पर यह TRUE होता है.

min_rel_progress

(ज़रूरी नहीं) अगर EARLY_STOP को 'सही है' पर सेट किया जाता है, तो ट्रेनिंग जारी रखने के लिए, परफ़ॉर्मेंस में होने वाले कम से कम सुधार की ज़रूरत होती है. उदाहरण के लिए, 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, ln(3) से कम का कोई भी पॉज़िटिव 64-बिट फ़्लोटिंग पॉइंट नंबर हो सकता है, जो करीब 1.0986 होता है. डिफ़ॉल्ट तौर पर, यह ln(3)/10 होता है.

automatic_input_scaling

(ज़रूरी नहीं) TRUE होने पर, संख्या वाले सभी सुविधाओं वाले कॉलम में min_max_scaling अपने-आप लागू हो जाएंगे. यह बात तब लागू होती है, जब min_max_scaled_cols विकल्प में कॉलम के नामों को साफ़ तौर पर हाइलाइट किया गया हो. हालांकि, standard_scaled_cols या quantile_bucketized_cols विकल्पों में से किसी कॉलम को साफ़ तौर पर शामिल नहीं किया गया है.

आर्ग्यूमेंट

bool_value एक BOOL है, डिफ़ॉल्ट वैल्यू TRUE है.

min_max_scaled_cols

(ज़रूरी नहीं) तय की गई संख्यात्मक_expression सुविधा के हर कॉलम को 0 से एक के बीच स्केल करता है. इसे सभी पंक्तियों में MIN और MAX के साथ कैप किया जाता है. अनुमान लगाने के लिए, वही MIN और MAX अपने-आप इस्तेमाल किए जाते हैं. अगर सुझाव के तौर पर मिला डेटा MIN, MAX की रेंज से बाहर का है, तो उसे 0 या 1 तक सीमित कर दिया जाता है.

आर्ग्यूमेंट

string_value की कैटगरी, जहां हर string_value एक स्ट्रिंग है. इसमें बदलाव किए जाने वाले कॉलम के नाम को दिखाया जाता है.

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 है. यह संख्या में बदलाव किए जाने वाले कॉलम के नाम को दिखाता है. साथ ही, हर int64_value, संख्या वाली वैल्यू को स्प्लिट करने के लिए बकेट की संख्या है.

पुष्टि

  • इस क्वेरी के लिए बताई गई तारीख की सीमा में हर डेटा दिन का निजता बजट काफ़ी होना चाहिए, जो EPSILON_PER_MODEL से ज़्यादा है, नहीं तो क्वेरी विफल हो जाएगी.
  • अगर वैकल्पिक ट्यूनिंग पैरामीटर बताए गए हैं, तो उनकी पुष्टि ऊपर दिखाई गई रेंज के लिए की जाएगी.
  • साफ़ तौर पर, सिर्फ़ एक ज़रूरी Model_type पैरामीटर तय करना चाहिए.
  • ट्रेनिंग सेट के एक कॉलम का नाम "लेबल" होना चाहिए. फ़िलहाल, एक से ज़्यादा लेबल इस्तेमाल नहीं किए जा सकते.
  • लेबल कॉलम में शून्य मान नहीं हो सकते. अगर लेबल कॉलम में शून्य वैल्यू हैं, तो क्वेरी फ़ेल हो जाती है.
  • कोई भी सुविधा कॉलम user_id से नहीं लिया जा सकता.
  • हर लाइन में सिर्फ़ एक यूनीक उपयोगकर्ता दिखना चाहिए. एक लाइन में एक से ज़्यादा उपयोगकर्ताओं का डेटा नहीं दिखाया जा सकता. कुछ जॉइन के साथ ऐसा हो सकता है, जैसे कि CROSS join.
  • कोई भी उपयोगकर्ता दो अलग-अलग पंक्तियों में नहीं हो सकता.
  • निजता की वजह से, सिर्फ़ सिंटैक्स सेक्शन में दिए गए विकल्पों का इस्तेमाल किया जा सकता है. फ़िलहाल, 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