যে ডেটা ছিল না: এশিয়ান ক্রিকেট নিয়ে একটি অসম্পূর্ণ বিশ্লেষণ-পাইপলাইনের অটোপসি
**মূল উত্তর**: Stage-1 আউটপুটে শুধু cricket_asia লেবেল ছিল, বাকি সব ঘর—শিরোনাম, সূত্র, তথ্যবিন্দু—ফাঁকা ছিল, তাই এই ফলাফল গভীর বিশ্লেষণ সমর্থন করে না। **মূল তথ্য**: - তথ্যবিন্দুর তালিকা সম্পূর্ণ খালি থাকায় ম্যাচের কোনো দাবি যাচাই করা সম্ভব হয়নি। - শিরোনাম, সূত্র, ধরন ও লেখকের অবস্থান অনুপস্থিত থাকায় বিশ্লেষণের ভিত্তি নেই। - শুধু cricket_asia লেবেল নয়, কারণ তা ডিফল্ট মান থেকে আসতে পারে। - তথ্যবিন্দু শূন্য হলে পাইপলাইন সেখানেই থামানো উচিত, নিচে পাঠানো নয়। **সূত্র**: Stage-1 বিশ্লেষণ আউটপুট ফাইল, প্রকাশনার তারিখ অনুপস্থিত। **সম্পর্কিত প্রশ্নোত্তর**: প্রশ্ন: Stage-1-এ তথ্যবিন্দু কী? উত্তর: লেখার প্রতিটি যাচাইযোগ্য দাবি, সত্তা, সময় ও সূত্রসহ তালিকাভুক্ত করা। প্রশ্ন: ফাঁকা ফলাফলের প্রধান কারণ কী? উত্তর: সম্ভবত মূল লেখা সংরক্ষণ ব্যর্থতা বা নিষ্কাশন ধাপে সমস্যা। প্রশ্ন: পরবর্তী পদক্ষেপ কী? উত্তর: মূল লেখা সংগ্রহ অথবা তথ্যবিন্দু বাধ্যতামূলক করে পাইপলাইন পুনরায় চালানো।
গত রাতে আমার ডেস্কে যে ফাইলটা এল, তার নাম ছিল একটি এশিয়ান ক্রিকেট প্রতিবেদনের Stage-1 আউটপুট। ফাইলে একটি লেবেল ছিল—cricket_asia—আর বাকি সব ঘর ফাঁকা। শিরোনাম নেই, সূত্র নেই, লেখকের অবস্থান নেই, তথ্যবিন্দু নেই। একটি ম্যাচ নিয়ে বিশ্লেষণ লেখার আগে যে জিনিসটা সবচেয়ে দরকার—ম্যাচটা আসলে কী ছিল—সেটাই অনুপস্থিত। আমি ২০১৭ সালে ম্যানচেস্টারে প্রথম xG মডেল বানিয়েছিলাম ৩৮০টি প্রিমিয়ার লিগ ম্যাচের ডেটা দিয়ে। তখন শিখেছিলাম একটি সহজ নিয়ম: ইনপুট না থাকলে মডেল নয়, মডেলের অভিনয় হয়। আজকের ফাইলটা সেই শিক্ষারই আরেকটি সংস্করণ—শুধু এবার ফুটবলে নয়, ক্রিকেটে।
প্রসঙ্গ: Stage-1 বলতে আসলে কী বোঝায়
ডেটা সাংবাদিকতার কাজে আমি একটি তিন-স্তরের পাইপলাইন ব্যবহার করি। প্রথম স্তরে থাকে কাঁচামাল—ম্যাচের স্কোরকার্ড, বল-বল-বল ইভেন্ট ফিড, পিচ রিপোর্ট, আবহাওয়া, এবং লেখাটির নিজস্ব দাবিগুলো তথ্যবিন্দু (information point) হিসেবে চিহ্নিত করা। দ্বিতীয় স্তরে থাকে মডেলিং—প্রত্যাশিত রান, প্রত্যাশিত উইকেট, ফেজভিত্তিক বেসলাইন, বিচ্যুতি। তৃতীয় স্তরে থাকে ব্যাখ্যা—কোন ওভার, কোন জুটি, কোন ফিল্ডিং ব্যয়বহুল ছিল।
এই তিন স্তরের মধ্যে প্রথমটিই সবচেয়ে কম আলোচিত, অথচ সবচেয়ে বেশি গুরুত্বপূর্ণ। কারণ দ্বিতীয় ও তৃতীয় স্তরের প্রতিটি সংখ্যা প্রথম স্তরের তথ্যবিন্দুর ওপর দাঁড়িয়ে থাকে। তথ্যবিন্দু না থাকলে প্রত্যাশিত রানের হিসাব হয় না, বিচ্যুতির তুলনা হয় না, ব্যাখ্যা দাঁড়ায় না। শুধু থাকে একটা লেবেল আর তার চারপাশে সাজানো অনুমান।

