مخازن الميزات وهندسة الميزات
لماذا مخازن الميزات؟
3 دقيقة للقراءة
مخازن الميزات تحل واحدة من أكثر مشاكل ML في الإنتاج شيوعاً: انحراف التدريب-التقديم. تضمن أن نموذجك يرى نفس الميزات في الإنتاج كما رآها أثناء التدريب.
مشكلة انحراف التدريب-التقديم
خط أنابيب التدريب خط أنابيب التقديم
┌──────────────────┐ ┌──────────────────┐
│ استعلام SQL A │ │ كود Python B │
│ (PostgreSQL) │ │ (API فوري) │
└────────┬─────────┘ └────────┬─────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ الميزة X = 10 │ ≠ │ الميزة X = 10.1│
└──────────────────┘ └──────────────────┘
│ │
▼ ▼
النموذج النموذج
(دقيق) (متدهور)
المشكلة: كود مختلف يحسب نفس الميزات، مما يؤدي لاختلافات طفيفة تُدهور أداء النموذج.
ما هو مخزن الميزات؟
مخزن الميزات هو مستودع مركزي لـ:
- تخزين تعريفات الميزات
- حساب الميزات بشكل متسق
- تقديم الميزات للتدريب والاستدلال
- تتبع نسب الميزات وإصداراتها
┌─────────────────────┐
│ مخزن الميزات │
│ ┌───────────────┐ │
بيانات خام ─────▶│ │ تحويل │ │ ──────▶ التدريب
│ │ وتخزين │ │
│ └───────────────┐ │ ──────▶ التقديم
│ │ فوري/ │ │
│ │ غير فوري │ │
└──┴───────────────┴──┘
المخازن الفورية مقابل غير الفورية
| الجانب | المخزن غير الفوري | المخزن الفوري |
|---|---|---|
| حالة الاستخدام | التدريب | الاستدلال |
| زمن الاستجابة | دقائق-ساعات | مللي ثواني |
| التخزين | مستودع بيانات | مخزن مفتاح-قيمة |
| الحجم | بيانات تاريخية | أحدث القيم |
| الوصول | استعلامات دفعية | بحث نقطي |
المخزن غير الفوري (التدريب)
# استعلام الميزات التاريخية للتدريب
training_data = feature_store.get_historical_features(
entity_df=entity_dataframe,
features=[
"customer_features:total_purchases",
"customer_features:avg_order_value",
"customer_features:days_since_last_order"
]
)
المخزن الفوري (الاستدلال)
# احصل على أحدث الميزات للتوقع الفوري
features = feature_store.get_online_features(
features=[
"customer_features:total_purchases",
"customer_features:avg_order_value"
],
entity_rows=[{"customer_id": 12345}]
)
فوائد مخزن الميزات
1. الاتساق
┌─────────────────────────────────────────────────────────┐
│ تعريف ميزة واحد │
│ │
│ def avg_order_value(orders): │
│ return orders.groupby('customer_id')['amount'].mean()│
└─────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
التدريب التقديم
(نفس النتيجة) (نفس النتيجة)
2. إعادة الاستخدام
الميزة: customer_lifetime_value
├── تُستخدم بواسطة: نموذج توقع الانسحاب
├── تُستخدم بواسطة: نموذج البيع الإضافي
├── تُستخدم بواسطة: نموذج تقييم المخاطر
└── تُستخدم بواسطة: تقسيم التسويق
3. الاكتشاف
الفرق يمكنها تصفح وإعادة استخدام الميزات الموجودة:
كتالوج الميزات
───────────────────────────────────────────────
الاسم │ المالك │ آخر تحديث
───────────────────────────────────────────────
customer_ltv │ فريق أ │ 2025-01-15
product_avg_rating │ فريق ب │ 2025-01-10
user_session_count │ فريق ج │ 2025-01-12
order_frequency_30d │ فريق أ │ 2025-01-14
───────────────────────────────────────────────
4. السفر عبر الزمن
# احصل على الميزات كما كانت في تاريخ محدد
point_in_time_features = feature_store.get_historical_features(
entity_df=entity_dataframe,
features=["customer_features:total_purchases"],
timestamp_field="event_timestamp"
)
حالات الاستخدام الشائعة
| حالة الاستخدام | الميزات المطلوبة | زمن الاستجابة |
|---|---|---|
| كشف الاحتيال | أنماط المعاملات، معلومات الجهاز | < 50ms |
| التوصيات | تفضيلات المستخدم، تضمينات العناصر | < 100ms |
| التصنيف الائتماني | التاريخ المالي، أنماط السلوك | < 1s |
| التسعير الديناميكي | إشارات الطلب، أسعار المنافسين | < 500ms |
معمارية مخزن الميزات
┌─────────────────────────────────────────────────────────────┐
│ مصادر البيانات │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │قاعدة │ │ تدفقات │ │ ملفات │ │ APIs │ │
│ │بيانات │ │ │ │ │ │ │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
└───────┼────────────┼────────────┼────────────┼──────────────┘
│ │ │ │
└────────────┴─────┬──────┴────────────┘
│
▼
┌────────────────────────┐
│ هندسة الميزات │
│ (التحويلات) │
└───────────┬────────────┘
│
┌─────────────────┴─────────────────┐
│ │
▼ ▼
┌───────────────────┐ ┌───────────────────┐
│ المخزن غير │ │ المخزن الفوري │
│ الفوري │ │ (Redis/DynamoDB)│
│ (بحيرة البيانات)│ │ │
└─────────┬─────────┘ └─────────┬─────────┘
│ │
▼ ▼
خط أنابيب التدريب خدمة الاستدلال
مخازن الميزات الشائعة
| الأداة | النوع | الأفضل لـ |
|---|---|---|
| Feast | مفتوح المصدر | عام، مستضاف ذاتياً |
| Tecton | مُدار | المؤسسات، ML فوري |
| Databricks | مُدار | سير عمل Spark |
| AWS SageMaker | مُدار | نظام AWS البيئي |
| Vertex AI | مُدار | نظام GCP البيئي |
متى تحتاج مخزن ميزات؟
| الحالة | تحتاج مخزن ميزات؟ |
|---|---|
| نموذج واحد، استدلال دفعي | ربما |
| نماذج متعددة تشترك في الميزات | نعم |
| استدلال فوري | نعم |
| مشاكل انحراف التدريب-التقديم | نعم |
| اكتشاف/حوكمة الميزات | نعم |
الرؤية الرئيسية: مخازن الميزات ليست فقط تخزين—هي الجسر بين هندسة البيانات وML، تضمن الاتساق وإعادة الاستخدام والحوكمة عبر منصة ML الخاصة بك.
التالي، سنغوص عميقاً في Feast، أشهر مخزن ميزات مفتوح المصدر. :::