শ্রোতা তালিকার জন্য রিগ্রেশন মডেলিং

আপনি ML.PREDICT ব্যবহার না করেই পরিচিত ওজন সহ একটি বিদ্যমান লিনিয়ার বা লজিস্টিক রিগ্রেশন মডেল ব্যবহার করে ভবিষ্যদ্বাণী করতে পারেন, এমনকি মডেলটিতে অ্যাক্সেস ছাড়াই৷ এটি করার জন্য, আপনাকে বিজ্ঞাপন ডেটা হাবে দর্শক অ্যাক্টিভেশন কোয়েরির মধ্যে ডিফারেন্সিয়াল প্রাইভেট (DP) রিগ্রেশন মডেল ব্যবহার করার জন্য একটি সমাধান ব্যবহার করতে হবে।

এই ধাপে ধাপে উদাহরণটি আপনাকে শেখাবে কিভাবে প্রকৃত লিনিয়ার এবং বাইনারি লজিস্টিক রিগ্রেশন মডেলের জন্য সিমুলেটেড ইনফারেন্স সম্পাদন করতে হয়, তারপর সিমুলেটেড ফলাফলের যথার্থতা দেখানোর জন্য ML.PREDICT এর সাথে ফলাফলের তুলনা করে। এটি একটি বাইনারি লজিস্টিক মডেলের সাথে একটি শ্রোতা তালিকা তৈরি করার একটি বাস্তব উদাহরণও প্রদর্শন করবে, যা দর্শক সক্রিয়করণে একটি রূপান্তর মডেল প্রয়োগ করতে ব্যবহৃত হবে।

উদাহরণের ওভারভিউ:

  1. ডেটা জেনারেট করুন
  2. মডেলকে প্রশিক্ষণ দিন
  3. ওজন এবং বাধা পান
  4. ভবিষ্যদ্বাণী অনুকরণ
  5. ফলাফল তুলনা করুন

ধাপে ধাপে উদাহরণ

1. ডেটা তৈরি করুন

মডেল প্রশিক্ষণের জন্য সিমুলেটেড ডেটা সহ একটি টেবিল তৈরি করুন। হোল্ডব্যাক সেটের জন্য সারিগুলির একটি ভগ্নাংশ চিহ্নিত করুন।

লিনিয়ার রিগ্রেশন

CREATE OR REPLACE TABLE DATASET_NAME.LIN_REG_TRAINING_SET AS
  WITH
  A AS (
    SELECT
      *
    FROM
      UNNEST(GENERATE_ARRAY(1, 100000)) AS row_number),
  B AS (
    SELECT
      row_number,
      RAND() AS rand_label,
      RAND() AS rand_feature_1,
      RAND() AS rand_feature_2,
      RAND() AS rand_feature_3,
      RAND() AS rand_feature_4,
      RAND() AS rand_feature_5,
      RAND() AS rand_feature_6,
      RAND() AS rand_feature_7,
      RAND() AS rand_feature_8,
      RAND() AS rand_feature_9,
      RAND() AS rand_feature_10
    FROM
      A),
  C AS (
    SELECT
      rand_label AS label,
      *
    FROM
      B),
  D AS (
    SELECT
    row_number,
    CAST(round(10 * label) AS INT64) AS label,
    (rand_label + rand_feature_1) / 2 AS feature_1,
    (rand_label + rand_feature_2) / 2 AS feature_2,
    (rand_label + rand_feature_3) / 2 AS feature_3,
    (rand_label + rand_feature_4) / 2 AS feature_4,
    (rand_label + rand_feature_5) / 2 AS feature_5,
    (rand_label + rand_feature_6) / 2 AS feature_6,
    (rand_label + rand_feature_7) / 2 AS feature_7,
    (rand_label + rand_feature_8) / 2 AS feature_8,
    (rand_label + rand_feature_9) / 2 AS feature_9,
    (rand_label + rand_feature_10) / 2 AS feature_10
    FROM
    C)

SELECT
  label,
  feature_1,
  feature_2,
  feature_3,
  feature_4,
  feature_5,
  feature_6,
  feature_7,
  feature_8,
  feature_9,
  feature_10,
  RAND() < 0.1 AS holdback -- Ten percent will be true.
