بیش از 60 درصد از فعالیت های تجاری با دارایی های مختلف به جای معامله گران انسانی، به تجارت خودکار و یادگیری ماشینی متکی هستند. امروزه برنامه های تخصصی مبتنی بر الگوریتم های خاص و الگوهای آموخته شده به طور خودکار دارایی ها را در بازارهای مختلف با هدف دستیابی به بازدهی مثبت در بلندمدت خرید و فروش می کنند. در این مقاله، آندریا نالون، دانشمند داده آزاد Toptal توضیح می دهد که چگونه می توان با استفاده از یادگیری ماشین و پایتون پیش بینی کرد که برای کسب سود مثبت، کدام معامله باید در رتبه بعدی S& P 500 انجام شود.
با MCE و آموزش گسترده ML و تجزیه و تحلیل کمی، تجربه علم داده آندریا R، Python، VBA، Excel و SQL را پوشش می دهد.
امروزه بیش از 60 درصد از فعالیت های معاملاتی با دارایی های مختلف (مانند سهام، آتی شاخص، کالاها) دیگر توسط معامله گران «انسان» انجام نمی شود، بلکه بر معاملات خودکار تکیه می کنند. برنامه های تخصصی مبتنی بر الگوریتم های خاص وجود دارد که به طور خودکار دارایی ها را در بازارهای مختلف خرید و فروش می کنند تا در بلندمدت به بازدهی مثبت دست پیدا کنند.
در این مقاله، من به شما نشان می دهم که چگونه می توانید با دقت خوب، چگونه معامله بعدی را برای کسب سود مثبت پیش بینی کنید. برای این مثال، به عنوان دارایی اساسی برای تجارت، من شاخص S& P 500 را انتخاب کردم، میانگین وزنی 500 شرکت آمریکایی با سرمایه بیشتر. یک استراتژی بسیار ساده برای پیاده سازی این است که وقتی بورس وال استریت شروع به معامله می کند، در ساعت 9:30 صبح، شاخص S& P 500 را خریداری کنید و آن را در جلسه پایانی در ساعت 4 بعد از ظهر به وقت شرقی بفروشید. اگر قیمت پایانی شاخص بالاتر از قیمت افتتاحیه باشد، سود مثبت وجود دارد، در حالی که اگر قیمت پایانی کمتر از قیمت افتتاحیه باشد، سود منفی حاصل می شود. بنابراین سوال این است: چگونه بفهمیم که آیا جلسه معاملاتی با قیمت پایانی بالاتر از قیمت افتتاحیه به پایان می رسد؟یادگیری ماشین ابزار قدرتمندی برای دستیابی به چنین کار پیچیده ای است و می تواند ابزار مفیدی برای حمایت از ما در تصمیم گیری معاملات باشد.
یادگیری ماشین مرز جدید بسیاری از برنامه های کاربردی مفید در زندگی واقعی است. تجارت مالی یکی از این موارد است و اغلب در این بخش استفاده می شود. یک مفهوم مهم در مورد یادگیری ماشین این است که ما نیازی به نوشتن کد برای هر نوع قانون ممکن، مانند تشخیص الگو نداریم. این به این دلیل است که هر مدل مرتبط با یادگیری ماشینی از خود داده ها یاد می گیرد و سپس می تواند برای پیش بینی داده های جدید نادیده استفاده شود.
سلب مسئولیت: هدف از این مقاله نشان دادن نحوه آموزش روشهای یادگیری ماشین است و در مثال کد ارائه شده هر عملکردی توضیح داده نمی شود. این مقاله در نظر گرفته نشده است تا یک نسخه را کپی کرده و تمام کد را بچسبانید و همان تست های ارائه شده را اجرا کنید ، زیرا برخی از جزئیات از دست رفته است که خارج از محدوده مقاله نیست. همچنین ، دانش پایه پایتون مورد نیاز است. هدف اصلی مقاله نشان دادن نمونه ای از چگونگی یادگیری ماشین برای پیش بینی خرید و فروش در بخش مالی است. با این حال ، تجارت با پول واقعی به معنای داشتن بسیاری از مهارت های دیگر ، مانند مدیریت پول و مدیریت ریسک است. این مقاله فقط یک قطعه کوچک از "تصویر بزرگ" است.
اولین برنامه تجارت خودکار داده های مالی خود را بسازید
بنابراین ، شما می خواهید اولین برنامه خود را برای تجزیه و تحلیل داده های مالی و پیش بینی تجارت مناسب ایجاد کنید؟بگذارید به شما نشان دهم چگونهمن از Python برای کد یادگیری ماشین استفاده خواهم کرد و ما از داده های تاریخی سرویس مالی یاهو استفاده خواهیم کرد. همانطور که قبلاً ذکر شد ، داده های تاریخی برای آموزش مدل قبل از پیش بینی های ما ضروری است.
برای شروع ، ما باید نصب کنیم:
- پایتون ، و به ویژه پیشنهاد می کنم از نوت بوک Ipython استفاده کنید.
- بسته Python Finance Yahoo (نام دقیق آن یاهو-مالی است) از طریق دستور ترمینال: PIP نصب یاهو-مالی را نصب کنید.
- نسخه آزمایشی رایگان بسته یادگیری ماشین به نام GraphLab. در صورت تمایل می توانید مستندات مفید آن کتابخانه را بررسی کنید.
توجه داشته باشید که تنها بخشی از GraphLab منبع باز ، SFrame است ، بنابراین برای استفاده از کل کتابخانه به مجوز نیاز داریم. مجوز 30 روزه رایگان و مجوز غیر تجاری برای دانشجویان یا کسانی که در مسابقات Kaggle شرکت می کنند وجود دارد. از نظر من ، GraphLab Creating یک کتابخانه بسیار بصری و آسان برای استفاده از کتابخانه برای تجزیه و تحلیل داده ها و آموزش مدل های یادگیری ماشین است.
حفر کد پایتون
بیایید با برخی از کد های پایتون حفر کنیم تا نحوه بارگیری داده های مالی از اینترنت را ببینید. پیشنهاد می کنم از نوت بوک IPython برای آزمایش کد زیر استفاده کنید ، زیرا IPython در مقایسه با IDE سنتی مزایای بسیاری دارد ، به خصوص هنگامی که ما نیاز به ترکیب کد منبع ، کد اجرای ، داده های جدول و نمودارها در همان سند داریم. برای توضیح مختصر برای استفاده از نوت بوک Ipython ، لطفاً به مقدمه مقاله نوت بوک Ipython نگاه کنید.
بنابراین ، بیایید یک نوت بوک جدید iPython ایجاد کنیم و برای بارگیری قیمت های تاریخی فهرست S& P 500 ، مقداری کد بنویسیم. توجه داشته باشید ، اگر ترجیح می دهید از ابزارهای دیگر استفاده کنید ، می توانید با یک پروژه جدید Python در IDE مورد نظر خود شروع کنید.
در اینجا ، hist_quotes لیستی از فرهنگ لغت ها است و هر شیء فرهنگ لغت یک روز معاملاتی با مقادیر باز ، بالا ، کم ، نزدیک ، ADJ_CLOSE ، حجم ، نماد و تاریخ است. در طول هر روز معاملاتی ، قیمت معمولاً از قیمت افتتاحیه به قیمت بسته شدن بسته می شود و به حداکثر و حداقل ارزش بالا و پایین می رسد. ما باید از طریق آن بخوانیم و لیستی از هر یک از داده های مناسب را ایجاد کنیم. همچنین ، داده ها باید توسط جدیدترین مقادیر در ابتدا سفارش داده شوند ، بنابراین ما باید آن را معکوس کنیم:
ما می توانیم همه نقل قول های بارگیری شده را در یک شیء SFrame ، که یک قاب داده مبتنی بر ستون بسیار مقیاس پذیر است ، بسته بندی کنیم و فشرده می شود. یکی از مزایا این است که می تواند از مقدار رم نیز بزرگتر باشد زیرا از آن حمایت می شود. برای کسب اطلاعات بیشتر در مورد SFRAME می توانید مستندات را بررسی کنید.
بنابراین ، اجازه دهید داده های تاریخی را ذخیره کرده و سپس بررسی کنیم:
| بستن | وقت قرار | عالی | کم | باز کن | جلد |
| 1283. 27 | 2001-01-02 00:00:00 | 1320. 28 | 1276. 05 | 1320. 28 | 1129400000 |
| 1347. 56 | 2001-01-03 00:00:00 | 1347. 76 | 1274. 62 | 1283. 27 | 1880700000 |
| 1333. 34 | 2001-01-04 00:00:00 | 1350. 24 | 1329. 14 | 1347. 56 | 2131000000 |
اکنون می توانیم با استفاده از روش SFrame ، داده ها را در دیسک ذخیره کنیم ، به شرح زیر:
بیایید ببینیم S& P 500 چگونه به نظر می رسد
برای دیدن اینکه چگونه داده های بارگذاری شده S& P 500 به نظر می رسد ، می توانیم از کد زیر استفاده کنیم:
خروجی کد نمودار زیر است:
آموزش برخی از مدل های یادگیری ماشین
اضافه کردن نتیجه
همانطور که در قسمت مقدماتی این مقاله بیان کردم ، هدف هر مدل پیش بینی این است که آیا قیمت بسته شدن بالاتر از قیمت افتتاح خواهد بود یا خیر. از این رو ، در این حالت ، ما می توانیم هنگام خرید دارایی زیرین ، به بازده مثبت برسیم. بنابراین ، ما باید یک ستون نتیجه را در داده های خود اضافه کنیم که متغیر هدف یا پیش بینی شده باشد. هر ردیف این ستون جدید خواهد بود:
- 1+ برای یک روز بالا با قیمت بسته شدن بالاتر از قیمت باز.
- -1 برای یک روز پایین با قیمت بسته شدن پایین تر از قیمت باز.
از آنجا که ما باید چند روز قبل از آخرین روز معاملاتی را ارزیابی کنیم ، باید یک یا چند روز داده را تاخیر کنیم. برای این نوع عملکرد عقب مانده ، ما به یک شیء دیگر از بسته GraphLab به نام Timeseries نیاز داریم. Timeseries یک تغییر روش دارد که داده ها را با تعداد مشخصی از ردیف ها تاخیر می کند.
اضافه کردن پیش بینی کننده ها
پیش بینی کننده ها مجموعه ای از متغیرهای ویژگی هستند که باید برای آموزش مدل و پیش بینی نتیجه ما انتخاب شوند. بنابراین ، انتخاب فاکتور پیش بینی بسیار مهم است ، اگر نه مهمترین مؤلفه پیش بینی کننده باشد.
فقط برای ذکر چند مثال ، عاملی که باید در نظر بگیرید ممکن است این باشد که نزدیک امروز بالاتر از نزدیک دیروز باشد ، و این ممکن است با نزدیک به دو روز گذشته و غیره گسترش یابد. یک انتخاب مشابه با کد زیر قابل ترجمه است:
همانطور که در بالا نشان داده شده است ، من دو ستون ویژگی جدید ، FEAT1 و FEAT2 را در مجموعه داده های ما (TS) اضافه کرده ام که شامل 1 است اگر مقایسه صحیح باشد و در غیر این صورت 0.
این مقاله در نظر گرفته شده است تا نمونه ای از یادگیری ماشین اعمال شده برای بخش مالی باشد. من ترجیح می دهم روی چگونگی استفاده از مدل های یادگیری ماشین با داده های مالی تمرکز کنم و در مورد نحوه انتخاب عوامل مناسب برای آموزش مدل ها به جزئیات نمی پردازیم. به دلیل افزایش قابل توجه در پیچیدگی ، توضیح اینکه چرا از عوامل خاصی در رابطه با دیگران استفاده می شود ، بسیار جامع است. تحقیقات شغلی من مطالعه بسیاری از فرضیه های انتخاب عوامل برای ایجاد یک پیش بینی کننده خوب است. بنابراین برای یک شروع ، پیشنهاد می کنم با ترکیبات مختلفی از عوامل مختلف آزمایش کنید تا ببینید که آیا آنها ممکن است دقت مدل را افزایش دهند.
آموزش یک مدل درخت تصمیم گیری
GraphLab ایجاد یک رابط بسیار تمیز برای اجرای مدل های یادگیری ماشین است. هر مدل دارای روشی است که برای متناسب با مدل با یک مجموعه داده آموزشی استفاده می شود. پارامترهای معمولی عبارتند از:
- آموزش - این یک مجموعه آموزشی است که حاوی ستون های ویژگی و یک ستون هدف است.
- هدف - این نام ستون حاوی متغیر هدف است.
- اعتبار سنجی_د - این یک مجموعه داده برای نظارت بر عملکرد عمومی سازی مدل است. در مورد ما ، ما هیچ اعتبار سنجی نداریم.
- ویژگی ها - این لیستی از نام ستون های ویژگی های مورد استفاده برای آموزش مدل است.
- Verbose - اگر درست باشد ، اطلاعات پیشرفت را در طول آموزش چاپ کنید.
در حالی که پارامترهای دیگر معمولی برای خود مدل هستند ، مانند:
- max_depth - این حداکثر عمق یک درخت است.
با کد زیر درخت تصمیم خود را می سازیم:
اندازه گیری عملکرد مدل مناسب
دقت یک معیار مهم برای ارزیابی خوبی های پیش بینی کننده است. این تعداد پیش بینی های صحیح است که بر اساس تعداد کل نقاط داده تقسیم می شود. از آنجا که این مدل با داده های آموزشی مجهز است ، دقت ارزیابی شده با مجموعه آموزش بهتر از مدل به دست آمده با یک مجموعه آزمون است.
دقت کسری از پیش بینی های مثبت است که مثبت هستند. ما برای دستیابی به یک "عالی" با نرخ پیروزی ، به دقت نیاز داریم. DECTION_TREE ما ، به عنوان طبقه بندی کننده دیگری از GraphLab Create Package ، روش خود را برای به دست آوردن معیارهای مهم مدل متناسب دارد.
به یاد بیاورید توانایی طبقه بندی کننده برای پیش بینی نمونه های مثبت. فراخوان را می توان به عنوان این احتمال که یک مثال مثبت انتخاب شده به طور تصادفی توسط طبقه بندی کننده مشخص شود ، تفسیر کرد. ما به این نیاز نیاز داریم که یک عدد نزدیک به 1 نزدیک باشد ، تا به یک پیروزی "کامل" برسد.
کد زیر صحت مدل متناسب را هم با مجموعه آموزش و هم در مجموعه آزمایش نشان می دهد:
همانطور که در بالا نشان داده شده است ، دقت مدل با مجموعه آزمون حدود 57 درصد است که به نوعی بهتر از پرتاب یک سکه (50 درصد) است.
پیش بینی داده ها
ایجاد GraphLab دارای همان رابط کاربری برای پیش بینی داده های مدل های مختلف است. ما در نتیجه مورد ما از روش پیش بینی ، که برای پیش بینی متغیر هدف نیاز دارد ، استفاده خواهیم کرد. اکنون ، ما می توانیم داده های مجموعه آزمایش را پیش بینی کنیم:
| وقت قرار | نتیجه | پیش بینی |
| 2013-04-05 00:00:00 | -1 | -1 |
| 2013-04-08 00:00:00 | 1 | 1 |
| 2013-04-09 00:00:00 | 1 | 1 |
| 2013-04-10 00:00:00 | 1 | -1 |
| 2013-04-11 00:00:00 | 1 | -1 |
| 2013-04-12 00:00:00 | -1 | -1 |
| 2013-04-15 00:00:00 | -1 | 1 |
| 2013-04-16 00:00:00 | 1 | 1 |
| 2013-04-17 00:00:00 | -1 | -1 |
| 2013-04-18 00:00:00 | -1 | 1 |
مثبت کاذب مواردی است که مدل نتیجه مثبت را پیش بینی می کند در حالی که نتیجه واقعی از مجموعه آزمایش منفی است. برعکس ، منفی های دروغین مواردی هستند که مدل نتیجه منفی را پیش بینی می کند که نتیجه واقعی از مجموعه آزمون مثبت باشد.
استراتژی معاملاتی ما منتظر نتیجه مثبت پیش بینی شده برای خرید S& P 500 با قیمت افتتاح و فروش آن با قیمت بسته است ، بنابراین امید ما این است که برای جلوگیری از ضرر ، کمترین نرخ مثبت کاذب را داشته باشیم. به عبارت دیگر ، ما انتظار داریم که مدل ما بالاترین میزان دقت را داشته باشد.
همانطور که می بینیم ، دو منفی کاذب (در 2013-04-10 و 2013-04-11) و دو مثبت کاذب (در 2013-04-15 و 2013-04-18) در ده ارزش پیش بینی شده اولمجموعه آزمایش
با یک محاسبه ساده ، با توجه به این مجموعه کوچک از ده پیش بینی:
- دقت = 6/10 = 0. 6 یا 60 ٪
- دقت = 3/5 = 0. 6 یا 60 ٪
- به یاد بیاورید = 3/5 = 0. 6 یا 60 ٪
توجه داشته باشید که معمولاً اعداد فوق با یکدیگر متفاوت هستند ، اما در این حالت آنها یکسان هستند.
پشتی مدل
اکنون ما نحوه تجارت مدل را با استفاده از مقادیر پیش بینی شده خود شبیه سازی می کنیم. اگر نتیجه پیش بینی شده برابر با 1+ باشد ، به این معنی است که انتظار یک روز بالا را داریم. با یک روز UP ما شاخص را در ابتدای جلسه خریداری می کنیم و در پایان جلسه در همان روز شاخص را می فروشیم. برعکس ، اگر نتیجه پیش بینی شده برابر ب ا-1 باشد ، انتظار یک روز پایین را داریم ، بنابراین در آن روز تجارت نخواهیم کرد.
سود و زیان (PNL) برای تجارت روزانه کامل ، که به آن دور هم می رود ، در این مثال توسط:
- PNL = بسته - باز (برای هر روز معاملاتی)
با کد نشان داده شده در زیر ، من با عملکرد Helper plot_equity_chart تماس می گیرم تا نمودار با منحنی دستاوردهای تجمعی (منحنی سهام) ایجاد کنم. بدون اینکه خیلی عمیق پیش برود ، به سادگی یک سری از مقادیر سود و زیان را بدست می آورد و مجموعه ای از مبالغ تجمعی را برای طرح محاسبه می کند.
در اینجا ، شارپ نسبت سالانه شارپ است ، یک شاخص مهم خوب بودن مدل تجارت.
با در نظر گرفتن معاملات روز به روز در حالی که میانگین میانگین لیست سود و زیان است و SD انحراف استاندارد است. برای سادگی در فرمول نشان داده شده در بالا ، من یک بازده بدون ریسک برابر با 0 را در نظر گرفته ام.
برخی از اصول اولیه در مورد تجارت
تجارت این شاخص نیاز به خرید دارایی دارد که مستقیماً از این فهرست مشتق شده است. بسیاری از کارگزاران شاخص S& P 500 را با یک محصول مشتق به نام CFD (قرارداد تفاوت) تکرار می کنند ، که توافق بین دو طرف برای تبادل تفاوت بین قیمت افتتاح و بسته شدن قیمت یک قرارداد است.
مثال: 1 CFD S& P 500 را در باز (ارزش 2000) بخرید ، آن را در نزدیکی روز بفروشید (مقدار 2020 است). تفاوت ، از این رو سود ، 20 امتیاز است. اگر هر نقطه ارزش 25 دلار داشته باشد:
- سود ناخالص 20 امتیاز x 25 $ = 500 $ با 1 قرارداد CFD است.
بیایید بگوییم که کارگزار برای درآمد خود ، 0. 6 امتیاز را حفظ می کند:
- سود خالص (20 - 0. 6) امتیاز x 25 $ = 485 دلار است.
یکی دیگر از جنبه های مهم که باید در نظر بگیرید جلوگیری از خسارات قابل توجه در یک تجارت است. آنها ممکن است هر زمان که نتیجه پیش بینی شده +1 باشد اتفاق بیفتد اما مقدار نتیجه واقع ی-1 است ، بنابراین یک مثبت کاذب است. در این حالت ، جلسه پایان به نظر می رسد یک روز پایین با قیمت بسته شدن پایین تر از افتتاح است و ما ضرر می کنیم.
برای محافظت در برابر حداکثر ضرر که ما در یک تجارت تحمل می کنیم ، باید یک دستور از دست دادن توقف قرار گیرد و هر زمان که قیمت دارایی زیر یک مقدار ثابت که قبلاً تعیین کرده ایم ، چنین نظمی ایجاد می شود.
اگر در ابتدای این مقاله به سری زمانی بارگیری شده از Finance Yahoo نگاه کنیم ، هر روز قیمت کم دارد که کمترین قیمت به آن روز رسیده است. اگر سطح توق ف-3 امتیاز را به دور از قیمت افتتاحیه تعیین کنیم ، و پایی ن-باز = -5 ترتیب توقف شروع می شود و موقعیت باز با از دست داد ن-3 امتیاز به جا ی-5 بسته می شود. این یک روش ساده برای کاهش خطر است. کد زیر عملکرد یاور من را برای شبیه سازی تجارت با سطح توقف نشان می دهد:
هزینه های معاملاتی
هزینه های معامله هزینه هایی است که هنگام خرید یا فروش اوراق بهادار انجام می شود. هزینه های معاملات شامل کمیسیون ها و گسترش کارگزاران (تفاوت بین قیمتی است که فروشنده برای امنیت و قیمتی که خریدار می پردازد) ، و اگر بخواهیم استراتژی خود را پشت سر بگذاریم ، به طور مشابه با یک سناریوی واقعی ، باید در نظر گرفته شود. لغزش در معاملات سهام اغلب زمانی اتفاق می افتد که تغییر در گسترش وجود داشته باشد. در این مثال و برای شبیه سازی های مداوم بعدی ، هزینه های معاملات به این صورت تعیین می شود:
- لغزش = 0. 6 امتیاز
- کمیسیون = 1 $ برای هر تجارت (یک دور دور 2 دلار هزینه خواهد داشت)
فقط برای نوشتن برخی از اعداد ، اگر سود ناخالص ما 10 امتیاز ، 1 امتیاز = 25 دلار باشد ، بنابراین 250 دلار شامل هزینه های معاملاتی ، سود خالص ما (10 - 0. 6)*25 دلار - 2 = 233 دلار خواهد بود.
کد زیر شبیه سازی استراتژی معاملاتی قبلی را با از دست دادن توق ف-3 امتیاز نشان می دهد. منحنی آبی منحنی بازده تجمعی است. تنها هزینه های مربوط به لغزش (0. 6 امتیاز) است و نتیجه در نقاط پایه بیان می شود (همان واحد پایه مقادیر S& P 500 بارگیری شده از مالی یاهو).
از کد زیر برای پیش بینی ها به روشی کمی متفاوت استفاده می شود. لطفاً به روش پیش بینی که با یک پارامتر اضافی Output_Type = "احتمال" خوانده می شود ، توجه کنید. این پارامتر برای بازگشت احتمالات مقادیر پیش بینی شده به جای پیش بینی کلاس آنها استفاده می شود (1+ برای یک نتیجه مثبت پیش بینی شده ، -1 برای یک نتیجه پیش بینی شده منفی). یک احتمال بیشتر از یا برابر با 0. 5 با یک مقدار پیش بینی شده +1 همراه است و مقدار احتمال کمتر از 0. 5 مربوط به یک مقدار پیش بینی شد ه-1 است. هرچه احتمال آن بالاتر باشد ، شانس بیشتری برای پیش بینی یک روز واقعی داریم.
اکنون ما مدل را با یک عملکرد یاور به نام backtest_ml_model پشت سر می گذاریم که سری بازده های تجمعی از جمله لغزش و کمیسیون را محاسبه می کند و مقادیر آنها را ترسیم می کند. برای کوتاه بودن ، بدون توضیح کامل عملکرد backtest_ml_model ، جزئیات مهم برای برجسته کردن این است که به جای فیلتر کردن آن روزها با نتیجه پیش بینی شده = 1 همانطور که در مثال قبلی انجام دادیم ، اکنون آن پیش بینی ها را برابر یا بیشتر از آستانه = 0. 5 فیلتر می کنیم. مطابق ذیل:
به یاد داشته باشید که سود خالص هر روز معاملاتی این است: سود خالص = (سود ناخالص - لغزش) * کمیسیون چند - 2 *.
یکی دیگر از معیارهای مهم که برای ارزیابی خوبی از یک استراتژی معاملاتی استفاده می شود ، حداکثر پیش بینی است. به طور کلی ، این بیشترین افت از اوج به پایین ، در ارزش یک سبد سرمایه گذاری شده را اندازه گیری می کند. در مورد ما ، این مهمترین افت از اوج به پایین منحنی سهام است (ما فقط یک دارایی در نمونه کارها ، S& P 500 داریم). بنابراین با توجه به یک PNL سود و زیان ، ما این روند را به صورت محاسبه می کنیم:
در داخل عملکرد یاور backtest_summary محاسبه می شود:
- حداکثر کاهش (به دلار) همانطور که در بالا نشان داده شده است.
- دقت ، با روش Graphlab. Evalustion.
- دقت ، با روش graphlab. evalustion.
- به یاد بیاورید ، با روش graphlab. evalustion.
با قرار دادن همه اینها ، مثال زیر منحنی سهام را نشان می دهد که بازده تجمعی استراتژی مدل را نشان می دهد ، با تمام مقادیر بیان شده به دلار.
برای افزایش دقت مقادیر پیش بینی شده ، به جای احتمال استاندارد 0. 5 (50 درصد) ما مقدار آستانه بالاتری را انتخاب می کنیم ، تا اطمینان بیشتری داشته باشیم که مدل یک روز بالا را پیش بینی می کند.
همانطور که در نمودار بالا مشاهده می کنیم ، منحنی سهام بسیار بهتر از گذشته است (شارپ به جای 3. 5 6. 5 است) ، حتی با چرخش های کمتری.
از این نقطه به بعد ، همه مدل های بعدی را با آستانه بالاتر از یک مقدار استاندارد در نظر خواهیم گرفت.
آموزش یک طبقه بندی لجستیک
ما می توانیم تحقیقات خود را ، همانطور که قبلاً با درخت تصمیم گیری انجام دادیم ، در یک مدل طبقه بندی کننده لجستیک اعمال کنیم. ایجاد GraphLab دارای همان رابط کاربری با شیء طبقه بندی کننده لجستیک است و ما با روش ایجاد برای ساخت مدل خود با همان لیست پارامترها تماس خواهیم گرفت. علاوه بر این ، ما ترجیح می دهیم به جای بردار کلاس پیش بینی شده ، بردار احتمال را پیش بینی کنیم (متشکل از 1+ برای نتیجه مثبت ، و-1 برای یک نتیجه منفی) ، بنابراین ما یک آستانه بیشتر از 0. 5 برای دستیابی به دقت بهتر در ما خواهیم داشتپیش بینی
در این حالت ، خلاصه ای بسیار شبیه به درخت تصمیم گیری وجود دارد. از این گذشته ، هر دو مدل طبقه بندی کننده هستند ، آنها فقط یک کلاس از نتایج باینری را پیش بینی می کنند (1+ ، -1).
آموزش یک مدل رگرسیون خطی
تفاوت اصلی این مدل در این است که همانطور که قبلاً ذکر شد ، به جای کلاسهای باینری با مقادیر مداوم سروکار دارد. ما لازم نیست که مدل را با یک متغیر هدف برابر با 1+ برای روزهای بالا و-1 برای روزهای پایین آموزش دهیم ، هدف ما باید یک متغیر مداوم باشد. از آنجا که ما می خواهیم سود مثبت را پیش بینی کنیم ، یا به عبارت دیگر قیمت بسته شدن بالاتر از قیمت افتتاح ، اکنون هدف باید ستون سود مجموعه آموزش ما باشد. همچنین ، لیست ویژگی ها باید از مقادیر مداوم ، مانند باز ، نزدیک و غیره قبلی تشکیل شود.
برای کوتاه بودن ، من به جزئیات چگونگی انتخاب ویژگی های مناسب نمی پردازم ، زیرا این فراتر از محدوده این مقاله است ، که تمایل بیشتری برای نشان دادن چگونگی استفاده از مدل های مختلف یادگیری ماشین بر روی یک مجموعه داده دارد. لیست پارامترهای منتقل شده به روش ایجاد عبارتند از:
- آموزش - این یک مجموعه آموزشی است که حاوی ستون های ویژگی و یک ستون هدف است.
- هدف - این نام ستون حاوی متغیر هدف است.
- اعتبار سنجی_د - این یک مجموعه داده برای نظارت بر عملکرد عمومی سازی مدل است. در مورد ما ، ما هیچ اعتبار سنجی نداریم.
- ویژگی ها - این لیستی از نام ستون های ویژگی های مورد استفاده برای آموزش مدل است ، برای این مدل از یک احترام دیگر به مدلهای طبقه بندی استفاده خواهیم کرد.
- Verbose - اگر درست باشد ، اطلاعات پیشرفت را در طول آموزش چاپ می کند.
- max_iterations - این حداکثر تعداد مجاز عبور داده ها است. عبور بیشتر از داده ها می تواند به یک مدل دقیق تر آموزش داده شود.
تا کنون ، ما پیش بینی هایی داریم که از دستاوردهای پیش بینی شده استفاده می شود ، در حالی که پیش بینی_پروب با مقادیر پیش بینی شده نرمال است. برای داشتن دقت خوب و تعداد مشخصی از چرخش های دور ، قابل مقایسه با مدل های قبلی ، من مقدار آستانه 0. 4 را انتخاب کردم. برای پیش بینی های کمتر از 0. 4 ، عملکرد یاور backtest_linear_model تجارت را باز نمی کند زیرا یک روز پایین انتظار می رود. در غیر این صورت ، تجارت باز خواهد شد.
آموزش یک درخت تقویت شده
همانطور که قبلاً آموزش یک درخت تصمیم گیری را انجام داده ایم ، اکنون می خواهیم یک طبقه بندی کننده درخت تقویت شده را با همان پارامترهای مورد استفاده برای سایر مدل های طبقه بندی آموزش دهیم. علاوه بر این ، ما تعداد max_iterations = 12 را تنظیم می کنیم تا حداکثر تعداد تکرارها برای تقویت افزایش یابد. هر تکرار منجر به ایجاد یک درخت اضافی می شود. ما همچنین مقدار بالاتری از آستانه از 0. 5 را برای افزایش دقت تعیین می کنیم.
آموزش یک جنگل تصادفی
این آخرین مدل آموزش دیده ما، یک طبقه بندی جنگل تصادفی است که توسط مجموعه ای از درخت های تصمیم تشکیل شده است. حداکثر تعداد درخت برای استفاده در مدل بر روی num_trees = 10 تنظیم شده است تا از پیچیدگی زیاد و برازش بیش از حد جلوگیری شود.
جمع آوری تمام مدل ها با هم
حالا می توانیم همه استراتژی ها را به هم بپیوندیم و نتیجه کلی را ببینیم. دیدن خلاصه ای از تمام مدل های یادگیری ماشین، که بر اساس دقت آنها مرتب شده اند، جالب است.
| نام | دقت | دقت، درستی | چرخش های گرد | تیز کردن |
| رگرسیون خطی | 0. 63 | 0. 71 | 319 | 7. 65 |
| BoostedTreesClassifier | 0. 56 | 0. 68 | 214 | 6. 34 |
| RandomForestClassifier | 0. 60 | 0. 67 | 311 | 6. 38 |
| DecisionTree | 0. 56 | 0. 66 | 234 | 6. 52 |
| LogisticClassifier | 0. 64 | 0. 66 | 426 | 6. 45 |
اگر تمام سود و زیان هر یک از مدل های قبلی را در آرایه pnl جمع آوری کنیم، نمودار زیر منحنی حقوق صاحبان سهام را که از مجموع هر سود و زیان به دست می آید، روز به روز نشان می دهد.
فقط برای ارائه اعداد، با حدود 3 سال معامله، همه مدل ها در مجموع حدود 180000 دلار سود دارند. حداکثر نمایشگاه 5 قرارداد CFD در بازار است، اما برای کاهش ریسک، همه آنها در پایان هر روز بسته می شوند، بنابراین موقعیت های یک شبه مجاز نیستند.
آمار تجمیع همه مدل ها با هم
از آنجایی که هر مدل می تواند یک معامله باز کند، اما ما 5 مدل همزمان را با هم اضافه کردیم، در طول یک روز ممکن است از 1 قرارداد تا 5 قرارداد CFD وجود داشته باشد. اگر همه مدل ها با باز شدن معاملات در یک روز موافقت کنند، شانس بالایی برای پیش بینی یک روز صعودی وجود دارد. علاوه بر این، می توانیم بر اساس تعداد مدل هایی که معامله را همزمان در جلسه افتتاحیه روز باز می کنند، گروه بندی کنیم. سپس دقت را به عنوان تابعی از تعداد مدل های همزمان ارزیابی می کنیم.
همانطور که در نمودار نشان داده شده در بالا می بینیم، دقت بهتر می شود زیرا تعداد مدل هایی که با باز کردن معامله موافقت می کنند. هر چه مدل ها بیشتر موافق باشند، دقت بیشتری به دست می آوریم. به عنوان مثال، با 5 مدل فعال در همان روز، شانس پیش بینی یک روز افزایش بیش از 85 درصد است.
نتیجه
حتی در دنیای مالی، یادگیری ماشینی به عنوان ابزاری قدرتمند برای یادگیری از داده ها و ارائه ابزارهای پیش بینی عالی به ما استقبال می شود. هر مدل مقادیر متفاوتی از دقت و دقت را نشان می دهد، اما به طور کلی، همه مدل ها را می توان برای دستیابی به نتیجه بهتر از هر یک از آنها به صورت مجزا جمع کرد. GraphLab Create یک کتابخانه عالی، آسان برای استفاده، مقیاس پذیر و قادر به مدیریت Big Data بسیار سریع است. مدل های علمی و پیش بینی متفاوتی را پیاده سازی می کند و مجوز رایگان برای دانشجویان و مسابقات Kaggle وجود دارد.
افشای اضافی: این مقاله صرفاً برای مقاصد اطلاعاتی تهیه شده است و پیشنهادی برای خرید یا فروش یا درخواست پیشنهاد برای خرید یا فروش هر گونه اوراق بهادار یا ابزار یا شرکت در هر استراتژی تجاری خاصی نیست. نمونه های ارائه شده در این سایت ها فقط برای اهداف آموزشی هستند. نتایج قبلی لزوما نشان دهنده نتایج آتی نیستند.
مقالات آموزش فارکس...
ما را در سایت مقالات آموزش فارکس دنبال می کنید
برچسب :
نویسنده : بهزاد فراهانی
بازدید : <-PostHit->
تاريخ : پنجشنبه
7 ارديبهشت
1402 ساعت: 11:33