سیستم یادگیری ماشین برای پیشبینی قیمت خودرو با استفاده از مدلهای رگرسیون پیشرفته و معیار ارزیابی سفارشی
ویژگیها • نصب • استفاده • مدلها • NewMetric • ساختار پروژه
این پروژه یک سیستم جامع پیشبینی قیمت خودرو با استفاده از تکنیکهای یادگیری ماشین پیادهسازی میکند. این سیستم دارای یک معیار ارزیابی سفارشی به نام NewMetric است که به طور خاص برای پیشبینی قیمت خودرو طراحی شده است.
- 🎯 معیار سفارشی NewMetric برای ارزیابی تخصصی قیمت خودرو
- 🤖 مدلهای متعدد ML شامل Gradient Boosting، Random Forest و غیره
- 📊 تحلیل بصری با نمودارهای مقایسهای دقیق
- 💾 ذخیرهسازی مدل برای استفاده و استقرار آسان
- 🔄 سیستم پیشبینی تعاملی برای تخمین قیمت در لحظه
| ویژگی | توضیحات |
|---|---|
| آموزش مدل | آموزش مدلهای رگرسیون متعدد و مقایسه عملکرد آنها |
| ارزیابی NewMetric | معیار سفارشی ترکیبی از MAE، RMSE و خطای نسبی |
| مقایسه مدلها | مقایسه کنار هم ۵ الگوریتم مختلف یادگیری ماشین |
| تجسم دادهها | تولید نمودارها و گرافهای حرفهای |
| خروجی مدل | ذخیره مدلهای آموزشدیده برای استفاده در تولید |
| پیشبینی دستهای | پیشبینی قیمت برای چندین خودرو از فایل اکسل |
| رابط کاربری CLI | رابط خط فرمان کاربرپسند |
- پایتون نسخه 3.8 یا بالاتر
- مدیر بسته pip
git clone https://github.com/yourusername/CarPricePrediction.git
cd CarPricePredictionpip 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 یک معیار ارزیابی سفارشی است که به طور خاص برای پیشبینی قیمت خودرو طراحی شده است. این معیار چندین اندازهگیری خطا را ترکیب میکند تا ارزیابی جامعی از عملکرد مدل ارائه دهد.
که در آن:
- 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 │
└─────────────────────────────────────────────────────────────┘
- دادههای بیشتر: هرچه دادههای آموزش بیشتر باشد، مدل دقیقتر خواهد بود
- ویژگیهای بهتر: ویژگیهای نرمالشده مناسب تأثیر زیادی دارند
- تنظیم پارامترها: میتوانید پارامترهای مدل را برای دادههای خود بهینه کنید
# ذخیره مدل
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 باز کنید.
ساخته شده با ❤️ برای صنعت خودرو
⭐ اگر این پروژه برایتان مفید بود، ستاره بدهید!