FROM
  D

বাইনারি লজিস্টিক রিগ্রেশন

SELECT
  CASE
    WHEN label < 5 THEN 0
    WHEN label >= 5 THEN 1
  END
  AS label,
  * EXCEPT (label)
FROM
  `DATASET_NAME.BIN_LOG_REG_TRAINING_SET`

2. মডেল প্রশিক্ষণ

প্রশিক্ষণ সেট থেকে একটি রিগ্রেশন মডেল প্রশিক্ষণ.

লিনিয়ার রিগ্রেশন

CREATE OR REPLACE MODEL `DATASET_NAME.LIN_REG_MODEL` OPTIONS (model_type="linear_reg") AS
  SELECT
    * except (holdback)
  FROM
    `DATASET_NAME.LIN_REG_TRAINING_SET`
  WHERE
    NOT holdback

মনে রাখবেন যে আমরা R 2 = 0.9009 সহ একটি মডেল পেতে সিমুলেটেড ডেটাতে যথেষ্ট শব্দ যোগ করেছি।

পরিমাপ মান
মানে পরম ত্রুটি 0.7359
বর্গাকার ত্রুটির গড় 0.8432
বর্গাকার লগ ত্রুটির মানে 0.0810
মধ্যকার পরম ত্রুটি 0.6239
R বর্গ 0.9009

বাইনারি লজিস্টিক রিগ্রেশন

CREATE OR REPLACE MODEL `DATASET_NAME.BIN_LOG_REG_MODEL` OPTIONS (model_type="logistic_reg") AS
  SELECT
    * EXCEPT (holdback)
  FROM
    `DATASET_NAME.BIN_LOG_REG_TRAINING_SET`
  WHERE
    NOT holdback

নমুনা ফলাফল. 0.9260 এর নির্ভুলতা নোট করুন।

পরিমাপ মান
পজিটিভ ক্লাস 1
নেতিবাচক ক্লাস 0
যথার্থতা 0.0810
স্মরণ করুন 0.9315
নির্ভুলতা 0.9260
F1 স্কোর 0.9328

এই বিভ্রান্তি ম্যাট্রিক্সের গাঢ় মানগুলি দেখায় কত ঘন ঘন মডেলটি প্রতিটি লেবেলকে সঠিকভাবে শ্রেণীবদ্ধ করেছে এবং নন-বোল্ড মানগুলি দেখায় যে মডেলটি প্রতিটি লেবেলকে কতবার ভুল শ্রেণিবদ্ধ করেছে৷

সত্য লেবেল পূর্বাভাসিত লেবেল 1 পূর্বাভাসিত লেবেল 2
1 93% 7%
0 ৮% 92%

3. ওজন এবং বাধা পেতে

মডেলের জন্য ওজন এবং বাধা পান:

লিনিয়ার রিগ্রেশন

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `DATASET_NAME.LIN_REG_MODEL`)
ওজন category_weights.category
বৈশিষ্ট্য_1 1.8263055528635743
বৈশিষ্ট্য_২ 1.8143804404490813
বৈশিষ্ট্য_৩ 1.8601204874033492
বৈশিষ্ট্য_4 1.8507603439031859
বৈশিষ্ট্য_5 1.7899764387123640
বৈশিষ্ট্য_6 1.8645246630251291
বৈশিষ্ট্য_7 1.8698005281925356
বৈশিষ্ট্য_8 1.7904637080330201
বৈশিষ্ট্য_9 1.8036887855406274
বৈশিষ্ট্য_10 1.8117115890624449
ইন্টারসেপ্ট -4.1428754911504306

বাইনারি লজিস্টিক রিগ্রেশন

SELECT
  *
FROM
  ML.WEIGHTS(MODEL `DATASET_NAME.BIN_LOG_REG_MODEL`)
