การสร้างโมเดล ML ทางการเงินด้วยเครื่องมือ What-If และ Vertex AI

1. ภาพรวม

ในชั้นเรียนนี้ คุณจะใช้เครื่องมือ "What-if" เพื่อวิเคราะห์โมเดล XGBoost ที่ผ่านการฝึกอบรมด้วยข้อมูลทางการเงิน หลังจากวิเคราะห์โมเดลแล้ว คุณจะทำให้โมเดลใช้งานได้กับ Vertex AI ใหม่ของ Cloud

สิ่งที่ได้เรียนรู้

โดยคุณจะได้เรียนรู้วิธีต่อไปนี้

  • ฝึกโมเดล XGBoost ในชุดข้อมูลการจํานองสาธารณะในโน้ตบุ๊กที่โฮสต์
  • วิเคราะห์โมเดลโดยใช้เครื่องมือ "What-If"
  • ทำให้โมเดล XGBoost ใช้งานได้กับ Vertex AI

ต้นทุนทั้งหมดในการใช้งานห้องทดลองนี้ใน Google Cloud อยู่ที่ประมาณ $1

2. ข้อมูลเบื้องต้นเกี่ยวกับ Vertex AI

ห้องทดลองนี้ใช้ข้อเสนอผลิตภัณฑ์ AI ใหม่ล่าสุดที่มีให้บริการใน Google Cloud Vertex AI ผสานรวมข้อเสนอ ML ทั่วทั้ง Google Cloud เข้าด้วยกันเพื่อมอบประสบการณ์การพัฒนาที่ราบรื่น ก่อนหน้านี้ โมเดลที่ฝึกด้วย AutoML และโมเดลที่กำหนดเองจะเข้าถึงได้ผ่านบริการแยกต่างหาก ข้อเสนอใหม่นี้รวมทั้ง 2 รายการไว้ใน API เดียว พร้อมกับผลิตภัณฑ์ใหม่อื่นๆ นอกจากนี้ คุณยังย้ายข้อมูลโปรเจ็กต์ที่มีอยู่ไปยัง Vertex AI ได้ด้วย หากมีความคิดเห็น โปรดดูหน้าการสนับสนุน

Vertex AI มีผลิตภัณฑ์ต่างๆ มากมายเพื่อรองรับเวิร์กโฟลว์ ML แบบครบวงจร ห้องทดลองนี้จะมุ่งเน้นที่ผลิตภัณฑ์ที่ไฮไลต์ไว้ด้านล่าง ได้แก่ การคาดการณ์และโน้ตบุ๊ก

ภาพรวมผลิตภัณฑ์ Vertex

3. ข้อมูลเบื้องต้นเกี่ยวกับ XGBoost

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

แผนภาพด้านล่างคือภาพของโมเดลต้นไม้การตัดสินใจแบบง่ายที่ประเมินว่าควรจัดการแข่งขันกีฬาหรือไม่โดยอิงตามการพยากรณ์อากาศ

ตัวอย่างโมเดลต้นไม้

เหตุใดเราจึงใช้ XGBoost สําหรับโมเดลนี้ แม้ว่าระบบประสาทเทียมแบบดั้งเดิมจะมีประสิทธิภาพดีที่สุดกับข้อมูลที่ไม่มีโครงสร้าง เช่น รูปภาพและข้อความ แต่แผนภูมิการตัดสินใจมักจะมีประสิทธิภาพดีมากกับข้อมูลที่มีโครงสร้าง เช่น ชุดข้อมูลการจำนองที่เราจะใช้ในโค้ดแล็บนี้

4. ตั้งค่าสภาพแวดล้อม

คุณต้องมีโปรเจ็กต์ Google Cloud Platform ที่เปิดใช้การเรียกเก็บเงินเพื่อเรียกใช้โค้ดแล็บนี้ หากต้องการสร้างโปรเจ็กต์ ให้ทำตามวิธีการที่นี่

ขั้นตอนที่ 1: เปิดใช้ Compute Engine API

ไปที่ Compute Engine แล้วเลือกเปิดใช้ หากยังไม่ได้เปิดใช้ คุณต้องใช้ข้อมูลนี้เพื่อสร้างอินสแตนซ์สมุดบันทึก

ขั้นตอนที่ 2: เปิดใช้ Vertex AI API

