پیش بینی سهام در پایتون

ساخت وبلاگ

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

هنگامی که ما موفقیت فوری را تجربه نمی کنیم - در هر کار ، نه فقط علوم داده - ما سه گزینه داریم:

  1. نتایج را تغییر دهید تا به نظر برسد که ما موفق بودیم
  2. نتایج را پنهان کنید تا هیچ کس متوجه آن شود
  3. تمام نتایج و روشهای ما را نشان دهید تا دیگران (و خودمان) بتوانند یاد بگیرند که چگونه کارها را بهتر انجام دهند

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

در این پست قابلیت های پیش بینی Stocker ، ابزار "Explorer" که من در پایتون ایجاد کردم ، اسناد می کند. در مقاله قبلی ، من نحوه استفاده از Stocker را برای تجزیه و تحلیل نشان دادم و کد کامل در GitHub برای هر کسی که مایل به استفاده از آن یا کمک به پروژه است ، در GitHub موجود است.

سهامدار برای پیش بینی

Stocker ابزاری پایتون برای اکتشاف سهام است. پس از نصب كتابخانه های مورد نیاز (اسناد را بررسی كنید) می توانیم نوت بوک Jupyter را در همان پوشه اسکریپت شروع کنیم و کلاس Stocker را وارد کنیم:

اکنون کلاس در جلسه ما قابل دسترسی است. ما با عبور از آن هر تیک سهام معتبر (Bold is Output) یک شی از کلاس سهام را می سازیم:

درست مثل این ما 20 سال داده های سهام روزانه آمازون برای کشف داریم! Stocker در کتابخانه مالی Quandl و با بیش از 3000 سهام برای استفاده ساخته شده است. ما می توانیم با استفاده از روش plot_stock یک طرح ساده از تاریخ سهام بسازیم:

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

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

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

پیش بینی ها را ارزیابی کنید

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

ما باید دقت خود را کمیت کنیم ، بنابراین ما از پیش بینی های مجموعه آزمون و مقادیر واقعی استفاده می کنیم ، معیارهایی از جمله خطای متوسط دلار را در مجموعه آزمایش و آموزش محاسبه می کنیم ، درصد زمانی که ما به درستی پیش بینی می کنیم جهت تغییر قیمتو درصد زمان قیمت واقعی در بازه اطمینان 80 ٪ پیش بینی شده کاهش یافته است. همه این محاسبات به طور خودکار توسط Stocker با تصویری زیبا انجام می شود:

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

انتخاب قبلی ChangePoint

نقاط تغییر نشان می دهد جایی که یک سری زمانی از افزایش به کاهش یا افزایش آهسته به سرعت فزاینده (یا برعکس) می رود. آنها در مکانهایی با بیشترین تغییر در نرخ سری زمانی اتفاق می افتند. مقیاس قبلی ChangePoint میزان تأکید به نقاط تغییر در مدل را نشان می دهد. این مورد برای کنترل بیش از حد در مقابل زیرپوش (همچنین به عنوان تعصب در مقابل واریانس تجارت شناخته می شود) استفاده می شود.

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

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

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

اکنون که ایده ای از تأثیر قبلی داریم ، می توانیم با استفاده از یک مجموعه آموزش و اعتبار سنجی ، مقادیر مختلف را به صورت عددی ارزیابی کنیم:

در اینجا ، ما باید مراقب باشیم که داده های اعتبار سنجی ما با داده های آزمایش ما یکسان نباشد. اگر اینگونه بود ، ما بهترین مدل را برای داده های آزمون ایجاد می کنیم ، اما پس از آن فقط داده های آزمون را بیش از حد می کنیم و مدل ما نمی تواند به داده های دنیای واقعی ترجمه شود. در کل ، همانطور که معمولاً در علم داده انجام می شود ، ما از سه مجموعه مختلف از داده ها استفاده می کنیم: یک مجموعه آموزش (2013-2015) ، یک مجموعه اعتبار سنجی (2016) و یک مجموعه آزمایش (2017).

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

اعتبارسنجی قبلی Stocker همچنین دو نقشه را نشان می دهد که این نکات را نشان می دهد:

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

خطای مجموعه آزمایش در قبل از 0. 5 به حداقل می رسد. ما ویژگی قبلی ChangePoint را به طور مناسب تنظیم خواهیم کرد.

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

ارزیابی مدل تصفیه شده

اکنون که مدل ما بهینه شده است ، می توانیم دوباره آن را ارزیابی کنیم:

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

بازی در بورس سهام

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

قوانین استراتژی ما ساده است:

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

ما این کار را هر روز برای کل دوره ارزیابی بازی می کنیم که در مورد ما 2017 است. برای بازی ، تعداد سهام را به تماس روش اضافه کنید. Stocker به ما اطلاع می دهد که چگونه استراتژی در تعداد و نمودارها ارائه شده است:

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

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

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

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

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

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

در حالی که ممکن است ما از ابزار Stocker ثروتمند نشویم ، سود در توسعه است نه نتایج نهایی! ما در واقع نمی توانیم بدانیم که آیا می توانیم مشکل را حل کنیم تا اینکه سعی کنیم اما بهتر است که سعی کرده ایم و شکست خورده ایم از این که اصلاً امتحان نکرده ایم! برای هر کسی که علاقه مند به بررسی کد یا استفاده از خود Stocker باشد ، در GitHub موجود است.

مثل همیشه ، من از بازخورد و انتقاد سازنده لذت می برم. من می توانم در توییتر koehrsen_will به من دسترسی پیدا کنم.

بهترین بروکر فارکس...
ما را در سایت بهترین بروکر فارکس دنبال می کنید

برچسب : نویسنده : داریوش اسدزاده بازدید : <-PostHit-> تاريخ : يکشنبه 28 اسفند 1401 ساعت: 13:51