
Este projeto tem como objetivo otimizar o processo de previsão de resultados de jogos da NBA, concentrando -se em modelos avançados de previsão de IA, em vez de uma extensa coleta e gerenciamento de dados. Ao contrário do meu projeto anterior, a NBA Betting, que teve como objetivo criar um conjunto de recursos abrangentes para prever jogos da NBA por meio de uma extensa coleta de dados, este projeto simplifica o processo. Enquanto a abordagem anterior se beneficiava de várias métricas derivadas do setor, o custo e a complexidade do gerenciamento da coleta de dados eram muito altos. Este projeto se concentra em um conjunto de dados essenciais, como dados de reprodução por jogo, e aproveita o aprendizado profundo e a Genai para prever os resultados do jogo.
O projeto está atualmente nos estágios iniciais de desenvolvimento, com um mecanismo básico de previsão que usa modelos simples como regressão de cume, xgboost e um MLP básico. O mecanismo de previsão é limitado a previsões básicas de pontuação do jogo e porcentagens de vitória. O aplicativo da Web fornece uma interface simples para exibir jogos para a data selecionada, juntamente com as pontuações e previsões atuais. Felizmente, isso é tão complicado quanto o projeto deve se tornar. O objetivo é integrar gradualmente a maioria das peças do atualizador de banco de dados e parte da lógica da API Games em um único mecanismo de previsão. Isso permitirá um processo mais simplificado e um mecanismo de previsão mais capaz.

O projeto é construído em torno de alguns componentes importantes:
Updater de banco de dados : Este componente é responsável por atualizar o banco de dados com os dados mais recentes do jogo da NBA. Ele busca dados da API da NBA STATS, executa operações de ETL, gera recursos, cria previsões e armazena os dados em um banco de dados SQLite. Consiste em alguns módulos:
database_update_manager.py : o módulo principal que orquestra todo o processo.schedule.py : busca o cronograma da API da NBA e atualiza o banco de dados.pbp.py : busca dados de reprodução por jogo para jogos e atualiza o banco de dados.game_states.py : analisa dados de reprodução para gerar estados de jogo e atualizar o banco de dados.prior_states.py : determina os estados finais anteriores do jogo para equipes.features.py : usa os estados anteriores do jogo final para gerar recursos para o mecanismo de previsão.predictions.py : gera previsões para jogos usando o mecanismo de previsão escolhido.API GAMES : Este componente é responsável por atualizar previsões para jogos contínuos ou concluídos e fornecer os dados para o aplicativo da Web. Ele busca dados do banco de dados, gera previsões e serve os dados para o aplicativo da Web.
games.py : busca dados do jogo do banco de dados, gerencia a atualização de previsão e a formatação de dados.api.py : define os pontos de extremidade da API.games_api.md : documentação da API.Web App : Este componente é o front -end do projeto, fornecendo uma interface simples para os usuários visualizarem jogos e previsões. É construído usando o frasco.
start_app.py : o ponto de entrada principal do aplicativo da web encontrado no diretório raiz.app.py : o módulo principal que define o aplicativo e rotas Flask.game_data_processor.py : formatos de dados do jogo da API para o aplicativo da web.templates/ : contém os modelos HTML para o aplicativo da web.static/ : contém os arquivos CSS e JavaScript para o aplicativo da web.
O fornecimento de dados : concentre -se em um número mínimo de fontes de dados que descrevem fundamentalmente o basquete. Atualmente, usamos dados de reprodução da API da NBA. No futuro, a incorporação de dados de vídeo e rastreamento seria interessante, embora eles exijam consideravelmente mais recursos e acesso.
Motor de previsão : esse é o núcleo do projeto e será o foco de desenvolvimento até o início da temporada 2024-2025. As opções atuais do mecanismo de previsão serão substituídas por um mecanismo baseado em DL e genai, permitindo diminuição da análise de dados e engenharia de recursos, além de dimensionar para prever resultados mais complexos, incluindo o desempenho individual do jogador.
Armazenamento de dados : o armazenamento de dados futuro se integrará mais perfeitamente ao mecanismo de previsão. Os requisitos de armazenamento combinarão os dados atuais baseados em SQL usados para a API e o aplicativo da Web com o armazenamento mais avançado baseado em vetores para modelos Genai baseados em RAG.
Web App : este é o front -end do projeto, exibindo os jogos para a data selecionada, juntamente com as pontuações e previsões atuais. A interface permanecerá simples enquanto a usabilidade for gradualmente melhorada. Um bate -papo Genai separado será adicionado no futuro para permitir que os usuários interajam com o mecanismo de previsão e modifiquem previsões individuais com base em suas preferências.



