تحليل نموذج تعلُّم الآلة المالي المنشور على Cloud AI Platform باستخدام أداة "ماذا لو"

1. نظرة عامة

في هذا الدرس التطبيقي، ستستخدم أداة What-if لتحليل نموذج XGBoost المُدرَّب على البيانات المالية وتم نشره على Cloud AI Platform.

المعلومات التي تطّلع عليها

وستتعرّف على كيفية:

  • تدريب نموذج XGBoost على مجموعة بيانات للرهن العام في AI Platform Notebook
  • نشر نموذج XGBoost في AI Platform
  • تحليل النموذج باستخدام أداة ماذا لو

تبلغ التكلفة الإجمالية لتشغيل هذا التمرين على Google Cloud حوالي $1.

2. مقالة تمهيدية سريعة في XGBoost

XGBoost هو إطار عمل لتعلُّم الآلة يستخدم أشجار القرارات وتعزيز التدرّج لإنشاء نماذج توقّعية. يعمل هذا المنهج من خلال تجميع عدة أشجار قرارات معًا بناءً على الدرجة المرتبطة بالعُقد الورقية المختلفة في أي شجرة.

يمثّل المخطّط أدناه تصورًا لنموذج شجرة قرارات بسيط يقيّم ما إذا كان يجب لعب مباراة رياضية استنادًا إلى توقعات الطقس:

308a0bfc70733abf.png

لماذا نستخدم XGBoost لهذا النموذج؟ لقد تبيَّن أنّ الشبكات العصبية التقليدية تحقّق أفضل أداء مع البيانات غير المنظَّمة مثل الصور والنصوص، ولكن غالبًا ما تحقّق أشجار القرارات أداءً جيدًا للغاية على البيانات المنظَّمة مثل مجموعة بيانات الرهن العقاري التي سنستخدمها في هذا الدرس التطبيقي حول الترميز.

3- إعداد البيئة

ستحتاج إلى مشروع Google Cloud Platform مع تفعيل الفوترة لتشغيل هذا الدرس التطبيقي حول الترميز. لإنشاء مشروع، يُرجى اتّباع التعليمات هنا.

الخطوة 1: تفعيل Cloud AI Platform models API

انتقِل إلى قسم "نماذج منصة الذكاء الاصطناعي" (AI) في Cloud Console وانقر على "تفعيل" إذا لم يسبق لك تفعيله.

d0d38662851c6af3.png

الخطوة 2: تفعيل Compute Engine API

انتقِل إلى Compute Engine واختَر تفعيل إذا لم يسبق لك تفعيله. ستحتاج إلى هذا لإنشاء مثيل دفتر الملاحظات.

الخطوة 3: إنشاء مثيل من AI Platform Notebook

انتقِل إلى قسم AI Platform Notebooks في Cloud Console وانقر على New Instance (مثيل جديد). بعد ذلك، اختَر أحدث نوع من المثيل TF Enterprise 2.x بدون وحدات معالجة الرسومات:

7d16190440ab2e9c.png

استخدِم الخيارات التلقائية، ثم انقر على إنشاء. بعد إنشاء المثيل، اختَر فتح JupyterLab:

772f8868d3841ba0.png

الخطوة 4: تثبيت XGBoost

بعد فتح مثيل JupyterLab، ستحتاج إلى إضافة حزمة XGBoost.

لإجراء ذلك، حدد تطبيق Terminal من مشغِّل التطبيقات:

28dcf2790ce77c96.png

بعد ذلك، شغِّل ما يلي لتثبيت أحدث إصدار من XGBoost متوافق مع Cloud AI Platform:

pip3 install xgboost==0.90

بعد اكتمال ذلك، افتح مثيل Python 3 Notebook من مشغّل التطبيقات. أنت الآن جاهز للبدء في دفتر ملاحظاتك!

الخطوة 5: استيراد حِزم Python

في الخلية الأولى من دفتر الملاحظات، أضف عمليات الاستيراد التالية وشغِّل الخلية. يمكنك تشغيله بالضغط على زر السهم المتّجه لليمين في القائمة العلوية أو الضغط على مفتاح الأوامر:

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

4. تنزيل البيانات ومعالجتها

