|
|
--- |
|
|
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 |
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
## 🚀 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) |