هوش مصنوعی 205 بازدید

مهم‌ترین سؤالی که با شنیدن اصطلاحاتی نظیر «بیت‌کوین» (Bitcoin) و «ارز مجازی» (Virtual Currency) در ذهن بسیاری از مردم شکل می‌گیرد این است که مفهوم «ارز دیجیتال» (Digital Currency) یا ارز مجازی چیست؟ ارز دیجیتال یا مجازی که در زبان انگلیسی به آن Cryptocurrency گفته می‌شود، ارزی دیجیتال است که از روش‌های «رمزنگاری» (Cryptography) بسیار قدرتمند برای تضمین امنیت آن استفاده می‌شود. به دلیل استفاده از روش‌های امنیتی و رمزنگاری بسیار قدرتمند، «جعل» (Counterfeit) ارزهای دیجیتال بسیار سخت است. ارز دیجیتال، یک دارایی دیجیتال است که با هدف ایجاد یک «واسط داد و ستد» (Medium of Exchange) برای «تراکنش‌های مالی» (Financial Transactions) و صحت سنجی «انتقال دارایی‌ها» (Transfer of Assets) ایجاد شده است. بسیاری از ارزهای دیجیتال، «سیستم‌های غیرمتمرکزی» (Decentralized Systems) هستند که بر اساس فناوری‌هایی نظیر «بلاک‌چین» (Blockchain) بنا نهاده شده‌اند. سودآوری بالای این ارز دیجیتال، بسیاری از افراد را به سمت ایجاد روش‌هایی برای پیش بینی قیمت بیت کوین سوق داده است. مهم‌ترین ارزهای دیجیتالی که تاکنون تولید شده‌اند، عبارتند از:

  • ارز دیجیتالی بیت‌کوین (Bitcoin)
  • ارز دیجیتالی لایت‌کوین (Litecoin)
  • ارز دیجیتالی اتریوم (Ethereum)
  • ارز دیجیتالی ریپل (Ripple)

پیش بینی قیمت بیت کوین

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

پیش بینی قیمت بیت کوین

بدون شک، ایجاد روش‌هایی برای پیش بینی قیمت بیت کوین، برای هر شخصی که با این حوزه آشنایی دارد، بسیار هیجان‌برانگیز و وسوسه‌انگیز خواهد بود. اولین قدم در جهت پیش بینی قیمت بیت کوین، مطالعه دلایل نوسان (سقوط یا افزایش) قیمت آن در جهان است. در این زمینه، نظربه‌های متفاوتی وجود دارد که ریشه در دلایل سیاسی، اقتصادی و اجتماعی دارد. با این حال، در این مطلب سعی شده است تا از دیدگاهی متفاوت برای مدل‌سازی نوسان قیمت بیت‌کوین در چند سال اخیر و پیش‌بینی قیمت آن در آینده استفاده شود. در این مطلب، از دیدگاه الگوریتمی برای پیش بینی قیمت بیت کوین استفاده شده است. به بیان دیگر، هدف این است که از «داده‌های تاریخی عددی» (Numerical Historical Data) برای آموزش یک «شبکه عصبی بازگشتی» (Recurrent Neural Network) استفاده شود. شبکه عصبی بازگشتی، رفتار داده‌های آموزشی را یاد می‌گیرد و آن را مدل‌سازی می‌کند. سپس، از شبکه عصبی آموزش دیده برای پیش بینی قیمت بیت کوین استفاده می‌شود.

جمع‌آوری قیمت‌های تاریخی بیت‌کوین

منابع اندکی برای جمع‌آوری داده‌های تاریخی، در رابطه با قیمت بیت‌کوین وجود دارد. برخی از این منابع، اطلاعات مرتبط با قیمت بیت‌کوین را در قالب مجموعه داده‌های ساخت یافته در اختیار کاربران قرار می‌دهند. کاربران، باید این اطلاعات را به صورت دستی از این منابع «بارگیری» (Download) و پس از آماده‌سازی، در الگوریتم‌های پیاده‌سازی شده استفاده کنند. منابع دیگر، یک «واسط برنامه‌نویسی کاربردی» (Application Programming Interface) در اختیار کاربران قرار می‌دهند تا از این طریق، اطلاعات مرتبط با قیمت بیت‌کوین را جمع‌آوری کنند. استفاده از واسط برنامه‌نویسی کاربردی برای جمع‌آوری داده‌ها، دو مزیت عمده برای الگوریتم پیاده‌سازی شده به ارمغان می‌آورند:

  • اطلاعات جمع‌آوری شده به روز خواهند بود؛ در نتیجه، دقت مدل پیش‌بینی قیمت بیت‌کوین افزایش خواهد یافت.
  • اطلاعات جمع‌آوری شده به صورت «بلادرنگ» (Real-Time)، برای یکپارچه‌سازی با مدل یادگیری پیاده‌سازی شده در دسترس خواهند بود.

از جمله بهترین واسط‌های برنامه‌نویسی کاربردی ارائه شده برای جمع‌آوری قیمت بیت‌کوین، واسط ارائه شده توسط وب‌سایت (CoinRanking.com) است که اطلاعات به روز و دقیقی از قیمت‌های لحظه‌ای بیت‌کوین در اختیار کاربران قرار می‌دهد.

شبکه‌های عصبی بازگشتی

از آنجایی که داده‌های تاریخی مرتبط با قیمت بیت‌کوین از نوع داده‌های «سری زمانی» (Time Series) هستند، استفاده از «شبکه‌های عصبی پیش‌خور» (Feedforward Neural Networks) پیشنهاد نمی‌شود. این دسته از شبکه‌های عصبی برای پیش‌بینی بر اساس داده‌های سری زمانی قیمت بیت‌کوین مناسب نیستند؛ زیرا، قیمت روز آینده بیت‌کوین همبستگی بسیار زیادی به قیمت امروز بیت‌کوین دارد و نه قیمت یک ماه گذشته آن. شبکه عصبی بازگشتی، دسته‌ای از «شبکه‌های عصبی مصنوعی» (Artificial Neural Networks) است که در آن ارتباطات میان نودها (نرون‌ها)، «گرافی جهت‌دار» (Directed Graph) در راستای یک «دنباله زمانی» (Temporal Sequence) تشکیل می‌دهد.

ویژگی مهم شبکه‌های عصبی بازگشتی، توانایی نمایش رفتار پویای یک دنباله زمانی است. شبکه عصبی بازگشتی قادر است از وضعیت داخلی خود برای پردازش این دنباله‌ها استفاده کند. در عمل، چنین امکانی از طریق اضافه کردن لایه‌هایی نظیر «حافظه کوتاه مدتِ بلند» (long Short-Term Memory) و «واحد بازگشتی محصور» (Gated Recurrent Unit) به شبکه‌های عصبی بازگشتی حاصل می‌شود. در شکل زیر، تفاوت میان معماری‌های یک شبکه عصبی پیش‌خور معمولی و یک شبکه عصبی بازگشتی نمایش داده شده است. همان‌طور که ملاحظه می‌شود برخلاف شبکه‌های عصبی پیش‌خور، در شبکه‌های عصبی بازگشتی، داده‌ها می‌توانند در دو جهت در شبکه جریان پیدا کنند؛ از سمت ورودی به سمت خروجی و برعکس.

پیش بینی قیمت بیت کوین

روش پیشنهادی برای پیش‌ بینی قیمت بیت‌ کوین

برای اینکه بتوان یک مدل هوشمند یادگیری برای آموزش شبکه عصبی بازگشتی روی داده‌های تاریخی قیمت بیت‌کوین و در نهایت، پیش بینی قیمت بیت کوین در روز آینده طراحی کرد، لازم است تا مراحل زیر، جهت تضمین عملکرد مناسب مدل پیشی‌بینی طی شوند:

  • جمع‌آوری، «پاک‌سازی» (Cleaning) و «نرمال‌سازی» (Normalizing) داده‌های تاریخی مرتبط با قیمت بیت‌کوین.
  • طراحی مدل شبکه عصبی بازگشتی با واحد حافظه کوتاه مدتِ بلند (LSTM).
  • آموزش شبکه عصبی بازگشتی طراحی شده روی داده‌های تاریخی مرتبط با قیمت بیت‌کوین و ذخیره‌‎سازی مدل آموزش داده شده.
  • پیش بینی قیمت بیت کوین در روز آینده توسط شبکه آموزش دیده و در آخر، «تبدیل» (Deserialize) خروجی شبکه عصبی (منظور از تبدیل در این مطلب، تبدیل فرم سری داده‌ها به فرمت داده‌های مورد نیاز برای نمایش قیمت بیت‌کوین است).

جمع‌آوری، پاک‌سازی و نرمال‌سازی داده‌ها

در این بخش، راهکارهای لازم برای جمع‌آوری داده‌های تاریخی مورد نیاز برای آموزش شبکه عصبی، پاک‌سازی داده‌های جمع‌آوری شده و در نهایت، نرمال‌سازی آن‌ها ارائه می‌شود.

جمع‌آوری داده‌های تاریخی قیمت بیت‌کوین

همانطور که پیش از این نیز اشاره شد، بهترین راه جمع‌آوری داده‌های مورد نیاز برای آموزش شبکه عصبی، استفاده از واسط‌های برنامه‌نویسی کاربردی ارائه شده برای چنین کاری است. در این مطلب، از واسط برنامه‌نویسی کاربردی وب‌سایت (CoinRanking.com) برای جمع‌آوری داده‌های مرتبط با قیمت بیت‌کوین استفاده شده است. چنین کاری به ما اجازه می‌دهد که بلافاصله پس از جمع‌آوری داده‌ها، آن‌ها را به ساختارهای داده‌ای قابل تعریف توسط بسته نرم‌افزاری (Pandas) در زبان برنامه‌نویسی پایتون تبدیل کنیم. برای چنین کاری از قطعه کد زیر استفاده می‌شود:

با مطالعه این کد مشخص می‌شود که تابع تعریف شده برای چنین کاری، داده‌های مرتبط با قیمت بیت‌کوین در پنج سال اخیر را جمع‌آوری می‌کند. همچنین، قیمت بیت‌کوین بر اساس «دلار آمریکا» (US Dollar) نمایش داده خواهد شد. با این حال، این امکان برای کاربران فراهم شده است تا داده‌های قیمت بیت‌کوین را در بازه‌های زمانی مختلف و با واحدهای قیمتی متفاوت جمع‌آوری کنند.

پاک‌سازی و نرمال‌سازی داده‌های جمع‌آوری شده

پس از جمع‌آوری داده‌ها و تبدیل آن‌ها به ساختارهای داده‌ای (Pandas)، لازم است توابعی تعریف شوند تا داده‌های جمع‌آوری شده، برای آموزش شبکه عصبی بازگشتی آماده شوند. این توابع عبارتند از:

  • یک تابع خاص برای تولید ماتریس داده‌های قیمت بیت‌کوین (در این ماتریس، هر سطر حاوی 30 ستون است و هر ستون بیانگر قیمت بیت‌کوین در یک روز خاص خواهد بود).
  • یک تابع خاص برای نرمال‌سازی داده‌های جمع‌آوری شده جهت آموزش شبکه عصبی (داده‌ها به شکلی نرمال‌سازی می‌شوند که هر نمونه، به جای نمایش قیمت بیت‌کوین، درصد تغییرات قیمت از نقطه آغازین را نشان دهد).
  • یک تابع خاص برای تقسیم داده‌های جمع‌آوری شده به داده‌های «آموزشی» (Train) و «تست» (Test) (در این مطلب، از توابع پیش فرض بسته نرم‌افزاری scikit-learn در زبان برنامه‌نویسی پایتون استفاده نشده است؛ دلیل این کار، حفظ ترتیب داده‌های سری زمانی جمع‌آوری شده برای آموزش صحیح شبکه عصبی است).

