1. บทนำ
ใน Codelab นี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดลที่กำหนดเองของ BigQuery ML โดยใช้ SQL เท่านั้น และติดตั้งใช้งานโมเดลใน Vertex AI คุณจะได้เรียนรู้:
- วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
- วิธีใช้ BigQuery ML สำหรับการเรียนรู้ที่มีการควบคุมดูแลเพื่อสร้างโมเดลการคาดการณ์การถดถอยแบบหลายคลาสสำหรับการคาดการณ์คะแนนภาพยนตร์โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้เฉพาะคำค้นหา SQL
สิ่งที่คุณจะสร้าง
คุณจะสร้าง
- ชุดข้อมูล BigQuery ที่มีคอมโพเนนต์ตารางและโมเดล
- โมเดล BigQuery ML สำหรับการคาดการณ์คะแนนภาพยนตร์โดยใช้คำค้นหา SQL
- ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry
ข้อกำหนด
2. สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
- ไปที่ BigQuery เพื่อเปิดใช้ API นอกจากนี้ คุณยังเปิดเว็บ UI ของ BigQuery ได้โดยตรงโดยป้อน URL ต่อไปนี้ในเบราว์เซอร์ https://console.cloud.google.com/bigquery
3. เปิดใช้งาน Cloud Shell
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมบนขวา:

- เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
- หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <PROJECT_ID>
โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
4. การเตรียมข้อมูลฝึกฝน
ซึ่งเป็นขั้นตอนสำคัญในโปรเจ็กต์ ผลิตภัณฑ์ และแอปทั้งหมดที่เกี่ยวข้องกับข้อมูล ซึ่งต้องใช้ความเชี่ยวชาญในโดเมนเป็นอย่างมาก นอกเหนือจากเทคโนโลยีในการเตรียมชุดข้อมูลที่เหมาะสมและทำให้พร้อมสำหรับโปรเจ็กต์ ML ใน Codelab นี้ เราจะใช้ไฟล์ข้อมูลที่เตรียมไว้แล้ว
5. การสร้างและโหลดชุดข้อมูล
ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย
- ใน Cloud Shell ให้ใช้คำสั่ง bq mk เพื่อสร้างชุดข้อมูลชื่อ "movies"
bq mk --location=<<LOCATION>> movies
ตั้งค่าตำแหน่งเป็นภูมิภาค (asia-south1)
- ตรวจสอบว่าคุณมีไฟล์ข้อมูล (.csv) พร้อมใช้งาน เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อโคลนที่เก็บและไปยังโปรเจ็กต์
git clone <<repository link>>
cd movie-score
- ใช้คำสั่ง bq load เพื่อโหลดไฟล์ CSV ลงในตาราง BigQuery (โปรดทราบว่าคุณยังอัปโหลดจาก BigQuery UI ได้โดยตรงด้วย)
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string
คำอธิบายตัวเลือก: –source_format=CSV - ใช้รูปแบบข้อมูล CSV เมื่อแยกวิเคราะห์ไฟล์ข้อมูล -skip_leading_rows=1 - ข้ามบรรทัดแรกในไฟล์ CSV เนื่องจากเป็นแถวส่วนหัว Movies.movies - อาร์กิวเมนต์ตำแหน่งแรก - กำหนดตารางที่ควรโหลดข้อมูล ./movies.csv ซึ่งเป็นอาร์กิวเมนต์ตำแหน่งที่ 2 จะกำหนดไฟล์ที่จะโหลด นอกจากไฟล์ในเครื่องแล้ว คำสั่ง bq load ยังโหลดไฟล์จาก Cloud Storage ได้ด้วย URI gs://my_bucket/path/to/file สคีมา ซึ่งกำหนดได้ในไฟล์สคีมา JSON หรือเป็นรายการที่คั่นด้วยคอมมา (ฉันใช้รายการที่คั่นด้วยคอมมา) ไชโย! ตอนนี้ระบบได้โหลดข้อมูล CSV ลงในตาราง movies.movies แล้ว
- ค้นหาด้วยวิธีใดวิธีหนึ่งต่อไปนี้
เราโต้ตอบกับ BigQuery ได้ 3 วิธี และจะลองใช้ 2 วิธีต่อไปนี้ UI เว็บของ BigQuery คำสั่ง bq ค. API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
ฉันใช้พื้นที่ทำงาน SQL บนเว็บของ BigQuery เพื่อเรียกใช้การค้นหา พื้นที่ทำงาน SQL มีลักษณะดังนี้