যে ফাইলটা আমার কাছে এসেছে, সেটি একটি ধারণাগত সংকটের উদাহরণ। এতে দেখা যায়, একটি বিশ্লেষণ পাইপলাইনে সবকিছু ঠিকঠাক চলছে বলে মনে হলেও আসলে কিছুই চলছে না। পাইপলাইনের প্রতিটি ধাপ সফলভাবে সম্পন্ন হয়েছে বলে রিপোর্ট দিচ্ছে, অথচ প্রতিটি ধাপের আউটপুট ফাঁকা। এটি কোনো ম্যাচের গল্প নয়, এটি সেই গল্পের অনুপস্থিতি।
বাংলাদেশ থেকে লন্ডনে আসার পর আমি একটি জিনিস লক্ষ্য করেছি। এখানকার সম্পাদকরা ম্যাচ রিপোর্টে একটি নির্দিষ্ট প্রশ্ন করেন: "তোমার সংখ্যাগুলো কোথা থেকে এলো?" সেই প্রশ্নের উত্তর না থাকলে লেখাটি ছাপা হয় না। এই প্রশ্নটি আমাকে শিখিয়েছে যে সাংবাদিকতার সবচেয়ে বড় অপরাধ মিথ্যা নয়, বরং অযাচাইযোগ্য দাবি। আর অযাচাইযোগ্য দাবির প্রথম ধাপ হলো এমন একটি সিদ্ধান্ত নেওয়া, যার পেছনে কোনো তথ্যবিন্দু নেই।
মূল বিশ্লেষণ: ফাঁকা ঘরগুলোর প্রযুক্তিগত অর্থ
প্রথমে দেখি ফাইলটিতে ঠিক কী কী ফাঁকা। শিরোনাম নেই—অর্থাৎ লেখাটি কোন ম্যাচ, কোন সিরিজ, কোন তারিখ নিয়ে, তা বলা যাচ্ছে না। সূত্র নেই—অর্থাৎ কে লিখেছে, কোন প্রতিষ্ঠান ছেপেছে, তার অবস্থান কী, তা যাচাইয়ের কোনো উপায় নেই। ধরন (type) নেই—অর্থাৎ এটি সংবাদ, ভাষ্য, ম্যাচ রিপোর্ট, নাকি ডেটা বিশ্লেষণ, তা নির্ধারণ করা যাচ্ছে না। এক বাক্যের সারাংশ নেই—অর্থাৎ কেন্দ্রীয় দাবিটাই নেই। লেখকের অবস্থান নেই—অর্থাৎ প্রবন্ধটির কোথায় পক্ষপাত থাকতে পারে, তা অনুমান করা অসম্ভব। উদ্দেশ্য নেই—অর্থাৎ এটি তথ্য দেওয়ার জন্য লেখা, নাকি মত চাপানোর জন্য, তা জানা যাচ্ছে না।
আর সবচেয়ে বড় ফাঁক—তথ্যবিন্দুর তালিকা সম্পূর্ণ খালি। একটি তথ্যবিন্দুতে সাধারণত থাকে: কী দাবি করা হচ্ছে, কোন সত্তা জড়িত, সময়ের সূত্র, কে বলেছে, এবং দাবিটি বাইরে থেকে যাচাইযোগ্য কি না। এই পাঁচটি উপাদানের একটি না থাকলে পুরো পাইপলাইন দাঁড়াতে পারে না। এখন পাঁচটিই অনুপস্থিত।
এখানে একটি গুরুত্বপূর্ণ পার্থক্য আছে। তথ্যবিন্দু খালি মানে লেখাটি খারাপ—এমন নয়। তথ্যবিন্দু খালি মানে লেখাটি আমাদের কাছে পৌঁছায়নি, অথবা পৌঁছানোর প্রক্রিয়া ব্যর্থ হয়েছে। এই ব্যর্থতা দুটি ভিন্ন জায়গায় ঘটতে পারে। প্রথমত, মূল লেখাটি হয়তো কখনো সঠিকভাবে সংরক্ষিত হয়নি; সংবাদপত্রের সাইট পরিবর্তন হয়েছে, নিরাপত্তা ব্যবস্থা (paywall, 403 response, JavaScript-rendered content) আটকে দিয়েছে, অথবা মূল সাইটটি বন্ধ হয়ে গেছে। দ্বিতীয়ত, লেখাটি পাওয়া গেলেও আউটপুট নিষ্কাশনের ধাপ—যেখানে লেখার ভেতর থেকে দাবি, নাম, তারিখ টেনে আনা হয়—সেই ধাপে কিছু ফাঁকা এসেছে, হয়তো সংকেত (token) সীমা, হয়তো ভুল সেটিং, হয়তো िিষ্ট শব্দখণ্ড (selector) কাজ করছে না।
এই দুই ব্যর্থতা এক নয়, এবং তাদের সমাধানও আলাদা। প্রথম ক্ষেত্রে দরকার নতুন সূত্র বা আর্কাইভ ব্যবহার। দ্বিতীয় ক্ষেত্রে দরকার টুলিং ও যাচাইয়ের কর্মপ্রবাহ ঠিক করা। কিন্তু Stage-1 দুটোই একইভাবে দেখায়—ফাঁকা। লেবেল থাকে, ভেতর থাকে না।
এখানে একটি পরিসংখ্যানগত নিয়ম প্রযোজ্য। আমি যখন কোনো মডেল তৈরি করি, তখন কাঁচা ডেটার মান যাচাইয়ের একটি ধাপ রাখি: প্রতিটি বৈশিষ্ট্যের (feature) অনুপস্থিতির হার (missingness rate)। যদি কোনো লেখা বিশ্লেষণের ৬০ শতাংশ বৈশিষ্ট্য অনুপস্থিত থাকে, তাহলে সেই লেখাকে মূলধারার ডেটাসেটে না রেখে আলাদা তালিকায় রাখা হয়। কারণ অনুপস্থিত তথ্যের দিকে তাকিয়ে নেটওয়ার্ক শিখবে না, বরং নিজের অনুমানকে সত্য বলে বিশ্বাস করা শুরু করবে।
কিছু দিন আগে আমি বাংলাদেশ-ইংল্যান্ড একটি ওয়ানডে ম্যাচের ডেটা নিয়ে কাজ করছিলাম। সেখানে কিছু ওভারের ball-by-ball তথ্য ফিডে ফাঁকা ছিল—বৃষ্টির কারণে তিন ওভার বাদ পড়েছিল এবং ফিডে সেই ওভারগুলো শূন্য হিসেবে এসেছিল। যদি আমি সেই শূন্যকে সত্যিকারের «শূন্য রান» হিসেবে ধরে নিতাম, তাহলে বোলারদের অর্থনীতির হার ভুল হতো। তাই আমি ওই ওভারগুলো আলাদা করে রাখলাম, কারণ জানতে পেরেছিলাম যে ওগুলো শূন্য নয়, অজানা। Stage-1-এর ফাঁকা ঘরগুলো একইরকম—এগুলো শূন্য নয়, অজানা।