ไปที่ส่วน Vertex ของ Cloud Console แล้วคลิกเปิดใช้ Vertex AI API

แดชบอร์ด Vertex

ขั้นตอนที่ 3: สร้างอินสแตนซ์สมุดบันทึก

จากส่วน Vertex ของ Cloud Console ให้คลิกสมุดบันทึกโดยทำดังนี้

เลือกสมุดบันทึก

จากนั้นเลือกอินสแตนซ์ใหม่ จากนั้นเลือกประเภทอินสแตนซ์ TensorFlow Enterprise 2.3 ที่ไม่มี GPU

อินสแตนซ์ TFE

ใช้ตัวเลือกเริ่มต้น แล้วคลิกสร้าง เมื่อสร้างอินสแตนซ์แล้ว ให้เลือก Open JupyterLab

ขั้นตอนที่ 4: ติดตั้ง XGBoost

เมื่ออินสแตนซ์ JupyterLab เปิดขึ้นแล้ว คุณจะต้องเพิ่มแพ็กเกจ XGBoost

โดยเลือกเทอร์มินัลจากตัวเปิดแอป

จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง XGBoost เวอร์ชันล่าสุดที่ Vertex AI รองรับ

pip3 install xgboost==1.2

หลังจากขั้นตอนนี้เสร็จสมบูรณ์แล้ว ให้เปิดอินสแตนซ์สมุดบันทึก Python 3 จาก Launcher คุณพร้อมที่จะเริ่มต้นใช้งานโน้ตบุ๊กแล้ว

ขั้นตอนที่ 5: นําเข้าแพ็กเกจ Python

ในเซลล์แรกของโน้ตบุ๊ก ให้เพิ่มการนําเข้าต่อไปนี้แล้วเรียกใช้เซลล์ โดยกดปุ่มลูกศรขวาในเมนูด้านบนหรือกด Command-Enter ดังนี้

import pandas as pd
import xgboost as xgb
import numpy as np
import collections
import witwidget

from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.utils import shuffle
from witwidget.notebook.visualization import WitWidget, WitConfigBuilder

5. ดาวน์โหลดและประมวลผลข้อมูล

เราจะใช้ชุดข้อมูลการจํานองจาก ffiec.gov เพื่อฝึกโมเดล XGBoost เราได้ประมวลผลชุดข้อมูลต้นฉบับบางส่วนแล้วและสร้างเวอร์ชันที่เล็กลงเพื่อให้คุณใช้ในการฝึกโมเดล โมเดลจะคาดการณ์ใบสมัครสินเชื่อจำนองจะได้รับอนุมัติหรือไม่

ขั้นตอนที่ 1: ดาวน์โหลดชุดข้อมูลที่ประมวลผลล่วงหน้า

เราได้เตรียมชุดข้อมูลเวอร์ชันหนึ่งไว้ให้คุณใน Google Cloud Storage แล้ว คุณสามารถดาวน์โหลดได้โดยเรียกใช้คำสั่ง gsutil ต่อไปนี้ใน Jupyter Notebook

!gsutil cp 'gs://mortgage_dataset_files/mortgage-small.csv' .

ขั้นตอนที่ 2: อ่านชุดข้อมูลด้วย Pandas

ก่อนที่เราจะสร้าง Pandas DataFrame เราจะสร้าง dict ของประเภทข้อมูลแต่ละคอลัมน์เพื่อให้ Pandas อ่านชุดข้อมูลได้อย่างถูกต้อง

COLUMN_NAMES = collections.OrderedDict({
 'as_of_year': np.int16,
 'agency_code': 'category',
 'loan_type': 'category',
 'property_type': 'category',
 'loan_purpose': 'category',
 'occupancy': np.int8,
 'loan_amt_thousands': np.float64,
 'preapproval': 'category',
 'county_code': np.float64,
 'applicant_income_thousands': np.float64,
 'purchaser_type': 'category',
 'hoepa_status': 'category',
 'lien_status': 'category',
 'population': np.float64,
 'ffiec_median_fam_income': np.float64,
 'tract_to_msa_income_pct': np.float64,
 'num_owner_occupied_units': np.float64,
 'num_1_to_4_family_units': np.float64,
 'approved': np.int8
})

