پیاده سازی هوش مصنوعی برای پیش بینی قیمت BTC
ما از داده هایی که از قیمت بیت کوین در تاریخ های گوناگون وجود دارد برای آموزش یک مدل هوش مصنوعی استفاده کردیم. این AI قابلیت این را دارد که پیش بینی کند بیت کوین حتی در دقیقه بعد بالا می رود یا پایین می آید. جالب است بدانید که این هوش مصنوعی را ۷ ساعت تست کردیم و در ۵۵ درصد مواقع نتیجه درستی را به ما ارائه داد.
شما نمی توانید یک ماشین لرنینگ درست بر روی داده های ناقص و نامطلوب به نتیجه برسانید، اما نا امید هم نشوید. همانطور که میدانید هزاران کتابخانه و API در زبان برنامه نویسی پایتون برای جمعآوری دادهها وجود دارد، اما ما سعی کردیم تا باز هم راه آسانتری برای دستیابی به داده ها پیدا کنیم.
پس از جستجوی “تاریخچه قیمت بیت کوین” متوجه شدیم که می توانید تمام تاریخچه قیمت بیت کوین را از CoinDesk در کندل های روزانه به دست بیاورید. تصویر زیر یک فایل CSV 173 کیلوبایتی با ۲۷۷۵ ردیف ازکندل های قیمت بیت کوین در قالب OHLC (باز، زیاد، کم و بسته) از اکتبر ۲۰۱۰ به ما داد و این در آن زمان تنها چیزی بود که داشتیم.
با استفاده از اکسل، چند میانگین متحرک و همچنین یک نشانگر RSI (شاخص قدرت نسبی) را به آنها اضافه کردیم (همانطور که میدانید میانگین های متحرک و RSI برای تحلیل های تکنیکال بازار سهام و ارزهای دیجیتال رواج دارند). در نهایت، ستونی را اضافه کردیم که مدل ما در آن سعی خواهد کرد تا پیش بینی کند که مثلا آیا قیمت در روز بعد مثبت است یا خیر (با TRUE و FALSE).
در مرحله بعد ما وارد پلتفرم پلتاریون شدیم. داده ها را آپلود، ذخیره و در یک آزمایش جدید از آنها استفاده کردیم. ما همه چیز را به جز تاریخ به عنوان ورودی و تشخیص روند در روز بعد را به عنوان هدف انتخاب کردیم.
تنها چیزی که در نمای مدلسازی که در آن زمان فهمیدیم، پارامتر «Patience (epochs)» بود که آن روی ۵ تنظیم شده بود و ما آن را تا ۲۰ افزایش دادیم تا مدل ما کمی طولانیتر کار کند.
در کمال تعجب، این مدل توانست به دقت ۵۲ درصدی در پیش بینی قیمت روز بعد دست یابد. اما نگران نباشید، ما نتوانستیم مدل را در بار اول درست کنیم. دلیل این دقت بالا به این دلیل است که ۵۳.۹٪ از کل روزهای آزمایش، قیمت ها مثبت بودند، بنابراین مدل ما زیاد هم خوب کار نکرد.
دانش محدود ما در مورد یادگیری ماشین به ما گفت که نمودار نهایی از پیش بینی باید شبیه به یک نمودار log(x) باشد: در ابتدا شیب دار و بعد از مدتی صاف شود. اما نمودار ما در تمام طول مسیر به پهلو می رفت. به نظر می رسید که هوش مصنوعی ما فقط داشت کورکورانه حدس می زد تا اینکه یک چیزی به دست بیاورد.
بنابراین، شروع به آزمایش برخی از تئوری هایی کردیم که برای بهبود مدل داشتیم.
اولین تئوری ما این بود که مدل نمی تواند این تعداد ورودی را مدیریت کند، اما معلوم شد که اشتباه است و مدل با ورودی های کمتر حتی بدتر عمل می کند. نظریه دوم ما این بود که از نوع حل نادرستی استفاده می کردیم، بنابراین آن را از طبقه بندی جدولی به رگرسیون جدولی تغییر دادیم. ما کاملاً مطمئن نبودیم که چگونه این نظریه روی مدل تأثیر می گذارد، زیرا نمی توانستم هیچ تغییر آشکاری در نمای مدل سازی ببینبم، اما مدل این بار بهتر عمل کرد و توانست دقت ۵۴.۲ درصدی را به نمایش بگذارد.
از اینجا به بعد ما با تنظیمات مختلفی در زبان پایتون بازی کردیم و سعی کردیم تا یاد بگیریم که همه آنها چه فایدهای برای ما دارند.
زمان تعمیرات اساسی فرا رسیده بود و بعد از مدت ها جستجو و یافتن راه حلی برای مشکلمان، یکی از همکاران ما به صورت ناخودآگاه راه حلی را به ما یاد داد. او به ما پیشنهاد کرد که به جای استفاده از کندل های روزانه از کندل های دقیقه ای استفاده کنیم. این کار بزرگترین مشکل مدل ما را حل می کند: یعنی بسیاری از عوامل خارجی را از عمل قیمت حذف می کند.
به عبارت دیگر معمولاً قیمت یک سهام یا ارز دیجیتال بر اساس احساسات بازار تعیین می شود و نه قیمت در تاریخ های گوناگون (که ما مدل خود را بر اساس آن قرار داده بودیم). اما اگر بازه زمانی کمتر باشد، رویدادهای خارجی کمتری در آن زمان رخ خواهد داد و هر گونه الگوی در دادههای تاریخی به راحتی قابل تشخیص خواهد بود. بنابراین با استفاده از پایتون با API بایننس، ۳ میلیون دقیقه از داده های بیت کوین OHLC را دانلود کردیم که ۲ میلیون آن در اکسل جا نمی شد.
این به تنهایی مدل را چندان بهبود نداد، اما ما تصمیم گرفتیم تا دادهها را هم نرمال کنیم (یعنی تقسیم دادههای OHLC بر قیمت باز باعث میشود که اعداد نشاندهنده مقادیر % از قیمت باز (۰.۱۲۳% افزایش، ۰.۱۲۳) باشند. ٪ ضرر و غیره) و به جای داشتن قیمت های مطلق مانند ۴۵ ۱۷۳ دلار یا ۴۵ ۱۷۴ دلار که کار را برای مدل سخت تر می کرد چیز خوبی بود).
در آخر تصمیم ما بر این شد که در هر ردیف تعدادی از کندل های قبلی (نرمال شده) را اضافه کنیم، بنابراین ۵ مقدار Close / Close برای n-k دقیقه، k = {1، …، ۵} و به همان میزان برای Open / Close اضافه کردیم.
این سه عامل و ترکیبشان باعث شد مدل ما شبیه به یک مدل هوش مصنوعی واقعی به نظر برسد. در حال یادگیری بود و نمودار شبیه یک نمودار log(x) بود. عملکرد بسیار خوبی نیز داشت. با تقسیم تقریباً ۵۰/۵۰ در مجموعه داده بین مقادیر TRUE و FALSE برای روز بعد (دقیقه) مثبت، این مدل توانست دقت خیره کننده ۵۵.۶٪ را به دست آورد.
اکنون ما مدلی داشتیم که به خوبی کار می کرد، بنابراین به طور طبیعی شروع کردیم به فکر کردن به اینکه چند موتور برای Cybertruck جدیدمان می خواهیم.
ما یک برنامه پایتون ساده با بسته CCXT نوشتیم که پنجاه و دو دقیقه آخر قیمت بیت کوین را دریافت می کند (به دلیل نحوه محاسبه میانگین ۵۰ دقیقه، باید پنجاه و یک کندل به عقب برگردد تا میانگین را تا میزان فعلی محاسبه کند ( ۵۲) کندل). سپس چند حلقه for نوشتیم که بقیه داده ها را محاسبه می کرد (بستن / بستن قبلی و غیره). بنابراین اکنون داده ها آماده است، اما ممکن است بپرسید چگونه می توان از مدل Peltarion روی آن استفاده کرد و فوراً خروجی دریافت کرد؟ پاسخ زاپیر است.
بدون نیاز به نوشتن یک خط کد، میتوانیم از مدل هوش مصنوعی اوراکل بر روی دادهها بهصورت همزمان استفاده کنیم و آنچه را که فکر میکند در آینده اتفاق میافتد بر روی یک برگه Google تایپ کنیم. بنابراین، با API Python Peltarion برای دریافت پیشبینی یا Google Drive API برای نوشتن در Sheet ، زیاد سخت نگیرید همه اینها حدود دو ثانیه طول می کشد، بنابراین با جمع آوری و ارزیابی داده ها درست قبل از بسته شدن یک کندل دقیقه ای، یک پیش بینی تازه برای کندل بعدی داریم و می توانیم بر اساس آن عمل کنیم.
روشی که ما همه این کارها را انجام دادم با ارسال یک وب هوک با داده ها به Zapier بود که فقط یک خط کد در پایتون بود. ما کاری کردیم که برنامه هر دقیقه یک بار این کار را انجام دهد. وب هوک از داده های JSON تشکیل شده است که به راحتی دارای قالب بندی مشابه فرهنگ لغت پایتون است که ما برای ذخیره تمام داده ها استفاده کردیم. سپس ارزیابی Peltarion را به عنوان اقدام انتخاب کردیم، همه چیزهایی را که به تازگی دریافت کرده بود به آن دادیم و از آن ارزیابی در اقدام دیگری برای نوشتن یک ردیف جدید در Google Sheet استفاده کردیم. مقدار Close / Close قبلی را هم نوشتیم تا بتوانیم درست یا غلط بودن پیش بینی قبلی را ارزیابی کنیم.
همچنین شایان ذکر است که می توانید این کار را بدون نوشتن هیچ کدی انجام دهید. اپلیکیشنهایی در Zapier وجود دارند که میتوانند کندلهای ساعتی و روزانه (البته متاسفانه بدون شمع دقیقهای) از قیمت بیتکوین را برای شما به ارمغان بیاورند، بنابراین اگر مدل خود را بر روی آن آموزش دادهاید، میتوانید در کسری از زمان و بدون دست زدن به هیچ کدی نتیجه معقولی را دریافت کنید.