مخازن الميزات وهندسة الميزات
الغوص العميق في Feast
4 دقيقة للقراءة
Feast (مخزن الميزات) هو أشهر مخزن ميزات مفتوح المصدر. يوفر طريقة متسقة لتعريف وتخزين وتقديم الميزات للتدريب والاستدلال.
التثبيت
# ثبّت Feast
pip install feast
# تحقق من التثبيت
feast version
هيكل المشروع
# ابدأ مشروع Feast جديد
feast init my_feature_store
cd my_feature_store
هذا يُنشئ:
my_feature_store/
├── feature_store.yaml # تكوين المشروع
├── feature_repo/
│ ├── __init__.py
│ ├── entities.py # تعريفات الكيانات
│ ├── features.py # تعريفات عروض الميزات
│ └── data/ # بيانات نموذجية
└── README.md
المفاهيم الأساسية
1. الكيان
الكيانات هي الكائنات التي تحسب الميزات لها:
from feast import Entity
# عرّف كيان العميل
customer = Entity(
name="customer_id",
description="معرف العميل الفريد"
)
# عرّف كيان المنتج
product = Entity(
name="product_id",
description="معرف المنتج الفريد"
)
2. عرض الميزات
عروض الميزات تُعرف كيف تُحسب وتُخزن الميزات:
from feast import FeatureView, Field, FileSource
from feast.types import Float32, Int64, String
from datetime import timedelta
# مصدر البيانات
customer_source = FileSource(
path="data/customer_features.parquet",
timestamp_field="event_timestamp"
)
# تعريف عرض الميزات
customer_features = FeatureView(
name="customer_features",
entities=[customer],
ttl=timedelta(days=365),
schema=[
Field(name="total_purchases", dtype=Int64),
Field(name="avg_order_value", dtype=Float32),
Field(name="days_since_last_order", dtype=Int64),
Field(name="customer_segment", dtype=String),
],
source=customer_source,
)
3. خدمة الميزات
اجمع الميزات معاً للتقديم:
from feast import FeatureService
# خدمة ميزات للتنبؤ بالانسحاب
churn_prediction_service = FeatureService(
name="churn_prediction",
features=[
customer_features[["total_purchases", "avg_order_value"]],
transaction_features[["transaction_count_30d"]],
],
)
التكوين
feature_store.yaml
project: my_feature_store
registry: data/registry.db
provider: local
online_store:
type: sqlite
path: data/online_store.db
offline_store:
type: file
entity_key_serialization_version: 2
تكوين الإنتاج (AWS)
project: my_feature_store
registry: s3://my-bucket/registry.db
provider: aws
online_store:
type: dynamodb
region: us-east-1
offline_store:
type: redshift
cluster_id: my-redshift-cluster
region: us-east-1
database: ml_features
user: feast_user
s3_staging_location: s3://my-bucket/feast-staging/
مثال كامل
تعريف الميزات
# feature_repo/features.py
from feast import Entity, FeatureView, Field, FileSource, FeatureService
from feast.types import Float32, Int64
from datetime import timedelta
# الكيانات
customer = Entity(
name="customer_id",
description="معرف العميل"
)
# مصادر البيانات
customer_source = FileSource(
path="data/customer_stats.parquet",
timestamp_field="event_timestamp"
)
transaction_source = FileSource(
path="data/transaction_stats.parquet",
timestamp_field="event_timestamp"
)
# عروض الميزات
customer_stats = FeatureView(
name="customer_stats",
entities=[customer],
ttl=timedelta(days=365),
schema=[
Field(name="lifetime_value", dtype=Float32),
Field(name="total_orders", dtype=Int64),
Field(name="avg_order_value", dtype=Float32),
],
source=customer_source,
)
transaction_stats = FeatureView(
name="transaction_stats",
entities=[customer],
ttl=timedelta(days=30),
schema=[
Field(name="transactions_7d", dtype=Int64),
Field(name="transactions_30d", dtype=Int64),
Field(name="amount_7d", dtype=Float32),
],
source=transaction_source,
)
# خدمة الميزات
prediction_service = FeatureService(
name="prediction_features",
features=[
customer_stats,
transaction_stats[["transactions_30d", "amount_7d"]],
],
)
تطبيق تعريفات الميزات
# سجّل الميزات مع Feast
feast apply
التجسيد للمخزن الفوري
# جسّد الميزات للتقديم الفوري
feast materialize 2024-01-01 2025-01-01
استخدام الميزات
التدريب (المخزن غير الفوري)
from feast import FeatureStore
import pandas as pd
# ابدأ مخزن الميزات
store = FeatureStore(repo_path=".")
# إطار بيانات الكيانات مع الطوابع الزمنية
entity_df = pd.DataFrame({
"customer_id": [1001, 1002, 1003, 1004],
"event_timestamp": pd.to_datetime([
"2025-01-01", "2025-01-02", "2025-01-03", "2025-01-04"
])
})
# احصل على الميزات التاريخية للتدريب
training_df = store.get_historical_features(
entity_df=entity_df,
features=[
"customer_stats:lifetime_value",
"customer_stats:total_orders",
"transaction_stats:transactions_30d",
],
).to_df()
print(training_df)
# الناتج:
# customer_id event_timestamp lifetime_value total_orders transactions_30d
# 0 1001 2025-01-01 1500.0 25 5
# 1 1002 2025-01-02 800.0 12 3
# ...
الاستدلال (المخزن الفوري)
from feast import FeatureStore
store = FeatureStore(repo_path=".")
# احصل على الميزات للاستدلال الفوري
features = store.get_online_features(
features=[
"customer_stats:lifetime_value",
"customer_stats:total_orders",
"transaction_stats:transactions_30d",
],
entity_rows=[
{"customer_id": 1001},
{"customer_id": 1002},
],
).to_dict()
print(features)
# الناتج:
# {
# "customer_id": [1001, 1002],
# "lifetime_value": [1500.0, 800.0],
# "total_orders": [25, 12],
# "transactions_30d": [5, 3]
# }
استخدام خدمات الميزات
# استخدام خدمة ميزات لمجموعات ميزات متسقة
features = store.get_online_features(
feature_service=store.get_feature_service("prediction_features"),
entity_rows=[{"customer_id": 1001}],
).to_dict()
أوامر Feast CLI
| الأمر | الغرض |
|---|---|
feast init |
إنشاء مشروع جديد |
feast apply |
تسجيل/تحديث الميزات |
feast materialize |
ملء المخزن الفوري |
feast materialize-incremental |
تجسيد تدريجي |
feast ui |
تشغيل واجهة الويب |
feast teardown |
إزالة جميع الموارد |
أفضل الممارسات
| الممارسة | لماذا |
|---|---|
| استخدم خدمات الميزات | مجموعات ميزات متسقة عبر البيئات |
| عيّن TTL مناسب | وازن بين الحداثة والتخزين |
| أصدر ميزاتك | تتبع التغييرات عبر الزمن |
| اختبر محلياً أولاً | استخدم مخازن ملفية للتطوير |
| راقب القدم | نبّه على الميزات القديمة |
الرؤية الرئيسية: Feast يسد الفجوة بين مستودع البيانات (غير فوري) وخدمة الاستدلال (فوري)، يضمن استخدام نفس منطق الميزات في كل مكان.
التالي، سنستكشف خطوط أنابيب هندسة الميزات وأفضل الممارسات. :::