Skip to content

Latest commit

 

History

History
423 lines (295 loc) · 17.9 KB

File metadata and controls

423 lines (295 loc) · 17.9 KB

🚗 پیش‌بینی قیمت خودرو

Python scikit-learn pandas License

سیستم یادگیری ماشین برای پیش‌بینی قیمت خودرو با استفاده از مدل‌های رگرسیون پیشرفته و معیار ارزیابی سفارشی

ویژگی‌هانصباستفادهمدل‌هاNewMetricساختار پروژه


📋 مرور کلی

این پروژه یک سیستم جامع پیش‌بینی قیمت خودرو با استفاده از تکنیک‌های یادگیری ماشین پیاده‌سازی می‌کند. این سیستم دارای یک معیار ارزیابی سفارشی به نام NewMetric است که به طور خاص برای پیش‌بینی قیمت خودرو طراحی شده است.

نکات کلیدی

  • 🎯 معیار سفارشی NewMetric برای ارزیابی تخصصی قیمت خودرو
  • 🤖 مدل‌های متعدد ML شامل Gradient Boosting، Random Forest و غیره
  • 📊 تحلیل بصری با نمودارهای مقایسه‌ای دقیق
  • 💾 ذخیره‌سازی مدل برای استفاده و استقرار آسان
  • 🔄 سیستم پیش‌بینی تعاملی برای تخمین قیمت در لحظه

✨ ویژگی‌ها

ویژگی توضیحات
آموزش مدل آموزش مدل‌های رگرسیون متعدد و مقایسه عملکرد آن‌ها
ارزیابی NewMetric معیار سفارشی ترکیبی از MAE، RMSE و خطای نسبی
مقایسه مدل‌ها مقایسه کنار هم ۵ الگوریتم مختلف یادگیری ماشین
تجسم داده‌ها تولید نمودارها و گراف‌های حرفه‌ای
خروجی مدل ذخیره مدل‌های آموزش‌دیده برای استفاده در تولید
پیش‌بینی دسته‌ای پیش‌بینی قیمت برای چندین خودرو از فایل اکسل
رابط کاربری CLI رابط خط فرمان کاربرپسند

🛠 نصب

پیش‌نیازها

  • پایتون نسخه 3.8 یا بالاتر
  • مدیر بسته pip

مرحله ۱: کلون کردن مخزن

git clone https://github.com/yourusername/CarPricePrediction.git
cd CarPricePrediction

مرحله ۲: نصب وابستگی‌ها

pip install pandas numpy scikit-learn matplotlib openpyxl

کتابخانه‌های مورد نیاز

کتابخانه نسخه کاربرد
pandas ≥1.3.0 دستکاری و تحلیل داده
numpy ≥1.20.0 محاسبات عددی
scikit-learn ≥1.0.0 الگوریتم‌های یادگیری ماشین
matplotlib ≥3.4.0 تجسم داده‌ها
openpyxl ≥3.0.0 پشتیبانی از فایل اکسل

🚀 نحوه استفاده

۱. آموزش مدل

برای آموزش و ساخت مدل نهایی پیش‌بینی:

python car_price_prediction.py

این دستور چه کاری انجام می‌دهد:

  • بارگذاری داده‌ها از فایل data.xlsx
  • آموزش مدل Gradient Boosting با پارامترهای بهینه
  • ارزیابی عملکرد با استفاده از NewMetric
  • ذخیره مدل آموزش‌دیده در car_price_model.pkl
  • تولید نمودارهای تجسمی

فایل‌های خروجی:

  • car_price_model.pkl - فایل مدل آموزش‌دیده
  • final_model_results.png - نمودارهای پیش‌بینی در مقابل واقعی
  • final_feature_importance.png - تجسم اهمیت ویژگی‌ها

۲. مقایسه مدل‌های مختلف

برای مقایسه الگوریتم‌های مختلف ML:

python "Comparison of models.py"

مدل‌های مقایسه شده:

  • Linear Regression (رگرسیون خطی)
  • Ridge Regression (رگرسیون ریج)
  • Lasso Regression (رگرسیون لسو)
  • Random Forest Regressor (جنگل تصادفی)
  • Gradient Boosting Regressor (تقویت گرادیان)

فایل‌های خروجی:

  • model_results.png - نمودارهای مقایسه مدل‌ها
  • feature_importance.png - اهمیت ویژگی‌ها برای بهترین مدل

۳. استفاده از مدل آموزش‌دیده

برای پیش‌بینی با مدل ذخیره شده:

python use_model.py

گزینه‌های موجود:

گزینه توضیحات
۱ نمایش لیست ویژگی‌ها
۲ پیش‌بینی تعاملی (وارد کردن مقادیر به صورت دستی)
۳ پیش‌بینی دسته‌ای از فایل اکسل
۴ خروج

