একটি ব্যাকটেস্টে বার্ষিকীকৃত 20% রিটার্ন দেখা গেল। এতে 8 বছরের ডেটা, 1,640টি ট্রেড এবং একটি পরিচ্ছন্ন ওয়াক-ফরোয়ার্ড বিভাজন ছিল। এরপর ভেন্ডরের বর্তমান ইতিহাসের বদলে সেই সময়ে নথিভুক্ত মানগুলো ব্যবহার করলাম, আর এজ নেমে এল 3%-এ।
অপ্রত্যাশিত সংখ্যাটি আসল রিটার্ন ছিল না। ছিল সংশোধিত ডেটার ওপর নির্ভরশীল 17 শতাংশ পয়েন্ট। এই ধরনের hindsight লুকিয়ে থাকতে পারে অর্থনৈতিক প্রকাশনায়, কোম্পানির মৌলিক তথ্যে, সূচকের সদস্যপদে, এমনকি আপাতদৃষ্টিতে সরল বাজার-সংক্রান্ত ফিল্ডেও। ঐতিহাসিক ডেটা জানায় উৎস এখন কী বলছে। পয়েন্ট-ইন-টাইম ডেটাসেট জানায়, তখন আপনার কৌশল কী জানতে পারত।
ঘটনার পর ঐতিহাসিক ডেটা কেন বদলে যেতে পারে?
কিছু মান প্রথমে আনুমানিক থাকে, পরে সংশোধিত হয়। শুক্রবার প্রকাশিত কোনো অর্থনৈতিক পরিসংখ্যান পরের মাসে সংশোধিত হতে পারে। কোনো কোম্পানি আয়ের অঙ্ক নতুন করে প্রকাশ করতে পারে। ডেটা ভেন্ডর ভুল প্রিন্ট ঠিক করতে, অনুপস্থিত ব্যবধান পূরণ করতে বা প্রাথমিক মানের বদলে চূড়ান্ত মান বসাতে পারে। যে ডেটাবেসে শুধু সর্বশেষ মানটি রাখা হয়, তাতে এসব পরিবর্তন এমন দেখায় যেন শুরু থেকেই সেটিই সত্য ছিল।
কোনো কৌশল যখন প্রকাশিত আয়ের ভিত্তিতে কোম্পানিগুলোকে র্যাঙ্ক করে বা নির্ধারিত ডেটা প্রকাশের পর বাজারে ট্রেড করে, তখন এটি গুরুত্বপূর্ণ। সিদ্ধান্তের সময় বাজারে না থাকা সংশোধিত সংখ্যা যদি কৌশলটি কয়েক মাস আগেই দেখতে পায়, তাহলে ব্যাকটেস্ট তাকে এমন তথ্য দিয়েছে যা তখন পাওয়া যায়নি। সিগন্যালের হিসাব নির্ভুল হতে পারে, কিন্তু এর ইনপুট তবু ইতিহাসের ভুল সংস্করণ থেকে আসছে।
এখানে একটি সহজ ফাঁদ আছে: date নামে কোনো ফিল্ড প্রায়ই মানটি কোন সময়কালকে বোঝায় তা জানায়, কখন সেটি পাওয়া গিয়েছিল তা নয়। 31 মার্চ তারিখ দেওয়া ত্রৈমাসিক আয়ের সারি হয়তো মে মাসে প্রকাশিত হয়েছে। লেবেলটি ব্যবসার সময়কাল বোঝায়, কৌশলটি তখন কী তথ্য জানত তা নয়।
ব্যাকটেস্টে কোন টাইমস্ট্যাম্প ব্যবহার করা উচিত?
মানটির প্রযোজ্য সময়কাল এবং সেটি পাওয়ার সময় আলাদাভাবে রাখুন। সম্ভব হলে প্রকাশের সময় এবং সিস্টেমে গ্রহণের সময়ও সংরক্ষণ করুন। প্রকাশ ও সিস্টেমে পৌঁছানোর পরেই কৌশলটি কোনো মান ব্যবহার করতে পারে; এই সময় দুটির মধ্যে পার্থক্য থাকলে সতর্কতামূলক পুনর্গঠনের জন্য পরের সময়টি ব্যবহার করুন।
| টাইমস্ট্যাম্প | কী বোঝায় | কীভাবে কাজে লাগে |
|---|---|---|
| কার্যকর সময় | যে সময়কাল বা ঘটনাকে মানটি নির্দেশ করে | যা মাপা হচ্ছে, সেই বিষয় অনুযায়ী পর্যবেক্ষণগুলো সাজায় |
| প্রকাশের সময় | উৎস কখন এই সংস্করণটি প্রকাশ করেছে | প্রকাশের আগে কোনো তথ্যকে দেখানো থেকে আটকায় |
| গ্রহণের সময় | আপনার সিস্টেম কখন সংস্করণটি পেয়েছে | ডেলিভারিতে দেরি ও পরে যোগ করা পুরোনো ডেটা ধরে |
ধরা যাক, কোনো কোম্পানির জানুয়ারি থেকে মার্চ পর্যন্ত ত্রৈমাসিক বিক্রির প্রতিবেদন 8 মে 16:15 Eastern-এ প্রকাশিত হয়েছে এবং 16:17-এ আপনার গবেষণা ডেটা স্টোরে পৌঁছেছে। 8 মে বাজার বন্ধের সময় সিদ্ধান্ত নেওয়া কৌশলটি ওই প্রতিবেদন ব্যবহার করতে পারে না, কারণ বাজার বন্ধের সিদ্ধান্ত হয়েছে 16:00-এ। পরদিন সকালে সিদ্ধান্ত নেওয়া কৌশলটি তা পারে। শুধু ত্রৈমাসিকের শেষ তারিখ দিয়ে এই দুটির কোনোটিরই উত্তর মেলে না।
সংশোধনগুলো ফল চালাচ্ছে কি না, কীভাবে পরীক্ষা করব?
একই কৌশল দুবার চালান: একবার প্রতিটি ঐতিহাসিক সিদ্ধান্তের সময়ে পাওয়া ডেটা সংস্করণ দিয়ে, আরেকবার সর্বশেষ সংশোধিত ইতিহাস দিয়ে। এক্সিকিউশনের অনুমান, ইউনিভার্স এবং কোড অপরিবর্তিত রাখুন। এই পার্থক্যটি সংশোধন-সংবেদনশীলতার ফল, নতুন কৌশলের তুলনা নয়।
এরপর দেখুন ব্যবধানটি কোথা থেকে এসেছে। প্রকাশের দিনগুলোতে কি পারফরম্যান্স বদলায়? কয়েকটি সংশোধিত কোম্পানি বা ঠিক করা পর্যবেক্ষণে কি সবচেয়ে বড় পার্থক্যগুলো জমা হয়েছে? প্রাসঙ্গিক প্রকাশের সময়ের আগেই কি কৌশলটি ট্রেড করছে? ইভেন্ট-স্তরে ছোট একটি অডিট প্রায়ই ক্রমবর্ধমান রিটার্নের আরেকটি চার্টের চেয়ে বেশি ব্যাখ্যা দেয়।
এই সংখ্যাগুলো উদাহরণ মাত্র, সর্বজনীন কোনো জরিমানা নয়। আপনার নিজের কৌশলের জন্য জোড়াভিত্তিক ফলই কাজে লাগে, যেখানে সম্ভব একই ট্রেড ও খরচ রাখা হয়েছে। সংশোধিত সংস্করণ অনেক বেশি ভালো ফল দিলে, শিরোনামের ব্যাকটেস্ট বিশ্বাস করার আগে খুঁজে বের করুন কোন ফিল্ড ও তারিখগুলো এই পার্থক্যের জন্য দায়ী।
পয়েন্ট-ইন-টাইম ডেটা অডিটে কী নথিবদ্ধ করা উচিত?
আপনার কৌশল বাস্তবে যে ফিল্ডগুলো ব্যবহার করে, সেগুলো দিয়ে শুরু করুন। প্রতিটি ফিল্ডের জন্য উৎস, টাইমস্ট্যাম্পের অর্থ, সংশোধনের নীতি এবং আগের সংস্করণগুলো পাওয়া যায় কি না, তা শনাক্ত করুন। সংশোধন কীভাবে দেখানো হয়, ভেন্ডরকে জিজ্ঞাসা করুন: আগের সারি বদলে, নতুন সংস্করণের সারি যোগ করে, নাকি আলাদা অডিট লগে। পণ্যের পাতায় “ঐতিহাসিক” লেখা থাকলেই বিষয়টি মীমাংসা হয় না।
- প্রতিটি সংস্করণ প্রকাশের সময় বা প্রথম পাওয়ার টাইমস্ট্যাম্পসহ সংরক্ষণ করুন।
- সময়কালের লেবেল নয়, পাওয়ার সময় ব্যবহার করে ফিচারকে সিদ্ধান্তের সঙ্গে যুক্ত করুন।
- পুনরুৎপাদনযোগ্য রান নিশ্চিত করতে অপরিবর্তিত স্ন্যাপশট বা উৎসের সংস্করণ সংরক্ষণ করুন।
- দেরিতে আসা, সংশোধিত হওয়া বা নির্ভরযোগ্য ইতিহাস না থাকা মানগুলো চিহ্নিত করুন।
পরিধিটাও বাস্তবসম্মত রাখুন। আপনার কৌশল যদি শুধু এক্সচেঞ্জের ট্রেড ও বার ব্যবহার করে, তাহলে অর্থনৈতিক ডেটার সংশোধন অপ্রাসঙ্গিক হতে পারে। তবে বার সংশোধন ও ভেন্ডরের পরে যোগ করা পুরোনো ডেটা তবু গুরুত্বপূর্ণ হতে পারে, বিশেষ করে সিগন্যাল যখন পাতলা বাজার বা নির্দিষ্ট কোনো ইভেন্ট-উইন্ডোর ওপর নির্ভর করে।
পয়েন্ট-ইন-টাইম ইতিহাস না থাকলে
আজকের মানকে চুপিসারে গতকালের মান ধরে নেবেন না। ফিল্ডটিকে সীমাবদ্ধতা হিসেবে চিহ্নিত করুন, ঐতিহাসিক প্রাপ্যতার ওপর নির্ভরশীল দাবিতে সেটি বাদ দিন, অথবা সতর্কতামূলক বিলম্ব দিয়ে চালিয়ে ফল কতটা বদলায় তা দেখান। গবেষণায় বিলম্বিত প্রক্সি কাজে লাগতে পারে, যদি বিলম্বটি স্পষ্ট থাকে এবং ফলাফলের সঙ্গে সীমাবদ্ধতাটিও উল্লেখ করা হয়।
ব্যাকটেস্টের কাজ হলো সেই সময়ে থাকা তথ্যের ভিত্তিতে একটি সিদ্ধান্ত পুনর্গঠন করা। আপনার ডেটা যদি শুধু সর্বশেষ সংস্করণ দেখাতে পারে, তাহলে সৎ ফলাফলের একটি সীমা থাকে: এটি আজ পুনর্গঠিত ইতিহাসের বিপরীতে কৌশলটি পরীক্ষা করতে পারে, কিন্তু ঐতিহাসিক সময়ে কোনো এজেন্ট ঠিক কী দেখতে পারত তা প্রমাণ করতে পারে না।
← সব পোস্ট