Atualmente, existem alguns mecanismos de previsão básicos usados para prever os resultados dos jogos da NBA. Eles servem como espaço reservado para os motores DL e Genai mais avançados que serão implementados no futuro. Os motores atuais fazem previsões antes do jogo para pontuações em casa e fora usando modelos ML. Essas previsões são usadas para calcular a porcentagem de vitórias e a margem para a equipe da casa. As previsões atualizadas (após o início do jogo) são baseadas em uma combinação da pontuação atual do jogo, o tempo restante e as previsões antes do jogo.
As métricas atuais são baseadas em previsões antes do jogo para as pontuações da equipe em casa e fora, juntamente com métricas a jusante, como porcentagem de vitórias e margem. Atualmente, esses preditores simples superam o preditor de linha de base.
No futuro, uma linha de base mais desafiadora com base na propagação de Vegas será adicionada quando os modelos DL e Genai forem implementados.

Clone o repositório da sua máquina local usando o seguinte comando:
git clone https://github.com/NBA-Betting/NBA_AI.gitNavegue até o diretório do projeto:
cd NBA_AICrie um ambiente virtual:
python -m venv venvAtive o ambiente virtual:
source venv/bin/activateInstale as dependências necessárias:
pip install -r requirements.txt Renomeie o arquivo .env.template para .env :
cp .env.template .env Abra o arquivo .env no seu editor de texto preferido e defina os valores necessários:
# .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
Substitua /path/to/your/project/root pelo caminho real para o diretório raiz do seu projeto em sua máquina local. Você pode deixar WEB_APP_SECRET_KEY comentar se você deseja que o Flask o gere automaticamente.
Por padrão, a configuração apontará para o banco de dados vazio ( data/NBA_AI_BASE.sqlite ). Se você deseja usar os dados da temporada 2023-2024 pré-populados:
Faça o download do arquivo zip do banco de dados SQLite na página de lançamento do GitHub:
v0.1 ).NBA_AI_2023_2024.zip anexado à versão.Extraia o arquivo zip:
unzip path/to/NBA_AI_2023_2024.zip -d data Atualize o arquivo config.yaml para apontar para o banco de dados extraído:
database :
path : " data/NBA_AI_2023_2024.sqlite " # <<< Set this to point to the database you want to use. Execute o aplicativo usando o arquivo start_app.py no diretório raiz:
python start_app.pyDepois que o aplicativo estiver em execução, você pode acessá -lo abrindo seu navegador da web e navegando para:
http://127.0.0.1:5000/
O Updater de banco de dados processa todos os jogos para a temporada especificada cada vez que é executada. Na primeira corrida para uma determinada temporada, quando o banco de dados está vazio, o atualizador busca e analisa dados de reprodução para cada jogo. Esta atualização inicial pode levar alguns minutos e exigir até alguns GB de memória, pois faz aproximadamente 1.500 chamadas de API para a API da NBA STATS (uma por jogo). As atualizações subsequentes serão significativamente mais rápidas, pois os dados já estão armazenados no banco de dados.
Por padrão, o aplicativo da Web é limitado às temporadas 2023-2024 e 2024-2025 para evitar a atualização excessiva das temporadas anteriores. Essas restrições podem ser ajustadas no arquivo config.yaml e não se aplicam ao executar o código diretamente. O processo de atualização suporta temporadas já em 2000-2001, se desejar.
api :
valid_seasons :
- " 2023-2024 "
- " 2024-2025 "Este é um trabalho em andamento, e há muitas melhorias a serem feitas. Se você tiver alguma sugestão ou feedback, sinta -se à vontade para abrir um problema ou procurar diretamente para mim. Vou me concentrar na criação dos mecanismos de previsão DL e Genai até o início da temporada 2024-2025, mas também estará trabalhando para melhorar o aplicativo da Web e outros componentes conforme o tempo permitir.