ساخت سیستم پیش‌بینی فروش با ML.NET و C#

هوش مصنوعی، سیستم پیش بینی فروش، ML.NET، سی شارپ، برنامه نویسی، آموزش برنامه نویسی 1404/2/3
نویسنده: حمید بهمن آبادی

آموزش ML.NET با زبان سی شارپ

ML.NET یک فریم‌ورک یادگیری ماشینی (Machine Learning) متن‌باز و چندپلتفرمی است که توسط مایکروسافت برای توسعه‌دهندگان .NET طراحی شده است. این فریم‌ورک به شما امکان می‌دهد تا مدل‌های یادگیری ماشینی سفارشی را با استفاده از زبان‌های C# یا F# بسازید، آموزش دهید و در برنامه‌های .NET خود ادغام کنید، بدون اینکه نیاز به خروج از اکوسیستم .NET یا دانش عمیق در علوم داده داشته باشید.

 

ویژگی‌های اصلی ML.NET:

  • چندپلتفرمی: روی ویندوز، لینوکس و مک اجرا می‌شود و از .NET Core و .NET Framework پشتیبانی می‌کند.
  • سناریوهای مختلف: از تحلیل احساسات (Sentiment Analysis)، پیش‌بینی قیمت، تشخیص تقلب، پیشنهاد محصول و حتی شناسایی اشیا در تصاویر (با استفاده از مدل‌های ONNX) پشتیبانی می‌کند.
  • ادغام با ابزارهای دیگر: می‌توانید از کتابخانه‌های معروفی مثل TensorFlow، ONNX و Infer.NET استفاده کنید.
  • AutoML و ابزارها: شامل ابزارهایی مثل ML.NET Model Builder و ML.NET CLI است که فرآیند ساخت مدل را با خودکارسازی (Automated Machine Learning) ساده‌تر می‌کند.
  • عملکرد آفلاین: می‌توانید مدل‌ها را به‌صورت محلی و بدون نیاز به اینترنت اجرا کنید، که برای سناریوهای امنیتی یا دستگاه‌های آفلاین مناسب است.

ساختار کلی کار با ML.NET:

  1. ایجاد MLContext: نقطه شروع هر برنامه ML.NET، یک شیء MLContext است که مانند یک واحد کاری عمل می‌کند و تمام عملیات از جمله بارگذاری داده، تبدیل داده و آموزش مدل را مدیریت می‌کند.
  2. بارگذاری داده: داده‌ها به‌صورت IDataView (ساختار جدولی انعطاف‌پذیر) از فایل‌ها (مثل CSV یا TXT) یا پایگاه‌داده‌ها بارگذاری می‌شوند.
  3. پایپ‌لاین داده: داده‌ها با استفاده از تبدیل‌ها (Transformations) آماده‌سازی می‌شوند، مثلاً تبدیل متن به ویژگی‌های عددی.
  4. انتخاب الگوریتم و آموزش: الگوریتم مناسب (مثل رگرسیون یا طبقه‌بندی) انتخاب و مدل با داده‌های آموزشی (Training Data) آموزش داده می‌شود.
  5. ارزیابی و پیش‌بینی: مدل با داده‌های آزمایشی ارزیابی شده و برای پیش‌بینی استفاده می‌شود.

مثال ساده:

فرض کنید می‌خواهید قیمت خانه‌ها را با استفاده از داده‌های اندازه و قیمت پیش‌بینی کنید:

نمونه کد ML.NET

مزایا:

  • ادغام آسان با برنامه‌های .NET موجود.
  • مناسب برای توسعه‌دهندگانی که با C# یا F# کار می‌کنند و نمی‌خواهند به زبان‌هایی مثل پایتون مهاجرت کنند.
  • عملکرد بالا: در تست‌های مایکروسافت، ML.NET توانسته با دیتاست‌های بزرگ (مثل 9 گیگابایت بررسی‌های آمازون) مدل‌هایی با دقت 95% بسازد، در حالی که فریم‌ورک‌های دیگر به دلیل خطای حافظه موفق نبودند.

حالا که یکم ذهنت آگاهتر شد نسبت به این ML.NET بریم سراغ مراحل ساده ساخت سیستم پیش‌بینی فروش 

برای ساخت یک سیستم پیش‌بینی فروش ساده با استفاده از ML.NET، می‌توانید از یک مدل رگرسیون (Regression) استفاده کنید که فروش آینده را بر اساس داده‌های تاریخی پیش‌بینی کند. در اینجا مراحل ساده و یک مثال کد ارائه می‌شود:

