بکتستی که کاملاً بازتولیدپذیر است، ممکن است از بکتستی که کمی تغییر میکند قابلاعتمادتر نباشد. تکرارپذیری ثابت میکند که میتوانید دو بار به یک پاسخ برسید؛ اما چیزی دربارهٔ وابستگی آن پاسخ به یک نسخهٔ دلخواه از دادهها، یک ویژگی خاص کتابخانه یا یک تنظیم پیشفرض پنهان نمیگوید.
ممکن است این حرف شبیه استدلالی علیه بازتولیدپذیری به نظر برسد، اما چنین نیست. اجرا را ثابت نگه دارید تا بتوانید آن را توضیح دهید. سپس فرضهایی را که نباید نتیجه را تعیین کنند، عمداً تغییر دهید. گام اول نتیجه را قابلممیزی میکند؛ گام دوم نشان میدهد که آیا نتیجه معنایی دارد یا نه.
بکتست بازتولیدپذیر واقعاً چه چیزی را اثبات میکند؟
اگر کد، داده، پیکربندی و بذر تصادفی یکسان، معاملات و معیارهای یکسانی تولید کنند، یکی از منابع مهم ابهام را کنترل کردهاید. میتوانید «بهبود» یک عامل را با اجرای مبنای آن مقایسه کنید. میتوانید رفع باگ را از تغییر برنامهٔ کارمزد جدا کنید. همکارتان میتواند همان دفتر معاملات را بررسی کند و به همان اجراها برسد.
اما نتیجه به همهچیزهایی وابسته است که ثابت نگه داشتهاید. راهبردی رمزارزی را در نظر بگیرید که فایل تاریخیاش شامل کندلهای یکدقیقهای است. هش فایل را ذخیره میکنید، نسخهٔ کد را ثابت میکنید و در هر بار اجرای دوباره به Sharpe برابر با 1.4 میرسید. اگر فروشنده بعداً چند کندل را اصلاح کند، این بازتولیدپذیری بینقص همچنان فقط فایل قدیمی را توصیف میکند. به شما نمیگوید که سیگنال در تاریخچهٔ اصلاحشده هم پابرجاست یا آن کندلها در آن زمان به همان شکل در دسترس بودهاند.
هش مفید است: وابستگی را آشکار میکند. اما گواهی نیست که آن وابستگی بیضرر باشد.
اجرا را ثابت نگه دارید؛ یافته را به چالش بکشید
من ترجیح میدهم دو پرسش را از هم جدا کنم. آیا میتوانیم این اجرای دقیق را بازسازی کنیم؟ و آیا نتیجهٔ پژوهش با تغییرات معقول هم پابرجا میماند؟ پرسش اول به سابقهای تغییرناپذیر نیاز دارد؛ پرسش دوم به تغییرات کنترلشده، هر بار فقط یکی، نیاز دارد.
| چه چیزهایی را ثبت کنیم | بعداً چه چیزهایی را تغییر دهیم | چه چیزی را میتواند آشکار کند |
|---|---|---|
| نسخهٔ دادهٔ خام و چکسامها | بازبینی فروشنده یا منبع دوم | وابستگی به مقادیر اصلاحشده یا مختص فروشنده |
| کامیت کد و نسخههای بستهها | پیادهسازیِ از نظر عددی معادل | حساسیت به ترتیب، گرد کردن یا کتابخانه |
| کارمزدها، فاندینگ و فرضهای اجرا | بازهای قابلدفاع برای هزینهها | اینکه آیا سود ناچیز به اجرای غیرمعمولاً مساعد نیاز دارد |
| مجموعهٔ داراییها و عضویت در هر مقطع زمانی | قواعد جایگزین برای بازارهای واجد شرایط | وابستگی به تصمیمهای وارد کردن یا کنار گذاشتن داراییها |
برای نمونه، فرض کنید راهبردی روی قراردادهای آتی در بازپخش مبنا، بازده مازاد سالانهشدهٔ 8% نشان میدهد. آن را با هزینههای taker که 25% بالاترند، فاندینگی که به تسویهٔ مشاهدهشدهٔ بعدی منتقل شده و حذف جداگانهٔ دو مشارکتکنندهٔ بزرگ دوباره اجرا کنید. اینها سه روش برای بهبود مدل نیستند؛ آزمونهایی هستند که هرکدام میپرسند آیا جزئیاتی معقول پشت نتیجهٔ اصلی قرار دارد یا نه.
هر آزمون را جداگانه نگه دارید. اگر داده، برنامهٔ کارمزد و زمانبندی اجرا را همزمان تغییر دهید، نتیجهٔ بدتر چیز زیادی برای تشخیص به شما نمیگوید. اگر آزمونی نامحتمل است، آن را بهعنوان سناریوی تنشزا برچسب بزنید، نه نتیجهای که احتمالاً رخ میدهد.
یکسانیِ بایتبهبایت را با حقیقت عددی اشتباه نگیرید
بعضی محاسبات به ترتیب حساساند. جمع اعداد اعشاری شرکتپذیر نیست؛ بنابراین جمعکردن مقادیر کوچک متعدد P&L با ترتیبی متفاوت میتواند چند رقم پایانی را تغییر دهد. کاهشهای موازی، سختافزار و نسخههای کتابخانه همگی ممکن است بر خروجی دقیق اثر بگذارند. معمولاً این مسئله بیضرر است؛ اما گاهی یک تغییر عددی کوچک آستانهای را رد میکند، موقعیتی را تغییر میدهد و ادامهٔ شبیهسازی را به مسیری دیگر میبرد.
برای همین، من هم خروجیهای دقیق را نگه میدارم و هم تلورانسهایی برای مقایسه تعیین میکنم. دفتر معاملات را ثبت کنید، نه فقط Sharpe نهایی را. ابتدا تصمیمها و جریانهای نقدی را مقایسه کنید، سپس معیارها را در محدودهٔ تلورانس اعلامشده بسنجید. اگر اختلاف یک سنت باعث میشود سفارشی ثبت شود یا نشود، آن مرز را جداگانه بررسی کنید.
سابقهٔ مفید هر اجرا شامل هویت داده و کد، پیکربندی، بذر تصادفی، محیط اجرا و خروجی میانی کافی برای ردیابی هر معیار تا رسیدن به اجراها و جریانهای نقدی است. امتیاز نهایی بهتنهایی یک خروجی پژوهشیِ بازتولیدپذیر نیست.
تغییرات چه وقت نویز هستند و چه وقت یافته؟
هر عددی که تغییر کند بحران نیست. تغییر جزئی یک معیار بهدلیل ترتیب متفاوت کاهش ممکن است معاملات را عوض نکند. تغییر معاملهای نزدیک به آستانه شاید ارزش بررسی داشته باشد. اگر راهبردی با بازبینی فروشنده روی بخش کوچکی از تاریخچه بیشتر نتیجهاش را از دست بدهد، حتی اگر اجرای اولیه کاملاً بازتولیدپذیر بماند، چیزی دربارهٔ شکنندگی خودش به ما آموخته است.
منتقدان آزمونهای پایداری در یک نکته حق دارند: میتوان فرضها را مدام تغییر داد تا راهبردی دلخواه مقاوم به نظر برسد، یا نتیجهای معتبر را فقط به این دلیل رد کرد که سناریویی عمداً افراطی آن را میشکند. تغییرات معقول را از پیش تعیین کنید، همهٔ آنها را گزارش دهید و گزینههای معمول را از سناریوهای تنشزا جدا کنید. سپس نتیجهٔ مبنا را نگه دارید تا پژوهشگر دیگری بتواند دقیقاً آنچه را شما دیدید بازتولید کند.
بازتولیدپذیری نقطهٔ شروعی مطمئن در اختیارتان میگذارد. پرسش مفید بعدی این است: وقتی دنیای پیرامون اجرا به شکلهایی که معقولانه انتظار دارید تغییر میکند، کدام بخشهای پاسخ ثابت میمانند؟
← همهٔ مطالب