ต่อไปเราจะสร้าง DataFrame โดยส่งประเภทข้อมูลที่ระบุไว้ด้านบน การสับเปลี่ยนข้อมูลเป็นสิ่งสําคัญในกรณีที่ชุดข้อมูลเดิมมีลําดับในลักษณะที่เฉพาะเจาะจง เราใช้ยูทิลิตี sklearn ชื่อ shuffle ในการดําเนินการนี้ ซึ่งเราได้นําเข้ามาในเซลล์แรก

data = pd.read_csv(
 'mortgage-small.csv',
 index_col=False,
 dtype=COLUMN_NAMES
)
data = data.dropna()
data = shuffle(data, random_state=2)
data.head()

data.head() มาดูตัวอย่างชุดข้อมูล 5 แถวแรกใน Pandas กัน คุณควรเห็นบางสิ่งในลักษณะนี้หลังจากเรียกใช้เซลล์ด้านบน

ตัวอย่างชุดข้อมูลสินเชื่อจำนอง

ต่อไปนี้คือฟีเจอร์ที่เราจะใช้ฝึกโมเดล หากเลื่อนไปจนสุด คุณจะเห็นคอลัมน์สุดท้าย approved ซึ่งเป็นสิ่งที่เราคาดการณ์ ค่า 1 หมายความว่าแอปพลิเคชันหนึ่งๆ ได้รับอนุมัติ และ 0 บ่งชี้ว่าแอปพลิเคชันนั้นถูกปฏิเสธ

หากต้องการดูการกระจายของค่าที่อนุมัติ / ปฏิเสธในชุดข้อมูล และสร้างอาร์เรย์ numpy ของป้ายกำกับ ให้เรียกใช้คำสั่งต่อไปนี้

# Class labels - 0: denied, 1: approved
print(data['approved'].value_counts())

labels = data['approved'].values
data = data.drop(columns=['approved'])

ประมาณ 66% ของชุดข้อมูลมีแอปพลิเคชันที่อนุมัติแล้ว

ขั้นตอนที่ 3: สร้างคอลัมน์จำลองสำหรับค่าเชิงหมวดหมู่

ชุดข้อมูลนี้มีค่าแบบหมวดหมู่และตัวเลขผสมกัน แต่ XGBoost กำหนดให้ฟีเจอร์ทั้งหมดต้องเป็นตัวเลข เราจะใช้ประโยชน์จากฟังก์ชัน get_dummies ของ Pandas สำหรับโมเดล XGBoost แทนการนำเสนอค่าเชิงหมวดหมู่โดยใช้การเข้ารหัสแบบฮอตเวิร์ก

get_dummies จะนำคอลัมน์ที่มีค่าที่เป็นไปได้หลายค่ามาแปลงเป็นชุดคอลัมน์ซึ่งแต่ละคอลัมน์มีเพียง 0 และ 1 เท่านั้น เช่น หากเรามีคอลัมน์ "color" ที่มีค่าที่เป็นไปได้เป็น "blue" และ "red" get_dummies ก็จะแปลงข้อมูลนี้เป็น 2 คอลัมน์ที่ชื่อ "color_blue" และ "color_red" ที่มีค่าบูลีน 0 และ 1 ทั้งหมด

หากต้องการสร้างคอลัมน์จำลองสำหรับฟีเจอร์เชิงหมวดหมู่ ให้เรียกใช้โค้ดต่อไปนี้

dummy_columns = list(data.dtypes[data.dtypes == 'category'].index)
data = pd.get_dummies(data, columns=dummy_columns)

data.head()

เมื่อดูตัวอย่างข้อมูลในครั้งนี้ คุณจะเห็นองค์ประกอบเดียว (เช่น purchaser_type ในภาพด้านล่าง) แยกออกเป็นหลายคอลัมน์ ดังนี้

คอลัมน์ Dummy ของ Pandas

ขั้นตอนที่ 4: การแยกข้อมูลออกเป็นชุดการฝึกและชุดทดสอบ

แนวคิดที่สําคัญในแมชชีนเลิร์นนิงคือการแยกชุดข้อมูลที่ใช้ฝึก / ชุดข้อมูลที่ใช้ทดสอบ เราจะนำข้อมูลส่วนใหญ่ไปใช้ฝึกโมเดล และเก็บข้อมูลที่เหลือไว้เพื่อทดสอบโมเดลกับข้อมูลที่ไม่เคยเห็นมาก่อน