۴. استفاده برنامه‌نویسی

from use_model import load_model, predict_price

# بارگذاری مدل آموزش‌دیده
model, feature_names = load_model("car_price_model.pkl")

# آماده‌سازی مقادیر ویژگی‌ها (نرمال‌سازی شده بین ۰ و ۱)
feature_values = {
    "کیلومتر_نرمال": 0.3,
    "سال_نرمال": 0.8,
    # ... سایر ویژگی‌ها
}

# دریافت پیش‌بینی
predicted_price = predict_price(model, feature_names, feature_values)
print(f"قیمت پیش‌بینی شده: {predicted_price:,.0f} تومان")

۵. پیش‌بینی دسته‌ای از اکسل

from use_model import load_model, predict_from_excel

# بارگذاری مدل
model, feature_names = load_model()

# پیش‌بینی برای همه خودروهای موجود در فایل اکسل
results = predict_from_excel(
    model,
    feature_names,
    excel_path="new_cars.xlsx",
    output_path="predictions.xlsx"
)

🤖 مدل‌ها

الگوریتم‌های پشتیبانی شده

مدل توضیحات بهترین برای
Gradient Boosting مجموعه‌ای از یادگیرنده‌های ضعیف ⭐ بهترین عملکرد کلی
Random Forest مجموعه‌ای از درخت‌های تصمیم مقاوم در برابر بیش‌برازش
Ridge Regression خطی با تنظیم L2 وقتی ویژگی‌ها همبسته هستند
Lasso Regression خطی با تنظیم L1 انتخاب ویژگی
Linear Regression مدل خطی پایه مقایسه پایه

پیکربندی مدل نهایی

مدل تولید از Gradient Boosting Regressor با پارامترهای بهینه استفاده می‌کند:

GradientBoostingRegressor(
    n_estimators=200,      # تعداد تخمین‌گرها
    learning_rate=0.1,     # نرخ یادگیری
    max_depth=5,           # حداکثر عمق
    min_samples_split=5,   # حداقل نمونه برای تقسیم
    min_samples_leaf=2,    # حداقل نمونه در برگ
    subsample=0.8,         # نسبت زیرنمونه‌گیری
    random_state=42        # بذر تصادفی
)

🎯 معیار NewMetric

NewMetric چیست؟

NewMetric یک معیار ارزیابی سفارشی است که به طور خاص برای پیش‌بینی قیمت خودرو طراحی شده است. این معیار چندین اندازه‌گیری خطا را ترکیب می‌کند تا ارزیابی جامعی از عملکرد مدل ارائه دهد.

فرمول

$$\text{NewMetric} = 0.4 \times \text{MAE}_{norm} + 0.4 \times \text{RMSE}_{norm} + 0.2 \times \text{RelativeError}$$

که در آن:

  • MAE_norm = MAE / میانگین قیمت (میانگین خطای مطلق نرمال‌شده)
  • RMSE_norm = RMSE / میانگین قیمت (ریشه میانگین مربعات خطا نرمال‌شده)
  • RelativeError = میانگین |واقعی - پیش‌بینی| / واقعی

تفسیر

مقدار NewMetric عملکرد
< 0.10 🟢 عالی
0.10 - 0.15 🟡 خوب
0.15 - 0.20 🟠 متوسط
> 0.20 🔴 نیاز به بهبود

توجه: مقادیر پایین‌تر نشان‌دهنده عملکرد بهتر است.


📁 ساختار پروژه

CarPricePrediction/
│
├── 📄 car_price_prediction.py    # اسکریپت اصلی آموزش با مدل نهایی
├── 📄 Comparison of models.py    # مقایسه و ارزیابی مدل‌ها
├── 📄 use_model.py               # ابزارهای استنتاج و پیش‌بینی
│
├── 📊 data.xlsx                  # مجموعه داده آموزش (مورد نیاز)
├── 🤖 car_price_model.pkl        # مدل ذخیره شده (تولید شده)
│
├── 📈 final_model_results.png    # نمودارهای پیش‌بینی (تولید شده)
├── 📈 final_feature_importance.png
├── 📈 model_results.png
├── 📈 feature_importance.png
│
├── 📖 README.md                  # مستندات انگلیسی
└── 📖 README_FA.md               # مستندات فارسی

توضیحات فایل‌ها

فایل هدف
car_price_prediction.py آموزش مدل نهایی Gradient Boosting، ارزیابی آن و ذخیره برای استفاده در تولید
Comparison of models.py مقایسه ۵ مدل مختلف ML با استفاده از NewMetric و معیارهای سنتی
use_model.py ابزارهایی برای بارگذاری مدل‌های ذخیره شده و انجام پیش‌بینی‌ها
data.xlsx فایل اکسل حاوی داده‌های آموزش با ویژگی‌های نرمال‌شده
car_price_model.pkl مدل آموزش‌دیده سریالایز شده برای استقرار

