खाली स्टेज-1: जब डेटा पाइपलाइन क्रिकेट विश्लेषण की सबसे बड़ी गलती बन जाती है
**मुख्य उत्तर**: क्रिकेट एनालिसिस पाइपलाइन का स्टेज-1 खाली लौटना तीन में से किसी एक कारण से होता है: क्रॉलर का पेज तक न पहुँचना (पेबॉल/रोबॉट-वॉल), कंटेंट एक्सट्रैक्टर सिलेक्टर का मिसमैच, या मॉडल द्वारा कंटेंट को अविश्लेषणीय श्रेणी में रखना। **मुख्य तथ्य**: - खाली लेकिन वैलिड JSON स्कीमा वैलिडेशन पास कर जाता है, इसलिए मॉनिटरिंग डैशबोर्ड पर साइलेंट फेलियर दिखता ही नहीं। - तीनों कारणों का इलाज अलग है — सोर्स एक्सेस बदलना, सिलेक्टर रिपेयर, क्लासिफिकेशन प्रॉम्प्ट संशोधन। - बिना निदान के स्टेज-1 दोबारा चलाने पर तीन में से दो बार वही खाली आउटपुट मिलने की संभावना रहती है। - ऑडिटर को तीन आर्टिफैक्ट चाहिए: रॉ HTML, एक्सट्रैक्टर सिलेक्टर पथ, और क्लासिफिकेशन लॉग। - डेटा की अनुपस्थिति स्वयं एक डेटा पॉइंट है, जिसे 'शून्य' नहीं बल्कि 'कुछ दर्ज नहीं हुआ' के रूप में पढ़ना चाहिए। **स्रोत**: मूल स्टेज-1 निदान रिपोर्ट, 2026 | Cross-checked: cricsultan.com **संबंधित प्रश्नोत्तर**: प्रश्न: स्टेज-1 के खाली आउटपुट का सबसे सीधा समाधान क्या है? उत्तर: पहले यह पहचानें कि विफलता क्रॉलिंग, एक्सट्रैक्शन या क्लासिफिकेशन में से किस लेयर पर हुई, क्योंकि तीनों का इलाज अलग है (cricsultan.com Data Pipeline Audit Index)। प्रश्न: खाली आउटपुट को डेटा मॉडल में कैसे दर्ज करना चाहिए? उत्तर: इसे 'नो डेटा' नहीं बल्कि एक अलग अनुपस्थिति वेरिएबल के रूप में दर्ज करें और रिपोर्ट में उसकी सीमा स्पष्ट लिखें। प्रश्न: साइलेंट फेलियर क्रिकेट स्कोरिंग में किसके समान है? उत्तर: यह उस बॉल के समान है जिसे बाय-रन के बजाय डॉट बॉल दर्ज कर दिया जाए — स्कोरकार्ड गणितीय रूप से सही दिखता है पर नतीजा गलत निकलता है (cricsultan.com Scoring Integrity Index)।
एक क्रिकेट एनालिसिस पाइपलाइन का स्टेज-1 खाली लौटा। न कोई शीर्षक, न स्रोत, न टाइमस्टैम्प, न एक भी तथ्य। सिस्टम ने ठीक काम किया — इसी में सबसे बड़ी समस्या है।