سنستخدم مجموعة بيانات الرهن العقاري من ffiec.gov لتدريب نموذج XGBoost. لقد أجرينا بعض المعالجة المسبقة لمجموعة البيانات الأصلية وأنشأنا نسخة أصغر لاستخدامها في تطبيق النموذج. ويتوقّع هذا النموذج ما إذا كان ستتم الموافقة على طلب معيّن للرهن العقاري أم لا.

الخطوة 1: تنزيل مجموعة البيانات التي تمّت معالجتها مسبقًا

وفّرنا لك نسخة من مجموعة البيانات في Google Cloud Storage. يمكنك تنزيله من خلال تنفيذ الأمر gsutil التالي في دفتر ملاحظات Jupyter:

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

الخطوة 2: قراءة مجموعة البيانات باستخدام Pandas

قبل أن ننشئ Pandas DataFrame لدينا، سننشئ إملاء لنوع بيانات كل عمود حتى تقرأ 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() معاينة أول خمسة صفوف في مجموعة البيانات في Pandas. يُفترض أن ترى شيئًا مثل هذا بعد تشغيل الخلية أعلاه:

29106b71103235a6.png

في ما يلي الميزات التي سنستخدمها لتطبيق النموذج. إذا انتقلت إلى أسفل الصفحة، سترى العمود الأخير 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 تتطلب أن تكون جميع الميزات رقمية. بدلاً من تمثيل القيم الفئوية باستخدام ترميز واحد فعال، سنستفيد من دالة Pandas get_dummies في نموذج XGBoost.

تأخذ get_dummies عمودًا يحتوي على عدة قيم محتملة وتحوِّله إلى سلسلة من الأعمدة يحتوي كل منها على 0 و1 فقط. على سبيل المثال، إذا كان لدينا عمود "color" بالقيم المحتملة "للأزرق" و"أحمر" get_dummies يحول هذا إلى عمودين باسم "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 في الصورة أدناه) مقسّمة إلى أعمدة متعددة:

83aacfaad626e538.png

الخطوة 4: تقسيم البيانات إلى مجموعات تدريب واختبار

أحد المفاهيم المهمة في التعلم الآلي هو قسمة التطبيق / الاختبار. سوف نأخذ معظم بياناتنا ونستخدمها لتدريب نموذجنا، وسنخصص باقي البيانات لاختبار نموذجنا على بيانات لم يسبق لها مثيل.

أضف الرمز التالي إلى دفترك، والذي يستخدم دالة ساي كيت ليرن train_test_split لقسمة البيانات:

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

أصبحت الآن مستعدًا لبناء نموذجك وتدريبه!

5- إنشاء نموذج 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 لحساب دقة النموذج بناءً على مستوى أدائه في بيانات الاختبار. سنمرر له قيم الحقيقة الأساسية مع القيم المتوقعة للنموذج لكل مثال في مجموعة الاختبار:

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

من المفترض أن ترى الدقة بنسبة 87% تقريبًا، إلا أنّ دقتها ستختلف قليلاً نظرًا لوجود عنصر عشوائي في تعلُّم الآلة.

الخطوة 3: حفظ النموذج

لنشر النموذج، شغِّل الرمز التالي لحفظه في ملف محلي:

model.save_model('model.bst')

6- تفعيل النموذج في Cloud AI Platform

لقد نجح نموذجنا في العمل محليًا، ولكن سيكون من الرائع أن نتمكن من التنبؤ به من أي مكان (وليس هذا الدفتر فقط!). في هذه الخطوة سوف ننشره إلى السحابة.

الخطوة 1: إنشاء حزمة Cloud Storage لنموذجنا

لنبدأ أولاً بتعريف بعض متغيرات البيئة التي سنستخدمها خلال باقي الدرس التطبيقي حول الترميز. املأ القيم أدناه باسم مشروعك على Google Cloud، واسم حزمة التخزين في السحابة الإلكترونية التي تريد إنشاءها (يجب أن تكون فريدة عالميًا)، واسم الإصدار للإصدار الأول من نموذجك:

# Update these to your own GCP project, model, and version names
GCP_PROJECT = 'your-gcp-project'
MODEL_BUCKET = 'gs://storage_bucket_name'
VERSION_NAME = 'v1'
MODEL_NAME = 'xgb_mortgage'

نحن الآن جاهزون لإنشاء حزمة تخزين لتخزين ملف نموذج XGBoost. سنوجه Cloud AI Platform إلى هذا الملف عند نشر التطبيق.

نفِّذ الأمر gsutil التالي من ورقة الملاحظات لإنشاء حزمة:

!gsutil mb $MODEL_BUCKET

الخطوة 2: نسخ ملف النموذج إلى Cloud Storage

بعد ذلك، سننسخ ملف نموذج XGBoost المحفوظ إلى Cloud Storage. قم بتشغيل الأمر gsutil التالي:

!gsutil cp ./model.bst $MODEL_BUCKET

انتقِل إلى متصفِّح مساحة التخزين في Cloud Console للتأكّد من نسخ الملف:

31e2567fa0117214.png

الخطوة 3: إنشاء النموذج ونشره

نحن جاهزون تقريبًا لنشر النموذج! سيؤدي أمر gcloud التالي في ai-platform إلى إنشاء نموذج جديد في مشروعك. سنطلق على هذا اسم xgb_mortgage:

!gcloud ai-platform models create $MODEL_NAME --region='global'

حان الوقت الآن لنشر النموذج. يمكننا القيام بذلك باستخدام الأمر gcloud التالي:

!gcloud ai-platform versions create $VERSION_NAME \
--model=$MODEL_NAME \
--framework='XGBOOST' \
--runtime-version=2.1 \
--origin=$MODEL_BUCKET \
--python-version=3.7 \
--project=$GCP_PROJECT \
--region='global'

أثناء تنفيذ هذه العملية، يُرجى التحقّق من قسم النماذج في وحدة تحكّم AI Platform. من المفترض أن يظهر لك الإصدار الجديد الذي يتم نشره هناك:

342875ba92becad1.png

عند اكتمال النشر بنجاح، ستظهر لك علامة اختيار خضراء تشير إلى موضع مؤشر التحميل. من المفترض أن يستغرق النشر من دقيقتين إلى 3 دقائق.

الخطوة 4: اختبار النموذج المنشور

للتأكد من أنّ النموذج المنشور يعمل، اختبِره باستخدام gcloud لإنشاء توقُّع. أولاً، احفظ ملف جسون يتضمن المثال الأول من مجموعة الاختبار:

%%writefile predictions.json
[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]

اختبر النموذج من خلال تشغيل الرمز التالي:

prediction = !gcloud ai-platform predict --model=xgb_mortgage --region='global' --json-instances=predictions.json --version=$VERSION_NAME --verbosity=none

print(prediction)

من المفترض أن ترى تنبؤات النموذج في المخرجات. تمت الموافقة على هذا المثال بالتحديد، لذا من المفترض أن تظهر لك قيمة قريبة من 1.

7. استخدام أداة "ماذا لو" لتفسير النموذج

الخطوة 1: إنشاء تمثيل بصري لأداة "ماذا لو"

لربط أداة What-if بنماذج AI Platform الخاصة بك، عليك إرسال مجموعة فرعية من أمثلة الاختبار إليها بالإضافة إلى قيم حقيقية لهذه الأمثلة. لنُنشئ مصفوفة Numpy من 500 مثال من الأمثلة التجريبية مع تصنيفات الحقيقة الواقعية:

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

إنّ إنشاء مثيل لأداة "ماذا لو" أمر بسيط مثل إنشاء عنصر WitConfigBuilder وتمريره نموذج منصة الذكاء الاصطناعي (AI) الذي نريد تحليله.

نستخدم هنا معلمة adjust_prediction الاختيارية لأن أداة "ماذا لو" تتوقع قائمة بالنتائج لكل فئة في نموذجنا (في هذه الحالة 2). وبما أنّ نموذجنا لا يعرض سوى قيمة واحدة من 0 إلى 1، نحوِّلها إلى التنسيق الصحيح في هذه الدالة:

def adjust_prediction(pred):
  return [1 - pred, pred]

config_builder = (WitConfigBuilder(test_examples.tolist(), data.columns.tolist() + ['mortgage_status'])
  .set_ai_platform_model(GCP_PROJECT, MODEL_NAME, VERSION_NAME, adjust_prediction=adjust_prediction)
  .set_target_feature('mortgage_status')
  .set_label_vocab(['denied', 'approved']))
