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

«ویلیام کوهرسن» (William Koehrsen) در مطلبی با عنوان «پیش‌بینی بازار بورس با پایتون» چنین می‌گوید: «هنگامی که من شروع به استفاده از مدل‌های گوناگون برای پیش‌بینی سری‌های زمانی کردم، مجبور بودم روشم را روی داده‌های بازار بورس با سرمایه‌های شبیه‌سازی شده تست کنم. بنابراین، به ناچار به جمع کثیر افرادی پیوستم که در تلاش برای غلبه بر بازار با بهره‌گیری از روش‌های تحلیلی روز به روز (تحلیل داده‌های روزانه) بودند و البته همه به نوعی شکست خوردند.

اگرچه در این فرآیند، پایتون، «برنامه‌نویسی شی‌گرا» (Object Oriented Programming | OOP)، چگونگی دستکاری داده‌ها (Data Manipulation)، مدل‌سازی و بصری‌سازی را به خوبی آموختم. همچنین فهمیدم که چرا باید از (تخصیص وقت و) بازی کردن روزانه با داده‌های بازار سهام حتی بدون از دست دادن یک دلار (در محیط شبیه‌سازی شده) اجتناب کرد (تنها می‌توانم بگویم این بازی بسیار زمان‌بر است).

پیش‌بینی بازار بورس
یک روز در مقایسه با 3۰ سال: شما پول خود بر اساس کدام یک سرمایه‌گذاری می‌کنید؟

نکته‌ای که باید بگویم آن است که (به نظر من) هنگام عدم موفقیت در کارها سه راهکار پیش روی ما هست:

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

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

پیش‌بینی بازار بورس

البته نکته قابل توجه دیگر آن است که کد پایتونی که برای انجام کار دشواری مانند پیش‌بینی بازار بورس نوشته شده (و بسیاری از کدهای دیگری که برای مسائل پیچیده دیگر نوشته می‌شوند) حتی در صورتی که خروجی نهایی مدل از آنچه مورد انتظار است دور باشد، باز هم یک کد بیهوده به حساب نمی‌آیند. در این مطلب، قابلیت‌های ابزار «Stocker» یا «Stock Explorer» که توسط ویلیام کوهرسن به منظور پیش بینی بازار بورس با زبان برنامه‌نویسی پایتون ساخته شده به همراه چگونگی کد نویسی آن مورد بررسی قرار می‌گیرد. کد کامل این برنامه در گیت‌هاب (+) برای کلیه افرادی که تمایل به استفاده از آن و یا مشارکت در این پروژه را دارند موجود است.

Stocker برای پیش‌بینی بازار بورس

Stocker یک ابزار پایتون برای انجام اکتشاف در بورس است که توسط ویلیام کوهرسن با استفاده از زبان برنامه‌نویسی پایتون نوشته شده است. به منظور اجرای این برنامه، پس از آنکه کتابخانه‌های مورد نیاز آن نصب شد، می‌توان Jupyter Notebook را در همان پوشه اسکریپت برنامه آغاز و کلاس Stocker را ایمپورت کرد.

این کلاس در حال حاضر در دسترس است. یک شی از کلاس Stocker با پاس دادن هر مقدار معتبری از stock ticker به آن ساخته می‌شود.

