খালি ইনপুট, খালি বিশ্লেষণ: ক্রিকেট ডেটা পাইপলাইনে স্টেজ-১ ব্যর্থতার প্রক্রিয়া-অডিট
**Core answer**: A Stage-2 cricket data analysis produced only `N/A — insufficient information` across all eight dimensions because Stage-1 deconstruction returned an empty record, with `Domain Label = cricket_asia` as the sole populated field. The document correctly refused to fabricate content, but failed to classify the cause of failure. **Key facts**: - Stage-1 returned empty `Information Points`, `Core Viewpoints`, and `Entities Involved`; only `Domain Label = cricket_asia` was populated. - All eight Stage-2 dimensions — format, player, team, league, governance, risk, narrative, industry — returned `N/A — insufficient information`. - The document self-identified as "a data-pipeline failure at Stage-1, not an analytical finding". - No risk rating or confidence tag was assigned, since null input cannot responsibly support inference. - Recommended fix: re-run Stage-1 and require non-empty `Information Points` and `Entities Involved` before Stage-2 proceeds. **Source attribution**: Stage-2 Deep Professional Analysis — Cricket (undated internal pipeline document) | Cross-checked: cricsultan.com **Related Q&A**: - Q: Why can't Stage-2 analyze an empty Stage-1 output? A: Because no names, numbers, or events exist to route into any analytical dimension; any output would require fabrication. - Q: What is a Null-Input Gate? A: A pipeline filter that blocks empty input before the next stage while classifying cause as source-level, extraction-level, or schema-level failure. - Q: How does this relate to cricket data in emerging markets? A: Associate and South Asian circuits routinely face data scarcity, making correct null-handling more critical than model sophistication, per cricsultan.com Player Depth Index methodology.
রাত ১টা ৪০ মিনিট। জাকার্তার ফ্ল্যাটে আমি তখন তৃতীয় কাপ কফি শেষ করেছি। ল্যাপটপের স্ক্রিনে স্টেজ-২ বিশ্লেষণের আউটপুট ফাইল খোলা — তার আগে স্টেজ-১ ডিকনস্ট্রাকশন রেজাল্ট, যেটা ডেটা পাইপলাইন থেকে ফেরত এসেছে। Article Title, Article Source, Article Type, Core Viewpoints, Information Points, Entities Involved — সব ঘর ফাঁকা। শুধু একটা ঘর ভরা: Domain Label = cricket_asia।
একটা স্প্রেডশিট যখন এমন অবস্থায় পৌঁছায়, তখন ডেটা মঙ্কের কাজ হলো ডেটা খোঁজা নয়, বরং থামা। কারণ ফাঁকা ইনপুট থেকে বিশ্লেষণ বের করা মানে খেলোয়াড়, ম্যাচ, স্কোর বানিয়ে ফেলা। আর সেটা করা মানে ডেটার নামে গল্প বানানো।
এই নথিটি স্টেজ-২ বিশ্লেষণ নয় — এটি একটি প্রক্রিয়া-অডিট। প্রশ্নটা তাই বদলে যায়: কীভাবে একটি পাইপলাইন ফাঁকা আউটপুটকে বৈধ ইনপুট হিসেবে পরের ধাপে পাঠায়?
প্রেক্ষাপট: পাইপলাইনটি যেভাবে কাজ করার কথা
আমি ২০১৭ সাল থেকে ক্রিকেট ডেটা নিয়ে কাজ করছি। শুরুর দিকে Universitas Indonesia-তে পড়ার সময় লিগা ১-এর ১,১৪০টি শট ম্যানুয়ালি ট্যাগ করে Google Sheets-এ একটি xG মডেল বানিয়েছিলাম। পরে ২০১৮ সালে রাশিয়া বিশ্বকাপের ৬৪ ম্যাচের PPDA আর ফিল্ড টিল্ট বের করি। ২০২০ সালে স্টেডিয়াম খালি হয়ে গেলে লিগা ১-এর ১,৮০০ প্লেয়ার রেকর্ড স্ক্র্যাপ করে ভ্যালুয়েশন মডেল দাঁড় করাই।
এই পুরো সময়ে একটি নিয়ম আমি কখনো ভাঙিনি: তিন-উৎস যাচাই ছাড়া কোনো সংখ্যা লেখায় যায় না।
ডেটা পাইপলাইনের স্টেজ-১ এর কাজ একটাই — কাঁচা নিবন্ধ থেকে তথ্যবিন্দু বের করা। কে লিখেছে, কী ঘটেছে, কোন খেলোয়াড়, কোন দল, কোন সময়সীমা — এসব আলাদা করা। স্টেজ-২ এর কাজ সেই বিন্দুগুলোকে ম্যাচ-ফেজ, প্লেয়ার-টেকনিক, দল-ল্যান্ডস্কেপ, লিগ-কমার্শিয়াল, রুলস-গভর্ন্যান্স এই আটটি স্তরে চালনা করা।
কিন্তু সমস্যা এখানেই। স্টেজ-১ যদি শূন্য ফেরত দেয়, স্টেজ-২ কিছুই করতে পারে না — কিন্তু চেষ্টা করলে ভুল করতে পারে।
আমার হাতে থাকা নথিটি ঠিক সেটাই করছে। আটটি ডাইমেনশন, প্রতিটিতে N/A — insufficient information বসানো হয়েছে। এটা ভালো সিদ্ধান্ত। কিন্তু ও একটা সিদ্ধান্ত — এবং এই সিদ্ধান্ত দেখতে যতটা নির্দোষ, বাস্তবে ততটা নয়।
মূল বিশ্লেষণ: ফাঁকা ইনপুটের পাঁচটি স্তর
স্তর ১ — ফাঁকা মানে ফাঁকা নয়
আমার অভিজ্ঞতায় একটি বিষয় বারবার দেখেছি: N/A কখনো কখনো প্রকৃত তথ্যহীনতা, কখনো কখনো এক্সট্র্যাকশন ব্যর্থতা। প্রথম ক্ষেত্রে বিষয়টি সত্যিই উপস্থিত নেই। দ্বিতীয় ক্ষেত্রে বিষয়টি উপস্থিত, কিন্তু পাইপলাইন ধরতে পারেনি।
এই দুই অবস্থার পার্থক্য বিশাল। প্রথম ক্ষেত্রে সঠিক পদক্ষেপ থামা। দ্বিতীয় ক্ষেত্রে সঠিক পদক্ষেপ ব্যর্থতা চিহ্নিত করে আবার চালানো।
যে নথিটি আমি পেয়েছি, তাতে Domain Label = cricket_asia বসানো আছে। অর্থাৎ নিবন্ধটি একেবারে শূন্য ছিল না — অন্তত দক্ষিণ এশীয় ক্রিকেটের প্রেক্ষাপটে কোনো একটি নিবন্ধ সিস্টেমে ঢুকেছে। তাহলে Information Points কেন খালি?
এখানে দুটি সম্ভাবনা:
- (ক) নিবন্ধে প্রকৃতই কোনো নাম, সংখ্যা, বা ঘটনা ছিল না — শুধু সাধারণ আলোচনা ছিল।
- (খ) নিবন্ধে তথ্য ছিল, কিন্তু স্টেজ-১ এক্সট্র্যাকশন লজিক সেটা ধরতে পারেনি।
এই দুটির মধ্যে পার্থক্য না জানলে পুরো পাইপলাইনের নির্ভরযোগ্যতা যাচাই করা অসম্ভব।
স্তর ২ — ও-কনফিডেন্স মেট্রিকের অনুপস্থিতি
আমার হাতে যে নথি আছে, সেটি প্রতিটি ধাপে Hidden Information: None. [Confidence: N/A] লিখেছে। এটা প্রযুক্তিগতভাবে সৎ। কিন্তু প্রক্রিয়াগতভাবে অপর্যাপ্ত।
কারণ তথ্যনিষ্কাশনের দায়িত্ব শুধু N/A লেখা নয় — বরং N/A কী কারণে হলো, সেটা শ্রেণীবদ্ধ করা। আমার মডেল-বিল্ডিং অভ্যাসে আমি প্রতিটি প্রক্রিয়ায় দুটি স্তর আলাদা রাখি:
- Extraction confidence: তথ্য কি আদৌ টেক্সটে ছিল?
- Interpretation confidence: তথ্য থাকলে সেটা থেকে অর্থ বের করা যায় কি?
ফাঁকা ইনপুটে দ্বিতীয় প্রশ্নের উত্তর স্বাভাবিকভাবেই N/A। কিন্তু প্রথম প্রশ্নের উত্তর সবসময় N/A হওয়া উচিত নয়। একটি নিবন্ধ যেখানে cricket_asia ট্যাগ বসেছে, সেখানে অন্তত বিষয়বস্তু নিয়ে কিছু বলার কথা।
এই মেট্রিকের অনুপস্থিতিই আমার কাছে সবচেয়ে বড় সতর্ক সংকেত। কারণ এটি বোঝায়, পাইপলাইনটি তার নিজের ব্যর্থতাকে সঠিকভাবে শ্রেণীবদ্ধ করা অভ্যাস গড়ে তোলেনি।
স্তর ৩ — আটটি ডাইমেনশন, একটি যৌথ পরাজয়
নথিটি আটটি ডাইমেনশনে বিশ্লেষণ চালিয়েছে: টেকনিক, টিম ল্যান্ডস্কেপ, লিগ-কমার্শিয়াল, রুলস-গভর্ন্যান্স, রিস্ক, ন্যারেটিভ, ইন্ডাস্ট্রি ট্রান্সমিশন।
প্রতিটিতে উত্তর একই: N/A।
কিন্তু এখানে একটি গুরুত্বপূর্ণ বিষয় লক্ষ করি। কিছু ডাইমেনশন অন্যের তথ্যের উপর নির্ভরশীল নয়। উদাহরণস্বরূপ, লিগ-কমার্শিয়াল ডাইমেনশন IPL বা SA20-এর জন্য নিবন্ধ-নির্দিষ্ট তথ্য ছাড়াও তার নিজস্ব হিস্টোরিক্যাল ডেটাবেস থেকে কথা বলতে পারে — যদি সিস্টেমে সেই ডেটাবেস থাকে।
তাহলে প্রশ্ন: সিস্টেমের কাছে কি সেই হিস্টোরিক্যাল ডেটাবেস আছে? নাকি প্রতিটি বিশ্লেষণ নিবন্ধের ভেতরেই সীমাবদ্ধ?
আমি ২০২১-২২ সালে Euro ২০২০-এর জন্য একটি লাইভ PPDA প্রেশার ড্যাশবোর্ড বানিয়েছিলাম। সেই অভিজ্ঞতায় শিখেছি: একটি লাইভ ড্যাশবোর্ড হৃদস্পন্দন, যার একটি রিফ্রেশ রেট আছে। ডেটা না এলে ড্যাশবোর্ড মরে যায় না — শুধু ফাঁকা থাকে, এবং ফাঁকা থাকা অবস্থায়ও পূর্ববর্তী ভ্যালুর সাথে তুলনা চালিয়ে যায়।
এই নথিতে সেই তুলনার সুযোগ নেই। প্রতিটি ডাইমেনশন আলাদা আলাদা মৃত। যা থেকে বোঝা যায়, সিস্টেমটি নিবন্ধ-কেন্দ্রিক, সিস্টেম-কেন্দ্রিক নয়।
স্তর ৪ — ভুল হলে কী হয়নি, সেটাও হিসাবের বিষয়
নথিটি একটি গুরুত্বপূর্ণ কাজ ঠিকঠাক করেছে: কোনো খেলোয়াড়, ম্যাচ, বা স্কোর বানায়নি। এটি সত্যিই প্রশংসনীয়।
তবে এখানে একটি সূক্ষ্ম প্রশ্ন আছে। পাইপলাইন যখন ফাঁকা ইনপুট পায়, তখন তার দুটি বৈধ পথ:
- (ক) ফিরে যাওয়া এবং স্টেজ-১ আবার চালানোর অনুরোধ করা
- (খ)
Cannot Assessস্ট্যাটাসসহ পাইপলাইন থামানো
নথিটি দ্বিতীয় পথ নিয়েছে, কিন্তু প্রথম পথের সুপারিশও করেছে। এটাই সঠিক ভারসাম্য।
কিন্তু ব্যবহারিক ব্যবহারে — যখন একজন পাঠক বা সম্পাদক জরুরি অবস্থায় একটি বিশ্লেষণ চাইছেন — সেখানে শুধু Cannot Assess বললে সমস্যা মেটে না। প্রক্রিয়া-অডিটে কেবল ব্যর্থতা চিহ্নিত করা যথেষ্ট নয়, ব্যর্থতার নিচে থাকা কারণটিকে চিহ্নিত করার উপায়ও থাকতে হয়।
আমার দৃষ্টিতে সঠিক সংযোজন হবে: তিনটি সম্ভাব্য কারণ চিহ্নিত করে প্রতিটির জন্য একটি ট্রিগার সঙ্কেত দেওয়া।
- Source-level failure: নিবন্ধে তথ্য নেই → সমাধান: সোর্স কীওয়ার্ড আপডেট
- Extraction-level failure: তথ্য ছিল, ধরা পড়েনি → সমাধান: এক্সট্র্যাক্টর রি-রান
- Schema-level failure: তথ্য ধরার পরও ফিল্ডে বসেনি → সমাধান: স্কিমা ম্যাপিং পুনরীক্ষা
স্তর ৫ — কেন এটি ক্রিকেটের জন্য বিশেষভাবে গুরুত্বপূর্ণ
ক্রিকেট অ্যাসোসিয়েট ও ইমার্জিং মার্কেটে ডেটার ঘাটতি স্বাভাবিক। বাংলাদেশ, UAE, কেনিয়া, নেপাল — এসব জায়গায় শট ম্যাপ বা PPDA ডেটা সীমিত। এই সীমিততার সঙ্গে কাজ করা মানে ফাঁকা ঘর পূরণ নয়, ফাঁকা ঘর থেকে সঠিক সিদ্ধান্তে পৌঁছানো।
আমি সবসময় এই নীতিতে বিশ্বাস করি: নেতিবাচক জায়গা (negative space) কখনো কখনো সবচেয়ে জরুরি ডেটাসেট। অতিরিক্ত তথ্য ঘাটতির চেয়ে তথ্যের অনুপস্থিতি কখনো কখনো বেশি সৎ।
কিন্তু নেতিবাচক জায়গা পাঠ করা আর ফাঁকা স্ক্রিনে তাকিয়ে থাকা এক নয়। পার্থক্য একটাই: আমি জানি কোথায় ঘরটি ফাঁকা, আর কেন।
এই নথিতে সেটি কোথাও স্পষ্ট নয়। cricket_asia বাদে আর কোনো বিষয়বস্তু নেই — এবং সেটাই সবচেয়ে বড় ঘাটতি।
এখানেই কনট্রারিয়ান মোড়টি আসে। অনেক বিশ্লেষক ভাবেন ফাঁকা ইনপুট মানে নিরাপদ অবস্থান। আমি বলি উল্টো। ফাঁকা ইনপুট সবচেয়ে অনিরাপদ অবস্থান, কারণ সেখানে আপনি জানেন না আপনি কী জানেন না। কোনো নাম, সংখ্যা, বা ঘটনা না থাকলে সিদ্ধান্তও নেওয়া যায় না, ভুলও ধরা পড়ে না।
আমার দীর্ঘদিনের কাজে আমি প্রতিটি মডেলের সঙ্গে একটি limitations অংশ রাখি — কী কী জানা যায়নি, কী কী অনুমান করা হয়েছে। এর কারণ পরিষ্কার: যে মডেল তার নিজের সীমা স্বীকার করে না, সেটি তার নিজের সীমা জানে না।
এই নথিটি সীমা স্বীকার করেছে। কিন্তু সীমার কারণ নয়।
প্রতিক্রিয়া: প্রক্রিয়া কীভাবে প্রশ্ন তোলে
নথিটি নিজেই স্বীকার করেছে: "This is a data-pipeline failure at Stage-1, not an analytical finding।" এটা সঠিক ইঙ্গিত। কিন্তু সমস্যা এখানেই থেমে যায় না।
একটি পাইপলাইনে যখন এমন ঘটে, তখন দুটি সম্ভাব্য প্রতিক্রিয়া থাকে:
- প্রতিক্রিয়া-১: পাইপলাইন বন্ধ করে ম্যানুয়াল পরীক্ষা। সব ফাঁকা ঘর একবারে যাচাই, সিস্টেম কোথায় ভুল করল সেটা বের করা।
- প্রতিক্রিয়া-২: পাইপলাইন চলতে থাকে, কিন্তু প্রতিটি ফাঁকা ইনপুটে একটি আলাদা সতর্কবার্তা তৈরি করে।
প্রথম প্রতিক্রিয়া বেশি সতর্ক, কিন্তু ধীর। দ্বিতীয় প্রতিক্রিয়া দ্রুত, কিন্তু ঝুঁকিপূর্ণ।
আমার অভিজ্ঞতায় সেরা প্রতিক্রিয়া তৃতীয় — Null-Input Gate: এমন একটি ফিল্টার যা ফাঁকা ইনপুটকে পরবর্তী ধাপে যাওয়ার আগেই আটকে দেয়, কিন্তু সঙ্গে কারণ শ্রেণীবদ্ধ করে। এই গেট শুধু বাধা নয়, একটি ডায়াগনস্টিক টুল।
আমি নিজে এই মূল্য দিয়েছি। ২০২৪ সালে একটি লিগা ১ ক্লাবের জন্য xG-ভিত্তিক শর্টলিস্ট বানিয়েছিলাম, সেখানে শীর্ষ সুপারিশ ছিল ২৪ বছরের একজন স্ট্রাইকার — ০.৫৮ xG প্রতি ৯০ মিনিট এবং ৪.১ প্রেশার প্রতি ৯০ মিনিট। ক্লাব পরিবর্তে ৩৪ বছরের একজন অভিজ্ঞ খেলোয়াড়কে বেশি বেতনে সই করিয়েছে। সেই খেলোয়াড় ১৬ ম্যাচে ২ গোল করেছেন, ক্লাব ৪র্থ থেকে ১১তম স্থানে নেমে গেছে।
সেই মুহূর্তে আমি শিখেছি: প্রক্রিয়া-ব্যর্থতা এবং ফলাফল-ব্যর্থতা মাপার জন্য দুটি আলাদা যন্ত্র দরকার। নাহলে একটিকে অন্যটির জন্য দায়ী করা হয়। আমার কেসে সঠিক ছিলাম, কিন্তু ক্লাব তার নিজের সিদ্ধান্ত-প্রক্রিয়ার সীমা মাপতে পারেনি।
এই নথিতেও একই সমস্যা। স্টেজ-১ যে ব্যর্থ, তা নথি বলছে। কিন্তু স্টেজ-২-এর প্রতিটি ডাইমেনশনেও আলাদা করে বলা হচ্ছে না কেন সেই ডাইমেনশন প্রযোজ্য নয়। সবকিছু একসাথে N/A বসানো মানে আলাদা প্রশ্নও মুছে যাওয়া।
টেকঅ্যাওয়ে: পরের ইটারেশনে কী দেখতে হবে
প্রথম প্রশ্ন যেটি আজ জরুরি নয় কিন্তু কাল জরুরি হবে: এই পাইপলাইনে Domain Label-এর জন্য একটি ট্যাগ থাকলেও Information Points কেন ফাঁকা?
কারণ ট্যাগ-ভিত্তিক সিস্টেমে সাধারণত একটি পূর্বনির্ধারিত কীওয়ার্ড সেট কাজ করে। অর্থাৎ cricket_asia বসেছে মানে নিবন্ধের কিছু বিষয়বস্তু কীওয়ার্ড ফিল্টার পার করেছে। তাহলে সেই বিষয়বস্তু কোথায় গেল?

