top of page
Gambar penulisCornellius Yudha Wijaya

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Model machine learning hanya berguna jika telah digunakan dalam produksi untuk memecahkan masalah bisnis. Namun, masalah bisnis dan model machine learning terus berkembang. Oleh karena itu, kita perlu menjaga machine learning agar kinerjanya tetap sesuai dengan KPI bisnis. Dari sinilah konsep MLOps berasal.


MLOps atau machine learning operations adalah kumpulan teknik dan alat untuk machine learning di produksi. Mulai dari otomatisasi machine learning, versioning, delivery, hingga monitoring adalah hal yang ditangani oleh MLOps. Artikel ini akan fokus pada monitoring dan bagaimana kita menggunakan paket Python untuk mengatur monitoring kinerja model di produksi. Mari kita mulai.



Monitor Kinerja Model

Ketika kita berbicara tentang monitoring dalam MLOps, hal itu bisa merujuk ke banyak hal, karena salah satu prinsip MLOps adalah monitoring. Contohnya:

  • Monitor perubahan distribusi data dari waktu ke waktu

  • Monitor fitur yang digunakan dalam pengembangan vs. produksi

  • Monitor penurunan model

  • Monitor kinerja model

  • Monitor keusangan sistem

Masih banyak elemen yang harus dimonitor dalam MLOps, tetapi dalam artikel ini, kita akan fokus pada memonitor kinerja model. Kinerja model, dalam kasus kita, merujuk pada kemampuan model untuk membuat prediksi yang dapat diandalkan dari data yang tidak terlihat, diukur dengan metrik tertentu seperti akurasi, presisi, recall, dan lain-lain.


Mengapa kita perlu memonitor kinerja model? Untuk menjaga keandalan prediksi model dalam memecahkan masalah bisnis. Sebelum produksi, kita sering menghitung kinerja model dan dampaknya terhadap KPI; misalnya, batas bawahnya adalah 70% Akurasi jika kita ingin model kita tetap mengikuti kebutuhan bisnis, tetapi di bawah itu tidak dapat diterima. Itulah sebabnya memonitor kinerja memungkinkan model selalu memenuhi persyaratan bisnis tersebut.


Dengan Python, kita akan belajar bagaimana melakukan monitoring model. Mari mulai dengan menginstal paketnya. Ada banyak pilihan untuk memonitor model, tetapi untuk contoh ini, kita akan menggunakan paket open-source untuk monitoring yang disebut evidently.


Mengatur Monitoring Model dengan Python

Pertama, kita perlu menginstal paket evidently dengan kode berikut.

pip install evidently

Setelah menginstal paket, kita akan mengunduh contoh data, yaitu insurance claim data dari Kaggle. Kita juga akan membersihkan data sebelum menggunakannya lebih lanjut.

import pandas as pd

df = pd.read_csv("insurance_claims.csv")

# Urutkan data berdasarkan Incident Data
df = df.sort_values(by="incident_date").reset_index(drop=True)

# Pemilihan Variabel
df = df[
    [
        "incident_date",
        "months_as_customer",
        "age",
        "policy_deductable",
        "policy_annual_premium",
        "umbrella_limit",
        "insured_sex",
        "insured_relationship",
        "capital-gains",
        "capital-loss",
        "incident_type",
        "collision_type",
        "total_claim_amount",
        "injury_claim",
        "property_claim",
        "vehicle_claim",
        "incident_severity",
        "fraud_reported",
    ]
]

# Data Cleaning dan One-Hot Encoding
df = pd.get_dummies(
    df,
    columns=[
        "insured_sex",
        "insured_relationship",
        "incident_type",
        "collision_type",
        "incident_severity",
    ],
    drop_first=True,
)

df["fraud_reported"] = df["fraud_reported"].apply(lambda x: 1 if x == "Y" else 0)

df = df.rename(columns={"incident_date": "timestamp", "fraud_reported": "target"})

for i in df.select_dtypes("number").columns:
    df[i] = df[i].apply(float)

data = df[df["timestamp"] < "2015-02-20"].copy()
val = df[df["timestamp"] >= "2015-02-20"].copy()