📊 فرمت داده‌ها

فایل اکسل ورودی (data.xlsx) باید شامل موارد زیر باشد:

ستون‌های مورد نیاز

ستون نوع توضیحات
قیمت عددی متغیر هدف (قیمت به تومان)
*_نرمال عددی (۰-۱) ستون‌های ویژگی نرمال‌شده

نمونه ویژگی‌ها

  • کیلومتر_نرمال - کیلومتر نرمال‌شده
  • سال_نرمال - سال نرمال‌شده
  • رنگ_نرمال - کدگذاری رنگ نرمال‌شده
  • و موارد بیشتر...

📈 نمونه خروجی‌ها

نمودار مقایسه مدل‌ها

سیستم نمودارهای مقایسه‌ای تولید می‌کند که شامل موارد زیر است:

  • امتیازات NewMetric برای همه مدل‌ها
  • MAPE (میانگین درصد خطای مطلق)
  • نمودار پراکندگی واقعی در مقابل پیش‌بینی
  • هیستوگرام توزیع خطا

نمونه پیش‌بینی‌ها

✅ قیمت واقعی: ۱,۲۰۰,۰۰۰,۰۰۰ | پیش‌بینی: ۱,۱۸۰,۰۰۰,۰۰۰ | خطا: ۱.۷٪
✅ قیمت واقعی:   ۸۵۰,۰۰۰,۰۰۰ | پیش‌بینی:   ۸۷۰,۰۰۰,۰۰۰ | خطا: ۲.۴٪
⚠️ قیمت واقعی:   ۵۰۰,۰۰۰,۰۰۰ | پیش‌بینی:   ۴۵۰,۰۰۰,۰۰۰ | خطا: ۱۰.۰٪

🔧 عیب‌یابی

مشکلات رایج

مشکل راه‌حل
فایل مدل یافت نشد ابتدا car_price_prediction.py را اجرا کنید تا مدل تولید شود
هشدار ویژگی‌های گمشده برخی ویژگی‌ها در داده‌های شما ممکن است با ویژگی‌های مورد انتظار مدل مطابقت نداشته باشند
خطای حافظه اندازه مجموعه داده را کاهش دهید یا از دستگاهی با RAM بیشتر استفاده کنید

مشکلات فونت (نمایش فارسی)

اگر متن فارسی در نمودارها به درستی نمایش داده نمی‌شود، یک فونت سازگار با فارسی نصب کنید:

plt.rcParams["font.family"] = "DejaVu Sans"

🔄 گردش کار توصیه شده

┌─────────────────────────────────────────────────────────────┐
│                    ۱. آماده‌سازی داده‌ها                      │
│                    (ایجاد data.xlsx)                        │
└─────────────────────────────────────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                 ۲. مقایسه مدل‌ها (اختیاری)                   │
│            python "Comparison of models.py"                 │
└─────────────────────────────────────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    ۳. آموزش مدل نهایی                       │
│              python car_price_prediction.py                 │
└─────────────────────────────────────────────────────────────┘
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                    ۴. استفاده از مدل                        │
│                   python use_model.py                       │
└─────────────────────────────────────────────────────────────┘

💡 نکات و توصیه‌ها

بهبود دقت مدل

  1. داده‌های بیشتر: هرچه داده‌های آموزش بیشتر باشد، مدل دقیق‌تر خواهد بود
  2. ویژگی‌های بهتر: ویژگی‌های نرمال‌شده مناسب تأثیر زیادی دارند
  3. تنظیم پارامترها: می‌توانید پارامترهای مدل را برای داده‌های خود بهینه کنید

استفاده در تولید

# ذخیره مدل
from car_price_prediction import save_model
save_model(trained_model, feature_names, "production_model.pkl")

# بارگذاری و استفاده
from use_model import load_model, predict_price
model, features = load_model("production_model.pkl")
price = predict_price(model, features, car_data)

📄 مجوز

این پروژه تحت مجوز MIT منتشر شده است - برای جزئیات فایل LICENSE را ببینید.


👥 مشارکت

مشارکت‌ها خوش‌آمد هستند! لطفاً با خیال راحت یک Pull Request ارسال کنید.

۱. مخزن را Fork کنید ۲. شاخه ویژگی خود را ایجاد کنید (git checkout -b feature/AmazingFeature) ۳. تغییرات خود را Commit کنید (git commit -m 'Add some AmazingFeature') ۴. به شاخه Push کنید (git push origin feature/AmazingFeature) ۵. یک Pull Request باز کنید


📬 تماس

برای سؤالات یا پشتیبانی، لطفاً یک issue در GitHub باز کنید.


ساخته شده با ❤️ برای صنعت خودرو

⭐ اگر این پروژه برایتان مفید بود، ستاره بدهید!