খালি পেলোড, সবুজ ড্যাশবোর্ড: ক্রীড়া ডেটা অরাকেলের নীরব ব্যর্থতা আর ব্লকচেইন অডিট ট্রেইলের পরীক্ষা
**মূল উত্তর:** ক্রীড়া ডেটা পাইপলাইনে স্কিমা বৈধ কিন্তু বিষয়বস্তু শূন্য পেলোড সবচেয়ে বিপজ্জনক ব্যর্থতা, কারণ ড্যাশবোর্ড সবুজ দেখায়। ব্লকচেইন হ্যাশ, টাইমস্ট্যাম্প ও অ্যাটেস্টেশন দিয়ে এই নীরব ব্যর্থতা ৩:৪৭-এ দৃশ্যমান করে; তবে এটি ভুল বিশ্লেষণকে সঠিক করে না। **মূল তথ্য:** - ২০২০ বুন্ডেসলিগায় ২৭ ম্যাচে হোম জয় ৪৩% থেকে ৩৩%-এ নামে, হোম xG কমে ০.২১। - ফাঁকা স্ট্রিংও বৈধ স্ট্রিং; স্কিমা ভ্যালিডেশন সত্যতা যাচাই করে না। - চেইনে "প্যাচ: নাল" রেকর্ড "কোনো রেকর্ড নেই"-এর চেয়ে বেশি কাজের, কারণ এটি মিথ্যা-প্রমাণযোগ্য। - মেক্সিকো সিটির উচ্চতা ২,২৪০ মিটার; ফিডে উচ্চতা না থাকলে ২০২৬ মডেল অন্ধ হয়। - ফাঁকা ইনপুটে ঝুঁকি চিহ্নিত না হওয়া মানে ঝুঁকি নেই নয়। **সূত্র:** মূল ভিত্তি Stage-2 ইনপুট-অখণ্ডতা প্রতিবেদন; প্রতিবেদনে প্রকাশের তারিখ উল্লেখ নেই, যা নিজেই তথ্যচ্যুতি ঝুঁকির সংকেত। **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: ব্লকচেইন কি ভুল ডেটা ঠিক করতে পারে? উত্তর: না, এটি শুধু পরিবর্তন-প্রমাণ রাখে; ভুল সংখ্যা চিরস্থায়ীভাবে ভুলই থাকে। প্রশ্ন: নীরব ব্যর্থতা কী? উত্তর: কাঠামো পূর্ণ কিন্তু বিষয়বস্তু শূন্য আউটপুট, যা সম্পূর্ণ দেখায় অথচ কোনো বিশ্লেষণ হয়নি। প্রশ্ন: প্রেক্ষাপট-ভেরিয়েবল আগে চেইনে নিবন্ধন কেন দরকার? উত্তর: হ্যাশ-ভিত্তিক পূর্ব-নিবন্ধন ম্যাচ-পরবর্তী অজুহাত যোগ করা অসম্ভব করে দেয়।
নিউ ইয়র্কের একটি স্পোর্টসবুকের প্রাইসিং ডেস্কে রাত ৩:৪৭-এ পেলোডটা ঢুকল। স্কিমা ভ্যালিডেশন পাস করল। চৌদ্দটি ফিল্ড, প্রতিটির নাম ঠিক, প্রতিটির ডেটা টাইপ ঠিক, প্রতিটির ভেতরে শূন্যতা। ড্যাশবোর্ড সবুজ হয়ে গেল।
ওই রাতে যে বাজিটা লস হলো, তার কারণ ৮৮তম মিনিটের পেনাল্টি ছিল না। কারণ ছিল ৩:৪৭-এর ওই সবুজ বাতি। পাইপলাইন ব্যর্থ হয়নি — পাইপলাইন নীরবে ব্যর্থ হয়েছিল। প্রথমটা হলে আমরা থামতাম। দ্বিতীয়টায় আমরা এগিয়ে গেলাম, কারণ টেবিলগুলো ভরা দেখাচ্ছিল।
গত সপ্তাহে আমার ডেস্কে ঠিক এই আকৃতির একটি প্রতিবেদন এল। নয়টি বিশ্লেষণ-স্তম্ভ, ত্রিশটির বেশি টেবিল, প্রতিটি সারিতে লেখা — "প্রযোজ্য নয়, অপর্যাপ্ত তথ্য"। কাঠামোগতভাবে নিখুঁত। বিষয়বস্তুগতভাবে শূন্য। যে কেউ দ্রুত চোখ বুলিয়ে ভেবে বসতে পারত, এখানে ঝুঁকি নেই।
স্প্রেডশিট এক কথা বলেছিল, স্টেডিয়াম আরেক কথা। এবার স্প্রেডশিট কিছুই বলল না, অথচ দেখাল সব বলেছে।
ক্রীড়া বাজারের প্রাইসিং ডেস্ক আসলে একটা ফিড-প্রসেসর। লাইনআপ, xG, পিপিডিএ, ভ্রমণ-দূরত্ব, আবহাওয়া, প্যাচ নম্বর, সার্ভার অঞ্চল — এই ভেরিয়েবলগুলো একটা অরাকেল স্তর থেকে আসে, তারপর মডেলে ঢোকে, তারপর দামে রূপান্তরিত হয়। ব্লকচেইনের ভাষায় অরাকেল মানে বাইরের বাস্তবতাকে চেইনে আনার সেতু। ক্রীড়ার ক্ষেত্রে এই সেতুটা অস্বাভাবিকভাবে ভঙ্গুর, কারণ ফলাফল নির্ধারিত হয় সেকেন্ডে, আর নিষ্পত্তি হয় মিনিটে।
ক্রীড়া অরাকেলের সমস্যাটা দ্বিমুখী। তথ্যটা আসে এমন এক জায়গা থেকে যেখানে কোনো চেইন নেই — স্টেডিয়ামের স্কোরবোর্ড, ইভেন্টের অফিসিয়াল ফিড, কোচের প্রেস কনফারেন্স। আর তথ্যটা যখন চেইনে আসে, তখন তার সঙ্গে আসে না তার প্রেক্ষাপট। "হোম টিম জিতেছে" একটা তথ্য। "হোম টিম জিতেছে ২,২৪০ মিটার উচ্চতায়, ৭২ ঘণ্টার মধ্যে দ্বিতীয় ম্যাচে, তিনজন নিয়মিত একাদশের বাইরে" সম্পূর্ণ ভিন্ন তথ্য। চেইন প্রথমটা সহজে রেকর্ড করে। দ্বিতীয়টার জন্য দরকার একটা সিদ্ধান্ত: কোন ভেরিয়েবলগুলো গণ্য হবে।
ব্যর্থতা দুই রকম। জোরালো ব্যর্থতা — ফিড কেটে গেল, লাল বাতি জ্বলল, সবাই থামল। নীরব ব্যর্থতা — ফিড ফিরল, স্কিমা পাস করল, ভেতরে কিছু নেই। প্রথমটা বিরক্তিকর। দ্বিতীয়টা বিপজ্জনক। যে বিশ্লেষণ-কাঠামো শূন্য ইনপুট পায়, তার সঠিক আচরণ হলো প্রতিটি স্তম্ভে লেখা "অপর্যাপ্ত তথ্য, মূল্যায়ন করা সম্ভব নয়"। নিয়মটা ঠিকই আছে। সমস্যা ডাউনস্ট্রিমে — যে পাঠক ভরা টেবিল দেখে "প্রযোজ্য নয়" পড়ে, সে অনেক সময় পড়ে "ঝুঁকি পাওয়া যায়নি"। একটা ডেটা-ফাঁক মুহূর্তে পরিণত হয় স্বচ্ছন্দ-বিলে।