:[In[1

:[1]Out

AMZN Stocker Initialized. Data covers 1997-05-16 to 2018-01-18.

همانطور که از خروجی مشهود است، داده‌های سهام آمازون برای بیست سال موجود هستند و می‌توان در آن‌ها به اکتشاف پرداخت. Stocker برپایه کتابخانه مالی Quandl با بیش از 3۰۰۰ بورس برای استفاده ساخته شده است. در ادامه، می‌توان با استفاده از متد plot_stock یک نمودار ساده از تاریخچه داده‌های بورس را ترسیم کرد.

:[In[2

:[2]Out

Maximum Adj. Close = 1305.20 on 2018-01-12.
Minimum Adj. Close = 1.40 on 1997-05-22.
Current Adj. Close = 1293.32.

پیش‌بینی بازار بورس

توانایی‌های تحلیل Stocker می‌تواند برای یافتن گرایش‌های کلی و الگوهای موجود در میان داده‌ها مورد استفاده قرار بگیرد اما تمرکز ادامه این مطلب بر چگونگی پیش‌بینی قیمت‌های آینده سهام بر اساس داده‌های گذشته بازار بورس (سری‌های زمانی) است. پیش‌بینی در Stocker با استفاده از «مدل‌های جمعی» (Additive Model | AM) که شامل سری‌های زمانی به عنوان ترکیبی از یک گرایش کلی دارای فصل‌بندی‌ها در مقیاس‌های زمانی متفاوت مانند روزانه، هفتگی و ماهانه است. Stocker همچنین از بسته prophet که توسط فیس‌بوک برای مدل‌سازی تجمعی ساخته شده استفاده می‌کند. ساخت یک مدل و انجام پیش‌بینی در Stocker تنها با بهره‌گیری از یک خط کد انجام‌پذیر است.

:[In[3

:[3]Out

Predicted Price on 2018-04-18 = $1336.98

پیش‌بینی بازار بورس

پیش‌بینی – خط سبز رنگ – در برگیرنده «فاصله اطمینان» (Confidence Interval) است. این امر از «عدم قطعیت» (Uncertainty) مدل در پیش‌بینی‌ها حکایت دارد. در این مثال، پهنای فاصله اطمینان بر ۸۰٪ تنظیم شده است، بدین معنا که انتظار می‌رود این بازه در ۸۰٪ مواقع شامل مقدار واقعی باشد. فاصله اطمینان در گذر زمان پهن‌تر می‌شود زیرا تخمین با دورتر شدن از داده‌ها، دارای عدم قطعیت بیشتری نیز می‌شود. هر زمان که پیش‌بینی انجام شود، باید بازه‌های اطمینان در آن لحاظ شود. اگرچه بیشتر افراد به دنبال یک پاسخ ساده درباره آینده هستند، پیش‌بینی‌ها حاکی از آن است که بشر در جهان غیر قطعی زندگی می‌کند.

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

ارزیابی پیش‌بینی‌ها

برای محاسبه صحت، نیاز به مجموعه داده‌های تست و آموزش است. داده‌کاو نیاز دارد که پاسخ‌ها را برای مجموعه تست بداند – قیمت کنونی بورس -، بنابراین از داده‌های تاریخی یک سال گذشته برای انجام این کار استفاده می‌شود (در مثال پیش رو 2۰1۷). هنگام آموزش، به مدل اجازه داده نمی‌شود که پاسخ‌های مجموعه داده تست را ببیند، بنابراین از داده‌های سه سال قبل‌تر از آن برای ارزیابی چارچوب زمانی استفاده می‌شود (2۰14 تا 2۰1۶). ایده اساسی «یادگیری نظارت شده» (Supervised Learning) آن است که مدل الگوها و روابط میان داده‌ها را از مجموعه داده آموزش می‌آموزد و سپس قادر به بازتولید صحیح آن‌ها برای داده‌های تست است.

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

:[In[4

:[4]Out

پیش‌بینی بازار بورس

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

اگر تلاش‌های اولیه موفقیت‌آمیز نبودند، می‌توان این پارامترها را جهت حصول نتایج بهتر تغییر داد. تنظیمات گوناگونی برای تنظیم مدل Prophet وجود دارد، که مهم‌ترین آن‌ها مقیاس اولیه «نقطه تغییر» (changepoint) است که میزان وزنی که مدل در تغییرات گرایش‌های داده‌ها قرار می‌دهد را کنترل می‌کند.

انتخاب اولویت نقطه تغییر

نقاط تغییر نمایانگر محل‌هایی هستند که سری زمانی از افزایش رو به کاهش یا از رشد آهسته به رشد سریع رفته است (یا  برعکس). این موارد در محل‌هایی با بیشترین تغییر در نرخ سری‌های زمانی به وقوع می‌پیوندند. مقیاس اولویت نقطه تغییر میزان تاکید داده شده بر نقاط تغییر در مدل را نشان می‌دهد. این مورد برای کنترل «بیش‌برازش» (overfitting) و «کم‌برازش» (underfitting) مورد استفاده قرار می‌گیرد.

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

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

:[In[5

پیش‌بینی بازار بورس
تاثیر اولویت نقطه تغییر

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

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

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

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

:[In[6

 

:[Out[6

اکنون باید مواظب بود که داده‌های اعتبارسنجی مشابه داده‌های تست نباشند. اگر این اتفاق بیافتد ظاهرا به نظر می‌رسد که بهترین مدل برای داده‌ها ساخته شده اما در حقیقت بیش‌برازش داده‌های تست اتفاق افتاده و مدل نمی‌تواند برای داده‌های جهان واقعی مورد استفاده قرار بگیرد. در کل، همانطور که معمولا در علم داده انجام می‌شود، از سه مجموعه متفاوت از داده‌ها استفاده خواهد شد: مجموعه داده‌های آموزش (سال‌های 2۰13 الی 2۰1۵)، مجموعه ارزیابی (مربوط به سال 2۰1۶) و مجموعه داده تست (متعلق به سال 2۰1۷).

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

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

پیش‌بینی بازار بورس
منحنی صحت آموزش و تست و عدم قطعیت برای مقیاس‌های اولویت نقطه تغییر متفاوت

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

:[In[7

پیش‌بینی بازار بورس
منحتی آموزش و تست پالایش شده

خطای مجموعه تست در اولویت ۰.۵ حداقل شده است. ویژگی اولویت نقطه تغییر برای شی Stocker به شکل مناسبی تنظیم می‌شود.

:[In[8

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

ارزیابی مدل پالایش شده

اکنون که مدل بهینه شده، می‌توان مجددا آن را ارزیابی کرد.

:[In[9

:[Out[9

پیش‌بینی بازار بورس

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

بازی با بازار بورس

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

قواعد این استراتژی واضح و به شرح زیر هستند:

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

این بازی باید هر روز در کل دوره ارزیابی انجام شود. در این مثال دوره برابر با سال 2۰1۷ است. برای انجام بازی، تعداد سهام‌ها به فراخوانی متد داده می‌شوند. Stocker کاربر را از نتیجه استراتژی خود با اعداد و ارقام و نمودارها آگاه می‌کند.

:[In[10

:[Out[10

پیش‌بینی بازار بورس

این خروجی یک درس قابل توجه به همراه دارد: بخر و نگه دار! در حالیکه با استراتژی پیش‌تر مطرح شده می‌شد مقدار قابل توجهی دستاورد داشت، بهترین راهکار آن است که برای مدت طولانی سرمایه‌گذاری انجام شود. می‌توان دیگر دوره تست را نیز امتحان کرد تا مشاهده شود که آیا زمان‌هایی وجود دارد که استراتژی مدل موجود بر متد خرید و نگه‌داری غلبه کند یا خیر.

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

پیش‌بینی بازار بورس
همیشه برای ارزیابی مدل و پیش‌بینی‌های خود از پول غیر واقعی استفاده کنید!

پیش‌بینی آینده

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

پیش‌بینی بازار بورس
پیش‌بینی برای 1۰ و 1۰۰ روز آینده

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

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

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

^^

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

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

نظر شما چیست؟

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