از قطعه کد زیر، برای آماده‌سازی داده‌های جمع‌آوری شده استفاده می‌شود.

طراحی مدل شبکه عصبی بازگشتی با واحد حافظه کوتاه مدتِ بلند

پس از پاک‌سازی داده‌های جمع‌آوری شده، نوبت طراحی مدل شبکه عصبی بازگشتی است. از داده‌های پاک‌سازی و نرمال‌سازی شده، برای آموزش شبکه عصبی طراحی شده استفاده می‌شود. برای چنین کاری، از بسته نرم‌افزاری (Keras) و واحدهای قابل تعریف توسط آن، جهت طراحی شبکه عصبی بازگشتی استفاده می‌شود. با استفاده از قطعه کد زیر، شبکه عصبی بازگشتی و پارامترهای آن (نظیر ابعاد داده‌های ورودی، ابعاد بردار خروجی، تعداد «دورهای» (Epoch) لازم برای آموزش شبکه عصبی، «تابع زیان» (Loss Function) لازم برای ارزیابی مدل، «بهینه‌ساز» (Optimizers) شبکه عصبی بازگشتی، طول دنباله سری زمانی و سایر موارد) تعریف می‌شوند. شایان توجه است که این قابلیت برای کاربران وجود دارد که پارامترهای شبکه طراحی شده را مطابق با نیازهای مسأله خود تغییر دهند.

در مرحله بعد با استفاده از قطعه کد زیر، یک «مدل ترتیبی» (Sequential Model) با دو واحد حافظه کوتاه مدتِ بلند (LSTM) و دو «لایه متراکم» (Dense Layer) طراحی می‌شود.

آموزش شبکه عصبی بازگشتی و ذخیره مدل آموزش دیده

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

در مرحله بعد، مدل آموزش دیده را ذخیره می‌کنیم. یکی از ویژگی‌های مهم بسته نرم‌افزاری (Keras)، امکان ذخیره ‌سازی یک مدل آموزش دیده است. همچنین، می‌توان مدل آموزش دیده ذخیره شده را در دفعات آتی و یا در کدهای دیگر بارگذاری و استفاده کنیم. چنین کاری با استفاده از قطعه کد زیر انجام می‌شود.

پیش بینی قیمت بیت کوین در روز آینده و تبدیل خروجی

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

پس از پاک‌سازی و آماده‌سازی داده‌‌ها، مدل آموزش دیده بارگذاری و از آن برای پیش بینی قیمت بیت کوین در روز آینده استفاده می‌شود.

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

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

تبدیل داده‌های خروجی (پیش‌بینی‌های انجام شده) و تولید نمودار

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

در نهایت، با استفاده از بسته نرم‌افزاری (Plotly) زبان برنامه‌نویسی پایتون و تنظیم کردن پارامترهای آن، امکان نمایش «مقادیر مشاهده شده» (Observation Values) و «مقادیر پیش‌بینی شده» (Prediction Values) در یک نمودار وجود دارد. برای چنین کاری، از قطعه کد زیر استفاده می‌شود.

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

پیش بینی قیمت بیت کوین

میزان قابل اعتماد بودن نتایج پیش‌بینی

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

جمع‌بندی

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

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

^^

به عنوان حامی، استارتاپ، محصول و خدمات خود را در انتهای مطالب مرتبط مجله فرادرس معرفی کنید.

telegram
twitter

مرتضی جادریان

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

بر اساس رای 2 نفر

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

نظر شما چیست؟

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