การคาดการณ์การจัดประเภทภาพยนตร์ด้วย BQML โดยใช้ SQL

1. บทนำ

ใน Codelab นี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดลที่กำหนดเองของ BigQuery ML โดยใช้ SQL เท่านั้น และติดตั้งใช้งานโมเดลใน Vertex AI คุณจะได้เรียนรู้:

  1. วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
  2. วิธีใช้ BigQuery ML สำหรับการเรียนรู้ที่มีการควบคุมดูแลเพื่อสร้างโมเดลการคาดการณ์การถดถอยแบบหลายคลาสสำหรับการคาดการณ์คะแนนภาพยนตร์โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้เฉพาะคำค้นหา SQL

สิ่งที่คุณจะสร้าง

คุณจะสร้าง

  • ชุดข้อมูล BigQuery ที่มีคอมโพเนนต์ตารางและโมเดล
  • โมเดล BigQuery ML สำหรับการคาดการณ์คะแนนภาพยนตร์โดยใช้คำค้นหา SQL
  • ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry

ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

2. สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้วหรือไม่
  3. ไปที่ BigQuery เพื่อเปิดใช้ API นอกจากนี้ คุณยังเปิดเว็บ UI ของ BigQuery ได้โดยตรงโดยป้อน URL ต่อไปนี้ในเบราว์เซอร์ https://console.cloud.google.com/bigquery

3. เปิดใช้งาน Cloud Shell

  1. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมบนขวา: 6757b2fb50ddcc2d.png
  2. เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นว่าคุณได้รับการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์ของคุณแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้จักโปรเจ็กต์ของคุณ
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า
gcloud config set project <PROJECT_ID>

โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

4. การเตรียมข้อมูลฝึกฝน

ซึ่งเป็นขั้นตอนสำคัญในโปรเจ็กต์ ผลิตภัณฑ์ และแอปทั้งหมดที่เกี่ยวข้องกับข้อมูล ซึ่งต้องใช้ความเชี่ยวชาญในโดเมนเป็นอย่างมาก นอกเหนือจากเทคโนโลยีในการเตรียมชุดข้อมูลที่เหมาะสมและทำให้พร้อมสำหรับโปรเจ็กต์ ML ใน Codelab นี้ เราจะใช้ไฟล์ข้อมูลที่เตรียมไว้แล้ว

5. การสร้างและโหลดชุดข้อมูล

ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย

  1. ใน Cloud Shell ให้ใช้คำสั่ง bq mk เพื่อสร้างชุดข้อมูลชื่อ "movies"
bq mk --location=<<LOCATION>> movies

ตั้งค่าตำแหน่งเป็นภูมิภาค (asia-south1)

  1. ตรวจสอบว่าคุณมีไฟล์ข้อมูล (.csv) พร้อมใช้งาน เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อโคลนที่เก็บและไปยังโปรเจ็กต์
git clone <<repository link>>

cd movie-score
  1. ใช้คำสั่ง 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 แล้ว

  1. ค้นหาด้วยวิธีใดวิธีหนึ่งต่อไปนี้

เราโต้ตอบกับ BigQuery ได้ 3 วิธี และจะลองใช้ 2 วิธีต่อไปนี้ UI เว็บของ BigQuery คำสั่ง bq ค. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

ฉันใช้พื้นที่ทำงาน SQL บนเว็บของ BigQuery เพื่อเรียกใช้การค้นหา พื้นที่ทำงาน SQL มีลักษณะดังนี้

109a0b2c7155e9b3.png

การใช้คำสั่ง 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';