เพิ่มโค้ดต่อไปนี้ลงในโน้ตบุ๊ค ซึ่งใช้ฟังก์ชัน Scikit-learn train_test_split เพื่อแยกข้อมูล

x,y = data.values,labels
x_train,x_test,y_train,y_test = train_test_split(x,y)

ตอนนี้คุณก็พร้อมสร้างและฝึกโมเดลแล้ว

6. สร้าง ฝึก และประเมินโมเดล XGBoost

ขั้นตอนที่ 1: กำหนดและฝึกโมเดล XGBoost

การสร้างโมเดลใน XGBoost นั้นเป็นเรื่องง่าย เราจะใช้คลาส XGBClassifier เพื่อสร้างโมเดล และเพียงแค่ต้องส่งพารามิเตอร์ objective ที่ถูกต้องสำหรับงานการจัดประเภทที่เฉพาะเจาะจง ในกรณีนี้เราใช้ reg:logistic เนื่องจากเรามีปัญหาการแยกประเภทแบบไบนารี และต้องการให้โมเดลแสดงค่าเดี่ยวในช่วง (0,1): 0 สำหรับรายการที่ไม่ได้รับอนุมัติ และ 1 สำหรับอนุมัติ

โค้ดต่อไปนี้จะสร้างโมเดล XGBoost

model = xgb.XGBClassifier(
    objective='reg:logistic'
)

คุณสามารถฝึกโมเดลด้วยโค้ดเพียงบรรทัดเดียวโดยเรียกใช้เมธอด fit() แล้วส่งชุดข้อมูลการฝึกและป้ายกำกับให้

model.fit(x_train, y_train)

ขั้นตอนที่ 2: ประเมินความแม่นยำของโมเดล

ตอนนี้เราสามารถใช้โมเดลที่ผ่านการฝึกเพื่อสร้างการคาดการณ์เกี่ยวกับข้อมูลทดสอบด้วยฟังก์ชัน predict() ได้แล้ว

จากนั้นเราจะใช้ฟังก์ชัน accuracy_score() ของ Scikit-learn เพื่อคํานวณความแม่นยําของโมเดลตามประสิทธิภาพของโมเดลกับข้อมูลทดสอบ เราจะส่งค่าที่เป็นความจริงไปพร้อมกับค่าที่คาดการณ์ของโมเดลสำหรับแต่ละตัวอย่างในชุดทดสอบ

y_pred = model.predict(x_test)
acc = accuracy_score(y_test, y_pred.round())
print(acc, '\n')

คุณควรเห็นความแม่นยำประมาณ 87% แต่ค่าของคุณอาจแตกต่างกันเล็กน้อยเนื่องจากแมชชีนเลิร์นนิงมีองค์ประกอบของความสุ่มอยู่เสมอ

ขั้นตอนที่ 3: บันทึกโมเดล

หากต้องการทำให้โมเดลใช้งานได้ ให้เรียกใช้โค้ดต่อไปนี้เพื่อบันทึกลงในไฟล์ในเครื่อง

model.save_model('model.bst')

7. ใช้เครื่องมือ "What-if" เพื่อตีความโมเดล

ขั้นตอนที่ 1: สร้างการแสดงภาพเครื่องมือ "What-if"

หากต้องการเชื่อมต่อเครื่องมือ "What-if" กับโมเดลในเครื่อง คุณต้องส่งชุดย่อยของตัวอย่างทดสอบพร้อมกับค่าที่เป็นความจริงสำหรับตัวอย่างเหล่านั้น มาสร้างอาร์เรย์ Numpy ของตัวอย่างทดสอบ 500 รายการพร้อมป้ายกำกับข้อมูลจากการสังเกตการณ์โดยตรงกัน

num_wit_examples = 500
test_examples = np.hstack((x_test[:num_wit_examples],y_test[:num_wit_examples].reshape(-1,1)))

การสร้างอินสแตนซ์ของเครื่องมือ "What-if" นั้นง่ายเพียงสร้างออบเจ็กต์ WitConfigBuilder แล้วส่งโมเดลที่ต้องการวิเคราะห์

เนื่องจากเครื่องมือ "What-If" ต้องการรายการคะแนนสำหรับแต่ละคลาสในโมเดล (ในกรณีนี้ 2 คลาส) เราจะใช้เมธอด predict_proba ของ XGBoost กับเครื่องมือ "What-If" ดังนี้

