আপনি ML.PREDICT
ব্যবহার না করেই পরিচিত ওজন সহ একটি বিদ্যমান লিনিয়ার বা লজিস্টিক রিগ্রেশন মডেল ব্যবহার করে ভবিষ্যদ্বাণী করতে পারেন, এমনকি মডেলটিতে অ্যাক্সেস ছাড়াই৷ এটি করার জন্য, আপনাকে বিজ্ঞাপন ডেটা হাবে দর্শক অ্যাক্টিভেশন কোয়েরির মধ্যে ডিফারেন্সিয়াল প্রাইভেট (DP) রিগ্রেশন মডেল ব্যবহার করার জন্য একটি সমাধান ব্যবহার করতে হবে।
এই ধাপে ধাপে উদাহরণটি আপনাকে শেখাবে কিভাবে প্রকৃত লিনিয়ার এবং বাইনারি লজিস্টিক রিগ্রেশন মডেলের জন্য সিমুলেটেড ইনফারেন্স সম্পাদন করতে হয়, তারপর সিমুলেটেড ফলাফলের যথার্থতা দেখানোর জন্য ML.PREDICT
এর সাথে ফলাফলের তুলনা করে। এটি একটি বাইনারি লজিস্টিক মডেলের সাথে একটি শ্রোতা তালিকা তৈরি করার একটি বাস্তব উদাহরণও প্রদর্শন করবে, যা দর্শক সক্রিয়করণে একটি রূপান্তর মডেল প্রয়োগ করতে ব্যবহৃত হবে।
উদাহরণের ওভারভিউ:
- ডেটা জেনারেট করুন
- মডেলকে প্রশিক্ষণ দিন
- ওজন এবং বাধা পান
- ভবিষ্যদ্বাণী অনুকরণ
- ফলাফল তুলনা করুন
ধাপে ধাপে উদাহরণ
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;