जब कोई केंद्रीय बैंक नीतिगत दर निर्णय जारी करता है या सांख्यिकी ब्यूरो एक नया मुद्रास्फीति प्रिंट प्रकाशित करता है, तो कच्ची घोषणा अक्सर शोर के साथ आती हैः एन्कोडिंग कलाकृतियां, आंशिक पृष्ठ, गायब क्षेत्र, या संशोधन जो पिछले महीने के विपरीत हैं। उस डेटा को भोली तरह से जैसा कि कई एग्रीगेटर करते हैं समस्या को सीधे डेवलपर को पास करते हैं।
FXMacroData में हम डेटा की गुणवत्ता को प्रथम श्रेणी के उत्पाद चिंता के रूप में मानते हैं। प्रत्येक मुद्रा से प्रत्येक संकेतक Firestore में लिखे जाने और एपीआई के माध्यम से उजागर होने से पहले एक निर्धारक सत्यापन पाइपलाइन से गुजरता है। यह पोस्ट उस पाइप लाइन परत से परत के माध्यम में चलता है उस क्षण से जब एक फ़ेचर एक कच्चे प्रतिक्रिया डाउनलोड करता है जब तक कि एक मूल्य क्वेरी करने योग्य नहीं हो जाता है।
अंत बिंदु जैसे /v1/announcements/{currency}/{indicator}. .
एक नज़र में पाइपलाइन
चरण 1: इनजेस्ट
चरण 1 सेवन: संरचित स्रोत लेने वाले
सत्यापन एकल मूल्य निकाले जाने से पहले शुरू होता है। प्रत्येक मुद्रा में एक समर्पित फ़ेचर वर्ग होता है जो एक आधिकारिक प्राथमिक स्रोत केंद्रीय बैंक वेबसाइट, राष्ट्रीय सांख्यिकी ब्यूरो या सरकारी डेटा पोर्टल को लक्षित करता है। हम जानबूझकर सेवन पथ में माध्यमिक एग्रीगेटर से बचते हैंः उनका विलंब, लाइसेंसिंग शर्तें, और सामयिक मौन संशोधन अनिश्चितता को पेश करते हैं जिन्हें हम नियंत्रित नहीं कर सकते।
Fetchers असिंक्रोनस पायथन कक्षाएं हैं जो एक async with संदर्भ प्रबंधक पैटर्न. प्रवेश पर वे एक खोलते हैं aiohttp.ClientSession यथार्थवादी User-Agent और नियंत्रित समय सीमा; बाहर निकलने पर वे साफ बंद चाहे fetch सफल या उठाया है. प्रत्येक fetcher के अंदर, पार्सिंग सख्त हैः एचटीएमएल के साथ पार्स किया जाता है lxml या BeautifulSoup कच्चे मार्कअप के खिलाफ रेजेक्स बैकअप के बजाय सटीक तत्व चयनकों का उपयोग करना, और जेएसओएन एपीआई टाइप किए गए एक्सेसर कुंजी के माध्यम से एक्सेस किए जाते हैं जो फ़ील्ड अनुपस्थित या उपधारा में नाम बदलने पर तुरंत उठते हैं।
फ़ेचर अनुबंध आवश्यक आउटपुट कुंजी
{
"date": "2026-03-31", # आईएसओ-8601 दिनांक स्ट्रिंग
"val": 3.5, # तैरना कभी स्ट्रिंग नहीं
"announcement_datetime": "..." # UTC ISO-8601 यदि उपलब्ध हो
}
आउटपुट अनुबंध को प्राप्तकर्ता सीमा पर लागू किया जाता है: कोई भी रिकॉर्ड गायब है date या val अगले चरण तक पहुंचने से पहले ही इसे त्याग दिया जाता है। announcement_datetime प्रवेश पर वैकल्पिक है लेकिन प्रकाशन-आधारित अंत बिंदुओं के लिए आवश्यक है जो एपीआई उपभोक्ताओं को घटना समय को उजागर करते हैं।
चरण 2: स्कीमा जाँच
चरण 2 स्कीमा जांचः प्रकार और पूर्णता सत्यापन
कच्चे फ़ेचर आउटपुट को एक स्कीमा सत्यापनकर्ता को सौंपा जाता है जो प्रत्येक रिकॉर्ड पर चार जांच लागू करता हैः
दिनांक प्रारूप
आईएसओ-8601 तिथि के रूप में पार्स किया गया. गैर-पार्स करने योग्य स्ट्रिंग, दो दिन की छूट खिड़की से परे भविष्य की तारीखें, और 1960 से पहले की तारीखों को सभी अस्वीकार कर दिया जाता है.
मूल्य प्रकार
val एक परिमित पायथन को मजबूर करना चाहिए float. . NaN, Inf, और गैर-संख्यात्मक स्ट्रिंग्स (जैसे "n/a", खाली स्ट्रिंग) को शून्य पर मजबूर करने के बजाय अस्वीकार कर दिया जाता है।
दोहराव का पता लगाना
यदि दो रिकॉर्ड एक ही साझा करते हैं (currency, indicator, date) कुंजी, पाइपलाइन सबसे हाल ही में निगल लिया एक रखती है और टक्कर लॉग करता है।
मुद्रानिर्देशक जोड़ी
प्रत्येक रिकॉर्ड प्रकाशित सूचक सूची के विरुद्ध मान्य किया जाता है। unemployment किसी मुद्रा के लिए जो उस सूचक को उजागर नहीं करता है, वह त्रुटि उत्पन्न करता है और बैच को रोकता है।
स्कीमा विफलताएँ संरचित क्लाउड लॉगिंग प्रविष्टियों के रूप में प्रदर्शित होती हैं severity=ERROR, stage=schema_check, और मूल फ़ेचर नाम। यह GCP कंसोल में क्रॉस-रन डिफ़रिंग को सीधा बनाता है।
चरण 3: बाहरी फ़िल्टर
चरण 3 रेंज और आउटलीयर फ़िल्टर
संरचनात्मक वैधता आवश्यक है लेकिन पर्याप्त नहीं है। 250.0 चरण 3 में इन अर्थ संबंधी त्रुटियों को पकड़ने के लिए दो पूरक जांच लागू होती है।
हार्ड रेंज सीमाएं
प्रत्येक संकेतक में एक कैटलॉग प्रविष्टि होती है जिसमें वैकल्पिक शामिल होते हैं min_val और max_val उदाहरण के लिए नीतिगत दरें, -5.0 और 30.0 वर्ष-दर-वर्ष मुद्रास्फीति -30.0 और 300.0 प्रतिशत उभरते बाजारों के वैध आंकड़ों को सीमित किए बिना अति मुद्रास्फीति के एपिसोड को समायोजित करने के लिए पर्याप्त व्यापक। इन सीमाओं के बाहर के मानों को मैन्युअल समीक्षा के इंतजार में संगरोध में रखा जाता है।
रोलिंग जेड स्कोर असामान्य का पता लगाना
फायरस्टोर में कम से कम 24 महीने के इतिहास वाले संकेतकों के लिए, पाइपलाइन 36 महीने के रोलिंग औसत और मानक विचलन की गणना करती है और किसी भी नए रिकॉर्ड को चिह्नित करती है जिसका z स्कोर अधिक है। |4.0|कठोर सीमाओं के विपरीत, z-स्कोर फ्लैग स्वचालित रूप से रिकॉर्ड को खारिज नहीं करते हैं वे एक समीक्षा प्रविष्टि बनाते हैं और एक outlier_flag: true फ़ायरस्टोर दस्तावेज़ में फ़ील्ड को फ़िल्टर करें ताकि एपीआई उपयोगकर्ता अपने स्वयं के वर्कफ़्लो में वैकल्पिक रूप से आउटलिअर-फ़्लैग किए गए रिकॉर्ड फ़िल्टर कर सकें।
क्यों 4σ बजाय 3σ?
मैक्रो संकेतक वास्तव में मोटी पूंछ प्रदर्शित करते हैं। COVID-19 आपूर्ति झटके, 2022 ऊर्जा संकट, और केंद्रीय बैंक के तेजी से पैदल यात्रा चक्रों ने सभी सांख्यिकीय रूप से दुर्लभ लेकिन वास्तविक रीडिंग का उत्पादन किया। 3σ थ्रेशोल्ड शासन परिवर्तन के दौरान वैध डेटा को संगरोध करेगा, ठीक जब सटीक रीडिंग सबसे महत्वपूर्ण हैं।
चरण 4: क्रॉस-सोर्स रिकॉनसिलिएशन
चरण 4 स्रोतों के बीच मेल
उच्च महत्व के सूचकांक के उपसमूह के लिए केंद्रीय बैंक नीतिगत दरें, मुख्य सीपीआई और बेरोजगारी पाइपलाइन क्रॉस-रेफरेंस के लिए एक द्वितीयक स्रोत बनाए रखता है। यह अनुरोध समय पर एक लाइव फ़ॉलबैक नहीं है (उपयोगकर्ताओं को दिए गए सभी डेटा विशेष रूप से फायरस्टोर से आते हैं); यह एक सेवन समय स्थिरता जांच है।
जब प्राथमिक और माध्यमिक मूल्यों के लिए एक ही (currency, indicator, date) यदि पॉलिसी दरें एक विन्यास योग्य सहिष्णुता से अधिक भिन्न होती हैं, तो एक अलर्ट उठाया जाता है और प्राथमिक मूल्य जांच के इंतजार में रखा जाता है। 5 basis points; सीपीआई के लिए यह है 0.1 percentage points. इन संकेतकों के लिए सहिष्णुता जानबूझकर संकीर्ण है क्योंकि यहां तक कि छोटी विचलन अक्सर एक पार्सिंग त्रुटि, रिपोर्टिंग देरी, या प्रारंभिक बनाम अंतिम संशोधन संघर्ष का संकेत देती है।
प्राथमिक स्रोत
- केंद्रीय बैंक की आधिकारिक विज्ञप्ति
- राष्ट्रीय सांख्यिकीय कार्यालय
- सरकारी डाटा पोर्टल
क्रॉस-रेफरेंस स्रोत
- समानांतर आधिकारिक अंत बिंदु (जैसे बीआईएस)
- संशोधन-झंडावाला ऐतिहासिक रिकॉर्ड
- पूर्व अवधि की आंतरिक स्थिरता की जाँच
प्रति रिकॉर्ड क्रॉस-चेकिंग के अलावा, पाइपलाइन भी एक मासिक निरंतरता जाँच: यदि कोई नया रिकॉर्ड से अधिक का परिवर्तन है N पिछले 12 महीनों के औसत परिवर्तन से मानक विचलन के साथ, इसे एक उम्मीदवार संशोधन संघर्ष के रूप में माना जाता है। प्रारंभिक रिलीज़ अक्सर अंतिम संशोधनों से भिन्न होती है; पाइपलाइन दोनों मूल्यों को लॉग करती है और एक revised जब किसी तिथि के मूल्य को पहली बार प्रकाशित होने के बाद अद्यतन किया जाता है।
चरण 5: व्यावसायिक दिन की अखंडता
चरण 5 व्यावसायिक दिन की अखंडता
अंतिम सत्यापन चरण एक सूक्ष्म लेकिन महत्वपूर्ण बाधा को संबोधित करता हैः हर announcement_datetime में एक वैध कार्यदिवस पर गिरना चाहिए बाजार का समय क्षेत्र सांख्यिकी ब्यूरो और केंद्रीय बैंक सप्ताहांत या सार्वजनिक अवकाश पर घोषणाएं प्रकाशित नहीं करते हैं इसलिए यदि पाइपलाइन एक टाइमस्टैम्प उत्पन्न करती है जो टोक्यो में शनिवार या सिडनी में एक बैंक अवकाश के दिन उतरती है, तो कुछ गलत हो गया है।
सत्यापनकर्ता कॉल करता है is_valid_announcement_date(currency, local_date), जो प्रति मुद्रा समय क्षेत्र परिभाषाओं और कोडबेस में बनाए गए पूर्ण अवकाश कैलेंडर के खिलाफ तिथि की जांच करता है। एपीआई द्वारा सेवा की जाने वाली प्रत्येक मुद्रा एयूडी, यूरो, जीबीपी, जेपीवाई, यूएसडी, सीएडी, CHF, एनजेडडी, और अन्य सभी का अपना स्वतंत्र समय क्षेत्र और अवकाश तालिका है। मुद्राएं अपने एफएक्स सत्र से विरासत में नहीं आती हैं; न्यूयॉर्क में शुक्रवार सिडनी में शनिवार हो सकता है, और सत्यापनकर्ता इसे ठीक से संभालता है।
कार्यदिवस सत्यापन (सरलीकृत)
डिफ़ is_valid_announcement_date_date=वैध_घोषणा_तारीख है(currency: str, local_date: date) -> bool: tz = CURRENCY_TIMEZONE[currency] # सप्ताहांत को अस्वीकार करें if local_date.weekday() >= 5: लौटना False # सार्वजनिक अवकाश को अस्वीकार करें if local_date in _build_holiday_set(currency, local_date.year): लौटना False लौटना True
जब एक गणना तिथि इस जाँच में विफल रहता है, next_valid_announcement_date उदाहरण के लिए, अगले कार्य दिवस के लिए इसे आगे बढ़ाता है, अगले सोमवार को क्रिसमस की घोषणा रोलिंग। यह सुनिश्चित करता है कि एपीआई उपभोक्ताओं को सेवा दी जाने वाली रिलीज़ कैलेंडर एंडपॉइंट में हमेशा ऐसी तारीखें होती हैं जिनका उपयोग मैन्युअल सफाई के बिना ट्रेडिंग कैलेंडर्स में सीधे किया जा सकता है। इन कार्यदिवस नियमों को एक आईसी परीक्षण सूट द्वारा भी लागू किया जाता है जो निर्माण में विफल हो जाता है यदि कैटलॉग में कोई भी मुद्रा समय क्षेत्र या छुट्टी डेटा गायब है।
रिलीज कैलेंडर की सटीकताः रिलीज़ कैलेंडर के अंत बिंदु से आगामी घटना की तारीखें जैसे कि अगली फेड बैठक या आरबीए दर निर्णय मुद्रा के बाजार समय क्षेत्र में वैध कार्य दिवसों पर गिरने की गारंटी है। /api/v1/calendar/{मुद्रा} इस मान्य कार्यक्रम को सीधे दर्शाता है।
===== निगरानी ======
निरंतर निगरानी और चेतावनी
एक बार सत्यापन पाइपलाइन को पास करना पर्याप्त नहीं है। पाइप लाइन एक कार्यक्रम पर चलती है क्लाउड टास्क और बैकफिल वर्कफ़्लो द्वारा ट्रिगर की जाती है और प्रत्येक रन संरचित टेलीमेट्रिया उत्पन्न करता है जो निगरानी परत को खिलाता है।
चरण अलर्ट
पाइपलाइन के किसी भी चरण में विफलता तुरंत छँटाई के लिए क्लाउड लॉगिंग प्रविष्टि जारी करती है।
सामग्री हैश
हर Firestore लिखते एक शामिल है content_hash अवलोकन और सतह पर चुपचाप अपस्ट्रीम संशोधनों को खोजने के लिए।
स्थिरता जाँच
पाठक पता लगाते हैं कि जब संग्रहीत डेटा अनुरोधित सीमा से N दिनों से अधिक पीछे रहता है और चुपचाप पुराने मानों को वापस करने के बजाय एक अंतर संकेत को प्रकट करता है।
जब कोई फ़ेचर डेटा वापस करने में विफल रहता है नेटवर्क टाइमआउट, अपस्ट्रीम साइट परिवर्तन, या प्रतिक्रिया संरचना परिवर्तन पाइपलाइन अनुरोध समय पर लाइव अपस्ट्रीम कॉल के लिए वापस नहीं गिरती है। इसके बजाय यह एक सत्यापन विफलता जारी करता है और एक खाली परिणाम या एक संरचित DataUnavailableError यह अस्थायी रूप से भी एपीआई परत तक पहुंचने से पुराने या आंशिक रूप से मान्य डेटा को रोकता है।
===== पुनरीक्षण हैंडलिंग ======
संशोधन और पुनरावृत्ति का निपटारा
मैक्रो डेटा संशोधन जीवन का एक तथ्य है। प्रारंभिक जीडीपी अनुमान दो और तीन बार संशोधित किए जाते हैं। पेरोल को काफी हद तक फिर से निर्धारित किया जाता है। पाइपलाइन चुपचाप ओवरराइट करने के बजाय स्पष्ट रूप से संशोधनों को संभालती हैः
- प्रथम प्रिंट भंडारण: पाइपलाइन किसी दिए गए के लिए पहला मान संग्रहीत करता है
(currency, indicator, date)के साथrevised: falseध्वज। - संशोधन का पता लगाना: यदि किसी तिथि के लिए मूल्य सूचक के संशोधन की सीमा से अधिक बदल गया है, तो बाद के सेवन के दौरान दस्तावेज़ को अद्यतन किया जाता है और
revised: trueसेट है। - इतिहास संरक्षण: मूल प्रथम-मुद्रण मूल्य एक में संरक्षित है
prior_valलेखा परीक्षा और तुलना के प्रयोजनों के लिए। - एपीआई पारदर्शिता:
revisedएपीआई प्रतिक्रियाओं में क्षेत्र उजागर होता है ताकि उपभोक्ता अनुप्रयोग प्रारंभिक और अंतिम रीडिंग को अलग कर सकें।
यह गैर-कृषि वेतन के लिए सबसे महत्वपूर्ण है, जहां प्रारंभिक प्रिंट और बाद में संशोधन हजारों नौकरियों से भिन्न हो सकते हैं। गैर-खेती पगारों का अंतिम बिंदु. .
===== इसका अर्थ API उपभोक्ताओं के लिए क्या है =======
एपीआई उपभोक्ताओं के लिए इसका क्या अर्थ है
एपीआई से पूछताछ करने वाले किसी भी व्यक्ति के लिए इस पाइपलाइन का व्यावहारिक परिणामः
- नहीं।
NaNयाnullश्रृंखला में मान अमान्य मानों वाले रिकॉर्ड को चरण 2 में बाहर रखा जाता है, बजाय इसके कि उन्हें छेद के रूप में पारित किया जाए। - तारीखें जिन पर आप भरोसा कर सकते हैं किसी उत्तर में प्रत्येक तिथि उस मुद्रा के बाजार के लिए एक कार्य दिवस पर एक वैध कैलेंडर तिथि है, जो व्यापारिक कैलेंडर्स या बैकटेस्टिंग इंजन में प्रत्यक्ष उपयोग के लिए उपयुक्त है।
- दूसरी सटीकता पर घोषणा समय टिकट जहां उपलब्ध हो,
announcement_datetimeआधिकारिक रिलीज के सटीक UTC सेकंड को दर्शाता है, मध्यरात्रि प्लेसहोल्डर नहीं। - संशोधन ध्वज
revisedयह आपको यह पहचानने में मदद करता है कि आप प्रारंभिक या अंतिम रीडिंग के साथ काम कर रहे हैं या नहीं। - सुसंगत सूचक इकाइयां दर के संकेतक लगातार दशमलव नहीं बल्कि प्रतिशत में हैं (उदाहरण के लिए
5.25नहीं0.0525), जो कि केंद्रीय बैंक की आधिकारिक वेबसाइटों पर मौजूद है।
किसी भी सूचक नीतिगत दर, प्रमुख सीपीआई, बेरोजगारी से पूछें और आपको प्राप्त उत्तर पहले ही सभी पांच चरणों को पार कर चुका है। सूचक सूची में प्रत्येक श्रृंखला को ठीक से दस्तावेज किए गए स्रोत हैं, ताकि आप किसी भी डेटा बिंदु की उत्पत्ति को स्वतंत्र रूप से सत्यापित कर सकें।
सीटीए का समापन