سوال نهم


محدودیت‌ها:

  • محدودیت زمان: ۲ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

پیش‌بینی قیمت بسته با استفاده از یادگیری ماشین🔗

توضیح مسئله🔗

تیم شما در راستای بهبود روندهای معاملاتی، تصمیم گرفته است از تکنیک‌های یادگیری ماشین برای پیش‌بینی قیمت بسته‌ی سهام استفاده کند. در این مرحله، شما به عنوان تحلیلگر داده‌ها باید یک مدل رگرسیون خطی آموزش دهید که با استفاده از داده‌های تاریخی یک روز (شامل قیمت‌های Open، High، Low و Close) بتواند قیمت بسته‌ی روز بعد را پیش‌بینی کند.

برای این کار، داده‌های تاریخی در قالب یک فایل CSV دریافت می‌شود. سپس با استفاده از تکنیک انتقال (lag) داده، ویژگی‌های ورودی از ردیف قبلی استخراج شده و مقدار قیمت بسته روز بعد به عنوان هدف (target) در نظر گرفته می‌شود. پس از آموزش مدل، با استفاده از ویژگی‌های روز آخر، قیمت بسته‌ی روز آینده پیش‌بینی شده و چاپ می‌شود.

وظیفه🔗

برنامه‌ای بنویسید که فایل CSV شامل داده‌های تاریخی سهام را از STDIN بخواند و مراحل زیر را انجام دهد:

  1. داده‌ها را بر اساس تاریخ (با فرمت YYYY-MM-DD) مرتب کند.
  2. برای هر سطر (به جز آخرین سطر)، ویژگی‌های ورودی را از ستون‌های Open، High، Low و Close استخراج کرده و به عنوان نمونه‌های آموزشی در نظر بگیرد. مقدار هدف (target) مربوط به هر نمونه، مقدار Close در ردیف بعدی خواهد بود.
  3. یک مدل رگرسیون خطی با استفاده از scikit-learn آموزش دهد.
  4. با استفاده از ویژگی‌های روز آخر، قیمت بسته‌ی روز بعد را پیش‌بینی کند.
  5. مقدار پیش‌بینی‌شده را به دو رقم اعشار گرد کرده و چاپ کند.

ورودی🔗

  • ورودی از STDIN دریافت می‌شود.

  • اولین خط شامل هدر (header) فایل CSV است.

  • هر خط بعدی شامل پنج مقدار به ترتیب زیر است:

      Date,Open,High,Low,Close
    Plain text
  • فرمت تاریخ به صورت YYYY-MM-DD می‌باشد.

محدودیت‌ها🔗

خروجی🔗

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

مثال‌ها🔗

دریافت دیتا ست جهت استفاده

ورودی نمونه ۱🔗

Date,Open,High,Low,Close
2025-01-01,100,110,90,105
2025-01-02,105,115,95,110
2025-01-03,110,120,100,115
2025-01-04,115,125,105,120
2025-01-05,120,130,110,125
Plain text

خروجی نمونه ۱🔗

130.00
Plain text

توضیح🔗

در این نمونه، با استفاده از داده‌های ردیف‌های ۱ تا ۴ به عنوان نمونه‌های آموزشی، مدل رگرسیون خطی به گونه‌ای آموزش می‌بیند که رابطه‌ای مشابه «قیمت بسته روز بعد = قیمت بسته روز قبل + ۵» را یاد بگیرد. سپس با استفاده از ویژگی‌های روز پنجم (که قیمت بسته‌ی آن ۱۲۵ است) قیمت بسته‌ی روز بعد پیش‌بینی می‌شود که برابر ۱۳۰.۰۰ دلار خواهد بود.

نحوه ارسال🔗

شما باید کد یادگاری ماشین خود را پیاده سازی کنید و پس از چاپ خروجی آن را پرینت کنید سپس بقیه کد را کامنت کنید. دقت کنید داده ورودی شما همان فایل csv است که آن را دریافت کردید.

برای مثال اگر خروجی شما ۱۳۴.۳۰ باشد:‌

...

# import numpy as np

# import matplotlib.pyplot as plt

# from sklearn.linear_model import LinearRegression

# from sklearn.model_selection import train_test_split

# from sklearn.metrics import mean_squared_error

# # داده‌های نمونه‌ای

# X = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).reshape(-1, 1)

# y = np.array([2.2, 2.8, 3.6, 4.5, 5.1, 5.9, 6.8, 7.4, 8.9, 9.2])

# # تقسیم داده‌ها به دو مجموعه‌ی آموزش و آزمون

# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# # ایجاد مدل رگرسیون خطی

# model = LinearRegression()

# # آموزش مدل

# model.fit(X_train, y_train)

# # پیش‌بینی مقادیر خروجی

# y_pred = model.predict(X_test)

# # ارزیابی مدل

# mse = mean_squared_error(y_test, y_pred)

# print(f'Mean Squared Error: {mse}')

# # نمایش نمودار

# plt.scatter(X, y, color='blue', label='Actual Data')

# plt.plot(X, model.predict(X), color='red', label='Regression Line')

# plt.xlabel('X')

# plt.ylabel('y')

# plt.legend()

# plt.show()
print(134.30)    ...    
Plain text

`