«کرس» (Keras)، کتابخانه «متن‌باز» (Open Source) نوشته شده برای «زبان برنامه‌نویسی پایتون» (Python Programming Language) است. این کتابخانه قابل اجرا بر فراز کتابخانه «تنسورفلو» (TensorFlow)، «جعبه ابزار شناختی مایکروسافت» (CNTK | Microsoft Cognitive Toolkit) و «ثینو» (Theano) است. کتابخانه کرس، از مدل «» (Long Short-Term Memory | LSTM) برای پیش‌بینی قیمت بورس بهره می‌برد.

LSTM در پیش‌بینی  برای مسائل دارای توالی بسیار قدرتمند عمل می‌کند، زیرا قادر به ذخیره‌سازی اطلاعات گذشته است. در مساله پیش‌بینی قیمت بورس، این ویژگی بسیار مهم محسوب می‌شود زیرا قیمت پیشین سهام برای پیش‌بینی قیمت آینده آن عاملی حیاتی محسوب می‌شود.

در این راهنما، چگونگی شروع پیش‌بینی سری‌های زمانی با مدل‌های LSTM آموزش داده می‌شود. داده‌های بازار سهام انتخاب خوبی برای این کار محسوب می‌شوند زیرا منظم و به طور گسترده برای افراد گوناگون موجود هستند. توصیه می‌شود از این مدل به عنوان یک پیشنهاد اقتصادی یا برای انجام تجارت شخصی استفاده نکنید (چون در صورت ارائه خروجی‌های غلط، زیان مالی در پی دارد).

در مطلب پیش رو، یک مدل «یادگیری عمیق» (Deep Learning) پایتون، که رفتار آینده  قیمت سهام را پیش‌بینی می‌کند، ارائه شده است. طی تدوین این مطلب، فرض بر آن بوده که مخاطبان با مفهوم یادگیری عمیق در پایتون و به ویژه حافظه کوتاه مدت بلند آشنایی دارند. به افرادی که نیازمند مطالعه بیشتر در این رابطه هستند، مطلب «یادگیری عمیق با پایتون»، توصیه می‌شود.

در حالیکه پیش‌بینی قیمت کنونی سهام کاری دشوار است، می‌توان مدلی ساخت که پیش‌بینی کند قیمت سهام افزایش یا کاهش می‌یابد. داده‌ها و نوت‌بوک مورد استفاده برای این مطلب از این مسیر (+) قابل دانلود هستند. لازم به ذکر است که همواره فاکتورهای دیگری مانند جو سیاسی و بازار نیز وجود دارند که قیمت سهام را تحت تاثیر قرار می‌دهند. اگرچه، در این راهنما این فاکتورها در نظر گرفته نشده‌اند.

مقدمه‌ای بر LSTM

LSTM‌ها در مسائل پیش‌بینی توالی بسیار قدرتمند عمل می‌کنند، زیرا قادر به ذخیره‌سازی اطلاعات گذشته هستند. این امر در مساله پیش‌بینی قیمت سهام عاملی مهم محسوب می‌شود، زیرا قیمت پیشین آن در پیش‌بینی قیمت آینده نقشی حیاتی ایفا می‌کند. کار پیش‌بینی با «وارد کردن» (Import) کتابخانه «نام‌پای» (NumPy) برای محاسبات علمی، «مَت‌پلات‌لیب» (Matplotlib) برای رسم نمودارها و «پانداس» (Pandas) برای کمک به بارگذاری و تغییر مجموعه داده‌ها آغاز می‌شود.

بارگذاری مجموعه داده

گام بعدی، بارگذاری مجموعه داده‌های آموزش و انتخاب ستون‌های Open و High است که در مدل‌سازی مورد استفاده قرار خواهند گرفت.

head مجموعه داده برای دریافت چکیده‌ای از نوع داده‌های موجود در مجموعه داده‌ای که قرار است با آن کار شود مورد بررسی قرار می‌گیرد.

پیش‌بینی قیمت سهام

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

هم‌مقیاس کردن ویژگی‌ها

بر اساس تجربه‌های پیشین نویسنده این مطلب (+) از کار با مدل‌های یادگیری عمیق، می‌توان فهمید که برای داشتن کارایی بهینه باید داده‌ها را هم‌مقیاس کرد. در مساله مطرح شده در اینجا، از MinMaxScaler کتابخانه «سایکیت‌لرن» (Scikit- Learn) برای هم‌مقیاس کردن داده‌ها به اعداد بین صفر و یک استفاده می‌شود.