Pada kode di atas, kita memilih beberapa kolom untuk tujuan pelatihan model, mengubahnya menjadi representasi numerik, dan membagi data untuk referensi (data) dan current data (val).


Kita memerlukan referensi atau baseline dasar dalam pipeline MLOps untuk memonitor performa model. Biasanya datanya dipisahkan dari data training (misalnya data testing). Selain itu, kita memerlukan current data atau data yang tidak terlihat oleh model (data yang akan datang).




Mari gunakan evidently untuk memonitor data dan kinerja model. Karena drift data akan mempengaruhi kinerja model, hal ini juga perlu dimonitor.

from evidently.report import Report
from evidently.metric_preset import DataDriftPreset

data_drift_report = Report(metrics=[
    DataDriftPreset(),
])

data_drift_report.run(current_data=val, reference_data=data, column_mapping=None)
data_drift_report.show(mode='inline')
Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Paket evidently secara otomatis akan menunjukkan laporan tentang apa yang terjadi pada dataset. Informasinya termasuk drift dataset dan drift kolom. Untuk contoh di atas, kita tidak memiliki kejadian drift pada dataset, tetapi dua kolom mengalami drift.

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Laporan menunjukkan bahwa kolom property_claim dan timestamp terdeteksi mengalami drift. Informasi ini dapat digunakan dalam pipeline MLOps untuk melatih ulang model, atau kita masih memerlukan eksplorasi data lebih lanjut.


Jika diperlukan, kita juga bisa mendapatkan laporan data di atas dalam log dictionary object.

data_drift_report.as_dict()

Selanjutnya, mari kita coba melatih model klasifikasi dari data dan mencoba menggunakan evidently untuk memonitor kinerja model.

from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier()
rf.fit(data.drop(['target', 'timestamp'], axis = 1), data['target'])

Evidently membutuhkan kolom target dan prediksi dalam data referensi dan current data. Mari tambahkan prediksi model ke dataset dan gunakan evidently untuk memonitor kinerja.

data['prediction'] = rf.predict(data.drop(['target', 'timestamp'], axis = 1))
val['prediction'] = rf.predict(val.drop(['target', 'timestamp'], axis = 1))

Sebagai catatan, lebih baik memiliki data referensi yang bukan data training pada kasus nyata dalam memonitor kinerja model. Mari atur monitoring kinerja model dengan kode berikut.

from evidently.metric_preset import ClassificationPreset

classification_performance_report = Report(metrics=[
    ClassificationPreset(),
])

classification_performance_report.run(reference_data=data, current_data=val)

classification_performance_report.show(mode='inline')
Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Hasilnya, kita mendapatkan metrik kualitas model saat ini lebih rendah daripada referensi (sesuai ekspektasi karena kita menggunakan data training untuk referensi). Tergantung pada persyaratan bisnis, metrik di atas bisa menjadi indikator langkah selanjutnya yang perlu kita ambil. Mari kita lihat informasi lain yang kita dapatkan dari laporan evidently.

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Laporan class Representation menunjukkan distribusi kelas sebenarnya.

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Confusion matrix menunjukkan bagaimana nilai prediksi dibandingkan dengan data aktual dengan data referensi dan current data.

Monitor Kinerja Model dalam Pipeline MLOps dengan Python

Quality Metrics by Class menunjukkan bagaimana kinerja masing-masing kelas.

Seperti sebelumnya, kita bisa mengubah laporan kinerja klasifikasi menjadi dictionary log dengan kode berikut.

classification_performance_report.as_dict()

Itu saja untuk saat ini. Anda bisa mengatur monitoring kinerja model dengan evidently dalam pipeline MLOps apa pun yang Anda miliki saat ini, dan itu akan tetap bekerja dengan baik.


Kesimpulan

Monitoring kinerja model adalah tugas penting dalam pipeline MLOps karena ini yang akan membantu menjaga bagaimana model kita tetap sesuai dengan persyaratan bisnis. Dengan paket Python yang disebut evidently, kita bisa dengan mudah mengatur pemantauan kinerja model, yang bisa diintegrasikan ke dalam pipeline MLOps yang sudah ada.




23 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page