การใช้คำสั่ง bq
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
6. การคาดการณ์คะแนนภาพยนตร์ในระดับ 1 ถึง 10
BigQuery ML รองรับการเรียนรู้ที่มีการควบคุมดูแลด้วยโมเดลประเภทการถดถอยแบบโลจิสติก คุณสามารถใช้ประเภทโมเดลการถดถอยแบบโลจิสติกไบนารีเพื่อคาดการณ์ว่าค่าจะอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งใน 2 หมวดหมู่ หรือใช้ประเภทโมเดลการถดถอยแบบหลายคลาสเพื่อคาดการณ์ว่าค่าจะอยู่ในหมวดหมู่ใดหมวดหมู่หนึ่งในหลายหมวดหมู่ ซึ่งเรียกว่าปัญหาการจัดประเภท เนื่องจากพยายามจัดประเภทข้อมูลเป็น 2 หมวดหมู่ขึ้นไป
หมายเหตุสั้นๆ เกี่ยวกับการเลือกโมเดล: นี่คือการเลือกโมเดลทดลองที่เลือกไว้ที่นี่ โดยอิงจากการประเมินผลลัพธ์ที่ฉันได้จากโมเดล 2-3 โมเดลในตอนแรก และในที่สุดก็เลือกใช้ LOGISTIC REG เพื่อให้ง่ายและเพื่อให้ได้ผลลัพธ์ที่ใกล้เคียงกับการจัดประเภทภาพยนตร์จริงจากฐานข้อมูลหลายแห่ง โปรดทราบว่าควรพิจารณาว่านี่เป็นเพียงตัวอย่างสำหรับการติดตั้งใช้งานโมเดล และไม่จำเป็นต้องเป็นโมเดลที่แนะนำสำหรับกรณีการใช้งานนี้ อีกวิธีหนึ่งในการนำไปใช้คือการคาดการณ์ผลลัพธ์ของภาพยนตร์เป็น ดี / ไม่ดี โดยใช้โมเดลการถดถอยแบบลอจิสติกนี้แทนการคาดการณ์คะแนน
เลือกข้อมูลฝึกฝน
เราได้แยกข้อมูลภาพยนตร์ (ในรูปแบบ CSV) ออกเป็น 3 หมวดหมู่ในตารางโดยใช้ฟิลด์ "data_cat" ซึ่งมีค่าใดค่าหนึ่งใน 3 ค่า ได้แก่ TRAIN, TEST และ PREDICT การแยกชุดข้อมูลเพื่อวัตถุประสงค์ในการทดสอบและการฝึกเป็นแง่มุมที่สำคัญของโมเดล หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการทำความเข้าใจการแยกชุดข้อมูล โปรดดูเอกสารประกอบ
สร้างโมเดลการถดถอยแบบโลจิสติก
เราใช้คำสั่ง CREATE MODEL กับตัวเลือก "LOGISTIC_REG" เพื่อสร้างและฝึกโมเดลการถดถอยลอจิสติกได้
เรียกใช้การค้นหาด้านล่างในพื้นที่ทำงาน SQL ของเว็บ UI ของ BigQuery
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
รายละเอียดการค้นหา:
- คำสั่ง CREATE MODEL จะฝึกโมเดลโดยใช้ข้อมูลฝึกฝนในคำสั่ง SELECT
- อนุประโยค OPTIONS จะระบุประเภทโมเดลและตัวเลือกการฝึก ในที่นี้ ตัวเลือก LOGISTIC_REG จะระบุประเภทโมเดลการถดถอยแบบโลจิสติก ไม่จำเป็นต้องระบุโมเดลการถดถอยแบบโลจิสติกแบบไบนารีเทียบกับโมเดลการถดถอยแบบโลจิสติกแบบหลายคลาส เนื่องจาก BigQuery ML สามารถกำหนดได้ว่าจะฝึกโมเดลใดตามจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ป้ายกำกับ
- data_split_method=‘NO_SPLIT' จะบังคับให้ BQML ฝึกโมเดลกับข้อมูลตามเงื่อนไขการค้นหา (data_cat = ‘TRAIN') โปรดทราบว่าควรใช้ ‘AUTO_SPLIT' ในตัวเลือกนี้เพื่อให้เฟรมเวิร์ก (หรือบริการในกรณีนี้) สุ่มพาร์ติชันของการแยกการฝึก/การทดสอบ
- ตัวเลือก input_label_cols จะระบุคอลัมน์ในคำสั่ง SELECT ที่จะใช้เป็นคอลัมน์ป้ายกำกับ ในที่นี้ คอลัมน์ป้ายกำกับคือคะแนน ดังนั้นโมเดลจะเรียนรู้ว่าค่าใดใน 10 ค่าของคะแนนมีแนวโน้มมากที่สุดโดยอิงตามค่าอื่นๆ ที่มีอยู่ในแต่ละแถว
- ตัวเลือก "auto_class_weights=TRUE" จะปรับสมดุลป้ายกำกับคลาสในข้อมูลฝึกฝน โดยค่าเริ่มต้น ข้อมูลฝึกฝนจะไม่มีการถ่วงน้ำหนัก หากป้ายกำกับในข้อมูลฝึกฝนไม่สมดุล โมเดลอาจเรียนรู้ที่จะคาดการณ์ป้ายกำกับคลาสที่ได้รับความนิยมมากที่สุดอย่างหนักหน่วงมากขึ้น
- คำสั่ง SELECT จะค้นหาตารางที่เราโหลดด้วยข้อมูล CSV โดยคําสั่ง WHERE จะกรองแถวในตารางอินพุตเพื่อให้ระบบเลือกเฉพาะชุดข้อมูล TRAIN ในขั้นตอนนี้
เมื่อสร้างแล้ว ข้อมูลต่อไปนี้จะปรากฏในส่วนสคีมาของพื้นที่ทำงาน SQL ของ BigQuery
ป้ายกำกับ