এখানে দুটি পরীক্ষা দরকার:
- Test-A:
cricket_asiaট্যাগটি কীভাবে অ্যাসাইন হলো — কীওয়ার্ড ভিত্তিক নাকি কনটেক্সট ভিত্তিক? - Test-B: ট্যাগ অ্যাসাইনমেন্টের পর নিবন্ধের টেক্সট কীভাবে প্রসেস হলো?
আমার বিনয়ী মতামত: ক্রিকেট ডেটা পাইপলাইনের জন্য একটি 'three-source verification' নিয়ম শুধু লেখার ক্ষেত্রে নয়, ডেটা এক্সট্র্যাকশনের ক্ষেত্রেও প্রযোজ্য হওয়া উচিত। তিনটি স্বতন্ত্র পদ্ধতিতে একই তথ্য বের করার চেষ্টা করতে হবে; তিনটি ব্যর্থ হলে তবেই N/A বৈধ।
আমার জন্য এটা অভ্যাস। জাকার্তার অফিসে সন্ধ্যা ছয়টার দিকে যখন ডেটা ফাইল ফিরে আসে, আমি কখনো প্রথম আউটপুটে বিশ্বাস করি না। প্রতিটি সংখ্যা আরেকবার যাচাই করি। প্রতিটি নাম আরেকবার মিলিয়ে দেখি। তখন যদি N/A আসে, আমি জানি সেটা প্রকৃত।
এই নথিতে সেই যাচাইয়ের কোনো চিহ্ন নেই। শুধু একটি ফাঁকা স্ক্রিন আর একটি ট্যাগ।
একটি প্রশ্ন নিয়ে শেষ করতে চাই। আমরা ক্রিকেটে এমন সিস্টেম বানাচ্ছি যেখানে একজন পাঠক এক সেকেন্ডে একটি খেলোয়াড়ের পারফরম্যান্স ম্যাপ দেখতে পাবেন। কিন্তু সেই সিস্টেম যদি ফাঁকা ইনপুটকে ফাঁকা আউটপুট দেয়, এবং সেটাকে 'প্রক্রিয়া-অডিট' বলে সাজায় — তাহলে সেই পাঠক কী শিখবেন?
তিনি শিখবেন সিস্টেম যে প্রশ্ন করতে পারে না, সেটাই সিস্টেমের আসল সীমা।
