← Main dashboard
A1 Ingestion & Schema Understanding
Data Dictionary — 26 Columns
01 id Unique identifier for the advertisement
02 url Link to the advertisement on Craigslist
03 region Region where the advertisement was posted
04 region_url Link to the regional Craigslist page
05 price ★ Target variable — vehicle price (range: 0 – 3,736,928,711)
06 year Year of manufacture (1900 – 2022)
07 manufacturer Vehicle manufacturer
08 model Vehicle model — free-text field
09 condition good · excellent · fair · like new · new · salvage
10 cylinders Engine cylinders: 3, 4, 5, 6, 8, 10, 12, other
11 fuel gas · other · diesel · hybrid · electric
12 odometer Vehicle mileage reading, in miles
13 title_status clean · rebuilt · lien · salvage · missing · parts only
14 transmission other · automatic · manual
15 vin ◆ Stable identifier — Vehicle Identification Number
16 drive rwd · 4wd · fwd
17 size full-size · mid-size · compact · sub-compact
18 type sedan · SUV · pickup · truck · coupe · hatchback · wagon · van · mini-van · convertible · offroad · bus · other
19 paint_color white · blue · red · black · silver · grey · brown · yellow · orange · green · custom · purple
20 image_url Link to the vehicle image
21 description Free-text description provided by the seller
22 county County — column completely empty in this dataset
23 state U.S. state where the ad was posted
24 lat Geographic latitude
25 long Geographic longitude
26 posting_date Date when the advertisement was posted
Column Classification
★ Target Variable
price
◆ Stable Identifiers
id vin
⬡ High-Cardinality Categorical
model region
✎ Free-Text Fields
description
A2 Missingness & Validity
Missing Value Handling Decisions
Decision Column(s) Missing % Justification
DROP COLUMN county 100% Column is completely empty — provides no information for analysis
DROP COLUMN size 71.77% Over 70% missing — completing at this rate would be guessing and would add noise
DROP ROWS price 7.71% A price of 0 is treated as a logical missing value. Price is the target variable, so these rows cannot be used
DROP ROWS odometer, year 1.03% · 0.28% The two main predictors of price. Imputing them would invent the values the analysis is about, and very few rows are affected
KEEP AS UNKNOWN cylinders, condition, drive, paint_color, type 21.75% – 41.62% Too high for imputation, but the features matter. Marked as 'unknown' so the rest of the row is preserved
KEEP AS UNKNOWN manufacturer, title_status, model, fuel, transmission 0.60% – 4.13% A missing value becomes its own category. Filling with the most common value would invent data (every unknown model would become an F-150)
KEEP vin 37.73% An identifier, not a category — left empty where missing and used for de-duplication where present
KEEP lat, long, posting_date, state, region, id 0% – 1.53% Retained as-is; not used as model features
NOT LOADED description, url, region_url, image_url ≤ 0.02% Free text and links that the analysis does not use — they make up most of the 1.4 GB file
Validity Rules Applied
price
$500 – $200,000
Values outside this range considered outliers / data entry errors
odometer
0 – 400,000 miles
Negative mileage is impossible and readings above 400,000 miles are almost always typing errors
year
1990 – 2022
Older vehicles are classic cars, a different market with different price drivers
A3 De-duplication & Leakage Checks
Detection Method
1 Exact Match — rows where all column values are identical
2 Near-Duplicates — the same ID or the same VIN appearing more than once (the most recent ad is kept)
3 Reposted ads — no VIN, but the same make, model, year, odometer and price
Results
Exact Match Duplicates
0
No fully identical rows found
ID-Based Duplicates
0
All advertisement IDs are unique
VIN-Based Duplicates
131,397
Same vehicle listed across multiple regions / dates
Reposted Ads Without a VIN
32,271
Same car details and price posted again
Clean Dataset
204,855
48.0% of the 426,880 raw rows
Leakage Check Conclusion
✅
Dataset is Safe for Predictive Modeling
A thorough review of all 26 columns was performed. All features are known at the time of the advertisement's creation — no post-hoc information (such as sale date or sold status) was found in the dataset. There is no target leakage. One caveat remains: the price column holds asking prices, not final sale prices.