যে রিপোর্টে একটি তথ্যও ছিল না: ক্রিকেট ডেটা পাইপলাইনের নীরব ব্যর্থতা
**মূল উত্তর:** Stage-1 পেলোড খালি মানে ওই আইটেমে কোনো যাচাইযোগ্য তথ্য নেই — শিরোনাম, সূত্র, দল, খেলোয়াড়, ফরম্যাট কিছুই শনাক্ত হয়নি। এ অবস্থায় Stage-2-এর একমাত্র দায়িত্ব ব্যর্থতা চিহ্নিত করা ও পুনরুদ্ধার প্রক্রিয়া দেওয়া; অনুমান দিয়ে ঘর ভরা নয়। **মূল তথ্য:** - তথ্যবিন্দু শূন্য; শিরোনাম, সূত্র ও ধরন অনির্ধারিত (N/A) হিসেবে ফিরেছে। - একমাত্র সংকেত Domain Label “cricket_asia”, যা ট্যাক্সোনমি ভিত্তিক, বিষয়বস্তুর প্রমাণ নয়। - ফরম্যাট (টেস্ট/ওডিআই/টি-টোয়েন্টি) অনির্ধারিত থাকলে কোনো পারফরম্যান্স দাবি বৈধ নয়। - ইন্টিগ্রিটি ঝুঁকি UNASSESSED হিসেবে নথিভুক্ত, “পরিচ্ছন্ন” হিসেবে নয়। - ফেচ লগ (HTTP স্ট্যাটাস, বাইট কাউন্ট, কনটেন্ট-টাইপ) দিয়েই ইনজেশন ব্যর্থতা বনাম প্রকৃত শূন্যতা আলাদা করা যায়। **সূত্র উদ্ধৃতি:** Stage-2 Deep Professional Analysis — Cricket Domain, অভ্যন্তরীণ ডেটা-বিশ্লেষণ নথি। প্রকাশের তারিখ নির্ধারণ করা যায়নি, কারণ Stage-1-এ Time Sensitivity মূল্যায়িত হয়নি। ক্রিকসুলতান ডেটাবেসের সঙ্গে ক্রস-চেক প্রযোজ্য নয়, কারণ যাচাইযোগ্য কোনো তথ্যবিন্দুই সরবরাহ হয়নি। **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: Stage-1 খালি ফেরার সবচেয়ে সাধারণ কারণ কী? উত্তর: বেশিরভাগ ক্ষেত্রে ফেচ ব্যর্থতা, পেওয়াল/কনসেন্ট ওয়াল, জাভাস্ক্রিপ্ট রেন্ডারিং বা গদ্য-বহির্ভূত সোর্স (লাইভ স্কোর, ফিক্সচার, ভিডিও পেজ)। প্রশ্ন: ফাঁকা পেলোডে সর্বোচ্চ ঝুঁকি কোনটি? উত্তর: ফ্যাব্রিকেশন ঝুঁকি — বিশ্লেষক বা ভাষা-মডেল বিশ্বাসযোগ্য শোনানো কিন্তু উৎসহীন তথ্য দিয়ে শূন্য ঘর ভরে ফেলতে পারে। প্রশ্ন: পুনরুদ্ধারের প্রথম ধাপ কী? উত্তর: রিট্রিভাল যাচাই — HTTP স্ট্যাটাস, কনটেন্ট-টাইপ ও বাইট কাউন্ট পরীক্ষা করে নিশ্চিত করা যে সোর্সটি আদৌ গদ্য এবং সম্পূর্ণ ডাউনলোড হয়েছে।" } ```
রাত ১টা ৪০ মিনিট, ময়মনসিংহ। ব্যাচের ৪৭ নম্বর ফাইলটা খুললাম। শিরোনাম: N/A। সূত্র: N/A। ধরন: Unclassified। তথ্যবিন্দুর ঘরটা শূন্য। আমি একটা ফাঁকা স্প্রেডশিট খুললাম, কারণ ভাগ্যের মিসিং ভ্যালু এত বেশি ছিল যে আর গোনা যাচ্ছিল না। এগারো বছর ধরে ক্রিকেট দেখছি, প্রতিদিন দেড়শো থেকে দুইশো নিউজ আইটেমের ডেটা পাইপলাইনে কাজ করি; এই প্রথম এমন একটা আইটেম হাতে এল যেখানে ভুল তথ্যও নেই — শুধু শূন্যতা।
বিষয়টা কী, সেটা পরিষ্কার করা দরকার। প্রথম ধাপ (Stage-1) হলো টেক্সট ডিকনস্ট্রাকশন: মূল প্রতিবেদন থেকে যান্ত্রিকভাবে শিরোনাম, সূত্র, তথ্যবিন্দু, দৃষ্টিভঙ্গি আর সত্তা (entity) টেনে আনা। দ্বিতীয় ধাপ (Stage-2) সেই কাঁচামালের ওপর বিশ্লেষণ। কাঁচামাল শূন্য হলে বিশ্লেষণের প্রতিটি ঘর তাত্ত্বিকভাবেই শূন্য হওয়ার কথা — এবং এখানেই আসল গল্পটা লুকিয়ে আছে। প্রতিটি আইটেমে অন্তত একটা অ্যাংকর লাগে: দল, খেলোয়াড়, ভেন্যু, তারিখ, ফরম্যাট, স্কোরলাইন কিংবা একটা যাচাইযোগ্য সংখ্যা। সত্তা হলো সবচেয়ে সস্তা অ্যাংকর, আর তার সম্পূর্ণ অনুপস্থিতি হলো সবচেয়ে জোরালো ব্যর্থতার সংকেত। এখানে সেই সংকেতটাই সবচেয়ে জোরে বাজছে।