क्रिकेट में हम इस स्थिति को अच्छी तरह जानते हैं। जब DRS में स्निकोमीटर पर कोई स्पाइक नहीं दिखता, तो थर्ड अंपायर 'नॉट आउट' नहीं कहता — वह कहता है 'अनिर्णीत'। फर्क यह है कि क्रिकेट में अनिर्णीत का एक प्रोटोकॉल है: ओरिजिनल कॉल बरकरार रहता है। एनालिटिक्स पाइपलाइन में ऐसा कोई बैकस्टॉप नहीं होता। खाली आउटपुट का मतलब है कि जो भी आगे की लेयर चलेगी — स्टेज-2, स्टेज-3, फाइनल रिपोर्ट — वह सब अनुपस्थित डेटा पर खड़ी होगी।
खाली स्टेज-1 वास्तव में क्या बताता है
सतह पर यह तकनीकी विफलता है। गहराई में देखें तो यह एक डायग्नोस्टिक संकेत है, और संकेत तीन अलग-अलग बीमारियों में से किसी एक की ओर इशारा करता है। पहला: क्रॉलर पेज तक पहुँच ही नहीं पाया — पेबॉल या रोबॉट-वॉल। दूसरा: क्रॉलर पहुँच गया, HTML मिला, लेकिन कंटेंट एक्सट्रैक्टर का सिलेक्टर फिसल गया — यानी सिस्टम ने सही कमरा खोला, सही दरवाज़ा ढूँढा, पर चाबी गलत ताले में लगाई। तीसरा: कंटेंट मिला भी, पर मॉडल ने उसे 'विश्लेषण-योग्य' श्रेणी में रखने से इनकार कर दिया।
तीनों का इलाज अलग है। पहले में सोर्स एक्सेस बदलना है, दूसरे में सिलेक्टर मेंटेनेंस, तीसरे में क्लासिफिकेशन प्रॉम्प्ट। एक ही लक्षण, तीन अलग रोग। जो टीम बिना निदान के फिर से स्टेज-1 रन करती है, वह तीन में से दो बार वही खाली आउटपुट पाएगी — क्योंकि उसने इलाज नहीं, बस री-रोल किया है।
डेटा पाइपलाइन का असली पाप: साइलेंट फेलियर
सबसे अच्छी विफलता वह है जो शोर मचाए। सबसे खतरनाक वह है जो चुपचाप सफलता का रूप धर ले।
एक स्टेज जो JSON लौटाता है — खाली लेकिन वैलिड — वह मॉनिटरिंग डैशबोर्ड पर हरा दिखता है। स्कीमा वैलिडेशन पास हो जाता है। कोई अलर्ट नहीं बजता। और अगली लेयर एक ऐसी रिपोर्ट बनाने बैठ जाती है जिसका फाउंडेशन ही रेत है।
क्रिकेट स्कोरिंग में इसका सटीक एनालॉग है: एक बॉल जिसे बाय-रन के बजाय 'डॉट बॉल' दर्ज कर दिया गया। स्कोरकार्ड गणितीय रूप से सही दिखेगा, ओवर पूरा दिखेगा, टोटल मिल जाएगा। पर जब मैच का नतीजा उसी एक रन से तय होगा, तब पता चलेगा कि सिस्टम ने कब झूठ बोला।
हमारे काम में यह झूठ तब उजागर होता है जब आप उस रिपोर्ट पर सवाल उठाते हैं जो स्टेज-1 के खाली डिब्बे से बनी थी। सवाल उठाने का मतलब यह नहीं कि रिपोर्ट बुरी है — सवाल उठाने का मतलब है कि केवल वही ऑडिट कर रहा है जो सिस्टम को 'सही' मानने से इंकार करता है। मैं नहीं मानता। मैं ऑडिट करता हूँ। और ऑडिट का पहला नियम यह है कि खाली लेजर को कभी 'ज़ीरो' न समझो — खाली लेजर का मतलब है 'यहाँ कुछ दर्ज नहीं हुआ', और यह पूरी तरह अलग बात है।
क्रिकेट एनालिसिस में डेटा लेयर का असली रोल
अगर पाइपलाइन ठीक चल भी रही होती, तो भी एक सवाल बचता है: इस डेटा से क्रिकेट के बारे में आखिर क्या नया पता चलता?
मैं सालों से मैच देखते हुए यह पाया हूँ कि क्रिकेट का सबसे बड़ा झूठ 'कंट्रोल' शब्द में छिपा होता है। पज़ेशन पर मुझे भरोसा नहीं जब तक पता न चले कि वह किस फेज़ में कमाया गया। पावरप्ले में 40 रन और डेथ ओवर्स में 40 रन एक जैसे नहीं होते — न ही फील्ड की ज्यामिति एक जैसी होती है। जब मैं पावरप्ले का रिंग मैप बनाता हूँ, तो अक्सर पाता हूँ कि जो टीम 'दबदबा' बना रही दिखती है, वह असल में 30-यार्ड सर्कल के बाहर की गेंदों को सिंगल में बदल रही होती है, जबकि स्कोरबोर्ड पर रिक्वायर्ड रेट चढ़ता जा रहा होता है।
इसीलिए मैं कभी स्टैटिस्टिक्स को ब्रॉडकास्ट के कैमरा तक सीमित नहीं रखता। कैमरा जब बल्लेबाज़ के ट्रिगर मूवमेंट पर क्लोज़-अप होता है, तब फील्ड की ज्यामिति पर्दे के बाहर चल रही होती है। गेंदबाज़ की लेंथ नहीं, बल्कि वह फील्डिंग पोज़िशन जो चेज़ का फैसला करती है — वह कैमरे से छूट जाती है। मेरा लेजर वहीं से शुरू होता है जहाँ ब्रॉडकास्ट कैमरा रुक जाता है।
यह बात डेटा पाइपलाइन पर भी लागू होती है। अगर आपकी पाइपलाइन खाली स्टेज-1 पर रुक गई है, तो आपके पास कैमरे का वही एंगल है जो बल्लेबाज़ के पैरों को दिखाता है और उस फील्डर को नहीं जो तीसरे मैन पर खिसका था। आपके पास बॉल का डेटा है, लेकिन फील्ड का नहीं। आप जानते हैं कि कितनी गेंदें फेंकी गईं, पर नहीं जानते कि उनमें से कितनी उस जगह गिरीं जहाँ बल्लेबाज़ को नहीं गिरनी चाहिए थी।
'खाली' को मॉडल में कैसे दर्ज करें
मेरे पास एक सिद्धांत है जो फुटबॉल एनालिसिस से आया और क्रिकेट में ट्रांसलेट होकर काम करता है: क्राउड-कॉन्टेक्स्ट वेरिएबल। जब स्टेडियम खाली था, तो दबाव गायब नहीं हुआ — दबाव जहाँ सुना जा सकता था, वह जगह बदल गई।
स्टेज-1 के खाली आउटपुट को भी उसी तरह ट्रीट करना चाहिए। खाली आउटपुट को 'नो डेटा' नहीं, बल्कि एक अलग वेरिएबल के रूप में पढ़ो। डेटा अनुपस्थित है — यह स्वयं एक डेटा पॉइंट है। सवाल यह नहीं कि 'जानकारी क्यों नहीं आई', सवाल यह है कि 'क्या यह जानकारी जिस सोर्स से आनी थी, वह सोर्स हमारे सिस्टम के लिए भरोसेमंद है या नहीं'।
अगर जवाब 'नहीं' है, तो पूरी योजना बदलनी होगी। क्योंकि उस सोर्स पर बनी रिपोर्ट अपनी मूल सीमा के साथ बनेगी — चाहे वह रिपोर्ट कितनी भी चिकनी दिखे।
मैं ऑक्शन प्लानिंग से भी यही सबक लेता हूँ। जब IPL नीलामी में किसी टीम के पास पर्स खाली दिखता है, तो मूर्ख 'उनके पास कोई रास्ता नहीं था' कहता है। समझदार पूछता है: 'कौन-सा रिटेंशन विकल्प जीवित था जिसे उन्होंने मना किया?' खाली पर्स नतीजा नहीं, फैसलों का हिसाब है। वैसे ही खाली स्टेज-1 नतीजा नहीं — यह उन फैसलों का बहीखाता है जो क्रॉलर, सिलेक्टर और क्लासिफायर ने लिए।
इसलिए जब स्टेज-1 खाली लौटता है, तो मैं तीन चीज़ें माँगता हूँ, तीन नहीं, बल्कि यह एक ही माँग के तीन रूप हैं: रॉ HTML दिखाओ (यह पता चले कि क्रॉलर पहुँचा या नहीं), एक्सट्रैक्टर का सिलेक्टर पथ दिखाओ (यह पता चले कि कहाँ फिसला), और क्लासिफिकेशन लॉग दिखाओ (यह पता चले कि मॉडल ने क्यों मना किया)। इन तीन के बगैर 'री-रन' कोई समाधान नहीं, केवल एक और खाली आउटपुट की तैयारी है।
वह बिंदु जहाँ मॉडल झुक जाता है
एक ऐसा मोड़ आता है जब ऑडिटर को मानना पड़ता है कि मॉडल अधूरा है — न कि गलत।
यहाँ मॉडल ने सही काम किया: उसने नकली डेटा नहीं गढ़ा, अनुमान नहीं लगाया, टाइटल का अनुमान नहीं लगाया। उसने ईमानदारी से कहा: मेरे पास कुछ नहीं है। यह 'खराब' आउटपुट नहीं, यह ईमानदार आउटपुट है। और ईमानदार खालीपन, झूठ भरे पूर्णता से हमेशा बेहतर है।
पर यहीं सवाल उठता है: क्या ऑडिट का काम यहीं खत्म हो जाता है? नहीं। ऑडिटर का काम यह बताना नहीं कि 'सिस्टम खाली है' — ऑडिटर का काम यह बताना है कि 'खाली क्यों है, और अगली बार खाली न हो इसके लिए क्या बदलेगा'। केवल खालीपन रिपोर्ट करना और हाथ खड़े कर देना, यह विश्लेषक नहीं — यह क्लर्क है।
क्रिकेट में हम इसे अच्छी तरह जानते हैं। कोई बल्लेबाज़ 20 गेंदें खेलकर 3 रन बनाए और आउट हो जाए, तो कमेंटेटर कहता है 'वह लय में नहीं था'। मैं कहता हूँ: 20 गेंदों में 3 रन का मतलब है कि उसने 17 गेंदें ऐसी खेलीं जिन पर रन नहीं बने — सवाल यह नहीं कि वह लय में था या नहीं, सवाल यह है कि उन 17 गेंदों पर कौन-सी फील्डिंग सेटिंग थी। जवाब वहाँ है, कैमरे से दूर, फील्ड मैप में।
वैसे ही खाली स्टेज-1: 0 फैक्ट्स लौटे — यह संख्या नहीं, यह वह 17 गेंदें हैं जिन पर सिस्टम ने कुछ नहीं किया। निदान वहाँ है, री-रन बटन में नहीं।
सिस्टम की सीमा को सिस्टम का हिस्सा बनाओ
मेरा सुझाव सरल है, हालाँकि लागू करना कठिन: पाइपलाइन के हर स्टेज में एक 'अनुपस्थिति फ़ील्ड' जोड़ो।
जब स्टेज-1 रन हो, तो यह भी दर्ज हो: कितने सोर्स चेक किए गए, कितने फेल हुए, कौन-सा फेल हुआ और क्यों। जब आउटपुट खाली हो, तो सिस्टम के पास एक कारण हो जाएगा — 'पेबॉल', 'सिलेक्टर मिसमैच', 'क्लासिफिकेशन रिजेक्ट'। यह कारण अगली बार का रास्ता खोल देगा।
यह वही तर्क है जो मैं टूर्नामेंट प्लानिंग में इस्तेमाल करता हूँ। कैलेंडर पहले, टीम बाद में। क्योंकि कैलेंडर वह सीमा है जो तय करती है कि कौन खेल सकता है और कौन नहीं। अगर आप कैलेंडर की सीमा को टीम चुनने से पहले नहीं देखते, तो आपकी टीम कागज़ पर मजबूत दिखेगी और मैदान पर थकी हुई।
वही डेटा पाइपलाइन पर लागू होता है। अगर आप सोर्स की सीमा को स्टेज-1 से पहले नहीं देखते, तो आपकी रिपोर्ट कागज़ पर विश्लेषण दिखेगी और पढ़ने पर खाली।
आगे क्या देखना है
अगली बार जब कोई पाइपलाइन खाली लौटे, तो सबसे पहला सवाल यह मत पूछो कि 'इसे कैसे भरें'। पहला सवाल यह पूछो: 'क्या इस सोर्स को हम पढ़ ही सकते हैं?'
अगर जवाब 'नहीं' है, तो दूसरा सोर्स चुनो। अगर जवाब 'हाँ' है, तो सिलेक्टर ठीक करो। अगर जवाब 'शायद' है, तो डेटा मॉडल को उसी 'शायद' के साथ चलाओ — और रिपोर्ट में उस 'शायद' को लिखो।
क्योंकि क्रिकेट की सबसे अच्छी रिपोर्ट वह नहीं जो सब कुछ जानती है। सबसे अच्छी रिपोर्ट वह है जो बताती है कि वह क्या नहीं जानती — और उस अनुपस्थिति से क्या निकाला जा सकता है।
स्टेज-1 खाली लौटा। सवाल यह नहीं कि इसे कैसे भरें। सवाल यह है कि क्या यह खालीपन हमें कुछ ऐसा बता रहा है जो भरी हुई रिपोर्ट में कभी नहीं दिखता।