WitWidget(config_builder, height=800)

تجدر الإشارة إلى أنّ تحميل التمثيل البصري سيستغرق دقيقة. عند تحميله، من المفترض أن يظهر لك ما يلي:

4c0b00e6afcdbe01.png

يعرض لنا المحور الصادي توقّع النموذج، حيث تشير القيمة 1 إلى توقّع approved بدرجة عالية من الثقة، وتشكّل 0 توقّعات denied بدرجة عالية من الثقة. المحور س هو مجرد انتشار جميع نقاط البيانات المحملة.

الخطوة 2: استكشاف نقاط البيانات الفردية

العرض التلقائي في أداة "ماذا لو" هو علامة التبويب محرّر نقطة البيانات. يمكنك هنا النقر على أي نقطة بيانات فردية للاطّلاع على ميزاتها وتغيير قيم الخصائص ومعرفة كيفية تأثير هذا التغيير في توقّع النموذج على نقطة بيانات فردية.

في المثال أدناه، اخترنا نقطة بيانات قريبة من الحد الأدنى البالغ .5. تم إنشاء طلب الرهن العقاري المرتبط بنقطة البيانات هذه من CFPB. لقد غيَّرنا هذه الميزة إلى 0 وغيّرنا أيضًا قيمة agency_code_Department of Housing and Urban Development (HUD) إلى 1 لمعرفة ما سيحدث لتوقع النموذج إذا كان هذا القرض قد نشأ من HUD:

717620d6a1330479.png

كما يظهر لنا في القسم السفلي الأيمن من أداة "ماذا لو"، أدى تغيير هذه الميزة إلى خفض توقّعات النموذج في approved بشكل ملحوظ بنسبة 32%. وقد يشير هذا إلى أن الوكالة التي تم الحصول على قرض منها لها تأثير قوي على مخرجات النموذج، ولكننا سنحتاج إلى إجراء المزيد من التحليلات للتأكد من ذلك.

في الجزء السفلي الأيمن من واجهة المستخدم، يمكننا أيضًا رؤية القيمة الفعلية لكل نقطة بيانات ومقارنتها بتوقّع النموذج:

60ff20ae80ed5e27.png

الخطوة 3: التحليل المضاد

بعد ذلك، انقر على أي نقطة بيانات وحرك شريط التمرير إظهار أقرب نقطة بيانات عكسية إلى اليسار:

ae64fd7abefe5449.png

سيؤدي تحديد هذا إلى إظهار نقطة البيانات التي تحتوي على قيم الميزات الأكثر تشابهًا مع القيمة الأصلية التي حددتها، ولكن هناك توقع معاكس. يمكنك بعد ذلك التمرير خلال قيم الميزات لمعرفة أوجه الاختلاف بين نقطتي البيانات (يتم تمييز الاختلافات باللون الأخضر والغامق).

الخطوة 4: إلقاء نظرة على مخططات الاعتماد الجزئية

لمعرفة مدى تأثير كل ميزة في تنبؤات النموذج بشكل عام، ضع علامة في مربع مخططات التبعية الجزئية وتأكَّد من تحديد مخططات الاعتماد الجزئية العامة:

72117b5ceb683841.png

يتضح لنا هنا أنّ احتمال رفض القروض الناشئة عن HUD أكبر قليلاً. ويكون الرسم البياني هو هذا الشكل لأن رمز الوكالة عبارة عن ميزة منطقية، ولذلك لا يمكن أن تكون القيم إلا 0 أو 1 بالضبط.

applicant_income_thousands هي ميزة عددية، وفي مخطط الاعتماد الجزئي، نلاحظ أنّ الدخل المرتفع يزيد بشكل طفيف من احتمالية الموافقة على طلب الاشتراك، ولكن يصل إلى حوالي 200 ألف دولار أمريكي فقط. وبعد 200 ألف دولار أمريكي، لن تؤثّر هذه الميزة في توقّعات النموذج.

الخطوة 5: استكشاف الأداء العام والإنصاف

