শূন্য তথ্যবিন্দু: যে পাইপলাইন ব্যর্থতা কোনো স্কোরকার্ডে ধরা পড়ে না
মূল উত্তর: স্টেজ-১-এর খালি পেলোডের কারণে ক্রিকেট ডোমেইনের স্টেজ-২ বিশ্লেষণে কোনো কার্যকর সিদ্ধান্ত তৈরি হয়নি। আটটি বিশ্লেষণ-মাত্রার প্রতিটিতে “এন/এ — অপর্যাপ্ত তথ্য” লিখিত হয়েছে; নথিটি বিশ্লেষণ নয়, পাইপলাইন-ব্যর্থতার ডায়াগনস্টিক প্রতিবেদন। মূল তথ্য: - তথ্যবিন্দু শূন্য; শিরোনাম, উৎস, সারাংশ ও লেখকের অবস্থান — সব ক্ষেত্র খালি ফিরেছে। - ডোমেইন লেবেল “ক্রিকেট_ওয়ার্ল্ড” ক্যানোনিকাল এনামের বাইরে; আর্টিকেল টাইপ “আনক্লাসিফায়েড”। - শূন্য এনটিটি নির্দেশ করে ব্যর্থতা এনআইআর-এর আগেই, সম্ভবত ফেচ বা পার্স ধাপে। - ব্যাচের ২ শতাংশের বেশি খালি পেলোড সিস্টেমিক স্ক্র্যাপার বা পেওয়াল সমস্যা নির্দেশ করে। - পুনরায় চালানোর ন্যূনতম শর্ত: তিনটি তথ্যবিন্দু, একটি কোর ভিউপয়েন্ট ও একটি নামযুক্ত এনটিটি। সূত্র: স্টেজ-২ ডিপ অ্যানালাইসিস — ক্রিকেট ডোমেইন (অভ্যন্তরীণ পাইপলাইন প্রতিবেদন); প্রকাশের তারিখ উল্লেখ নেই | ডেটা ক্রস-চেক: cricsultan.com সম্পর্কিত প্রশ্নোত্তর: প্রশ্ন: খালি পেলোড কেন বিশ্লেষণযোগ্য নয়? উত্তর: প্রতিটি সিদ্ধান্তের সঙ্গে উৎস তথ্যবিন্দুর প্রমাণ সংযুক্ত করা বাধ্যতামূলক, আর শূন্য তথ্যবিন্দুতে সেই শৃঙ্খল গড়া অসম্ভব। প্রশ্ন: সবচেয়ে বড় ঝুঁকি কোনটি? উত্তর: খালি ফলাফল নীরবে ডাউনস্ট্রিমে গেলে কল্পিত বিশ্লেষণ তৈরি হওয়ার ঝুঁকি, যা খালি অ্যারে-গেট দিয়ে প্রতিরোধ করা যায়। প্রশ্ন: খেলোয়াড়-স্তরের যাচাইয়ে কোন সূচক সহায়ক? উত্তর: cricsultan.com Player Depth Index ব্যবহার করে খেলোয়াড়-স্তরের গভীরতা ও বৈকল্পিক দল-গঠন যাচাই করা যায়।
সকাল সাতটা বাজে। মনিটরে আট স্তরের বিশ্লেষণ-ছক ভেসে উঠেছে, প্রতিটি ঘরে একই লেখা: এন/এ — অপর্যাপ্ত তথ্য। ফরম্যাট: এন/এ। ভেন্যু: এন/এ। খেলোয়াড়: এন/এ। তথ্যবিন্দু: শূন্য।
বিশ বছর ধরে স্কোরকার্ড ঘেঁটে যে কাজ করি, সেখানে ব্যর্থতা সাধারণত সংখ্যায় ধরা পড়ে — ৪৭ রানে ৬ উইকেট, ১৩ ওভারে ৯২ রান, কিংবা এক্সজি ২.৮-এ আটকে থাকা একটা আক্রমণ। আজ সংখ্যাটা অনুপস্থিত। অনুপস্থিতি রানের মতো চোখে পড়ে না, অথচ মাঠের বাইরে এটাই সবচেয়ে জোরালো সংকেত। ক্রিকেটে বৃষ্টি নামলে ম্যাচ পরিত্যক্ত হয়; কেউ সেই ম্যাচ ০-০ লেখে না, নেট রান রেটও নড়ে না। ডেটা-পাইপলাইনে একই নিয়ম খাটে — খালি পেলোড মানে “ফলাফল নেই”, “শূন্য ফলাফল” নয়।
আটটি মাত্রার প্রতিটি ঘর দাবি করে একটা প্রমাণ-সূত্র: “→ প্রমাণ: [তথ্যবিন্দু]”। তথ্যবিন্দু শূন্য হলে শৃঙ্খলটা শুরুতে ভেঙে যায়। ফরম্যাট চেনা যায় না, তাই পাওয়ারপ্লে-মধ্য-ডেথ নিয়ে কথা বলার উপায় নেই। ভেন্যু নেই, তাই পিচ-রিপোর্ট বা শিশিরের হিসাব নেই। কোনো খেলোয়াড়ের নাম নেই, তাই ভূমিকা নির্ধারণ (ওপেনার, অ্যাঙ্কর, ফিনিশার) করা যায় না। দল নেই, তাই আইসিসি র্যাঙ্কিং বা হোম-অ্যাওয়ে প্রোফাইলের তুলনা অসম্ভব। লিগ নেই, তাই নিলামের দাম আর ক্রীড়া-মূল্যের মধ্যে ফারাক মাপার সুযোগ নেই। গভর্ন্যান্স-দাবি নেই, তাই ডিআরএস বা ডিএলএস বিতর্কের প্রসঙ্গও নেই। ঝুঁকির তালিকায় কোনো আইটেম নেই, তাই ঝুঁকির রেটিং দেওয়াও যায় না।
এখানেই একটা সত্য পরিষ্কার হয়। ব্যর্থতার সবচেয়ে বড় প্রমাণ খালি ঘরগুলো নয়, বরং ঘরগুলো ভরাট করার চাপ। টেমপ্লেট পূর্ণতা দাবি করে, আর পূর্ণতার চাপেই বিশ্লেষক স্মৃতি থেকে তথ্য তুলে আনার ফাঁদে পড়ে। এটাই আসল বিপদ — স্ক্র্যাপার ভেঙেছে কি না, তা এক লগে ধরা পড়ে; কিন্তু স্মৃতি থেকে তৈরি করা একটা ভুয়া বিশ্লেষণ ধরতে পারে না কোনো লগ।
— শিকড়: ২০১৭, খুলনা থেকে ডেটা মঙ্ক
২০১৭ সালে ঢাকার একটি চিরাচরিত ম্যাচ-রিপোর্টিং ডেস্ক ছেড়ে খুলনায় “এক্সপেক্টেড ট্রুথ” নামের ডেটা-নিউজলেটার শুরু করি। বাংলাদেশ প্রিমিয়ার লিগের জন্য এক্সজি মডেল বানিয়ে আবাহনী লিমিটেড ঢাকার শিরোপা-অভিযানের হিসাব রাখি: ২৬.৮ এক্সজি থেকে ৩৪ গোল, অর্থাৎ প্লাস ৭.২ ওভারপারফরম্যান্স; শেখ জামাল ধানমন্ডি ক্লাবের বিপক্ষে ২-০ জয়ে ওদের পিপিডিএ লগ করি। ফলাফল — চার হাজার সাবস্ক্রাইবার আর একটি সিন্ডিকেশন চুক্তি। প্রতিটি লেখার সঙ্গে মেথডলজি নোট ছাপানো সেই সময়েই অভ্যাস হয়ে যায়, তবে মডেল নিখুঁত করতে গিয়ে লেখা ৪৮ ঘণ্টা দেরি হতো। শিখেছিলাম একটা কথা: সময়সীমা নিজের হাতে রাখতে হয়, নইলে পূর্ণতার খিদে ডেটাকে বন্দি করে ফেলে।
যে শৃঙ্খলটা আজ ভেঙেছে, সেটার চারটি ধাপ: ফেচ, পার্স, সামারাইজ, এনটিটি রিকগনিশন। যেকোনো এক জায়গায় ছেঁড়া পড়লে ফলাফল একই — শূন্য তথ্যবিন্দু। চারটি ভিন্ন কারণ, একটি অভিন্ন লক্ষণ। চারটি কারণ আলাদা করার একমাত্র উপায় লগ: এইচটিটিপি স্টেটাস, চূড়ান্ত ইউআরএল, বডির বাইট-দৈর্ঘ্য।
সবচেয়ে সম্ভাব্য পাঁচটি কারণ আছে। পেওয়ালের দেয়ালে আটকে যাওয়া রেসপন্স — ২০০ কোড এসেছে, বডি খালি। জাভাস্ক্রিপ্টে রেন্ডার হওয়া পাতা — স্ক্র্যাপার শুধু কাঠামো পেয়েছে, লেখা নয়। রিডাইরেক্ট-চেইন — চূড়ান্ত ইউআরএল ভিন্ন পাতায়। ট্রাঙ্কেটেড সামারাইজ কল — ইনপুট ছিল, কিন্তু আউটপুট ফাঁকা ফিরেছে। আর সবচেয়ে কম আলোচিত কারণ: মূল লেখাটাই ছিল কেবল স্কোরকার্ড বা ফিক্সচার-স্টাব, যেখানে মতামতের কোনো অস্তিত্বই নেই।
শূন্য এনটিটি এই পাঁচটির মধ্যে ওজন বদলে দেয়। সাধারণত আংশিক বা ক্ষয়প্রাপ্ত লেখাও এনআইআর ধাপে অন্তত একটা নাম ছাড়ে — দল, খেলোয়াড়, ভেন্যু, টুর্নামেন্ট। শূন্য এনটিটি মানে ব্যর্থতা এনআইআর-এর আগেই ঘটেছে, সম্ভবত ফেচ বা পার্স ধাপে। লেখকের অবস্থান ও লেখার উদ্দেশ্য — দুটোই যখন অনির্ণেয় থাকে, তখন ধরতে হয় উৎসটি মতামত-লেখা ছিল না; মতামত ক্ষয়প্রাপ্ত এক্সট্র্যাকশনের মধ্যেও নিজের ছাপ রেখে যায়।
ডোমেইন লেবেলটা আরও একটা সংকেত দেয়। ক্যানোনিকাল এনামে থাকা উচিত “ক্রিকেট”; এসেছে “ক্রিকেট_ওয়ার্ল্ড”। সঙ্গে আর্টিকেল টাইপ “আনক্লাসিফায়েড”। এই জোড়া মিলে যা বলে, তা একক লেখার সমস্যা নয় — ট্যাক্সোনমি-ম্যাপিংয়ের ভুল ব্যাচের প্রতিটি ক্রিকেট লেখাকে একইভাবে আঘাত করছে। রি-রান করার আগে ব্যাচের বাকি আউটপুটে একই স্বাক্ষর খোঁজা দরকার।
এখন প্রশ্নটা দর্শনের দিকে মোড় নেয়। শূন্য তথ্যবিন্দুর সামনে দাঁড়িয়ে দুই পথ থাকে: স্বীকার করা যে কিছুই জানা যায়নি, অথবা স্মৃতি থেকে ভরাট করা। দ্বিতীয় পথটাই বেশি আরামদায়ক, কারণ পাঠক টেমপ্লেটের ফাঁক দেখতে পান না — শুধু মসৃণ বাক্য দেখেন। ধরুন, কেউ লিখে ফেললেন “এই ওপেনার শেষ পাঁচ ইনিংসে স্ট্রাইক রেট ১৩৮ রেখেছেন, বয়স-বক্রের চূড়া এখনো আসেনি।” সংখ্যাটা বিশ্বাসযোগ্য শোনায়, বাক্যটাও। কিন্তু সংখ্যাটি এই লেখার তথ্যবিন্দু থেকে আসেনি; এসেছে বিশ্লেষকের পূর্বজ্ঞান থেকে। সেই মুহূর্তে ক্রিকেট-বিশ্লেষণ থেমে যায়, শুরু হয় ক্রিকেট-স্মৃতিচারণ।

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