theDocWho's picture
Initial commit: end-to-end car damage + repair-cost predictor
4ce7a7e
Raw
History Blame Contribute Delete
1.63 kB
"""Build the canonical reference table from the iaai metadata loader.
The free-sample iaai dataset has no usable cost values, so the resulting table
captures car-metadata *distributions* (year × make × model × body_type) with
NaN ``avg_cost_usd``. Tier-2 cost estimates fall through to catalog-based
pricing via the fallback estimator's no-scaling path.
When real cost data becomes available (e.g., the un-paywalled iaai slice from
Rebrowser's research-access program, or any authoritative repair table), rerun
this builder with `--with-cost` and the table will be re-aggregated with real
costs.
"""
from __future__ import annotations
from pathlib import Path
from typing import Iterator
from ccdp.data.loaders import iter_iaai
from ccdp.identification import reference_table as reftab
from ccdp.identification.car_identifier import infer_segment
def build_from_iaai(
out_path: Path = reftab.DEFAULT_PATH,
limit: int | None = None,
) -> Path:
"""Stream the iaai loader into the reference-table builder."""
rows = _iaai_rows(limit=limit)
return reftab.build(rows, out_path=out_path)
def _iaai_rows(limit: int | None = None) -> Iterator[dict]:
n = 0
for r in iter_iaai():
if not r.make:
continue
yield {
"make": r.make,
"model": r.model or "",
"year": r.year,
"body_type": r.body_type,
"segment": infer_segment(r.make),
"cost_usd": r.cost_usd, # always None in free sample
"dataset": r.dataset,
}
n += 1
if limit and n >= limit:
return