Neste verão, eu queria testar minhas habilidades de pesquisa operacional em um problema que tem me incomodado. Por que sou tão ruim no baseball diário de fantasia online?
Se você está lendo isso, provavelmente sabe do que estou falando. Presumo que você seja do tipo que queria fazer uma pequena pesquisa e talvez tenha tropeçado neste post de blog de ciência de dados procurando dicas sobre como construir sua equipe.
Alerta de spoiler: tenho más notícias para você.
Neste blog, você aprenderá por que os fantasy games online são difíceis. Você verá que a economia criada por esses provedores de jogos online é eficiente e precisará dedicar muito tempo se quiser burlar o sistema.
Se você não está familiarizado com nada do que estou falando, este parágrafo é para você. De acordo com um site de jogos de azar online que não terá nome, as apostas em esportes de fantasia online são uma indústria de $ 48 bilhões de dólares. Nos esportes de fantasia, você escolhe os jogadores que estão jogando naquele dia e vê se eles podem ganhar dinheiro com um bom desempenho. Na versão de beisebol, você escolhe um elenco de 8 jogadores de posição e 2 arremessadores; e seu salário não pode ultrapassar o teto salarial da liga. O desempenho deles naquele dia determina os pontos que você marca. Você não precisa fazer nada além de escolher os melhores jogadores naquele dia.
Simples, certo?
Entre no meu time de fantasia, o Chicago Red Line Hustlers. Sim, eu criei um logotipo para minha equipe de faz de conta. O que é isso para você?
Não somos tão bons. Estou jogando há mais ou menos um mês e meu time perdeu dinheiro. Não muito, não estou colocando um monte em risco. No entanto, não posso largar meu emprego; e eu quero saber por quê.
Para entender por que sou tão ruim nesse jogo, peguei meu kit de ferramentas de análise de decisão e tirei a poeira da velha e comprovada ferramenta de análise de portfólio — a simulação de Monte Carlo. A simulação vai me ajudar a entender o risco nas decisões de pessoal - especificamente quais dez jogadores devem ser escolhidos, dada a nossa restrição de estar abaixo do teto salarial da liga.
A simulação usará resultados da vida real para jogadores da liga principal de beisebol de 2018 até o dia anterior ao jogo que estamos simulando. Eu consigo isso obtendo estatísticas diárias da API pública do MLB.com para todos os principais jogadores ativos. (Observação: a engenharia de dados está além do escopo deste blog.)
Depois que as estatísticas são coletadas, devemos coletar os jogadores elegíveis envolvidos no jogo de fantasia que estamos interessados em simular. Eu consigo isso interagindo com a API pública de uma operadora de apostas esportivas online especializada em esportes diários de fantasia. (Observação: a engenharia de dados está além do escopo deste blog.)
Uma vez que os dados são coletados e os jogadores elegíveis são identificados, a simulação pode fazer uma pesquisa exaustiva, modificada pela propagação de novas restrições, para encontrar a escalação de melhor desempenho; ou um usuário pode definir uma escalação e avaliar seu desempenho.
O objetivo da simulação é simular os resultados potenciais de jogos de beisebol jogados por uma escalação de 2 arremessadores e 8 jogadores de posição. Esses resultados são pontuados de acordo com as regras clássicas do concurso diário de fantasia de beisebol do provedor online.
Com os dados disponíveis, poderíamos experimentar e modelar os resultados esperados de nossos dados do mundo real. Nosso objetivo é identificar a pontuação fantasia para jogadores de 8 posições (representando todas as 8 posições de campo no beisebol) e 2 arremessadores. Nosso modelo precisará abordar a posição de jogadores e arremessadores, separadamente.
Para jogadores de posição, a pontuação é altamente distorcida para os resultados de rebatidas. Para jogadores de posição, nosso foco será simular aparências de placa e os resultados potenciais correspondentes dessa aparência de placa.
Conseguimos isso simulando os resultados do ataque e nos preocupamos apenas com as aparências da placa, pois essa é a única chance de um jogador impactar o jogo de fantasia. O fluxograma de nossa simulação mostra como nosso modelo procederá para identificar as aparências das placas e seus possíveis resultados.
Os jogadores podem ter uma variedade de aparições em cada jogo, e isso está principalmente associado à ordem em que aparecem na escalação. Um jogador de posição na parte de trás da escalação tende a ter menos aparições de placa do que um jogador na parte superior (início) da escalação. Nosso modelo tem acesso ao número de aparições em plate que um jogador teve historicamente, mas não tem acesso à ordem na escalação em que apareceu naquele jogo. Essa é a primeira limitação para a precisão de nossa simulação. Eu modelo aparências de placa com base em resultados históricos, não em expectativas reais com base na ordem de rebatidas para o próximo jogo.
Para realizar nossa simulação, amostramos empiricamente as aparências de placas de jogos anteriores usando um gerador de números aleatórios para selecionar as aparências de placas de uma lista ordenada de aparições de placas históricas para cada jogador de posição.
Para cada jogo simulado, é realizada essa seleção aleatória de aparências de placa. Essa metodologia é muito precisa para igualar os resultados esperados para cada jogador.
Uma vez simuladas as aparências das placas, agora precisamos identificar o modelo para determinar quais resultados são possíveis e alavancar uma probabilidade aninhada para selecionar um resultado que represente o que se espera que o jogador alcance. A primeira parada em nossa probabilidade aninhada ou encadeada é a amostragem da capacidade do jogador de transformar uma aparência de placa em um resultado ofensivo. Essa proporção pode ser aplicada às aparências dos pratos da simulação para identificar quantos resultados o jogador alcançou naquele jogo.
Com o número de resultados determinado, podemos usar os resultados históricos alcançados pelo jogador para simular do que esse jogador é capaz. Por exemplo, se estivéssemos simulando um jogador conhecido por acertar muitos home runs — veríamos muitos home runs em suas performances históricas.
A simulação irá amostrar empiricamente a partir da distribuição de resultados que o jogador alcançou no passado. O resultado pode então ser pontuado de acordo com o cartão de pontuação do provedor de fantasia online e posteriormente processado para simular resultados adicionais com base no estado do jogo quando esse resultado ocorreu.
O estado do jogo quando ocorre um resultado também afetará três resultados finais que nossa simulação deve modelar. Esses três resultados dependem de eventos que ocorreram antes, durante e depois que o resultado foi alcançado pelo jogador. A camada final do nosso fluxograma mostra corridas, bases roubadas e RBIs sendo possíveis apenas quando certos resultados ocorrem.
Além disso, o valor desses três eventos também é impactado pelo resultado. Por exemplo, se um jogador acertar um home run, ele receberá pelo menos um RBI e uma corrida. Eles também não têm chance de conseguir uma base roubada por causa desse resultado. Modelamos todas essas regras em uma camada adicional de probabilidade aninhada e amostramos empiricamente com base em desempenhos anteriores do jogador para simular os estados do jogo em que o jogador estava atuando. Um exemplo de um desses resultados está abaixo, execuções de modelagem.
Com todas as nossas funções definidas, agora posso simular jogos ilimitados para qualquer jogador com desempenhos de amostra suficientes para extrair. O resultado funciona muito bem. Aqui está um exemplo de Trea Turner simulado do LA Dodgers.
Com os rebatedores contabilizados na simulação, o modelo também deve ser capaz de simular os resultados do arremessador. A pontuação fantasia para arremessadores considera apenas os resultados das aparições no plate e os resultados dos rebatedores que eles enfrentam.
Para arremessadores, o modelo começa com a simulação de entradas lançadas. Isso é importante, pois minha própria pesquisa recente sugere que os arremessadores que lançam mais entradas tendem a ter um desempenho melhor (reduzindo corridas, rebatidas e melhorando a porcentagem de vitórias à medida que o jogo avança, etc.)
Essa observação é intuitiva, pois é menos provável que um gerente puxe um arremessador forte tendo uma boa saída do jogo em vez de outro arremessador.
Para realizar nossa simulação, nós amostramos empiricamente entradas lançadas de jogos anteriores usando um gerador de números aleatórios para selecionar entradas lançadas de uma lista ordenada de entradas históricas lançadas para cada arremessador. O código para conseguir isso é como a função de aparência de placas para batedores. Para cada jogo simulado, essa seleção aleatória é realizada. Essa metodologia é muito precisa para corresponder as entradas esperadas lançadas para cada arremessador.
Os resultados do arremessador são avaliados com base no número de entradas lançadas. Como indiquei anteriormente, faço isso porque o desempenho do jogador é diferente, dependendo da profundidade do jogo em que o arremessador joga.
Existem três resultados com os quais nos preocupamos - eles são o número de vitórias, corridas, rebatidas, caminhadas e eliminações lançadas. Eu simulo esses resultados por amostragem empírica para subconjuntos de dados do arremessador correspondentes aos turnos arremessados. Esse processo garante que respeitamos o desempenho do arremessador em função das entradas lançadas.
Os resultados finais são uma verificação do status da simulação após cada execução. O modelo pontua jogos completos sempre que o arremessador simulado arremessa 9 entradas completas. Ele credita ao arremessador um fechamento completo do jogo sempre que o arremessador simulado lançar 9 entradas completas e não tiver corridas ganhas. Por fim, o modelo credita o arremessador simulado com um no-hitter se a simulação produzir um arremessador que completou todas as 9 entradas e não obteve rebatidas.
Com todas as nossas funções de arremesso definidas, agora posso simular jogos ilimitados para qualquer arremessador com dados de amostra suficientes. Os dados simulados são muito semelhantes aos desempenhos reais da MLB para os arremessadores que modelamos.
O objetivo deste projeto foi avaliar o risco na seleção de escalações para um jogo diário de fantasy sports. Para conseguir isso, criei uma função que preenche aleatoriamente uma escalação válida gastando até o teto salarial de $ 50.000 indicado nas regras clássicas de um fornecedor de fantasia de beisebol. Fiz isso 500 vezes para criar 500 escalações aleatórias e válidas para simular. Cada jogador da escalação válida passou por sua própria simulação - simulando 50 jogos de desempenho cada. Os resultados não foram surpreendentes.
Parece que os resultados do beisebol têm muita aleatoriedade.
Aqui está um resumo do desempenho simulado das 10 melhores escalações aleatórias escolhidas pela proporção de pontos para variabilidade - como uma Razão de Sharpe em finanças. Essas formações representam as opções menos arriscadas, mas mais eficazes.
Aqui está o mesmo visual, mas selecionando as escalações válidas de maior pontuação.
Essas imagens mostram alinhamentos válidos com forte desempenho, mas todos esses alinhamentos têm valores esperados muito próximos uns dos outros. Por meio dessa ampla pesquisa, não conseguimos encontrar uma escalação que superasse significativamente todas as outras escalações. Nossa simulação foi bem-sucedida em mostrar que os jogos de fantasia de beisebol, sem análises e avaliações detalhadas e significativas dos jogadores, são simplesmente jogos de azar.
Em conclusão, a simulação é uma ferramenta muito útil para entender os riscos associados à tomada de decisão. Ele foi aplicado com sucesso em uma ampla gama de aplicações, incluindo design de produtos, treinamento de pilotos, pesquisa de filas e agora esportes de fantasia.
Os resultados desta simulação específica mostram que o beisebol no curto prazo é muito aleatório. Qualquer jogador, em um determinado dia, pode ter um jogo bom ou ruim. As partidas podem entrar em jogo e as situações do jogo podem influenciar a decisão de um jogador.
Alcançamos a capacidade de modelar um sistema muito complexo e obter resultados muito reais. A longo prazo, espero que minha simulação gere jogadores com desempenho semelhante ao de seus colegas da vida real.
As simulações podem ser melhoradas. Por exemplo, não temos dados sobre o estado do jogo para nenhum resultado de desempenho. Simulamos com base em conquistas anteriores, mas um modelo aprimorado também simularia o estado do jogo. Este seria um próximo passo importante, pois as decisões de outros jogadores e o estado do jogo afetariam a capacidade do jogador de gerar resultados. Além disso, o modelo não pode simular partidas - um tópico crucial em esportes de fantasia. Os rebatedores têm um desempenho diferente dependendo do arremessador que enfrentam ou do time que estão jogando.
No final, espero instalar novas melhorias que considerem as partidas e fazer melhorias incrementais em minha capacidade de avaliar o desempenho do jogador a curto prazo.
Publicado também aqui .