مراحل ساخت سیستم پیش‌بینی فروش

  • جمع‌آوری و آماده‌سازی داده‌ها:
    • داده‌های تاریخی فروش (مثلاً فروش ماهانه به همراه متغیرهایی مثل تاریخ، فصل، تخفیف‌ها یا تعداد مشتریان) را جمع‌آوری کنید.
    • داده‌ها را به فرمت قابل استفاده برای ML.NET (مثلاً CSV) تبدیل کنید.
  • نصب ML.NET:
    • یک پروژه .NET جدید بسازید.
    • بسته NuGet مربوط به ML.NET را نصب کنید:
    dotnet add package Microsoft.ML
  •  

  • ساخت مدل و آموزش:
    • داده‌ها را بارگذاری کنید.
    • یک پایپ‌لاین (Pipeline) برای پیش‌پردازش داده‌ها و انتخاب الگوریتم رگرسیون بسازید.
    • مدل را با داده‌های تاریخی آموزش دهید.
  • ارزیابی مدل:
    • مدل را با داده‌های آزمایشی (Test Data) ارزیابی کنید تا دقت آن را بسنجید.
  • پیش‌بینی فروش:
    • از مدل آموزش‌دیده برای پیش‌بینی فروش آینده استفاده کنید.
  • مثال ساده: پیش‌بینی فروش ماهانه

    فرض کنید داده‌های فروش ماهانه داریم که شامل تعداد مشتریان و میزان فروش است. می‌خواهیم فروش ماه آینده را پیش‌بینی کنیم.

    1. تعریف ساختار داده‌ها

    ابتدا کلاس‌هایی برای داده‌های ورودی و خروجی تعریف می‌کنیم:

    . کد کامل برای پیش‌بینی

    در این مثال، از داده‌های ساده استفاده می‌کنیم و یک مدل رگرسیون با الگوریتم SDCA (Stochastic Dual Coordinate Ascent) می‌سازیم:

    خروجی نمونه:

    R^2 Score: 0.98
    پیش‌بینی فروش برای 350 مشتری: 5600

    توضیحات کد:

    • داده‌ها: در این مثال از داده‌های ساده استفاده کردیم، اما می‌توانید داده‌ها را از یک فایل CSV یا دیتابیس بارگذاری کنید.
    • ویژگی‌ها (Features): تعداد مشتریان (Customers) به‌عنوان ویژگی ورودی برای پیش‌بینی فروش استفاده شده است.
    • الگوریتم: از SDCA برای رگرسیون استفاده کردیم، اما ML.NET الگوریتم‌های دیگری مثل FastTree یا LbfgsPoissonRegression هم دارد.
    • ارزیابی: معیار R² نشان می‌دهد که مدل چقدر خوب داده‌ها را توضیح می‌دهد (نزدیک به 1 یعنی دقت بالا).
    • پیش‌بینی: مدل فروش را برای تعداد مشتریان جدید (350) پیش‌بینی می‌کند.

    بهبود سیستم:

    • داده‌های بیشتر: از داده‌های واقعی‌تر (مثلاً شامل تاریخ، فصل، تبلیغات) استفاده کنید.
    • ویژگی‌های اضافی: متغیرهایی مثل تخفیف‌ها، روز هفته یا تعطیلات را اضافه کنید.
    • ذخیره مدل: مدل را با mlContext.Model.Save ذخیره کنید تا بعداً بدون نیاز به آموزش مجدد استفاده شود.
    • ارزیابی پیشرفته: داده‌ها را به دو بخش آموزشی (Training) و آزمایشی (Test) تقسیم کنید تا مدل را بهتر ارزیابی کنید.

    نکات مهم:

    • اگر داده‌ها نویز زیادی دارند، پیش‌پردازش (مثل نرمال‌سازی) انجام دهید.
    • برای داده‌های پیچیده‌تر، می‌توانید از AutoML در ML.NET Model Builder استفاده کنید.
    • مدل را به‌صورت دوره‌ای با داده‌های جدید به‌روزرسانی کنید.

    خب دوستان، بیایم یه جمع‌بندی بکنیم! تو این پست با هم دیدیم که چطور می‌تونیم یه سیستم پیش‌بینی فروش ساده با ML.NET بسازیم. از جمع‌آوری داده‌ها شروع کردیم، مدل رو آموزش دادیم و در نهایت فروش ماه آینده رو پیش‌بینی کردیم. خیلیم سخت نبود، نه؟ اگه داده‌های واقعی‌تری داشته باشید و یه کم ویژگی‌های بیشتر بهش اضافه کنید، می‌تونه حسابی به کارتون بیاد. حالا اگر دوست داشتین ما را در اینستاگرام فالو کنید!

    bahmanabadi.developer