TL;DR
For my Final Year Project I built a web-based system that recommends suitable cars to buyers and estimates a fair market price. It uses collaborative filtering for personalised recommendations and Random Forest regression for price prediction, in a Laravel and MySQL web application with modules for buyers, sellers and administrators.
Buying a car, new or used, is one of the biggest purchases most people make. Yet the process is often confusing: there are hundreds of models to compare, and it is hard to know whether a listed price is actually fair. Sellers face the opposite problem, struggling to decide what price to ask.
I wanted my Final Year Project to tackle both sides of that problem with data. The result is the Intelligent Car Recommendation and Pricing System Using Machine Learning. In this post I'll walk through how it works and what I learned along the way.
Read the full thesis
Intelligent Car Recommendation and Pricing System Using Machine Learning · UniSZA, 2026 · PDF
01 The Problem I Wanted to Solve
Online car marketplaces now list thousands of vehicles, but most of them still rely on static search filters and manual browsing. They do not take into account what a buyer prefers, what they have browsed before, or how they have interacted with listings. On the selling side, prices are usually set by the seller's own judgement rather than data, which leads to inconsistent pricing and lower buyer confidence.
My system was designed around three user modules:
- Buyers browse cars, view details, save cars, set preferences and receive personalised recommendations and predicted prices.
- Sellers add, edit and manage listings, compare their car against the market and request a predicted selling price.
- Administrators manage user accounts, moderate listings and view platform reports.
02 System Architecture
The system is a web application built with Laravel (PHP) and a Bootstrap front end, backed by a MySQL database. The machine learning models are developed in Python with scikit-learn.
- Laravel (PHP) & Bootstrap
- Buyer, seller & admin modules
- Authentication & role-based access
- Python & scikit-learn
- Collaborative filtering
- Random Forest regression
- MySQL
- Users, listings & preferences
- Browsing history & saved cars
At the centre of the system is a processing layer that validates data, generates recommendations and produces price predictions, while the database stores user information, vehicle data and pricing data. I followed the Waterfall model for this project, moving through requirements, design, implementation, testing and documentation in sequence, which suited the fixed stages of the FYP timeline.
03 Personalised Recommendations with Collaborative Filtering
To recommend cars, the system uses collaborative filtering. Instead of only matching a car's attributes, it looks at how users interact with listings: their browsing history, saved cars and stated preferences. Cars that similar users have shown interest in are suggested to the buyer.
- A buyer's browsing history and saved cars are recorded as interaction data.
- Their car preferences help shape what is shown.
- The recommendation module ranks cars and presents personalised suggestions on the buyer dashboard.
The cold start problem
Collaborative filtering depends on interaction data, so newly registered users with little or no browsing history may receive less accurate recommendations. In my future work I propose a hybrid approach that adds content-based filtering to handle new users better.
04 Predicting Prices with Random Forest
For pricing, I used Random Forest regression. A Random Forest trains many decision trees on different samples of the data and averages their predictions, which makes it more stable than a single tree and good at capturing non-linear relationships. In my literature review, Random Forest consistently performed well for car price prediction, which supported this choice.
The model predicts a fair market price from vehicle attributes such as brand, model, manufacturing year, mileage, engine type and vehicle condition. Here is a simplified example of the approach:
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
# X: brand, model, year, mileage, engine type, condition (encoded)
# y: selling price
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)
predicted_price = model.predict(new_car_features)
Sellers use the Price Prediction page to get a suggested selling price, and the Market Comparison page to see how their car compares with similar listings. Buyers can see the predicted price on a car's details page and judge whether the asking price is reasonable.
05 Testing, Limitations & Future Work
I tested the system with both black-box testing, checking each module's features against expected results through documented test cases, and white-box testing, reviewing controllers, models, routes and middleware to confirm that validation and role-based authorisation worked correctly.
Cold start for new users
Recommendations are less accurate for users with little interaction history, a known limitation of collaborative filtering.
Market factors are not fully captured
Predictions rely on historical vehicle attributes, so sudden market changes, demand and economic conditions are not fully considered.
Tested in a controlled environment
Performance with thousands of concurrent users has not been extensively tested yet.
Next steps
A hybrid recommender, real-time market data, a mobile app and features such as booking, payments and seller verification.
What's Next?
The full thesis is available as a PDF if you'd like to read the complete methodology, system design and testing. I also plan to deploy a live demo. If you'd like to know more about the project, feel free to reach out.