ওজন category_weights.category
বৈশিষ্ট্য_1 3.823533928
বৈশিষ্ট্য_২ 3.734812819
বৈশিষ্ট্য_৩ ৩.৮৪২২৩৯৮২৩
বৈশিষ্ট্য_4 3.785488823
বৈশিষ্ট্য_5 ৩.৭৩৭৩৮৬৭১৬
বৈশিষ্ট্য_6 ৩.৫৬৭৬৬৩৯৬১
বৈশিষ্ট্য_7 3.819643052
বৈশিষ্ট্য_8 ৩.৭৩৪৬৭৩৭৬৩
বৈশিষ্ট্য_9 ৩.৮৩৯৩০১৪০৬
বৈশিষ্ট্য_10 3.787306994
ইন্টারসেপ্ট -17.922169920

4. ভবিষ্যদ্বাণী অনুকরণ

লিনিয়ার রিগ্রেশন

ML.PREDICT ব্যবহার না করে স্ট্যান্ডার্ড SQL ব্যবহার করে ভবিষ্যদ্বাণী করতে ওজনের সাথে বৈশিষ্ট্যের মানগুলির ডট পণ্য ব্যবহার করুন এবং ইন্টারসেপ্ট যোগ করুন। এই প্রশ্নটি ML.PREDICT ব্যবহারকারীদের সাথে এই কৌশলটি ব্যবহার করে ভবিষ্যদ্বাণীগুলির তুলনা করে৷ লক্ষ্য করুন কিভাবে বোল্ড এসকিউএল লাইনগুলি মডেল ওজন সহ সারির বৈশিষ্ট্য মানের ডট পণ্য সম্পাদন করছে, তারপর ইন্টারসেপ্ট যোগ করছে।

WITH
T AS (
SELECT
  label AS actual_label,
  predicted_label AS ml_predicted_label,
  [feature_1,
  feature_2,
  feature_3,
  feature_4,
  feature_5,
  feature_6,
  feature_7,
  feature_8,
  feature_9,
  feature_10] AS features,
  [1.8263055528635743,
  1.8143804404490813,
  1.8601204874033492,
  1.8507603439031859,
  1.789976438712364,
  1.8645246630251291,
  1.8698005281925356,
  1.7904637080330201,
  1.8036887855406274,
  1.8117115890624449] AS weights
FROM
  ML.PREDICT(MODEL `DATASET_NAME.LIN_REG_MODEL`,
    (
    SELECT
      *
    FROM
      `PROJECT_NAME.DATASET_NAME.LIN_REG_TRAINING_SET`))
WHERE
  holdback),
P AS (
SELECT
  actual_label,
  ml_predicted_label,
  (
   SELECT
    SUM(element1 * element2) - 4.1428754911504306
  FROM
    T.features element1
  WITH
  OFFSET
    pos
  JOIN
    T.weights element2
  WITH
  OFFSET
    pos
  USING
    (pos) ) sql_predicted_label,
  features,
  weights
FROM
  T)
SELECT
  actual_label,
  ml_predicted_label,
  sql_predicted_label,
  ABS(ml_predicted_label - sql_predicted_label) < 0.00000000001 AS diff_is_negligible
FROM
  P

বাইনারি লজিস্টিক রিগ্রেশন

বাইনারি লজিস্টিক রিগ্রেশনের জন্য, ভবিষ্যদ্বাণীগুলি অনুকরণ করার কৌশলটি রৈখিক রিগ্রেশনের অনুরূপ, পছন্দসই প্রান্তিকের সাথে শেষ ধাপে সিগমায়েড ফাংশন প্রয়োগ করার সাথে।

ML.PREDICT ব্যবহার না করে স্ট্যান্ডার্ড SQL ব্যবহার করে ভবিষ্যদ্বাণী করতে ওজনের সাথে বৈশিষ্ট্যের মানগুলির ডট পণ্য ব্যবহার করুন এবং ইন্টারসেপ্ট যোগ করুন। তারপরে 0 বা 1 ভবিষ্যদ্বাণী করার জন্য ফলাফলে 0.5 এর থ্রেশহোল্ড সহ সিগমায়েড ফাংশনটি ব্যবহার করুন৷ এই প্রশ্নটি ML.PREDICT ব্যবহারকারীদের সাথে এই কৌশলটি ব্যবহার করে ভবিষ্যদ্বাণীগুলির তুলনা করে৷