ฟีเจอร์

ประเมินโมเดลการถดถอยแบบโลจิสติก
หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน ML.EVALUATE ฟังก์ชัน ML.EVALUATE จะประเมินค่าที่คาดการณ์เทียบกับข้อมูลจริง คําค้นหาเพื่อประเมินโมเดลมีดังนี้
SELECT
*
FROM
ML.EVALUATE (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘TEST'
)
)
ฟังก์ชัน ML.EVALUATE จะใช้โมเดลที่ฝึกในขั้นตอนก่อนหน้าและข้อมูลการประเมินที่ส่งคืนโดยคําสั่ง SELECT ในคําสั่งย่อย ฟังก์ชันจะแสดงผลสถิติแถวเดียวเกี่ยวกับโมเดล

เนื่องจากคุณทำการถดถอยแบบโลจิสติก ผลลัพธ์จึงรวมถึงเมตริกที่คุณเห็นในภาพหน้าจอด้านบน ได้แก่ ความแม่นยำ การเรียกคืน ความถูกต้อง คะแนน F1, log_loss, roc_auc ซึ่งมีความสําคัญอย่างยิ่งในการประเมินประสิทธิภาพของโมเดล นอกจากนี้ คุณยังเรียกใช้ ML.EVALUATE ได้โดยไม่ต้องระบุข้อมูลอินพุต ML.EVALUATE จะดึงข้อมูลเมตริกการประเมินที่ได้มาในระหว่างการฝึก ซึ่งใช้ชุดข้อมูลการประเมินที่สงวนไว้โดยอัตโนมัติ
เมตริกหลักโดยย่อ
ความแม่นยำ - สัดส่วนของการระบุผลบวกที่ถูกต้องจริงเป็นเท่าใด ความแม่นยำ = ผลบวกจริง / (ผลบวกจริง + ผลบวกลวง) ความสามารถในการเรียกคืน - ระบุสัดส่วนของผลบวกจริงได้อย่างถูกต้องหรือไม่ Recall = True Positive / (True Positive + False Negative) ความแม่นยำ - เมตริกสําหรับการประเมินโมเดลการจัดประเภท ซึ่งเป็นเศษส่วนของการคาดการณ์ที่โมเดลของเราทําได้อย่างถูกต้อง ความแม่นยํา = จํานวนการคาดการณ์ที่ถูกต้อง / จํานวนการคาดการณ์ทั้งหมด
คาดการณ์คะแนนภาพยนตร์โดยใช้ ML.PREDICT
คําค้นหาต่อไปนี้จะคาดการณ์คะแนนของภาพยนตร์แต่ละเรื่องในส่วน PREDICT ของชุดข้อมูล
SELECT
*
FROM
ML.PREDICT (MODEL movies.movies_score_model,
(
SELECT
*
FROM
movies.movies_score
WHERE
data_cat= ‘PREDICT'
)
)
ข้อมูลโค้ดผลลัพธ์มีดังนี้