একটাই সংকেত বেঁচে গেছে — Domain Label: cricket_asia। এটা ট্যাক্সোনমি সংকেত, বিষয়বস্তুর সংকেত নয়। এর অর্থ শুধু এই: আপস্ট্রিম ক্লাসিফায়ার আইটেমটিকে “এশিয়া-অঞ্চল ক্রিকেট” বালতিতে ফেলেছে। এটি ফরম্যাট বলে না, দল বলে না, ম্যাচের প্রকৃতি বলে না। এশিয়া ট্যাগ মানে ভারত-পাকিস্তান, এশিয়া কাপ, নেপাল-ওমান দ্বিপাক্ষিক, ঢাকার ঘরোয়া লিগ — সবই সম্ভাব্য; কিন্তু সম্ভাবনা প্রমাণ নয়, আর এই অঞ্চলে প্রতিদ্বন্দ্বী হাইপোথিসিসের অভাব নেই। সঙ্গে একটা স্কিমা বিচ্যুতিও চোখে পড়ছে: নির্ধারিত লেবেল ছিল “Cricket”, এসেছে “cricket_asia”, আর ধরন এসেছে “Unclassified”। দুটোই সম্ভবত একই ব্যর্থতার সহ-লক্ষণ।
এখন আসল প্রশ্ন হলো, ফাঁকা পেলোডটা ঠিক কী বলছে। এটা আসলে একটা ডায়াগনস্টিক, খবর নয়। পাঁচটা সম্ভাব্য ইনজেশন ব্যর্থতা আছে: ফেচ ব্যর্থতা, পেওয়াল বা কনসেন্ট ওয়াল, জাভাস্ক্রিপ্ট রেন্ডারিং, এনকোডিং ত্রুটি, আর সবচেয়ে গুরুত্বপূর্ণ — সোর্সটা আদৌ গদ্য ছিল কি না। লাইভ স্কোর পেজ, ফিক্সচার লিস্ট, গ্যালারি বা ভিডিও পেজ থেকে গদ্য-ভিত্তিক এক্সট্র্যাক্টর স্বাভাবিকভাবেই শূন্য ফেরত দেবে। পার্থক্যটা ধরার একমাত্র উপায় ফেচ লগ: HTTP স্ট্যাটাস, বাইট কাউন্ট, কনটেন্ট-টাইপ। ২০০ ওকে-র পরও যদি বডি খালি থাকে, দোষ ইনজিনিয়ারিংয়ের; আর কনটেন্ট-টাইপ যদি text/html না হয়, তাহলে ভুল টুল দিয়ে কাজ হচ্ছে।

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

যে প্রশ্নটা নিয়ে ভাবছি: আমাদের পুরো অ্যানালিটিক্স ইকোসিস্টেমে কত শতাংশ “বিশ্লেষণ” আসলে খালি ঘর ভরাট করার প্রতিযোগিতা? পরের ব্যাচে যদি একই সোর্স থেকে আবার শূন্য ফেরে, তাহলে বুঝব সমস্যাটা একক দুর্ঘটনা নয় — সিস্টেমের নীরব ব্যর্থতা। আর ক্রিকেটে নীরব ব্যর্থতাই সবচেয়ে বিপজ্জনক বল, কারণ স্কোরবোর্ডে সেটার কোনো এন্ট্রি থাকে না।
