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