config_builder = (WitConfigBuilder(test_examples.tolist(), data.columns.tolist() + ['mortgage_status'])
  .set_custom_predict_fn(model.predict_proba)
  .set_target_feature('mortgage_status')
  .set_label_vocab(['denied', 'approved']))
WitWidget(config_builder, height=800)

โปรดทราบว่าระบบจะใช้เวลา 1 นาทีในการโหลดการแสดงภาพ เมื่อโหลดแล้ว คุณควรเห็นข้อมูลต่อไปนี้

มุมมองเริ่มต้นของเครื่องมือ "ถ้าหาก"

แกน Y แสดงการคาดการณ์ของโมเดลให้กับเรา โดย 1 เป็นการคาดการณ์ approved ที่มีความเชื่อมั่นสูง และ 0 เป็นการคาดการณ์ denied ที่มีความเชื่อมั่นสูง แกน x เป็นเพียงการกระจายของจุดข้อมูลที่โหลดทั้งหมด

ขั้นตอนที่ 2: สํารวจจุดข้อมูลแต่ละจุด

มุมมองเริ่มต้นในเครื่องมือ "What-if" คือแท็บเครื่องมือแก้ไขจุดข้อมูล ในส่วนนี้ คุณสามารถคลิกจุดข้อมูลแต่ละจุดเพื่อดูฟีเจอร์ เปลี่ยนค่าฟีเจอร์ และดูว่าการเปลี่ยนแปลงดังกล่าวส่งผลต่อการคาดการณ์ของโมเดลในจุดข้อมูลแต่ละจุดอย่างไร

ในตัวอย่างนี้ เราเลือกจุดข้อมูลที่ใกล้เคียงกับเกณฑ์ 0.5 การสมัครขอสินเชื่อที่อยู่อาศัยที่เชื่อมโยงกับจุดข้อมูลนี้มาจาก CFPB เราเปลี่ยนฟีเจอร์นั้นเป็น 0 และเปลี่ยนค่า agency_code_Department of Housing and Urban Development (HUD) เป็น 1 ด้วยเพื่อดูว่าจะเกิดอะไรขึ้นกับการคาดการณ์ของโมเดลหากสินเชื่อนี้มาจาก HUD แทน

ดังที่เห็นในส่วนด้านซ้ายล่างของเครื่องมือ "What-if" การเปลี่ยนแปลงฟีเจอร์นี้ทำให้การคาดการณ์ approved ของโมเดลลดลง 32% อย่างมีนัยสำคัญ กรณีนี้อาจบ่งชี้ว่าเอเจนซีที่เป็นต้นกำเนิดการกู้ยืมมีผลกระทบอย่างมากต่อผลลัพธ์ของโมเดล แต่เราต้องทำการวิเคราะห์เพิ่มเติมเพื่อความแน่ใจ

ในส่วนด้านซ้ายล่างของ UI เราจะเห็นค่าข้อมูลจากการสังเกตการณ์โดยตรงสำหรับจุดข้อมูลแต่ละจุดและเปรียบเทียบกับค่าที่คาดการณ์ของโมเดลได้ด้วย

ขั้นตอนที่ 3: การวิเคราะห์แบบเทียบกับกลุ่มควบคุม

ถัดไป ให้คลิกจุดข้อมูลใดก็ได้ แล้วเลื่อนแถบเลื่อนแสดงจุดข้อมูลสมมติที่ใกล้ที่สุดไปทางขวา

การเลือกตัวเลือกนี้จะแสดงจุดข้อมูลที่มีค่าองค์ประกอบที่คล้ายกันที่สุดกับจุดข้อมูลเดิมที่คุณเลือก แต่มีการคาดการณ์ตรงข้าม จากนั้นเลื่อนดูค่าของฟีเจอร์เพื่อดูจุดที่จุดข้อมูล 2 จุดแตกต่างกัน (ระบบจะไฮไลต์ความแตกต่างเป็นสีเขียวและตัวหนา)

ขั้นตอนที่ 4: ดูผังความเกี่ยวข้องบางส่วน

หากต้องการดูว่าฟีเจอร์แต่ละรายการส่งผลต่อการคาดการณ์โดยรวมของโมเดลอย่างไร ให้เลือกช่องผังความเกี่ยวข้องบางส่วน และตรวจสอบว่าได้เลือกผังความเกี่ยวข้องบางส่วนส่วนกลางแล้ว

