Menghilangkan training-serving skew dengan feature store: perbedaan online store dan offline store, point-in-time correctness, definisi feature dengan Feast, dan praktik serving fitur yang konsisten untuk training dan inference.

Setelah di episode 13 pipeline retraining berjalan otomatis, kita bereskan salah satu sumber kesalahan paling licik di dunia ML: training-serving skew. Model dilatih dengan fitur yang dihitung oleh kode tertentu — lalu di produksi, fitur dihitung ulang oleh kode yang "sekiranya sama", sering dengan hasil yang sedikit berbeda.
Mengapa feature store penting? Karena ia membuat logika fitur menjadi satu sumber kebenaran: fitur yang dipakai training adalah fitur yang persis sama dipakai inference. Episode ini membedah arsitektur feature store — offline store, online store, dan point-in-time correctness — dengan Feast sebagai implementasi open source.
Skew terjadi ketika fitur training dan fitur serving dihitung berbeda. Contoh nyata:
Hasilnya: model terlihat bagus di evaluasi offline, tetapi buruk di produksi. Feature store memecahkan ini dengan menjamin fitur yang sama, dihitung dengan logika yang sama, pada momen yang benar.
Dua penyimpanan dengan peran berbeda:
| Aspek | Offline Store | Online Store |
|---|---|---|
| Tujuan | Training & backfill | Inference real-time |
| Data | Histori penuh | Nilai terbaru per entity |
| Latency | Tidak kritis | Milidetik |
| Contoh storage | Parquet, BigQuery, Redshift | Redis, DynamoDB |
| API | get_historical_features | get_online_features |
Point-in-time correctness adalah detail paling penting: saat mengambil fitur historis untuk training, setiap baris training harus menggunakan nilai fitur yang valid pada saat event tersebut terjadi — bukan nilai yang baru muncul belakangan. Tanpa ini, terjadi leakage: model "melihat" data masa depan saat training.
Feast (Feature Store for ML) adalah implementasi open source yang paling umum. Fitur didefinisikan sebagai feature view — deskripsi logika fitur dan sumber datanya.
from datetime import timedelta
from feast import FeatureView, Field
from feast.types import Float32, Int64
from feast.infra.offline_stores.file_source import FileSource
transactions_source = FileSource(
path="s3://mlops-bucket/features/transactions.parquet",
timestamp_field="event_timestamp",
)
transactions_fv = FeatureView(
name="transactions_features",
entities=["customer"],
schema=[
Field(name="avg_30d_amount", dtype=Float32),
Field(name="tx_count_30d", dtype=Int64),
],
source=transactions_source,
ttl=timedelta(days=30),
)Fitur ini kemudian tersedia untuk dua tujuan sekaligus:
from feast import FeatureStore
store = FeatureStore(repo_path=".")
training_df = store.get_historical_features(
entity_df=entity_df,
features=["transactions_features:avg_30d_amount"],
).to_df()features = store.get_online_features(
features=["transactions_features:avg_30d_amount"],
entity_rows=[{"customer": "cust-123"}],
).to_dict()Perhatikan: kode definisi fitur hanya satu — dipakai untuk offline dan online. Inilah cara feature store menghilangkan skew: logika fitur tidak diduplikasi di dua tempat.
| Opsi | Kelebihan | Kekurangan |
|---|---|---|
| Feast | Open source, luas dipakai, vendor-agnostic | Infra dioperasikan sendiri |
| Tecton | Terkelola, transformasi terotomasi, skala besar | Komersial, biaya tinggi |
| Build sendiri | Kontrol penuh, sesuai kebutuhan | Sangat mahal untuk dibangun & dirawat |
Aturan praktis: mulai dengan Feast — ia gratis, aktif dikembangkan, dan cukup untuk sebagian besar kasus. Naik ke Tecton hanya jika kebutuhan transformasi real-time dan skala mulai melebihi kapasitas tim untuk mengoperasikan Feast sendiri. Membangun feature store sendiri sebaiknya menjadi keputusan terakhir, bukan pertama.
Note
Feature store bukan wajib untuk semua orang. Untuk model tabular kecil dengan fitur statis sederhana, preprocessing yang dibundel bersama model (episode 9) sudah cukup. Feature store mulai terasa nilainya saat: banyak model berbagi fitur yang sama, fitur berubah cepat, atau tim sudah >5 orang mengembangkan model.
Feature store menyatu dengan alur yang sudah kalian bangun:
Karena fitur terdefinisi sekali, setiap model yang mengonsumsi fitur yang sama otomatis konsisten. Inilah kekuatan compounding-nya: satu definisi, banyak model, nol skew.
ttl sesuai semantik bisnis.Pada episode 14 ini, kalian telah menghilangkan training-serving skew.
Inti yang harus dibawa pulang:
Di episode 15 selanjutnya kita akan membahas model governance & compliance — model cards, audit, explainability dengan SHAP, dan regulasi seperti EU AI Act yang kini mengatur model di produksi. Sampai jumpa di episode 15!