ساخت داده‌ها با گام زمانی

LSTM، از داده‌ها انتظار دارد تا در قالب مشخصی باشند، که معمولا آرایه‌های سه‌بُعدی است. کار با ساخت داده‌ها در ۶۰ «گام زمانی» (Time Step) و تبدیل آن‌ها به یک آرایه با استفاده از NumPy انجام می‌شود. سپس، داده‌ها به یک آرایه سه‌بُعدی با نمونه‌های X_train، تعداد ۶۰ گام زمانی و یک ویژگی در هر گام تبدیل می‌شوند.

ساخت LSTM

به منظور ساخت LSTM، نیاز به «وارد کردن» (import) تعدادی از ماژول‌ها از کرس است که در ادامه بیان شده‌اند.

  • Sequential برای مقداردهی اولیه شبکه عصبی
  • Dense برای افزودن یک لایه شبکه عصبی به شدت متصل (Densely Connected)
  • LSTM برای افزودن لایه
  • Dropout برای افزودن لایه dropout که از «بیش برازش» (Overfitting) جلوگیری می‌کند.
لایه LSTM اضافه می‌شود و بعدا چند لایه Dropout برای پیش‌گیری از بیش‌برازش اضافه می‌شوند. لایه LSTM  با آرگومان‌های زیر افزوده می‌شود.

  1. ۵۰ واحد که ابعاد فضای خروجی است.
  2. return_sequences=True که تعیین می‌کند آخرین خروجی در توالی خروجی بازگردانده شود و یا کل توالی
  3. input_shape به عنوان شکل مجموعه داده آموزش

هنگام تعریف لایه Dropout، مقدار ۰.۲ تعیین می‌شود که به معنای آن است که ٪۲۰ از لایه‌ها رها می‌شوند (dropping). پس از آن، یک لایه Dense اضافه می‌شود که خروجی یک واحد را تعیین می‌کند. سپس، مدل با استفاده از بهینه‌ساز محبوب Adam کامپایل و هزینه به عنوان mean_squarred_error تعیین می‌شود. این کار به منظور محاسبه «میانگین مربعات خطا» (Mean Squared Error) است. سپس، مدل برای اجرا روی ۱۰۰ «دوره» (epoch) و اندازه دسته ۳۲ برازش می‌شود. باید به خاطر داشت که بسته به حافظه کامپیوتر، این کار دقایقی به طول خواهد انجامید.

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

ابتدا باید «مجموعه آزمون» (Test Set) را ایمپورت کرد که برای انجام پیش‌بینی‌ها استفاده خواهند شد.

به منظور پیش‌بینی قیمت‌های آینده سهام، نیاز به انجام چند کار پس از بارگذاری مجموعه آزمون است که در ادامه بیان شده‌اند.

  1. ادغام «مجموعه آموزش» (Training Set) و مجموعه تست روی محور ۰
  2. تنظیم گام زمانی روی ۶۰ (چنانکه پیش‌تر مشاهده شد.)
  3. استفاده از MinMaxScaler برای تبدیل مجموعه داده جدید
  4. شکل‌دهی مجدد مجموعه داده به صورتی که پیش‌تر بیان شد.

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

ترسیم نمودار نتایج

در نهایت، از Matplotlib برای بصری‌سازی نتایج قیمت سهام پیش‌بینی شده و قیمت سهام واقعی استفاده می‌شود.

پیش بینی قیمت سهام با پایتون

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

نتیجه‌گیری

در این مطلب از مدل LSTM موجود در کتابخانه Keras پایتون برای پیش‌بینی قیمت سهام استفاده شد. روش‌های دیگری نیز برای این کار وجود دارند که از آن جمله می‌توان به «میانگین متحرک» (Moving Averages)، «رگرسیون خطی» (linear regression)، «میانگین متحرک خودهمبسته یکپارچه» (Autoregressive Integrated Moving Average | ARIMA) و Prophet اشاره کرد. این‌ها روش‌هایی هستند که می‌توان آن‌ها را روی مجموعه داده استفاده شده در این مطلب اعمال و نتایج آن را با Keras LSTM مقایسه کرد.

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

telegram
twitter

الهام حصارکی

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

بر اساس رای 3 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *