इस प्रोजेक्ट के बारे में

MMA Fight Prediction एक Python रिसर्च और सर्विंग प्रोजेक्ट है जो UFC फाइट विजेताओं, जीत के तरीके और फिनिश राउंड का पूर्वानुमान लगाता है। यह एक Elo रेटिंग सिस्टम, एक ग्रेडिएंट-बूस्टेड (XGBoost) एन्सेम्बल, एक मल्टी-टास्क न्यूरल-नेटवर्क एन्सेम्बल, और इन दोनों के समान-भार मिश्रण (equal-weight blend) को जोड़ता है जो कि तैनात स्कोरर है। प्रत्येक उम्मीदवार का मूल्यांकन 2018-2026 के दौरान एक्सपैंडिंग-विंडो वॉक-फॉरवर्ड इवैल्यूएशन द्वारा किया जाता है, और जीतने वाले स्कोरर को ब्लेंड एवरेज के बाद होल्ड-आउट डेटा पर फिट किए गए टेम्परेचर के साथ कैलिब्रेट किया जाता है। पुनरुत्पादनीय पाइपलाइन (Reproducible pipeline) क्विकस्टार्ट एक वर्चुअल एनवायरनमेंट बनाता है, देव एक्स्ट्रा के साथ पैकेज इंस्टॉल करता है, और फिर क्रम से चार स्क्रिप्ट चलाता है: download_data.py (Kaggle UFC डेटासेट को data/raw/ में), make_dataset.py (क्लीन parquet को data/processed/ में), build_ratings.py (Elo रेटिंग्स को ट्यून और बिल्ड करना), और उसके बाद pytest। एक Streamlit ऐप (streamlit run app.py) उपयोगकर्ता को किन्हीं दो फाइटर्स को चुनने की अनुमति देता है और अनिश्चितता के साथ जीत की संभावना, तरीके और फिनिश-राउंड प्रवृत्तियों, और शीर्ष योगदान देने वाले कारकों का विवरण प्रदान करता है। एक प्रलेखित लक्ष्य पूरी पाइपलाइन की बाइट-दर-बाइट पुनरुत्पादकता (reproducibility) है। फीचर इंजीनियरिंग और लीक कंट्रोल फीचर्स को src/mma/feature_blocks.py में नामित ब्लॉक्स (base, external, trajectory, notice, context, opponent_adjusted) से एकत्र किया जाता है, जिससे लगभग 11 हजार फाइट्स और 87 कॉलम की एक टेबल बनती है। फीचर्स को क्रोनोलॉजिकल एक्यूम्युलेटर्स के अंदर बनाया जाता है ताकि प्रत्येक वैल्यू सख्ती से फाइट से पहले की हो, और यह जांचने के लिए कि कोई फीचर भविष्य को नहीं देख सकता, एक ट्रंकेशन-इनवेरिएंस टेस्ट का उपयोग किया जाता है। ब्लॉक्स को एक प्री-रजिस्टर्ड एक्यूरेसी बार के विरुद्ध मापा गया था: एक (external, जिसमें pre-UFC करियर डेटा शामिल है) ने इसे अकेले ही पार कर लिया, जबकि अन्य केवल उस टेबल के हिस्से के रूप में भेजे जाते हैं जिस पर ब्लेंड को स्कोर किया गया था, या बिल्कुल नहीं भेजे जाते। प्रोजेक्ट एक सिलेक्शन लीक का दस्तावेजीकरण करता है जो पर-कॉर्नर मिसिंगनेस फ्लैग्स में पाया गया था, जिसे मूल्यांकन स्लाइस के लिए टेबल में रखते हुए दोनों मॉडल मैट्रिसेस से हटा दिया गया था। लीक गार्ड्स के रूप में कई कॉलम को मॉडल इनपुट से स्पष्ट रूप से बाहर रखा गया है, और एक प्रोवेनेंस साइडकार फाइल प्रति पंक्ति रिकॉर्ड करती है कि वह प्राथमिक या माध्यमिक स्रोत से आई है। डेटा स्रोत रिकॉर्ड्स को एक मेंटेन किए गए Kaggle मिरर (प्राथमिक, समाधान स्रोत) और Greco1899/scrape_ufc_stats CSV प्रकाशन (सख्ती से डेटा के रूप में उपयोग किया गया, HTTPS के माध्यम से प्राप्त, बिना किसी GPL-लाइसेंस कोड के) के संघ (union) के रूप में एकत्र किया जाता है। ओवरलैपिंग फाइट्स पर प्राथमिक पंक्ति जीतती है; मर्ज स्रोतों के बीच विजेता सहमति पर आधारित है और फेल-सॉफ्ट है, जो चेतावनी के साथ केवल प्राथमिक-बिल्ड पर डाउनग्रेड हो जाता है। रिपॉजिटरी इस मर्ज के आसपास प्रोवेनेंस, इंटीग्रिटी चेक और रिग्रेशन गार्ड्स की रिपोर्ट करती है। स्व-अपडेटिंग और प्रोस्पेक्टिव इवैल्यूएशन एक साप्ताहिक GitHub Action डेटासेट को रिफ्रेश करता है और आर्टिफैक्ट्स को फिर से बनाता है, और उन्हें स्वचालित रूप से कमिट करता है। आगामी UFC इवेंट्स की भविष्यवाणी की जाती है और उनके होने से पहले उन्हें git में कमिट किया जाता है और बाद में ग्रेड किया जाता है, जिससे केवल रेट्रोस्पेक्टिव रिपोर्टिंग के बजाय एक प्रोस्पेक्टिव ट्रैक रिकॉर्ड मिलता है। रिजेक्टेड फीचर ब्लॉक्स और प्री-रजिस्टर्ड एक्सपेरिमेंट डिसीजन फाइल्स के लिए हार्नेस रिपोर्ट्स को models/walkforward/ के तहत कमिट किया जाता है, ताकि नकारात्मक परिणाम सुरक्षित रहें। यह प्रोजेक्ट Python (3.10+) में लिखा गया है और MIT लाइसेंस के तहत जारी किया गया है। डिज़ाइन और फेज-प्लान दस्तावेज़ docs/ के अंतर्गत उपलब्ध हैं।