จากข้อมูลนี้ เราพบว่าสินเชื่อที่มาจาก HUD มีแนวโน้มที่จะถูกปฏิเสธมากกว่าเล็กน้อย กราฟเป็นรูปนี้เนื่องจากรหัสเอเจนซีเป็นฟีเจอร์บูลีน ค่าจึงต้องเป็น 0 หรือ 1 เท่านั้น

applicant_income_thousands เป็นฟีเจอร์ตัวเลข และในผังความเกี่ยวข้องบางส่วน เราเห็นว่ารายได้ที่สูงขึ้นจะเพิ่มโอกาสที่ใบสมัครจะได้รับอนุมัติเล็กน้อย แต่ไม่เกินประมาณ $200,000 หลังจาก 200, 000 บาท ฟีเจอร์นี้จะไม่ส่งผลต่อการคาดการณ์ของโมเดล

ขั้นตอนที่ 5: สํารวจประสิทธิภาพโดยรวมและความยุติธรรม

จากนั้นไปที่แท็บประสิทธิภาพและความเป็นธรรม ข้อมูลนี้แสดงสถิติประสิทธิภาพโดยรวมเกี่ยวกับผลลัพธ์ของโมเดลในชุดข้อมูลที่ให้ไว้ ซึ่งรวมถึงตารางความสับสน เส้นโค้ง PR และเส้นโค้ง ROC

เลือก mortgage_status เป็นฟีเจอร์ Ground Truth เพื่อดูตารางความสับสน

เมทริกซ์ความสับสนนี้แสดงการคาดการณ์ที่ถูกต้องและไม่ถูกต้องของโมเดลเป็นเปอร์เซ็นต์ของทั้งหมด หากบวกสี่เหลี่ยมจัตุรัสจริงเป็น "ใช่" / คาดการณ์เป็น "ใช่" และจริงเป็น "ไม่" / คาดการณ์เป็น "ไม่" ผลที่ได้ควรมีความแม่นยำเท่ากับโมเดลของคุณ (ในกรณีนี้ประมาณ 87% แต่โมเดลของคุณอาจแตกต่างกันเล็กน้อยเนื่องจากมีองค์ประกอบของความสุ่มในการฝึกโมเดล ML)

นอกจากนี้คุณยังสามารถทดสอบกับแถบเลื่อนเกณฑ์ เพิ่มและลดคะแนนการจัดประเภทเชิงบวกที่โมเดลจะต้องส่งคืนก่อนที่จะตัดสินใจคาดการณ์ approved สำหรับสินเชื่อ รวมถึงดูว่าการเปลี่ยนแปลงดังกล่าวเปลี่ยนแปลงความแม่นยำ ผลบวกลวง และผลลบลวงอย่างไร ในกรณีนี้ ความแม่นยำจะสูงสุดเมื่อเกณฑ์อยู่ที่ประมาณ .55

ถัดไป จากเมนูแบบเลื่อนลงแบ่งตามด้านซ้าย ให้เลือก loan_purpose_Home_purchase

ตอนนี้คุณจะเห็นประสิทธิภาพของข้อมูล 2 ชุด ได้แก่ ส่วนแบ่ง "0" แสดงเมื่อสินเชื่อไม่ได้มีไว้สำหรับการซื้อบ้าน และส่วนแบ่ง "1" มีไว้สำหรับการกู้ยืมสำหรับการซื้อบ้าน ตรวจสอบความแม่นยำ อัตราผลบวกลวง และอัตราผลลบลวงระหว่างกลุ่มย่อย 2 กลุ่มเพื่อหาความแตกต่างของประสิทธิภาพ

หากขยายแถวเพื่อดูที่ตารางความสับสน คุณจะเห็นได้ว่าโมเดลคาดการณ์ว่า "อนุมัติ" สำหรับการสมัครขอสินเชื่อเพื่อซื้อบ้านประมาณ 70% และสินเชื่อที่ไม่ใช่เพื่อซื้อบ้านเพียง 46% (เปอร์เซ็นต์ที่แน่นอนจะแตกต่างกันไปตามโมเดล)

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

ขั้นตอนที่ 6: สำรวจการเผยแพร่ฟีเจอร์

สุดท้าย ให้ไปที่แท็บฟีเจอร์ในเครื่องมือ "ถ้าหาก" ซึ่งจะแสดงการแจกแจงค่าของฟีเจอร์แต่ละรายการในชุดข้อมูล