รายละเอียดการค้นหา:

  1. คำสั่ง CREATE MODEL จะฝึกโมเดลโดยใช้ข้อมูลฝึกฝนในคำสั่ง SELECT
  2. อนุประโยค OPTIONS จะระบุประเภทโมเดลและตัวเลือกการฝึก ในที่นี้ ตัวเลือก LOGISTIC_REG จะระบุประเภทโมเดลการถดถอยแบบโลจิสติก ไม่จำเป็นต้องระบุโมเดลการถดถอยแบบโลจิสติกแบบไบนารีเทียบกับโมเดลการถดถอยแบบโลจิสติกแบบหลายคลาส เนื่องจาก BigQuery ML สามารถกำหนดได้ว่าจะฝึกโมเดลใดตามจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ป้ายกำกับ
  3. data_split_method=‘NO_SPLIT' จะบังคับให้ BQML ฝึกโมเดลกับข้อมูลตามเงื่อนไขการค้นหา (data_cat = ‘TRAIN') โปรดทราบว่าควรใช้ ‘AUTO_SPLIT' ในตัวเลือกนี้เพื่อให้เฟรมเวิร์ก (หรือบริการในกรณีนี้) สุ่มพาร์ติชันของการแยกการฝึก/การทดสอบ
  4. ตัวเลือก input_label_cols จะระบุคอลัมน์ในคำสั่ง SELECT ที่จะใช้เป็นคอลัมน์ป้ายกำกับ ในที่นี้ คอลัมน์ป้ายกำกับคือคะแนน ดังนั้นโมเดลจะเรียนรู้ว่าค่าใดใน 10 ค่าของคะแนนมีแนวโน้มมากที่สุดโดยอิงตามค่าอื่นๆ ที่มีอยู่ในแต่ละแถว
  5. ตัวเลือก "auto_class_weights=TRUE" จะปรับสมดุลป้ายกำกับคลาสในข้อมูลฝึกฝน โดยค่าเริ่มต้น ข้อมูลฝึกฝนจะไม่มีการถ่วงน้ำหนัก หากป้ายกำกับในข้อมูลฝึกฝนไม่สมดุล โมเดลอาจเรียนรู้ที่จะคาดการณ์ป้ายกำกับคลาสที่ได้รับความนิยมมากที่สุดอย่างหนักหน่วงมากขึ้น
  6. คำสั่ง SELECT จะค้นหาตารางที่เราโหลดด้วยข้อมูล CSV โดยคําสั่ง WHERE จะกรองแถวในตารางอินพุตเพื่อให้ระบบเลือกเฉพาะชุดข้อมูล TRAIN ในขั้นตอนนี้

เมื่อสร้างแล้ว ข้อมูลต่อไปนี้จะปรากฏในส่วนสคีมาของพื้นที่ทำงาน SQL ของ BigQuery

ป้ายกำกับ

93efd0c1a7883690.png

ฟีเจอร์

8c539338df1a9652.png

ประเมินโมเดลการถดถอยแบบโลจิสติก

หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน 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 ในคําสั่งย่อย ฟังก์ชันจะแสดงผลสถิติแถวเดียวเกี่ยวกับโมเดล

b54b0ebd6514a498.png

เนื่องจากคุณทำการถดถอยแบบโลจิสติก ผลลัพธ์จึงรวมถึงเมตริกที่คุณเห็นในภาพหน้าจอด้านบน ได้แก่ ความแม่นยำ การเรียกคืน ความถูกต้อง คะแนน 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'
     )
  )

ข้อมูลโค้ดผลลัพธ์มีดังนี้

1efb91967acc1f0c.png

ผลลัพธ์ของโมเดลจะแสดงคะแนนที่คาดการณ์ของภาพยนตร์ในระดับ 1 ถึง 10 (การจัดประเภท) คุณอาจสงสัยว่าทำไมถึงมีแถวการคาดการณ์หลายแถวสำหรับภาพยนตร์แต่ละเรื่อง เนื่องจากโมเดลได้แสดงป้ายกำกับที่คาดการณ์ได้และโอกาสที่จะเกิดป้ายกำกับแต่ละรายการตามลำดับที่ลดลง

วิเคราะห์ผลลัพธ์ที่คาดการณ์ไว้และโมเดล

นอกจากนี้ คุณยังทําขั้นตอนการวิเคราะห์ที่ยอดเยี่ยม 2 ขั้นตอนได้ด้วย ซึ่งเป็นส่วนหนึ่งของผลการคาดการณ์ ดังนี้

  1. หากต้องการทราบสาเหตุที่โมเดลสร้างผลลัพธ์การคาดการณ์เหล่านี้ คุณสามารถใช้ฟังก์ชัน ML.EXPLAIN_PREDICT
  2. หากต้องการทราบว่าฟีเจอร์ใดสำคัญที่สุดในการกำหนดช่วงรายได้โดยทั่วไป คุณสามารถใช้ฟังก์ชัน 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 นาที เราได้ทำสิ่งต่อไปนี้

  1. ตั้งค่า BigQuery เป็นฐานข้อมูลสำหรับโปรเจ็กต์ข้อมูลวิเคราะห์
  2. สร้างโมเดลการคาดการณ์ที่กำหนดเองโดยใช้เฉพาะ SQL ของข้อมูล BigQuery และไม่มีการเขียนโค้ดอื่นๆ
  3. สร้างโมเดล BQ Auto ML โดยใช้การค้นหา SQL เท่านั้น
  4. โมเดล BQML ที่ติดตั้งใช้งานแล้วไปยัง Vertex AI Model Registry

10. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์

11. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วย BQML ที่กำหนดเองและ AutoML รวมถึงได้ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry เรียบร้อยแล้ว โดยทั้งหมดนี้ใช้เพียง SQL เท่านั้น