২০১৭ সালে নিউ ইয়র্কে বসে সপ্তাহে একটা এমএলএস নিউজলেটার লিখতাম, নাম ছিল দ্য এক্সপেক্টেড গোল। নিউ ইয়র্ক সিটি এফসি-র প্রতি ম্যাচের xG, শট অন টার্গেট, দূরত্ব — সব একটা স্প্রেডশিটে। জ্যাক হ্যারিসনের ১০ গোলের পক্ষে লিখেছিলাম, কারণ তাঁর xG ছিল ৮.৭। পোস্টটা রেডিটে চার হাজার পাঠক পড়ল। নিউজলেটারটা শুরুই হয়েছিল নিজের সংখ্যার সঙ্গে তর্ক করার জন্য। সেই তর্কে একটা জিনিস শিখেছিলাম, যা আজও প্রতিটি ফাইলে মনে রাখি: একটা খালি ঘর শূন্য নয়।
স্প্রেডশিট সফটওয়্যার এই পার্থক্যটা জানে না। কোনো কলামে গড় বের করার সময় সে খালি ঘরগুলো চুপচাপ বাদ দেয়। দশ ম্যাচের মধ্যে ছয়টিতে তথ্য থাকলে যে গড় বেরোয়, সেটা দশ ম্যাচের গড় নয় — সেটা ছয় ম্যাচের গড়, জমা দেওয়া হয় দশ ম্যাচের নামে। মডেল তখন আত্মবিশ্বাসী, দাম তখন ভুল, আর কেউ টের পায় না। বাজার বোঝার আগেই আমি xG মডেল বানিয়েছিলাম, আর তখন আমার সবচেয়ে বড় ভুল ছিল এই বিশ্বাস যে সংখ্যা থাকলেই সংখ্যা কাজ করছে।
স্কিমা বৈধতা আর বিষয়বস্তু বৈধতা দুটো আলাদা জিনিস। একটা JSON স্কিমা বলতে পারে "এই ফিল্ডটি স্ট্রিং হতে হবে"। সে বলতে পারে না "এই স্ট্রিংটি সত্যি হতে হবে"। ফাঁকা স্ট্রিংও স্ট্রিং। এই কারণেই নীরব ব্যর্থতা প্রযুক্তিগতভাবে বৈধ, আর এই কারণেই এত সহজে চোখ এড়ায়।
ব্লকচেইন এখানে যা দেয়, সেটা বুদ্ধিমত্তা নয় — প্রমাণযোগ্যতা। পেলোডটা ডেস্কে ঢোকার সময় তার একটা হ্যাশ তৈরি হয়, একটা টাইমস্ট্যাম্প বসে, একটা অ্যাটেস্টার-কি দিয়ে সই হয়, আর কনটেন্ট-অ্যাড্রেসড স্টোরেজে একটা সিআইডি জমা হয়। এখন যে কেউ প্রমাণ করতে পারে কোন পেলোড, কোন সেকেন্ডে, কার সইয়ে গৃহীত হয়েছে। পেলোডটা যদি খালি হয়, লগ চিরকাল বলবে খালি। এটাই আসল পরিবর্তন — শূন্যতাটা ৮৮তম মিনিটে নয়, ৩:৪৭-এ দৃশ্যমান হয়ে যায়।
নিষ্পত্তি-চুক্তি ফাঁকা ফিল্ডে রিভার্ট করা উচিত। এটা আমার সবচেয়ে বিতর্কিত প্রস্তাব। বাজি নিষ্পত্তির স্মার্ট কন্ট্র্যাক্টে যদি ঘোষিত প্রেক্ষাপট-ভেরিয়েবলগুলোর প্রতিটির জন্য একটা শর্ত থাকে — এই ফিল্ড নাল নয় — তাহলে পেলোড খালি এলে চুক্তি নিষ্পত্তি করবে না, বরং এসকেলেট করবে। নীরব ব্যর্থতা এক লাফে জোরালো ব্যর্থতায় পরিণত হয়। খরচ আছে: কিছু বাজি দেরিতে নিষ্পত্তি হবে। কিন্তু দেরি করা একটা বাজি লস করা বাজির চেয়ে অনেক সস্তা।
প্রেক্ষাপট-ভেরিয়েবল ম্যাচের আগেই চেইনে নিবন্ধিত হওয়া দরকার। বিশ্লেষক ম্যাচের আগে একটি তালিকা প্রকাশ করেন — এই ম্যাচে কোন কোন ভেরিয়েবল গণ্য হবে: দর্শক উপস্থিতি, প্যাচ সংস্করণ, সার্ভার অঞ্চল, ভ্রমণ-দূরত্ব, উচ্চতা। তালিকার হ্যাশ চেইনে জমা হয়। ম্যাচের পরে তালিকা প্রকাশ করা হয়। যে বিশ্লেষক হেরে গিয়ে নতুন করে ভেরিয়েবল যোগ করতে চান, তিনি পারবেন না — হ্যাশ মিলবে না। প্রেক্ষাপট-অজুহাত তখন আর অজুহাত নয়, সেটা একটা অন-চেইন রেকর্ড।
২০২০ সালের মে মাসে বুন্ডেসলিগা বন্ধ দরজার পিছনে ফিরেছিল। আমি সাতাশটি ম্যাচ ট্র্যাক করেছিলাম। হোম টিমের জয়ের হার ৪৩ শতাংশ থেকে নেমে ৩৩ শতাংশে দাঁড়াল, হোম xG কমল শূন্য দশমিক ২১। একটা ছোট বাজি সিন্ডিকেটের জন্য লজিস্টিক রিগ্রেশন মডেল বানালাম, হোম ফেভারিটের বিপক্ষে আন্ডার সুপারিশ করলাম, বারো সপ্তাহে রিটার্ন এলো ৮.৪ শতাংশ। এই ফলাফল সম্ভব হয়েছিল একটাই কারণে — "দর্শক উপস্থিতি = শূন্য" একটা রেকর্ডেড ভেরিয়েবল ছিল। ফিড যদি ওই ঘরে নাল ফেরাত, রিগ্রেশন এমন একটা ভেরিয়েবলের ওপর দিয়ে গড়ে যেত যা আর ভ্যারি করছিল না, আর মডেল পরিষ্কার, আত্মবিশ্বাসী এবং ভুল একটা সংখ্যা দিত। খালি স্টেডিয়াম আমাকে শিখিয়েছিল শব্দ একটা ভেরিয়েবল, উপদ্রব নয়। একই কারণে নাল একটা মান, ফাঁক নয়।
ইস্পোর্টসে সমস্যাটা আরও তীক্ষ্ণ। লিগ অব লেজেন্ডস, ডোটা ২, সিএস২, ভ্যালোরান্ট — প্রতিটির মেট্রিক আলাদা, প্রতিটির প্যাচ-লজিক আলাদা। কোনো ফিড যদি প্যাচ নম্বর অ্যাটেস্ট না করে, তার দেওয়া যেকোনো সংখ্যা অসংজ্ঞায়িত। একই ফিল্ড, ভিন্ন প্যাচে, সম্পূর্ণ ভিন্ন অর্থ বহন করে। চেইনে "প্যাচ: নাল" লেখা একটা রেকর্ড অনেক বেশি মূল্যবান "কিছুই লেখা নেই"-এর চেয়ে, কারণ প্রথমটা মিথ্যা-প্রমাণযোগ্য, দ্বিতীয়টা নয়।
২০২৬ সালের বিশ্বকাপে ভেন্যু-নির্দিষ্ট মডেল নিয়ে কাজ করছি। মেক্সিকো সিটির উচ্চতা ২,২৪০ মিটার। এই উচ্চতায় বলের গতিপথ, খেলোয়াড়দের ফুসফুস-ক্ষমতা, কর্নার কিকের বাঁক — সব বদলে যায়। ফিডে উচ্চতা ফিল্ডটাই না থাকলে মডেল ভুল হবে না, মডেল অন্ধ হবে। অন্ধ মডেলও আত্মবিশ্বাসী সংখ্যা দেয়, আর সেই সংখ্যা দিয়েই সবচেয়ে বড় ভুল দাম বসে। ২০২৪ ইউরোতে স্পেনের ফিউচার্স +৪৫০-এ ধরেছিলাম লামিন ইয়ামালের প্রগ্রেসিভ পাস আর প্রতি ৯০ মিনিটে xG দেখে। বয়স তখন ষোলো — সেটাও একটা প্রেক্ষাপট-ভেরিয়েবল ছিল। ওই ফিল্ডটা ফিডে না থাকলে মডেল প্রতিভা দেখত, ঝুঁকি দেখত না।
ইস্পোর্টস বাজারে ম্যাচ-ফিক্সিং ধরার সবচেয়ে পুরনো পদ্ধতি লাইন মুভমেন্ট দেখা। অফিসিয়াল ঘোষণার আগেই দাম নড়লে সেটা একটা সংকেত। সেই সংকেত আজ শুধু স্ক্রিনশটে থাকে, আর স্ক্রিনশট সম্পাদনাযোগ্য। অন-চেইন অর্ডারবুক লগে সেই নড়াচড়া চিরস্থায়ী হয় — কোন সেকেন্ডে, কোন ওয়ালেট, কোন সাইজে। তদন্তকারীর কাজ সহজ হয় না, তদন্তকারীর অজুহাত কমে।
প্লেয়ার ভ্যালুয়েশনে একই কথা প্রযোজ্য। একটা ট্রান্সফার ফি হলো সেই গল্প যা বাজার খেলোয়াড়ের মুখ খোলার আগেই বলে। কিন্তু সেই গল্পের ভিত্তি যে ফিডগুলো — বয়স, মিনিট, xG চেইন, পিপিডিএ — সেগুলোর উৎস অ্যাটেস্টেড না হলে ফি-টা একটা সংখ্যা মাত্র, প্রমাণ নয়। যে লিগে তারকা কেনা হয় দর্শক টানার জন্য, সেখানে ফি পারফরম্যান্সের দাম নয়, প্রচারের দাম — আর সেই পার্থক্যটা কোনো অন-চেইন ফিড এখনো ধরতে পারে না।
ব্লকচেইনের সীমাও স্পষ্ট করে বলা দরকার। অরাকেল সমস্যা একে অসমাধান রেখে দেয় — চেইন প্রমাণ করতে পারে কে কী পাঠাল, প্রমাণ করতে পারে না পাঠানো তথ্যটা সত্যি। আবর্জনা ঢুকলে আবর্জনাই থাকে, শুধু এবার সেটা টাইমস্ট্যাম্পসহ, সইসহ, চিরস্থায়ীভাবে থাকে। ভুল সংখ্যার অপরিবর্তনীয় রেকর্ড মানে চিরস্থায়ীভাবে ভুল সংখ্যা। খরচ আর লেটেন্সিও বাস্তব — প্রতি সেকেন্ডে হাজারো ফিল্ড চেইনে লেখা সস্তা নয়, আর নিষ্পত্তির জন্য অপেক্ষা করা বাজি মানে তারল্য কমা।
প্রেক্ষাপট আর কারণ এক জিনিস নয়। দর্শক কমেছে, হোম জয় কমেছে — দুটো একসাথে ঘটেছে, একটার থেকে অন্যটা এসেছে এমনটা নয়। করোনাকালে অনেক কিছু একসাথে বদলেছিল: ভ্রমণ, বিশ্রামের দিন, প্রস্তুতির সময়, রেফারির সিদ্ধান্তের ধরন। আমরা একটা ভেরিয়েবল মাপছিলাম, অথচ দশটা ভেরিয়েবল নড়ছিল। ব্লকচেইন এই বিভ্রান্তি দূর করে না; সে শুধু নিশ্চিত করে যে বিভ্রান্তিটা কবে, কী ডেটায়, কার সইয়ে ঘটেছিল।
আর একটা জিনিস। চেইনে কোনো সতর্কতা না থাকা মানে পরিষ্কার বিল নয়। ফাঁকা ইনপুটে কোনো ঝুঁকি চিহ্নিত হয়নি — এই কথাটা "ঝুঁকি নেই" থেকে আকাশ-পাতাল আলাদা। যারা এই দুটোকে এক ভাবেন, তাঁরা ঠিক সেই ভুলটাই করেন যেটা আমার নিজের রিপোর্টে ধরা পড়েছিল। আমি কোনো সংকেতকে বিশ্বাস করি না যতক্ষণ না সেটা ফেব্রুয়ারির একটা ঠান্ডা মঙ্গলবার পার হয়ে আসে।
২০২৬ বিশ্বকাপের প্রথম ম্যাচের আগে একটা প্রশ্নই যথেষ্ট: রাত ৩:৪৭-এ পেলোডটা কে সই করেছিল? কোনো ডেস্ক এই প্রশ্নের উত্তর দিতে না পারলে তাদের সংখ্যাগুলো নাম ছাড়া স্বাক্ষর — শুনতে বিশ্বাসযোগ্য, প্রমাণে অচল। ডেটা খেলাটা নয়। ডেটা হলো খেলাটা নিজের প্যাটার্ন স্বীকার করে ফেলার মুহূর্ত। আর সেই স্বীকারোক্তি তখনই মূল্যবান, যখন তার নিচে একটা সই থাকে।