ผลลัพธ์ของโมเดลจะแสดงคะแนนที่คาดการณ์ของภาพยนตร์ในระดับ 1 ถึง 10 (การจัดประเภท) คุณอาจสงสัยว่าทำไมถึงมีแถวการคาดการณ์หลายแถวสำหรับภาพยนตร์แต่ละเรื่อง เนื่องจากโมเดลได้แสดงป้ายกำกับที่คาดการณ์ได้และโอกาสที่จะเกิดป้ายกำกับแต่ละรายการตามลำดับที่ลดลง
วิเคราะห์ผลลัพธ์ที่คาดการณ์ไว้และโมเดล
นอกจากนี้ คุณยังทําขั้นตอนการวิเคราะห์ที่ยอดเยี่ยม 2 ขั้นตอนได้ด้วย ซึ่งเป็นส่วนหนึ่งของผลการคาดการณ์ ดังนี้
- หากต้องการทราบสาเหตุที่โมเดลสร้างผลลัพธ์การคาดการณ์เหล่านี้ คุณสามารถใช้ฟังก์ชัน ML.EXPLAIN_PREDICT
- หากต้องการทราบว่าฟีเจอร์ใดสำคัญที่สุดในการกำหนดช่วงรายได้โดยทั่วไป คุณสามารถใช้ฟังก์ชัน ML.GLOBAL_EXPLAIN
คุณสามารถอ่านขั้นตอนเหล่านี้โดยละเอียดได้ในเอกสารประกอบ
7. คาดการณ์คะแนนภาพยนตร์โดยใช้ BigQuery AutoML
AutoML เหมาะอย่างยิ่งหากคุณต้องการให้บริการ BigQuery สร้างโมเดลให้คุณและรอจนกว่าระบบจะสร้างผลลัพธ์ของโมเดล ความสามารถของ AutoML พร้อมใช้งานใน BQML โดยตรง (model_type=AUTOML_CLASSIFIER หรือ AutoML_REGRESSOR) และเรียกใช้ได้ง่ายขึ้นมากหากข้อมูลอยู่ใน BigQuery อยู่แล้ว
CREATE OR REPLACE MODEL movies.auto_movies
OPTIONS(model_type='AUTOML_CLASSIFIER',
input_label_cols=['score'],
budget_hours=1.0)
AS
SELECT
* EXCEPT(id, data_cat)
FROM
movies.movies_score;
เมื่อสร้างโมเดลแล้ว คุณจะทำตามขั้นตอนเพื่อ EVALUATE, PREDICT และ EXPLAIN_PREDICT ได้เช่นเดียวกับที่เราได้พูดคุยกันในโมเดล BQML ที่กำหนดเอง อ่านเพิ่มเติมเกี่ยวกับ BigQuery AutoML ในเอกสารประกอบ
8. คลิกเดียวเพื่อติดตั้งใช้งานโมเดล BQML ไปยัง Vertex AI Model Registry
ตอนนี้คุณสามารถดูโมเดล ML ทั้งหมดได้ภายใน Vertex AI Model Registry ซึ่งจะช่วยให้องค์กรจัดการและติดตั้งใช้งานโมเดลได้ง่ายขึ้น ซึ่งรวมถึงโมเดลที่สร้างด้วย BigQuery ML, AutoML และโมเดลที่ฝึกตามที่กำหนดเอง โดยดำเนินการดังนี้
CREATE OR REPLACE MODEL
`movies.movies_score_model`
OPTIONS
( model_type='LOGISTIC_REG',
auto_class_weights=TRUE,
data_split_method='NO_SPLIT',
model_registry='vertex_ai',
vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
input_label_cols=[‘score']
) AS
SELECT
* EXCEPT(id, data_cat)
FROM
‘movies.movies_score'
WHERE
data_cat = 'TRAIN';
รวมตัวเลือก model_registry="vertex_ai" ไว้ในคำค้นหา CREATE MODEL เพื่อให้ BigQuery ML เลือกโมเดลที่ต้องการลงทะเบียนอย่างชัดเจนใน Vertex AI Model Registry ได้ อ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบล็อกนี้
9. สรุป
ในเวลาไม่ถึง 30 นาที เราได้ทำสิ่งต่อไปนี้
- ตั้งค่า BigQuery เป็นฐานข้อมูลสำหรับโปรเจ็กต์ข้อมูลวิเคราะห์
- สร้างโมเดลการคาดการณ์ที่กำหนดเองโดยใช้เฉพาะ SQL ของข้อมูล BigQuery และไม่มีการเขียนโค้ดอื่นๆ
- สร้างโมเดล BQ Auto ML โดยใช้การค้นหา SQL เท่านั้น
- โมเดล BQML ที่ติดตั้งใช้งานแล้วไปยัง Vertex AI Model Registry
10. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
11. ขอแสดงความยินดี
ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วย BQML ที่กำหนดเองและ AutoML รวมถึงได้ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry เรียบร้อยแล้ว โดยทั้งหมดนี้ใช้เพียง SQL เท่านั้น