deepreads / scripts /build_features.py
yash-b18
feat: data pipeline — download, preprocess, split, and feature engineering
fef33ce
Raw History Blame Contribute Delete
1.57 kB
"""
Script: build_features.py
Runs the full feature engineering pipeline, producing:
- data/processed/user_features.parquet
- data/processed/item_features.parquet
- data/processed/train_features.parquet
- data/processed/val_features.parquet
- data/processed/test_features.parquet
- data/processed/feature_artifacts.pkl (vectorizer, encoders)
Prerequisites: run make_dataset.py first.
Usage:
python scripts/build_features.py
python scripts/build_features.py --debug
"""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
from src.config import ensure_dirs, get_config
from src.features.builder import run_feature_pipeline
from src.utils.logging import get_logger
logger = get_logger(__name__)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Build feature matrices for the recommendation models.")
parser.add_argument("--debug", action="store_true", help="Use config for small dataset.")
parser.add_argument("--category", type=str, default=None)
return parser.parse_args()
def main() -> None:
args = parse_args()
cfg = get_config(debug=args.debug, category=args.category)
ensure_dirs(cfg)
if not cfg.data.train_path.exists():
logger.error("Train split not found at %s. Run make_dataset.py first.", cfg.data.train_path)
sys.exit(1)
run_feature_pipeline(cfg.data)
logger.info("Feature engineering complete.")
if __name__ == "__main__":
main()