Sobre o projeto

MMA Fight Prediction é um projeto de pesquisa e serviço em Python que prevê os vencedores de lutas do UFC, o método de vitória e o round de finalização. Ele combina um sistema de rating Elo, um ensemble gradient-boosted (XGBoost), um ensemble de rede neural multi-task e uma mistura de peso igual dos dois, que é o pontuador implantado. Cada candidato é julgado por uma avaliação walk-forward de janela expansiva entre 2018-2026, e o pontuador vencedor é calibrado com uma temperatura ajustada em dados retidos após a média da mistura. Pipeline reprodutível O quickstart cria um ambiente virtual, instala o pacote com extras de desenvolvimento e, em seguida, executa quatro scripts em ordem: download_data.py (dataset do Kaggle UFC em data/raw/), make_dataset.py (parquet limpo em data/processed/), build_ratings.py (ajuste e construção de ratings Elo), seguido por pytest. Um app Streamlit (streamlit run app.py) permite que o usuário escolha quaisquer dois lutadores e retorne a probabilidade de vitória com incerteza, tendências de método e round de finalização, e um detalhamento dos principais fatores contribuintes. Um objetivo documentado é a reprodutibilidade byte a byte de todo o pipeline. Engenharia de recursos e controle de vazamento Os recursos são montados a partir de blocos nomeados (base, external, trajectory, notice, context, opponent_adjusted) em src/mma/feature_blocks.py, produzindo uma tabela de aproximadamente 11 mil lutas por 87 colunas. Os recursos são construídos dentro de acumuladores cronológicos para que cada valor seja estritamente pré-luta, e um teste de invariância de truncamento é usado para verificar se nenhum recurso consegue prever o futuro. Os blocos foram medidos contra uma barra de precisão pré-registrada: um (external, cobrindo dados de carreira pré-UFC) a superou sozinho, enquanto outros são enviados apenas como parte da tabela na qual a mistura foi pontuada, ou não são enviados. O projeto documenta um vazamento de seleção encontrado em flags de ausência por corner, que foi removido de ambas as matrizes do modelo, permanecendo na tabela para fatias de avaliação. Diversas colunas são explicitamente excluídas das entradas do modelo como guardas contra vazamento, e um arquivo sidecar de proveniência registra, por linha, se ela veio da fonte primária ou secundária. Fontes de dados Os registros são montados como uma união de um espelho do Kaggle mantido (a fonte primária e reconciliada) e a publicação CSV Greco1899/scrape_ufc_stats (usada estritamente como dados, buscada via HTTPS, sem código licenciado GPL incorporado). Em lutas sobrepostas, a linha primária prevalece; a mesclagem é condicionada à concordância do vencedor entre as fontes e é fail-soft, degradando para uma construção apenas primária com um aviso. O repositório relata proveniência, verificações de integridade e guardas de regressão em torno desta mesclagem. Auto-atualização e avaliação prospectiva Um GitHub Action semanal atualiza o conjunto de dados e reconstrói os artefatos, commitando-os automaticamente. Eventos futuros do UFC são previstos e commitados no git antes de acontecerem e graduados posteriormente, proporcionando um histórico prospectivo em vez de apenas relatórios retrospectivos. Relatórios de harness para blocos de recursos rejeitados e arquivos de decisão de experimentos pré-registrados são commitados em models/walkforward/, para que resultados negativos sejam retidos. O projeto é escrito em Python (3.10+) e lançado sob a licença MIT. Documentos de design e plano de fases estão em docs/.