Pipeline

How the number is computed

Five steps turn raw company data into a score. The last step, scoring, reads its rubric from a config file.

The ETL pipeline

enrich is opt-in: it must be explicitly requested for the features step to see freshly enriched data, since features always reads from enrich's output directory.

The score step is config-driven: its rubric, which signals count, how they're combined, how they're scaled, and how many points each is worth, lives in a YAML file the engine reads.

The scoring engine

Adding a new scoring method

  1. Write a function taking a raw pd.Series plus its own parameters (must include points), returning a pd.Series bounded [0, points].
  2. Register it in src/etl/scaling.py's SCALING_METHODS dict.
  3. Reference it from a bucket's method: field in a rubric YAML.
  4. Add a unit test for the function itself.

No changes to score.py, pipeline.py, rubric.py, or any other bucket's config.

Why YAML

The rubric lives in config/rubric_v2.yaml. Each bucket's cap and points value carries an inline comment explaining its rationale, the deep_tech bucket's cap: 2 comment reads “2+ tags = maximally deep-tech,” for example. That context stays attached to the number it explains.

Known limitations

Checked against outside research

The success-correlation result above was compared against published research on founder pedigree, team growth, and VC vintage-year effects. Three of the four findings line up with existing literature, including a paper studying founder backgrounds within Y Combinator itself. Full comparison and sources in the dashboard and in documentation/plan_complexity_metric/objectives_and_metrics.md, section 5.