Key findings
How the project is built
Every number on this dashboard is written by the Python scripts in src/. Nothing is typed in by hand.
Detailed report pages
From raw listings to a clean dataset
Rows removed at each cleaning step, in the order the rules are applied
Asking price distribution
Number of listings per price band (bands widen with price, log scale)
On a log scale the prices form a roughly symmetric bell shape, which is why the price model works on log(price).
Depreciation curve
Median asking price by vehicle age at the time of listing (2021)
Price by brand
Bar = middle 50% of asking prices (25th to 75th percentile), dot = median. Brands with at least 500 listings.
What drives price most?
Drop in the model's R² when each feature is removed
Effect on asking price
% difference against the baseline, with all other features held fixed
Recalls reported per year
Most recalls filed
Number of recall campaigns, top 10 manufacturers
Same manufacturers, by vehicles affected
Units covered by those recalls (millions)
Exposure bias: a manufacturer that sells more vehicles files more recalls. RV and truck makers file many small recalls, while a single passenger-car recall can cover millions of vehicles, so the two rankings differ.
Which components are recalled?
Recalls per year for the five most recalled components
Failure modes found in the recall text
The severity score is a keyword proxy (3 = fire or loss of control, 2 = crash or injury risk, 1 = neither). It was checked against NHTSA's own "park outside" and "do not drive" advisories, which the proxy never reads.
Joining recalls to the listings
Share of the cleaned listings reached at each join level
Recalls on the most listed models
Average number of recalls on record per listing (same model and model year)
What the decoder returns
Share of the sampled VINs with each specification
Listing vs. decoder
Gaps the decoder filled and values where the seller and the VIN disagree
Sellers are rarely wrong (conflicts stay around 2% or less). The value of the decoder is in filling fields the seller left empty.
Does enrichment change the picture?
Listings per drive type in the sample, before and after filling unknowns from the VIN
Validation rules
Error taxonomy and decisions
One trip, second by second
Data quality report
Harsh events by device
Harsh braking and acceleration events (above 3 m/s²) per 100 km
Each device is one vehicle. Events are normalized by distance so that vehicles driven more are not penalized. Vehicles with less than 100 km of data are left out.