এখানে আরেকটি জিনিস মনে রাখা দরকার। ক্রিকেট এশিয়ার প্রেক্ষাপটে লেখা বিশ্লেষণের সূত্র সাধারণত কয়েকটি নির্দিষ্ট জায়গায় খুঁজে পাওয়া যায়—আইসিসি-র ম্যাচ সেন্টার, এশিয়ান ক্রিকেট কাউন্সিলের অফিসিয়াল বিবৃতি, বা কোনো আঞ্চলিক সংবাদমাধ্যমের ম্যাচ রিপোর্ট। এই তিন ধরণের সূত্রের প্রতিটির আলাদা সময়সূচি থাকে এবং একটি অন্যটিকে কখনো কখনো ছাড়িয়ে যায়। প্রথমটি আনুষ্ঠানিক, কিন্তু ধীর; দ্বিতীয়টি সংক্ষিপ্ত, কিন্তু প্রায়ই প্রেস রিলিজনির্ভর; তৃতীয়টি দ্রুত, কিন্তু যাচাই ছাড়া। কোনো একটি সূত্রের ওপর নির্ভর করে অন্যগুলো বাদ দিলে যে ছবি তৈরি হয়, সেটি অসম্পূর্ণ। Stage-1-এ সূত্রের ঘরটি ফাঁকা থাকায় এই তিনটি সম্ভাবনার কোনোটিই যাচাই করা যাচ্ছে না।
একটা গল্প মনে পড়ে। ২০১৮ বিশ্বকাপে জার্মানি-দক্ষিণ কোরিয়া ম্যাচের অটোপসি লিখেছিলাম কোরিয়া ম্যাচ শেষ হওয়ার ১২ ঘণ্টার মধ্যে। তখন আমার হাতে ছিল পূর্ণ শট ম্যাপ, ২৬টি শটের কোথা থেকে নেওয়া, কোনটা বাঁ পায়ে, কোনটা হেডে। সেটা সম্ভব হয়েছিল কারণ কাঁচা তথ্য ফিডে প্রতিটি শটের অবস্থান, দেহের অংশ, এবং অ্যাসিস্টের ধরন ছিল। সেই তথ্যগুলো না থাকলে আমি শুধু লিখতে পারতাম «জার্মানি ডমিনেট করেছিল কিন্তু পারেনি»—যা এক ধরনের কথাবার্তা, বিশ্লেষণ নয়। আমাদের Stage-1-এর ঠিক এখানেই সমস্যা: তথ্যবিন্দু না থাকায় বিশ্লেষণ নয়, কথাবার্তাই তৈরি হবে।
বিপরীতমুখী কোণ: লেবেলটি নিজেই একটি সন্দেহের বিষয়
এখানে সবচেয়ে চতুর ফাঁদটি লুকিয়ে আছে cricket_asia লেবেলের ভেতর। সহজে মনে হতে পারে, যেহেতু একটি লেবেল আছে, অন্তত বিষয়টা জানা গেল—এশিয়ার ক্রিকেট। কিন্তু লেবেলটি যাচাইযোগ্য নয়। কোনো শ্রেণিবিন্যাস ব্যবস্থা (classifier) যখন শিরোনাম, সূত্র, এবং মূল লেখা—তিনটিই না পেয়ে শুধু ফাঁকা মানদণ্ডের ওপর একটি লেবেল দেয়, তখন সেই লেবেলটি সম্ভবত ডিফল্ট মান বা অনুমানের ওপর দাঁড়ায়, বাস্তব বিশ্লেষণের ওপর নয়।
একটি মডেল যখন অসম্পূর্ণ ইনপুট পায়, তখন তার আউটপুট দুই ধরনের হতে পারে। এক, মডেল স্বীকার করে যে সে জানে না এবং একটি অনিশ্চয়তার স্কোর দেয়। দুই, মডেল একটি লেবেল দেয় এবং সেই লেবেলের পেছনে কোনো আত্মবিশ্বাসের মাত্রা দেখায় না। Stage-1-এর ফলাফলে দ্বিতীয় ধরনটি দেখা যাচ্ছে। শুধু একটা নাম আছে, কোনো আত্মবিশ্বাস নেই, কোনো বিকল্প সম্ভাবনা নেই। এই ধরনের লেবেলকে বিশ্লেষণের ভিত্তি হিসেবে নিলে আমরা আসলে একটি অনুমানকে তথ্য বলে চালিয়ে দিচ্ছি।

