ফুটবলখালি পেলোড: যখন বিশ্লেষণ ব্যবস্থা মিথ্যা বলতে অস্বীকার করে
ফুটবল

খালি পেলোড: যখন বিশ্লেষণ ব্যবস্থা মিথ্যা বলতে অস্বীকার করে

**মূল উত্তর:** একটি বৈধ কিন্তু খালি বিশ্লেষণ স্কিমা ফুটবল পাইপলাইনে নীরব ব্যর্থতা তৈরি করে। তথ্যবিন্দু শূন্য হলে সঠিক পদক্ষেপ হলো হার্ড-ফেল, কল্পিত বিশ্লেষণ দিয়ে ফাঁক ভরা নয়। **মূল তথ্য:** - প্রথম ধাপে নিবন্ধের শিরোনাম, সূত্র ও তথ্যবিন্দুর তালিকা সম্পূর্ণ খালি ফেরত এসেছে; কোনো সত্তা উদ্ধার হয়নি। - ব্যর্থতার প্রধান সম্ভাব্য কারণ পেওয়াল, অনন্ত-স্ক্রল কনটেইনার বা জাভাস্ক্রিপ্ট-রেন্ডার করা মূল লেখা। - 'ফুটবল' ডোমেইন লেবেল টিকে থাকায় বোঝায় মেটাডেটা ও মূল লেখা আলাদা কোড-পথে চলে। - বিশ্লেষণ চালাতে ন্যূনতম পাঁচশ শব্দের মূল লেখা, অথবা উৎসের ঠিকানা, অথবা পাঁচ থেকে দশটি হাতে লেখা তথ্যবিন্দু প্রয়োজন। - প্রস্তাবিত সংস্কার: তিনের কম তথ্যবিন্দু ও একটির কম নামধারী সত্তায় দ্বিতীয় ধাপ বন্ধ রাখা। **সূত্র:** ইমরান উদ্দিনের পাইপলাইন অডিট লগ, বারিশাল, ১৩ আগস্ট ২০২৬। **সম্পর্কিত প্রশ্নোত্তর:** প্রশ্ন: খালি পেলোড কেন ক্র্যাশের চেয়ে বিপজ্জনক? উত্তর: ক্র্যাশ প্রকাশ্য ব্যর্থতা, কিন্তু বৈধ-খালি স্কিমা লগে সবুজ দেখিয়ে কল্পিত বিশ্লেষণে পৌঁছে দিতে পারে। প্রশ্ন: সবচেয়ে জরুরি ইনপুট কোনটি? উত্তর: নামধারী দল, খেলোয়াড় ও কোচ, কারণ এদের ছাড়া ছয়টি মাত্রার চারটি গঠনগতভাবেই অসম্ভব। প্রশ্ন: সমাধান কি আরও ডেটা সংগ্রহ? উত্তর: না, সমাধান আরও ভালো ব্যর্থতার সংকেত ও যাচাই-দরজা, যা শূন্যতাকে উৎপাদনে রূপান্তরের আগেই থামায়।

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

খালি পেলোড: যখন বিশ্লেষণ ব্যবস্থা মিথ্যা বলতে অস্বীকার করে

খালি পেলোড: যখন বিশ্লেষণ ব্যবস্থা মিথ্যা বলতে অস্বীকার করে

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