بعد ذلك، انتقِل إلى قسم الأداء الإنصاف. يوضح هذا إحصاءات الأداء الكلية لنتائج النموذج على مجموعة البيانات المقدمة، بما في ذلك مصفوفات الالتباس ومنحنيات PR ومنحنيات خاصية تشغيل جهاز الاستقبال.

اختَر mortgage_status كعنصر أساسي لعرض مصفوفة الالتباس:

fe1384ee47699498.png

وتعرِض مصفوفة التشويش هذه التوقّعات الصحيحة وغير الصحيحة لنموذجنا كـ نسبة مئوية من الإجمالي. إذا أضفت مربعي نعم فعلية / نعم متوقّعة ولا فعلي / لا متوقَّعة، من المفترض أن يكون مجموعهما دقّة النموذج نفسه (حوالي 87%).

يمكنك أيضًا تجربة شريط تمرير الحدّ، ورفع وخفض درجة التصنيف الموجبة التي يحتاج النموذج إلى العودة إليها قبل اتخاذ قرار بتوقُّع approved للقرض، ومعرفة كيف يؤدي ذلك إلى تغيير الدقة والنتائج الموجبة الخاطئة والنتائج السالبة الخاطئة. في هذه الحالة، تكون الدقة أعلى حول الحدّ الأدنى الذي يبلغ .55.

بعد ذلك، في القائمة المنسدلة تقسيم حسب، اختَر loan_purpose_Home_purchase:

f3f1858d627d57ab.png

سيظهر لك الآن الأداء في المجموعتَين الفرعيتَين لبياناتك: "0". تعرض الشريحة عندما لا يكون القرض لشراء منزل، و"1" الشريحة هي عندما يكون القرض لشراء منزل. عليك التحقّق من الدقة، ومعدلات السالب الخاطئ، والمعدّل السالب الخاطئ بين الشريحتين، بحثًا عن الاختلافات في الأداء.

إذا قمت بتوسيع الصفوف للاطلاع على مصفوفات الالتباس، يمكنك أن ترى أن النموذج يتنبأ بـ "تمت الموافقة" لحوالي 70% من طلبات القروض لشراء المنازل و46% فقط من القروض التي لا تتعلق بشراء المنازل (ستختلف النسب المئوية الدقيقة على النموذج):

318a8d5a8ffc6bea.png

في حال اختيار التكافؤ الديموغرافي من أزرار الاختيار على يمين الصفحة، سيتم تعديل الحدّين بحيث يتوقّع النموذج approved لنسبة مئوية متشابهة من مقدّمي الطلبات في كلتا الشريحتين. ماذا يفعل هذا للدقة، والنتائج الموجبة الخاطئة والنتائج السالبة الخاطئة لكل شريحة؟

الخطوة 6: استكشاف توزيع الميزات

أخيرًا، انتقل إلى علامة التبويب الميزات في أداة "ماذا لو". يوضح هذا توزيع القيم لكل ميزة في مجموعة البيانات الخاصة بك:

48ab3c4879793324.png

يمكنك استخدام علامة التبويب هذه للتأكد من توازن مجموعة البيانات. على سبيل المثال، يبدو أنّ عددًا قليلاً جدًا من القروض في مجموعة البيانات قد نشأت من وكالة خدمات المزارع. لتحسين دقة النموذج، يمكن أن نفكّر في إضافة المزيد من القروض من تلك الوكالة في حال توفرت البيانات.

في ما يلي وصف لبعض أفكار استكشاف أداة "ماذا لو". لا تتردد في استخدام الأداة، فهناك الكثير من المجالات التي يمكنك استكشافها!

8. تنظيف

إذا أردت مواصلة استخدام ورقة الملاحظات هذه، ننصحك بإيقافها عندما لا تكون قيد الاستخدام. من واجهة مستخدم Notebooks في Cloud Console، اختَر ورقة الملاحظات ثم انقر على إيقاف:

879147427150b6c7.png

إذا كنت ترغب في حذف جميع الموارد التي أنشأتها في هذا التمرين المعملي، فاحذف مثيل دفتر الملاحظات بدلاً من إيقافه.

باستخدام قائمة التنقّل في Cloud Console، انتقِل إلى "مساحة التخزين" واحذف كلتا المجموعتَين اللتين أنشأتهما لتخزين مواد عرض نموذجك.