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



সংশ্লিষ্ট খেলোয়াড়গণ
