
يهدف هذا المشروع إلى تبسيط عملية التنبؤ بنتائج لعبة الدوري الاميركي للمحترفين من خلال التركيز على نماذج التنبؤ المتقدمة من الذكاء الاصطناعي بدلاً من جمع البيانات وإدارتها الواسعة. على عكس مشروعي السابق ، NBA Betting ، الذي كان يهدف إلى إنشاء ميزة شاملة للتنبؤ بألعاب الدوري الاميركي للمحترفين من خلال جمع البيانات الشاملة ، يبسط هذا المشروع العملية. في حين استفاد النهج السابق من مختلف المقاييس المستمدة من الصناعة ، كانت تكلفة وتعقيد إدارة جمع البيانات مرتفعة للغاية. يركز هذا المشروع على مجموعة بيانات أساسية ، مثل بيانات اللعب ، ويستفيد من التعلم العميق و Genai للتنبؤ بنتائج اللعبة.
يقع المشروع حاليًا في المراحل المبكرة من التطوير ، مع محرك تنبؤ أساسي يستخدم نماذج بسيطة مثل انحدار Ridge و XgBoost و MLP أساسي. يقتصر محرك التنبؤ على تنبؤات نقاط اللعبة الأساسية والفوز بالنسب المئوية. يوفر تطبيق الويب واجهة بسيطة لعرض الألعاب للتاريخ المحدد إلى جانب الدرجات والتنبؤات الحالية. لحسن الحظ ، هذا معقد كما يجب أن يصبح المشروع. الهدف من ذلك هو دمج معظم أجزاء محدث قاعدة البيانات وجزء من منطق API Games في محرك تنبؤ واحد. سيسمح ذلك بإجراء عملية أكثر تبسيطًا ومحرك تنبؤ أكثر قدرة.

تم بناء المشروع حول عدد قليل من المكونات الرئيسية:
محدث قاعدة البيانات : هذا المكون مسؤول عن تحديث قاعدة البيانات مع أحدث بيانات لعبة الدوري الاميركي للمحترفين. إنه يجلب بيانات من واجهة برمجة تطبيقات NBA Stats ، ويقوم بإجراء عمليات ETL ، وإنشاء الميزات ، وإنشاء تنبؤات ، ويخزن البيانات في قاعدة بيانات SQLite. يتكون من عدد قليل من الوحدات النمطية:
database_update_manager.py : الوحدة الرئيسية التي تنشر العملية بأكملها.schedule.py : يجلب الجدول الزمني من واجهة برمجة تطبيقات NBA ويقوم بتحديث قاعدة البيانات.pbp.py : يجلب بيانات اللعب عن طريق الألعاب للألعاب وتحديث قاعدة البيانات.game_states.py : Parses play-by-play لإنشاء حالات اللعبة وتحديث قاعدة البيانات.prior_states.py : يحدد حالات اللعبة النهائية السابقة للفرق.features.py : يستخدم حالات اللعبة النهائية السابقة لإنشاء ميزات لمحرك التنبؤ.predictions.py .API Games : هذا المكون مسؤول عن تحديث التنبؤات للألعاب المستمرة أو المكتملة وتوفير البيانات لتطبيق الويب. إنه يجلب البيانات من قاعدة البيانات ، ويقوم بإنشاء تنبؤات ، ويخدم البيانات إلى تطبيق الويب.
games.py : يجلب بيانات اللعبة من قاعدة البيانات ، ويدير تحديث التنبؤ وتنسيق البيانات.api.py : يحدد نقاط نهاية API.games_api.md : وثائق API.تطبيق الويب : هذا المكون هو الطرف الأمامي للمشروع ، حيث يوفر واجهة بسيطة للمستخدمين لعرض الألعاب والتنبؤات. تم بناؤه باستخدام قارورة.
start_app.py : نقطة الدخول الرئيسية لتطبيق الويب الموجود في دليل الجذر.app.py : الوحدة الرئيسية التي تحدد تطبيق Flask والطرق.game_data_processor.py : تنسيقات بيانات اللعبة من واجهة برمجة التطبيقات لتطبيق الويب.templates/ : يحتوي على قوالب HTML لتطبيق الويب.static/ : يحتوي على ملفات CSS و JavaScript لتطبيق الويب.
مصادر البيانات : ركز على الحد الأدنى من مصادر البيانات التي تصف كرة السلة بشكل أساسي. حاليًا ، نستخدم بيانات اللعب من قبل NBA API. في المستقبل ، سيكون دمج بيانات الفيديو والتتبع أمرًا مثيرًا للاهتمام ، على الرغم من أن هذه تتطلب المزيد من الموارد والوصول.
محرك التنبؤ : هذا هو جوهر المشروع وسيكون محور التطوير حتى يبدأ موسم 2024-2025. سيتم استبدال خيارات محرك التنبؤ الحالية بمحرك قائم على DL و GENAI ، مما يسمح بانخفاض تحليل البيانات وهندسة الميزات مع التحجيم للتنبؤ بنتائج أكثر تعقيدًا ، بما في ذلك أداء اللاعب الفردي.
تخزين البيانات : سيتم دمج تخزين البيانات المستقبلي بسلاسة مع محرك التنبؤ. ستجمع متطلبات التخزين بين البيانات الحالية المستندة إلى SQL المستخدمة في API و Web App مع سعة تخزين أكثر تقدماً في المتجهات لنماذج GENAI المستندة إلى RAG.
تطبيق الويب : هذه هي الواجهة الأمامية للمشروع ، حيث تعرض الألعاب للتاريخ المحدد مع الدرجات والتنبؤات الحالية. ستبقى الواجهة بسيطة بينما يتم تحسين قابلية الاستخدام تدريجياً. سيتم إضافة دردشة Genai منفصلة في المستقبل للسماح للمستخدمين بالتفاعل مع محرك التنبؤ وتعديل التنبؤات الفردية بناءً على تفضيلاتهم.