คุณใช้แท็บนี้เพื่อตรวจสอบว่าชุดข้อมูลมีความสมดุลได้ เช่น ดูเหมือนว่าสินเชื่อในชุดข้อมูลมีเพียงไม่กี่รายการที่มาจาก Farm Service Agency เราอาจพิจารณาเพิ่มการกู้ยืมจากเอเจนซีดังกล่าวหากมีข้อมูล เพื่อปรับปรุงความแม่นยำของโมเดล

เราได้อธิบายไอเดียการสำรวจเครื่องมือ "What-if" เพียงไม่กี่ข้อที่นี่ ลองใช้เครื่องมือกันต่อได้เลย ยังมีพื้นที่ให้คุณสำรวจอีกมากมาย

8. ติดตั้งใช้งานโมเดลใน Vertex AI

เรามีโมเดลที่ทำงานในเครื่อง แต่คงจะดีหากเราสามารถคาดการณ์จากโมเดลได้จากทุกที่ (ไม่ใช่แค่ในโน้ตบุ๊คนี้) ในขั้นตอนนี้ เราจะทำให้โมเดลใช้งานได้บนระบบคลาวด์

ขั้นตอนที่ 1: สร้างที่เก็บข้อมูล Cloud Storage สำหรับโมเดลของเรา

ก่อนอื่นมากำหนดตัวแปรสภาพแวดล้อมบางส่วนที่เราจะใช้ตลอดทั้งโค้ดแล็บกัน กรอกค่าด้านล่างด้วยชื่อโปรเจ็กต์ Google Cloud, ชื่อที่เก็บข้อมูลระบบคลาวด์ที่ต้องการสร้าง (ต้องเป็นชื่อที่ไม่ซ้ำกันทั่วโลก) และชื่อเวอร์ชันสำหรับโมเดลเวอร์ชันแรก

# Update the variables below to your own Google Cloud project ID and GCS bucket name. You can leave the model name we've specified below:
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
MODEL_NAME = 'xgb_mortgage'

ตอนนี้เราพร้อมที่จะสร้างที่เก็บข้อมูลเพื่อจัดเก็บไฟล์โมเดล XGBoost แล้ว เราจะชี้ Vertex AI ไปที่ไฟล์นี้เมื่อติดตั้งใช้งาน

เรียกใช้คำสั่ง gsutil นี้จากภายในสมุดบันทึกเพื่อสร้างที่เก็บข้อมูลของพื้นที่เก็บข้อมูลระดับภูมิภาค

!gsutil mb -l us-central1 $MODEL_BUCKET

ขั้นตอนที่ 2: คัดลอกไฟล์โมเดลไปยัง Cloud Storage

ต่อไป เราจะคัดลอกไฟล์โมเดล XGBoost ที่บันทึกไว้ไปยัง Cloud Storage เรียกใช้คำสั่ง gsutil ต่อไปนี้

!gsutil cp ./model.bst $MODEL_BUCKET

ไปที่เบราว์เซอร์พื้นที่เก็บข้อมูลใน Cloud Console เพื่อตรวจสอบว่าได้คัดลอกไฟล์แล้ว โดยทำดังนี้

ขั้นตอนที่ 3: สร้างโมเดลและทำให้ใช้งานได้ในปลายทาง

เราเกือบจะพร้อมทำให้โมเดลใช้งานได้ในระบบคลาวด์แล้ว ใน Vertex AI โมเดลสามารถเก็บปลายทางได้หลายปลายทาง เราจะสร้างโมเดลก่อน จากนั้นจึงสร้างปลายทางภายในโมเดลนั้นและนำไปใช้งาน

ก่อนอื่น ให้ใช้ gcloud CLI เพื่อสร้างโมเดล โดยทำดังนี้

!gcloud beta ai models upload \
--display-name=$MODEL_NAME \
--artifact-uri=$MODEL_BUCKET \
--container-image-uri=us-docker.pkg.dev/cloud-aiplatform/prediction/xgboost-cpu.1-2:latest \
--region=us-central1

