bmw-model-predictor / README.md
MahmutCanBoran's picture
Update README.md
f93165a verified
---
license: mit
language:
- en
---
# BMW Model Predictor
This model predicts the BMW car model using XGBoost based on price, mileage, fuel type, engine power, and car type.
---
license: mit
language:
- en
tags:
- xgboost
- tabular-classification
- bmw
- car-model-prediction
- automotive
datasets:
- custom
inference: false
model-index:
- name: BMW Model Predictor
results: []
---
# 🚗 BMW Model Predictor
This machine learning model predicts the **BMW car model** using **XGBoost** based on the following features:
- `engine_power` (horsepower)
- `price` (EUR)
- `mileage` (km)
- `fuel` type
- `car_type` (e.g., sedan, SUV)
## 🔧 Training Information
- Model: XGBoost Classifier
- Training set: Custom dataset from `bmw_pricing_challenge.csv`
- Target variable: `model_key` (encoded)
- Preprocessing: Label Encoding for categorical features (`fuel`, `car_type`, `model_key`)
- Saved with: `joblib`
## 📁 Files
-Load encoders from .npy
fuel_encoder = LabelEncoder(); fuel_encoder.classes_ = np.load("fuel_classes.npy", allow_pickle=True)
car_type_encoder = LabelEncoder(); car_type_encoder.classes_ = np.load("car_type_classes.npy", allow_pickle=True)
target_encoder = LabelEncoder(); target_encoder.classes_ = np.load("target_classes.npy", allow_pickle=True)
-
## 📊 BMW Model Predictor Overview
![BMW Model Predictor](./bmw-model-predictor.png)
## 🚀 How to Use
import sys, subprocess, os, json
def pip_install(pkg):
try:
__import__(pkg)
except ImportError:
subprocess.check_call([sys.executable, "-m", "pip", "install", pkg])
for p in ["huggingface_hub", "numpy", "scikit_learn", "xgboost"]:
pip_install(p)
from huggingface_hub import snapshot_download
import numpy as np
from sklearn.preprocessing import LabelEncoder
from xgboost import XGBClassifier
# 1) Download model files
repo_id = "MahmutCanBoran/bmw-model-predictor"
local_dir = "bmw-model-predictor"
snapshot_download(repo_id=repo_id, repo_type="model", local_dir=local_dir, allow_patterns=["*"])
# 2) Path and file controls
path = local_dir + os.sep
required_files = ["bmw_model.json", "fuel_classes.npy", "car_type_classes.npy", "target_classes.npy"]
missing = [f for f in required_files if not os.path.exists(path + f)]
if missing:
raise FileNotFoundError(f"Şu dosyalar eksik: {missing}\nKlasör içeriği: {os.listdir(path)}")
# 3) Restore the encoders.
fuel_le = LabelEncoder(); fuel_le.classes_ = np.load(path + "fuel_classes.npy", allow_pickle=True)
car_type_le = LabelEncoder(); car_type_le.classes_ = np.load(path + "car_type_classes.npy", allow_pickle=True)
target_le = LabelEncoder(); target_le.classes_ = np.load(path + "target_classes.npy", allow_pickle=True)
# 4) Upload XGBoost model(JSON)
model = XGBClassifier()
model.load_model(path + "bmw_model.json")
# 5)Helper: encode the input and make a prediction
def predict_bmw_model(engine_power:int, mileage:int, price:float, fuel:str, car_type:str):
# kategori doğrulama (hata mesajları daha anlaşılır olsun)
if fuel not in set(fuel_le.classes_):
raise ValueError(f"fuel='{fuel}' geçersiz. Geçerli fuel sınıfları: {list(fuel_le.classes_)}")
if car_type not in set(car_type_le.classes_):
raise ValueError(f"car_type='{car_type}' geçersiz. Geçerli car_type sınıfları: {list(car_type_le.classes_)}")
X = np.array([[
engine_power,
mileage,
price,
fuel_le.transform([fuel])[0],
car_type_le.transform([car_type])[0]
]], dtype=float)
y_pred = model.predict(X)
return target_le.inverse_transform(y_pred)[0]
# 6) Info: display the available classes
print("Fuel classes:", list(fuel_le.classes_))
print("Car type classes:", list(car_type_le.classes_))
# 7) Example prediction
example = {"engine_power": 200, "mileage": 50000, "price": 25000, "fuel": "diesel", "car_type": "suv"}
pred = predict_bmw_model(**example)
print("Predicted BMW model:", pred)