WITH
T AS (
SELECT
  label AS actual_label,
  predicted_label AS ml_predicted_label,
  [feature_1,
  feature_2,
  feature_3,
  feature_4,
  feature_5,
  feature_6,
  feature_7,
  feature_8,
  feature_9,
  feature_10] AS features,
  [3.8235339279050287,
  3.7348128191185244,
  3.8422398227859471,
  3.7854888232502479,
  3.7373867156553713,
  3.5676639605351026,
  3.8196430517007811,
  3.7346737628343032,
  3.8393014063170749,
  3.7873069939244743] AS weights
FROM
  ML.PREDICT(MODEL `DATASET_NAME.BIN_LOG_REG_MODEL`,
    (
    SELECT
      *
    FROM
      `PROJECT_NAME.DATASET_NAME.BIN_LOG_REG_TRAINING_SET`))
WHERE
  holdback),
P AS (
SELECT
  actual_label,
  ml_predicted_label,
  (
   SELECT
    IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
  FROM
    T.features element1
  WITH
  OFFSET
    pos
  JOIN
    T.weights element2
  WITH
  OFFSET
    pos
  USING
    (pos) ) sql_predicted_label,
  features,
  weights
FROM
  T)
SELECT
  actual_label,
  ml_predicted_label,
  sql_predicted_label,
  ml_predicted_label = sql_predicted_label AS simulation_is_accurate
FROM
  P

উপরের ক্যোয়ারীতে মোটা অক্ষরে এসকিউএল কোডের ব্লকটি মডেলের ওজন সহ প্রতিটি সারির বৈশিষ্ট্য মানগুলির ডট পণ্য সম্পাদন করছে এবং লিনিয়ার রিগ্রেশন পূর্বাভাস পেতে ইন্টারসেপ্ট যোগ করছে:

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

তারপর এটি স্ট্যান্ডার্ড এসকিউএল ব্যবহার করে ডট প্রোডাক্ট এবং ইন্টারসেপ্টে সিগমায়েড ফাংশন Y = 1 / (1+e^-z) প্রয়োগ করছে:

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

অবশেষে, সিগমায়েড ফাংশনের ফলাফল 0.5 এর থ্রেশহোল্ড মানের সাথে তুলনা করা হয় 0 এর বাইনারি লজিস্টিক রিগ্রেশন ভবিষ্যদ্বাণীতে পৌঁছানোর জন্য, যদি এটি 0.5 এর কম হয়, বা 1 না হয়। মনে রাখবেন যে আপনি 0 এবং 1 এর মধ্যে যেকোনো থ্রেশহোল্ড মান ব্যবহার করতে পারেন।