พารามิเตอร์ artifact-uri จะชี้ไปยังตำแหน่งใน Storage ที่คุณบันทึกโมเดล XGBoost พารามิเตอร์ container-image-uri จะบอก Vertex AI ว่าให้ใช้คอนเทนเนอร์ที่สร้างไว้ล่วงหน้ารายการใดเพื่อแสดงผล เมื่อคำสั่งนี้เสร็จสิ้นแล้ว ให้ไปที่ส่วนโมเดลของคอนโซล Vertex เพื่อรับรหัสของโมเดลใหม่ คุณดูข้อมูลได้ที่

รับรหัสโมเดลจากคอนโซล

คัดลอกรหัสนั้นและบันทึกลงในตัวแปร

MODEL_ID = "your_model_id"

ถึงเวลาสร้างปลายทางภายในโมเดลนี้แล้ว ซึ่งทำได้โดยใช้คำสั่ง gcloud ต่อไปนี้

!gcloud beta ai endpoints create \
--display-name=xgb_mortgage_v1 \
--region=us-central1

เมื่อดำเนินการเสร็จแล้ว คุณควรเห็นตำแหน่งของอุปกรณ์ปลายทางที่บันทึกไว้ในเอาต์พุตของโน้ตบุ๊ค มองหาบรรทัดที่ระบุว่าสร้างปลายทางด้วยเส้นทางที่มีลักษณะดังนี้ projects/project_ID/locations/us-central1/endpoints/endpoint_ID. จากนั้นแทนที่ค่าด้านล่างด้วยรหัสของปลายทางที่สร้างไว้ด้านบน

ENDPOINT_ID = "your_endpoint_id"

หากต้องการทำให้ปลายทางใช้งานได้ ให้เรียกใช้คำสั่ง gcloud ด้านล่าง

!gcloud beta ai endpoints deploy-model $ENDPOINT_ID \
--region=us-central1 \
--model=$MODEL_ID \
--display-name=xgb_mortgage_v1 \
--machine-type=n1-standard-2 \
--traffic-split=0=100

การติดตั้งใช้งานอุปกรณ์ปลายทางจะใช้เวลาประมาณ 5-10 นาที ขณะที่ปลายทางทำให้ใช้งานได้ ให้ไปที่ส่วนรุ่นของคอนโซล คลิกโมเดลแล้วคุณควรเห็นอุปกรณ์ปลายทางกำลังทํางาน

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

ขั้นตอนที่ 4: ทดสอบโมเดลที่ติดตั้งใช้งาน

ทดสอบโมเดลที่ทําให้ใช้งานได้โดยใช้ gcloud เพื่อทำนายผลลัพธ์เพื่อให้แน่ใจว่าโมเดลที่ทําให้ใช้งานได้ ก่อนอื่น ให้บันทึกไฟล์ JSON ที่มีตัวอย่างจากชุดทดสอบของเรา

%%writefile predictions.json
{
  "instances": [
    [2016.0, 1.0, 346.0, 27.0, 211.0, 4530.0, 86700.0, 132.13, 1289.0, 1408.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0]
  ]
}

ทดสอบโมเดลโดยเรียกใช้คําสั่ง gcloud นี้

!gcloud beta ai endpoints predict $ENDPOINT_ID \
--json-request=predictions.json \
--region=us-central1

คุณควรเห็นการคาดการณ์ของโมเดลในเอาต์พุต ตัวอย่างนี้ได้รับอนุมัติแล้ว คุณจึงควรเห็นค่าใกล้เคียงกับ 1

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

หากต้องการใช้สมุดบันทึกนี้ต่อไป ขอแนะนำให้คุณปิดสมุดบันทึกเมื่อไม่ได้ใช้งาน จาก UI ของโน้ตบุ๊กใน Cloud Console ให้เลือกโน้ตบุ๊ก แล้วเลือกหยุด

หากต้องการลบทรัพยากรทั้งหมดที่สร้างไว้ในห้องทดลองนี้ ให้ลบอินสแตนซ์โน้ตบุ๊กแทนการหยุด

หากต้องการลบอุปกรณ์ปลายทางที่ติดตั้งใช้งาน ให้ไปที่ส่วน "อุปกรณ์ปลายทาง" ของคอนโซล Vertex แล้วคลิกไอคอนลบ

หากต้องการลบที่เก็บข้อมูลของพื้นที่เก็บข้อมูล โดยใช้เมนูการนำทางใน Cloud Console จากนั้นเรียกดูพื้นที่เก็บข้อมูล เลือกที่เก็บข้อมูล แล้วคลิกลบ: