ihsg-forecasting-dashboard / scripts /build_final_dataset.py
ElvssYo's picture
Upgrade dashboard fullscreen chart workspace
90eddf9
Raw
History Blame Contribute Delete
2.63 kB
"""Fuse price, NLP, and metadata features into final_dataset.parquet."""
from __future__ import annotations
import argparse
import logging
from pathlib import Path
import sys
from kag.features.fusion import (
DEFAULT_EMBEDDING_DIMENSIONS,
DEFAULT_NLP_LAG_TRADING_DAYS,
build_final_dataset_from_paths,
)
from kag.logging import configure_logging
from kag.market_data.top_universe import DEFAULT_TOP10_UNIVERSE_PATH
DEFAULT_PRICE_FEATURES_PATH = Path("data/processed/price_features.parquet")
DEFAULT_NLP_FEATURES_PATH = Path("data/nlp_features.parquet")
DEFAULT_OUTPUT_PATH = Path("data/final_dataset.parquet")
DEFAULT_ENCODERS_PATH = Path("models/encoders.pkl")
logger = logging.getLogger(__name__)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--price-features", type=Path, default=DEFAULT_PRICE_FEATURES_PATH)
parser.add_argument("--nlp-features", type=Path, default=DEFAULT_NLP_FEATURES_PATH)
parser.add_argument("--metadata", type=Path, default=DEFAULT_TOP10_UNIVERSE_PATH)
parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT_PATH)
parser.add_argument("--encoders-output", type=Path, default=DEFAULT_ENCODERS_PATH)
parser.add_argument("--embedding-dimensions", type=int, default=DEFAULT_EMBEDDING_DIMENSIONS)
parser.add_argument(
"--nlp-lag-trading-days",
type=int,
default=DEFAULT_NLP_LAG_TRADING_DAYS,
help=(
"How many trading rows after a news date the NLP feature becomes available. "
"Default avoids same-day news leakage when only dates, not timestamps, are known."
),
)
parser.add_argument(
"--drop-unlabeled",
action="store_true",
help="Drop latest rows without next-day target labels. Default keeps them for prediction.",
)
return parser.parse_args()
def main() -> int:
args = parse_args()
configure_logging()
try:
rows = build_final_dataset_from_paths(
args.price_features,
args.nlp_features,
args.output,
metadata_path=args.metadata,
embedding_dimensions=args.embedding_dimensions,
nlp_lag_trading_days=args.nlp_lag_trading_days,
encoders_path=args.encoders_output,
drop_unlabeled=args.drop_unlabeled,
)
except Exception:
logger.exception("Final dataset build failed")
return 1
logger.info("Final dataset build succeeded; output=%s rows=%s", args.output, rows)
return 0
if __name__ == "__main__":
sys.exit(main())