প্রকল্প সম্পর্কে

MMA Fight Prediction হলো একটি Python রিসার্চ এবং সার্ভিং প্রজেক্ট যা UFC ফাইট বিজয়ী, জয়ের পদ্ধতি এবং ফিনিশ রাউন্ডের পূর্বাভাস দেয়। এটি একটি Elo রেটিং সিস্টেম, একটি গ্রেডিয়েন্ট-বুস্টেড (XGBoost) এনসেম্বল, একটি মাল্টি-টাস্ক নিউরাল-নেটওয়ার্ক এনসেম্বল এবং এই দুটির একটি সমান-ওজনের ব্লেন্ডের সমন্বয়ে গঠিত যা ডেপ্লয়ড স্কোরার হিসেবে ব্যবহৃত হয়। প্রতিটি প্রার্থীকে ২০১৮-২০২৬ জুড়ে এক্সপ্যান্ডিং-উইন্ডো ওয়াক-ফরোয়ার্ড মূল্যায়নের মাধ্যমে বিচার করা হয় এবং বিজয়ী স্কোরারটিকে ব্লেন্ড অ্যাভারেজের পর হোল্ড-আউট ডেটার উপর ফিট করা একটি টেম্পারেচারের মাধ্যমে ক্যালিব্রেট করা হয়। পুনরুৎপাদনযোগ্য পাইপলাইন কুইকস্টার্টটি একটি ভার্চুয়াল এনভায়রনমেন্ট তৈরি করে, ডেভ এক্সট্রাস সহ প্যাকেজটি ইনস্টল করে, তারপর পর্যায়ক্রমে চারটি স্ক্রিপ্ট চালায়: download_data.py (Kaggle UFC ডেটাসেট data/raw/ ফোল্ডারে), make_dataset.py (পরিষ্কার parquet ফাইল data/processed/ ফোল্ডারে), build_ratings.py (Elo রেটিং টিউন এবং বিল্ড করা), এবং সবশেষে pytest। একটি Streamlit অ্যাপ (streamlit run app.py) ব্যবহারকারীকে যেকোনো দুজন ফাইটার বেছে নিতে দেয় এবং অনিশ্চয়তাসহ জয়ের সম্ভাবনা, পদ্ধতি এবং ফিনিশ-রাউন্ড প্রবণতা এবং শীর্ষ অবদানকারী কারণগুলোর একটি বিশ্লেষণ প্রদান করে। পুরো পাইপলাইনের বাইট-ফর-বাইট পুনরুৎপাদনযোগ্যতা নিশ্চিত করা এই প্রজেক্টের একটি লক্ষ্য। ফিচার ইঞ্জিনিয়ারিং এবং লিক কন্ট্রোল ফিচারগুলো src/mma/feature_blocks.py-এর নামযুক্ত ব্লক (base, external, trajectory, notice, context, opponent_adjusted) থেকে একত্রিত করা হয়, যা প্রায় ১১ হাজার ফাইট এবং ৮৭টি কলামের একটি টেবিল তৈরি করে। ফিচারগুলো ক্রোনোলজিক্যাল অ্যাকুমুলেটরের ভেতরে তৈরি করা হয় যাতে প্রতিটি মান কঠোরভাবে ফাইট-পূর্ব হয় এবং কোনো ফিচার যাতে ভবিষ্যৎ দেখতে না পারে তা যাচাই করতে একটি ট্রাঙ্কেশন-ইনভ্যারিয়েন্স টেস্ট ব্যবহার করা হয়। ব্লকগুলোকে একটি প্রি-রেজিস্টার্ড অ্যাকুরেসি বারের বিপরীতে পরিমাপ করা হয়েছিল: একটি (external, যা প্রি-UFC ক্যারিয়ার ডেটা কভার করে) একা এটি পাস করেছে, বাকিগুলো শুধুমাত্র সেই টেবিলের অংশ হিসেবে সরবরাহ করা হয় যার উপর ব্লেন্ডটি স্কোর করা হয়েছিল, অথবা একেবারেই সরবরাহ করা হয় না। প্রজেক্টটি পার-কর্নার মিসিংনেস ফ্ল্যাগ-এ পাওয়া একটি সিলেকশন লিক নথিভুক্ত করেছে, যা মডেল ম্যাট্রিক্স থেকে সরিয়ে ফেলা হয়েছে তবে মূল্যায়ন স্লাইসের জন্য টেবিলে রাখা হয়েছে। লিক গার্ড হিসেবে বেশ কিছু কলাম স্পষ্টভাবে মডেল ইনপুট থেকে বাদ দেওয়া হয়েছে এবং একটি প্রোভেন্যান্স সাইডকার ফাইল প্রতিটি রো-এর জন্য রেকর্ড করে যে এটি প্রাথমিক নাকি মাধ্যমিক উৎস থেকে এসেছে। ডেটা উৎস রেকর্ডগুলো একটি মেইনটেইনড Kaggle মিরর (প্রাথমিক, রিকনসাইলড উৎস) এবং Greco1899/scrape_ufc_stats CSV পাবলিকেশনের (শুধুমাত্র ডেটা হিসেবে ব্যবহৃত, HTTPS-এর মাধ্যমে সংগৃহীত, কোনো GPL-লাইসেন্সড কোড ভেন্ডর করা হয়নি) সমন্বয়ে তৈরি করা হয়। ওভারল্যাপিং ফাইটের ক্ষেত্রে প্রাথমিক রো-টি প্রাধান্য পায়; এই মার্জটি উৎসগুলোর মধ্যে বিজয়ীর সম্মতির উপর ভিত্তি করে নিয়ন্ত্রিত হয় এবং এটি ফেইল-সফট, যা সতর্কবার্তার সাথে প্রাথমিক-শুধুমাত্র বিল্ডে নেমে আসে। রিপোজিটরি এই মার্জের প্রোভেন্যান্স, ইন্টিগ্রিটি চেক এবং রিগ্রেশন গার্ড রিপোর্ট করে। সেলফ-আপডেটিং এবং প্রসপেক্টিভ মূল্যায়ন একটি সাপ্তাহিক GitHub Action ডেটাসেটটি রিফ্রেশ করে এবং আর্টিফ্যাক্টগুলো পুনরায় বিল্ড করে স্বয়ংক্রিয়ভাবে কমিট করে। আসন্ন UFC ইভেন্টগুলোর পূর্বাভাস দেওয়া হয় এবং সেগুলো ঘটার আগেই গিট-এ কমিট করা হয় এবং পরে গ্রেড করা হয়, যা শুধুমাত্র রেট্রোস্পেক্টিভ রিপোর্টিংয়ের পরিবর্তে একটি প্রসপেক্টিভ ট্র্যাক রেকর্ড প্রদান করে। প্রত্যাখ্যাত ফিচার ব্লক এবং প্রি-রেজিস্টার্ড এক্সপেরিমেন্ট ডিসিশন ফাইলের হারনেস রিপোর্টগুলো models/walkforward/ এর অধীনে কমিট করা হয়, যাতে নেতিবাচক ফলাফলগুলো সংরক্ষিত থাকে। প্রজেক্টটি Python (3.10+) এ লেখা এবং MIT লাইসেন্সের অধীনে রিলিজ করা হয়েছে। ডিজাইন এবং ফেজ-প্ল্যান ডকুমেন্টগুলো docs/ ফোল্ডারে রয়েছে।