حاليًا ، هناك بعض محركات التنبؤ الأساسية المستخدمة للتنبؤ بنتائج ألعاب الدوري الاميركي للمحترفين. هذه بمثابة أدوات نائبة لمحركات DL و Genai الأكثر تقدماً التي سيتم تنفيذها في المستقبل. تجعل المحركات الحالية تنبؤات مسبقة باللعب للعشرات المنزلية والبعيدة باستخدام نماذج ML. ثم يتم استخدام هذه التنبؤات لحساب نسبة الفوز والهامش للفريق المضيف. تعتمد تنبؤات التحديث (بعد بدء اللعبة) على مزيج من درجة اللعبة الحالية ، والوقت المتبقي ، والتنبؤات قبل اللعبة.
تعتمد المقاييس الحالية على تنبؤات ما قبل اللعبة لعشرات الفريق المنزلية والبعيدة ، إلى جانب مقاييس المصب مثل نسبة الفوز والهامش. هذه المتنبئات البسيطة تتفوق حاليًا على تنبؤ خط الأساس.
في المستقبل ، ستتم إضافة خط أساس أكثر تحديًا على أساس انتشار Vegas عند تنفيذ نماذج DL و Genai.

استنساخ المستودع إلى جهازك المحلي باستخدام الأمر التالي:
git clone https://github.com/NBA-Betting/NBA_AI.gitانتقل إلى دليل المشروع:
cd NBA_AIإنشاء بيئة افتراضية:
python -m venv venvتنشيط البيئة الافتراضية:
source venv/bin/activateتثبيت التبعيات المطلوبة:
pip install -r requirements.txt أعد تسمية ملف .env.template إلى .env :
cp .env.template .env افتح ملف .env في محرر النصوص المفضل لديك وقم بتعيين القيم اللازمة:
# .env
# Flask secret key (Optional, Flask will generate one if not set)
# WEB_APP_SECRET_KEY=your_generated_secret_key
# Project root path (Mandatory)
PROJECT_ROOT=/path/to/your/project/root
استبدل /path/to/your/project/root بالمسار الفعلي للدليل الجذر لمشروعك على جهازك المحلي. يمكنك ترك WEB_APP_SECRET_KEY علقًا إذا كنت تريد إنشاء Flask تلقائيًا.
بشكل افتراضي ، سيشير التكوين إلى قاعدة البيانات الفارغة ( data/NBA_AI_BASE.sqlite ). إذا كنت ترغب في استخدام بيانات موسم 2023-2024 المكتظة مسبقًا:
قم بتنزيل ملف SQLite Database zip من صفحة إصدار Github:
v0.1 ).NBA_AI_2023_2024.zip المرفق بالإصدار.استخراج ملف الرمز البريدي:
unzip path/to/NBA_AI_2023_2024.zip -d data قم بتحديث ملف config.yaml للإشارة إلى قاعدة البيانات المستخرجة:
database :
path : " data/NBA_AI_2023_2024.sqlite " # <<< Set this to point to the database you want to use. قم بتشغيل التطبيق باستخدام ملف start_app.py في دليل الجذر:
python start_app.pyبمجرد تشغيل التطبيق ، يمكنك الوصول إليه عن طريق فتح متصفح الويب الخاص بك والتنقل إلى:
http://127.0.0.1:5000/
تقوم محديثات قاعدة البيانات بمعالجة جميع الألعاب للموسم المحدد في كل مرة يتم تشغيلها. في الجولة الأولى لموسم معين ، عندما تكون قاعدة البيانات فارغة ، فإن Updater يجلب وتوصيف بيانات اللعب لكل لعبة. قد يستغرق هذا التحديث الأولي عدة دقائق ويتطلب ما يصل إلى بضع جيجابايت من الذاكرة ، حيث إنه يقوم بحوالي 1500 مكالمة API إلى API Stats NBA (واحد لكل لعبة). ستكون التحديثات اللاحقة أسرع بكثير نظرًا لأن البيانات مخزنة بالفعل في قاعدة البيانات.
بشكل افتراضي ، يقتصر تطبيق الويب على مواسم 2023-2024 و 2024-2025 لمنع التحديث المفرط للمواسم الماضية. يمكن ضبط هذه القيود في ملف config.yaml ولا تنطبق عند تشغيل الرمز مباشرة. تدعم عملية التحديث المواسم التي تعود إلى 2000-2001 ، إذا رغبت في ذلك.
api :
valid_seasons :
- " 2023-2024 "
- " 2024-2025 "هذا عمل مستمر ، وهناك العديد من التحسينات التي يتعين إجراؤها. إذا كان لديك أي اقتراحات أو ملاحظات ، فلا تتردد في فتح مشكلة أو التواصل معي مباشرة. سوف أركز على إنشاء محركات التنبؤ DL و Genai حتى يبدأ موسم 2024-2025 ، لكنني سأعمل أيضًا على تحسين تطبيق الويب والمكونات الأخرى كما يسمح الوقت.