পেশাদার ডেটা সাংবাদিকতায় একটি নিয়ম আছে: যে অনুমান তার নিজের আত্মবিশ্বাস প্রকাশ করে না, সেটিকে তথ্য হিসেবে গণ্য করা যায় না। কারণ তথ্যের একটি মূল্য আছে, আর অনুমানের দাম শূন্য। ফাইলটিতে শুধু একটি লেবেল আছে যার কোনো আত্মবিশ্বাসের স্কোর নেই। ফলে সেটি তথ্য নয়, অনুমান। আর অনুমানের ওপর ভিত্তি করে লেখা প্রতিবেদন শেষ পর্যন্ত একটি অনুমানের গল্পেই পরিণত হবে।
একইভাবে বলি, এই ফাইলটি যদি একটি প্রকৃত ম্যাচের ওপর ভিত্তি করে তৈরি হতো, তাহলে তথ্যবিন্দুর তালিকায় অন্তত এই ধরনের কিছু থাকত: কোন দল জিতেছে, কত রানে, কোন ওভারে ম্যাচের মোড় ঘুরেছে, কোন বোলার কত উইকেট নিয়েছে, কোন ব্যাটসম্যানের স্ট্রাইক রেট কত ছিল, পিচ কেমন ছিল, এবং এই দাবিগুলো কোন সূত্র থেকে নেওয়া হয়েছে। এই মৌলিক তথ্যগুলোই না থাকলে আমরা কী নিয়ে লিখব? লেখাটি হবে শূন্য থেকে তৈরি করা একটি গল্প, যা মূল খবরের সঙ্গে সম্পর্কহীন।
আমি ব্যক্তিগতভাবে একটি জিনিস মেনে চলি: কোনো ম্যাচের রিপোর্ট লেখার আগে অন্তত তিনটি যাচাইযোগ্য তথ্যবিন্দু থাকতে হবে। একটি হলো স্কোর, একটি হলো একটি নির্দিষ্ট ম্যাচের মোড়, আর একটি হলো সেই মোড়ের প্রক্রিয়াগত ব্যাখ্যা—কোন ওভারে কী ঘটল, কেন ঘটল। এই তিনটি না থাকলে লেখাটি ম্যাচের রিপোর্ট নয়, বরং ম্যাচের নামে একটি প্রবন্ধ।
তাহলে এই ফাইলটি দিয়ে কী করা যায়? একটি উত্তর আছে: একটি নেতিবাচক প্রতিবেদন লেখা। অর্থাৎ, মূল লেখাটি নিয়ে কিছু না লিখে, পাইপলাইনে কী ব্যর্থ হলো এবং কেন ব্যর্থ হলো, সেই সম্পর্কে লেখা। এটি কম আকর্ষণীয় শোনাতে পারে, কিন্তু এটি সাংবাদিকতার একটি বৈধ ধরন। কারণ এটি পাঠককে একটি বাস্তব সমস্যা সম্পর্কে জানায়—তথ্য সরবরাহের প্রক্রিয়া কখনো কখনো ভেঙে পড়ে, এবং সেই ভাঙন চিহ্নিত করা জরুরি। এই প্রতিবেদনটি আমি সেই দিকেই নিয়ে যাচ্ছি।
আরেকটি জিনিস। আমি আমার ডেটা টেবিলগুলো শেয়ার করি, কারণ যাচাই ছাড়া কোনো সংখ্যা টিকে থাকে না। যদি Stage-1-এর আউটপুট একটি ফাইল হিসেবে সংরক্ষণ করা হতো এবং বাইরের কেউ তা যাচাই করতে পারত, তাহলে ফাঁকা ঘরগুলো হয়তো পাইপলাইনের গভীরে থাকা সমস্যার দিকে ইশারা করত। কিন্তু ফাইলটি আমার কাছে একটি ফলাফল হিসেবে আসে, প্রক্রিয়া হিসেবে নয়। ফলে আমি যাচাই করতে পারি না যে সমস্যাটি কোথায়। এখানেই স্বচ্ছতার ঘাটতি দেখা দেয়।
সিদ্ধান্ত: পরবর্তী রাউন্ডের সংকেত
এখন প্রশ্ন হলো, এরপর কী? প্রথম কাজটি হলো ফাঁকা ফলাফলকে পাইলট আকারে গ্রহণ করা——অর্থাৎ, স্বীকার করা যে এই লেখাটি বিশ্লেষণের জন্য প্রস্তুত নয়। দ্বিতীয় কাজটি হলো পাইপলাইনের শেষে একটি যাচাইয়ের ধাপ যোগ করা: যদি তথ্যবিন্দুর সংখ্যা শূন্য হয়, প্রক্রিয়া সেখানেই থামুক, নিচের দিকে এগোবে না। এটি একটি ছোট পরিবর্তন, কিন্তু এর প্রভাব বড়। কারণ সমস্যাটি তখনই ধরা পড়ে যখন তা ঘটে, দেরিতে নয়।
তৃতীয় কাজটি হলো দুটি পথের একটি বেছে নেওয়া। হয় মূল লেখাটি খুঁজে বের করা—শিরোনাম, সূত্র, প্রথম তিন প্যারা—এবং সেই ভিত্তিতে বিশ্লেষণ করা। অথবা পাইপলাইনটি নতুন করে চালানো, যেখানে অন্তত শিরোনাম, সূত্র, ধরন, তথ্যবিন্দুর তালিকা থাকবে, এবং প্রতিটি তথ্যবিন্দুর সঙ্গে কে বলেছে এবং যাচাইযোগ্য কি না, সেই তথ্য থাকবে।
আমি অপেক্ষা করব কোনটি আসে। কারণ আমি পিছনে দৌড়াই না, আমি একটি টেবিল বানাই এবং অপেক্ষা করি যতক্ষণ না আসে।
এশিয়ান ক্রিকেটের এই ম্যাচটি এখনো আমার ডেস্কে একটি ফাইল, একটি সংবাদ নয়। সেটি কবে নিউজ হবে, সেটি নির্ভর করছে প্রথম ধাপটি কে ঠিক করবে, তার ওপর।