IF((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)

এই কৌশলটি মাল্টিক্লাস লজিস্টিক রিগ্রেশনেও প্রসারিত হতে পারে। সেক্ষেত্রে, মডেলের ওজন একটি ভেক্টরের পরিবর্তে একটি এনএক্সএন ম্যাট্রিক্স হবে এবং ওজন একটি স্কেলারের পরিবর্তে একটি ভেক্টর হবে। আপনি বৈশিষ্ট্য মান ভেক্টরকে ওজন ম্যাট্রিক্স দ্বারা গুণ করবেন এবং ইন্টারসেপ্ট ভেক্টর যোগ করবেন। ফলস্বরূপ ভেক্টরের প্রতিটি লেবেলের জন্য একটি স্কোর থাকবে, এবং আপনি আপনার ভবিষ্যদ্বাণীর জন্য সর্বোচ্চ স্কোর সহ লেবেলটি বেছে নিতে পারেন। আপনি যদি একটি সম্ভাব্যতা অ্যারে ফেরত দিতে চান, তাহলে আপনি অ্যারের প্রতিটি উপাদানে সিগমায়েড ফাংশন প্রয়োগ করবেন।

5. ফলাফল তুলনা করুন

লিনিয়ার রিগ্রেশন

একটি ছোট রাউন্ডিং ত্রুটি ছাড়া নমুনা ফলাফল প্রায় অভিন্ন।

প্রকৃত_লেবেল ml_অনুমানিত_লেবেল sql_predicted_label diff_is_negligible
6 5.2062349420751834 5.2062349420751826 সত্য
0 0.40318472770048075 0.403184727700479 সত্য
3 3.0703766078249597 3.0703766078249597 সত্য
7 7.0588171538562 7.0588171538562 সত্য
6 6.7802375930646 6.7802375930646 সত্য
6 5.1088569571339368 5.1088569571339377 সত্য
4 4.051839078116874 4.051839078116874 সত্য
4 5.1810254680219243 5.1810254680219234 সত্য
6 6.1440349466401223 6.1440349466401205 সত্য
1 2.0842399472783519 2.0842399472783519 সত্য
2 2.1911209811886847 2.1911209811886838 সত্য
3 3.0236086790006622 3.0236086790006613 সত্য
2 2.573083132964213 2.5730831329642125 সত্য
7 5.68662973136732 5.6866297313673186 সত্য
9 8.1860026312677938 8.1860026312677938 সত্য

বাইনারি লজিস্টিক রিগ্রেশন

ML.PREDICT এর প্রকৃত ফলাফলের সাথে সিমুলেটেড অনুমানের তুলনা নিখুঁত - 10k সারি হোল্ডব্যাক সেটে একটিও দ্বন্দ্ব নেই। কয়েকটি সারি আছে যেখানে ML.PREDICT এবং সিমুলেটেড অনুমান উভয়ই প্রকৃত লেবেলের সাথে একমত নয়, এবং এটি প্রত্যাশিত কারণ মডেলের নির্ভুলতা প্রায় 93%, এবং অফ-তির্যক কক্ষগুলিতে ছোট কিন্তু শূন্য নয় এমন মান রয়েছে বিভ্রান্তি ম্যাট্রিক্স

প্রকৃত_লেবেল ml_অনুমানিত_লেবেল sql_predicted_label simulation_is_accurate
0 1 1 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 0 0 সত্য
0 1 1 সত্য
0 0 0 সত্য

ML দিয়ে একটি শ্রোতা সক্রিয়করণ তালিকা তৈরি করুন

একটি সাধারণ ব্যবহারের ক্ষেত্রে রূপান্তরগুলির পূর্বাভাস দেওয়ার জন্য একটি ভিন্নভাবে ব্যক্তিগত বাইনারি লজিস্টিক রিগ্রেশন মডেল তৈরি করা হবে, তারপর একটি দর্শক তালিকা তৈরি করার সময় এই মডেলটিতে অনুমান প্রয়োগ করুন৷ অনুমান করুন যে উপরের উদাহরণে তৈরি বাইনারি লজিস্টিক মডেল হল মডেলিং রূপান্তর এবং প্রশিক্ষণ এবং মূল্যায়ন সেটের প্রতিটি সারি একটি স্বতন্ত্র ব্যবহারকারীর প্রতিনিধিত্ব করে।

নিম্নলিখিত ক্যোয়ারী দেখায় কিভাবে সেই ব্যবহারকারীদের সাথে একটি শ্রোতা তালিকা তৈরি করতে হয় যে মডেলটি রূপান্তর করবে:

WITH
T AS (
SELECT
  *,
  label AS actual_label,
  [feature_1,
  feature_2,
  feature_3,
  feature_4,
  feature_5,
  feature_6,
  feature_7,
  feature_8,
  feature_9,
  feature_10] AS features,
  [3.8235339279050287,
  3.7348128191185244,
  3.8422398227859471,
  3.7854888232502479,
  3.7373867156553713,
  3.5676639605351026,
  3.8196430517007811,
  3.7346737628343032,
  3.8393014063170749,
  3.7873069939244743] AS weights
FROM
  `PROJECT_NAME.DATASET_NAME.BIN_LOG_REG_TRAINING_SET`
WHERE
  holdback),
P AS (
SELECT
  *,
  (
  SELECT
  IF
    ((1 / (1 + EXP(-(SUM(element1 * element2) -17.922169920432161)))) < 0.5, 0, 1)
  FROM
    T.features element1
  WITH
  OFFSET
    pos
  JOIN
    T.weights element2
  WITH
  OFFSET
    pos
  USING
    (pos) ) predicted_label,
  features,
  weights
FROM
  T),
SELECT
  user_id
FROM
  P
WHERE
  predicted_label = 1;