A centralized feature store built on DVC for versioning, sharing, and validating ML features across teams.
┌─────────────────────────────────────────────────────────────┐
│ Feature Store │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ CLI │ │ Registry │ │ Schema Validator │ │
│ │ Interface │──│ Manager │──│ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ DVC │ │ Storage │ │ Pydantic Models │ │
│ │ Versioning │ │ Manager │ │ │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────┐
│ Remote Storage │
│ (S3 / GCS / Azure) │
└───────────────────────┘
pip install -e .feature-store init --remote-url s3://your-bucket/featuresfeature-store feature add customer demographics data/customer_demographics.parquet \
--schema schemas/customer_demographics.yaml \
--tag productionfeature-store listfeature-store feature validate customer/demographicsfeature-store pushfeature-store pullname: customer_demographics
version: "1.0.0"
description: Customer demographic features
primary_keys:
- customer_id
event_timestamp_column: updated_at
columns:
- name: customer_id
dtype: string
nullable: false
description: Unique customer identifier
- name: age
dtype: int64
nullable: false
- name: country
dtype: string
nullable: true
default_value: "unknown"| Type | Description |
|---|---|
int32 |
32-bit integer |
int64 |
64-bit integer |
float32 |
32-bit float |
float64 |
64-bit float |
string |
Text data |
boolean |
True/False |
datetime |
Timestamp |
category |
Categorical |
The feature store includes GitHub Actions workflows for:
- Code Quality - Linting with Ruff, type checking with MyPy
- Unit Tests - pytest with coverage reporting
- Feature Validation - Schema validation for changed features
- DVC Integrity - Verify .dvc files and registry consistency
- One schema per domain - Keep feature_schema.yaml in each domain directory
- Version schemas - Use semantic versioning for schema changes
- Tag features - Use tags for environment (production, staging) and purpose
- Validate before commit - Run
feature-store feature validatelocally - Use pre-commit hooks - Install with
pre-commit install