بکتست نشان میدهد یک استراتژی روی تاریخچهٔ واقعی چه میکرد؛ اعتبارسنجی مدل نشان میدهد یک مدل یادگیری ماشین واقعاً چیزی از داده یاد گرفته یا فقط گذشته را حفظ کرده. این دو تب کنار هماند ولی سؤال متفاوتی جواب میدهند و هیچکدام تضمین آینده نیست.
در تب «بکتست» یک استراتژی درآمدی روی تاریخچهٔ واقعی تابلو اجرا میشود: چرخهبهچرخه اختیاری حدود ۵٪ خارج از پول با ۲۰ تا ۴۵ روز تا سررسید فروخته و در سررسید تسویه میشود؛ دقیقاً همان الگوی کاوردکال یا پوت نقد-تضمین. هر بار که یک چرخه تمام میشود، سرمایه بر اساس نتیجهٔ آن چرخه بهروز میشود و منحنی سرمایه رسم میشود.
سه عدد خروجی اصلیاند: بازدهٔ کل رشد سرمایه از اول تا آخر بکتست است، با فرض اینکه سود هر چرخه در چرخهٔ بعد دوباره به کار رفته (مرکب). نرخ برد سهم چرخههایی است که بازده مثبت داشتند. بیشینهٔ افت سرمایه بزرگترین افت منحنی سرمایه از یک قله تا کف بعدی است؛ نشان میدهد در بدترین دوره چقدر از سرمایه آب رفت.
نرخ برد بالا در فروش اختیار عادی است و بهتنهایی چیزی نمیگوید؛ این استراتژیها بیشتر ماهها کمی میبرند و گاهی یکجا زیاد میبازند، دقیقاً همان الگویی که در بازده سالانه و احتمالها دربارهٔ احتمال سود توضیح دادهایم. برای همین بیشینهٔ افت سرمایه و تعداد چرخه را همیشه کنار نرخ برد بخوان؛ با کمتر از ۱۰ چرخه، نتیجه بیشتر شانس است تا شاهد آماری.
چون بکتست کارمزد معامله، کارمزد اعمال و لغزش قیمت (فاصلهٔ بین قیمتی که مدل فرض کرده و قیمتی که واقعاً میگرفتی) را لحاظ نمیکند؛ در بازده سالانه و احتمالها توضیح دادهایم چرا غربالهای زنده این هزینه را محافظهکارانه با مظنهٔ خرید و فروش میگیرند، ولی بکتست تاریخی چنین محافظهکاریای ندارد. نتیجهٔ واقعی همیشه از عدد بکتست ضعیفتر است؛ هرچه قرارداد کممعاملهتر بوده، فاصله بیشتر است.
تب «اعتبارسنجی ML» مدلی را میسنجد که جهت بازده فردای هر قرارداد را پیشبینی میکند. داده بهترتیب زمان به چند بازه تقسیم میشود و مدل هر بار فقط با دادههای پیش از آن بازه آموزش میبیند و روی بازهٔ بعدی امتحان میشود؛ به این اعتبارسنجی گامبهگام زمانی میگوییم. تقسیم تصادفی دادهٔ سریزمانی — که در بیشتر مدلهای یادگیری ماشین معمول است — اینجا اشتباه است: به مدل اجازه میداد فردا را از همسایهاش در دادهٔ آموزش یاد بگیرد و دقت ساختگی بسازد که در دنیای واقعی تکرار نمیشود.
دقت بهتنهایی کافی نیست: اگر ۶۰٪ روزها صعودی باشند، کسی که همیشه «صعود» بگوید هم ۶۰٪ درست است. برای همین دقت مدل با این مبنای ساده مقایسه میشود و AUC هم کنارش میآید — توان مدل در جدا کردن روزهای صعودی از نزولی، جایی که ۰٫۵ یعنی شیر یا خط و ۱ یعنی بیخطا.
مثالدر یک بازهٔ آزمون، ۶۲٪ نمونهها صعودی بودهاند (سهم صعودی ۶۲٪)، دقت مدل ۶۵٪ و AUC آن ۰٫۵۷ است. برتری دقت مدل نسبت به مبنای ساده ۳ واحد است (۶۵ منهای ۶۲) و AUC از آستانهٔ ۰٫۵۵ بالاتر است؛ این بازه قبول میشود. اگر همان مدل در بازهٔ بعدی، با همان سهم صعودی ۶۲٪، دقت ۶۰٪ و AUC ۰٫۵۲ داشته باشد، آن بازه رد میشود، چون از مبنای ساده جلو نزده.
مدل فقط وقتی بهطور کلی پذیرفته میشود که میانهٔ AUC روی همهٔ بازهها دستکم ۰٫۵۵ باشد، میانهٔ برتری دقتش دستکم ۲ واحد باشد، و دستکم ۶۰٪ بازهها هم جداجدا از همین آستانهها بگذرند. تا آن روز هیچ پیشبینیای منتشر نمیشود و فقط همین گزارش اعتبارسنجی نمایش داده میشود؛ یک بازهٔ خوب بهتنهایی کافی نیست.
این دو تب دو سؤال متفاوت جواب میدهند و جایگزین هم نیستند. بکتست یک قاعدهٔ ثابت (مثلاً «هر چرخه ۵٪ خارج از پول بفروش») را روی گذشته اجرا میکند و میگوید همین قاعده چقدر میگرفت. اعتبارسنجی ML میپرسد آیا اصلاً میشود جهت فردا را از الگوهای داده پیشبینی کرد. یک استراتژی میتواند در بکتست نتیجهٔ خوبی بدهد بدون اینکه هیچ مدل پیشبینی جهتی پشتش باشد؛ چون سود فروش اختیار بیشتر از فرسایش زمانی میآید، نه از حدس درست جهت.
چون دقت با نسبت روزهای صعودی به نزولی جابهجا میشود، ولی AUC این عدمتوازن را کنار میزند و میگوید مدل واقعاً چقدر روزهای صعودی و نزولی را از هم تشخیص میدهد.
نه. بکتست فقط میگوید این استراتژی در همان بازهٔ گذشته چه کرده؛ شرایط بازار، نقدشوندگی و نوسان میتوانند عوض شوند.
چون با نمونهٔ کوچک، چند چرخهٔ شانسی میتوانند کل نتیجه را جابهجا کنند؛ عدد آماری معتبر به تعداد نمونهٔ کافی نیاز دارد.
تقسیم تصادفی میگذارد مدل از روزهای آینده در دادهٔ آموزش استفاده کند، که در دنیای واقعی هرگز در دسترس نیست؛ دقتی که اینطور به دست میآید ساختگی است.