O blog da AWS

Como o Bundesliga Match Facts xGoals utiliza o Amazon SageMaker Clarify

 

Por Nick McCarthy, Cientista de Dados na AWS
Luuk Figdor, Cientista de Dados na AWS e
Gabriel Anzer, Cientista de Dados na AWS

 

Um dos anúncios mais empolgantes do AWS re:Invent 2020 foi um novo recurso do Amazon SageMaker criado especificamente para ajudar a detectar vieses em modelos de machine learning (ML) e explicar previsões de modelos: Amazon SageMaker Clarify. No mundo atual, cujas decisões são feitas por algoritmos de ML em grande escala, é cada vez mais importante que grandes organizações possam explicar aos seus clientes qual a razão por de determinada decisão baseada em um modelo de ML. Essencialmente, isso pode ser visto como um afastamento direto dos modelos subjacentes de caixas fechadas em que é possível observar as entradas e saídas, mas não o funcionamento interno. Isso não apenas abre caminhos para análises adicionais, de modo a iterar e melhorar ainda mais as configurações do modelo, mas também fornece níveis inéditos de análise de previsão de modelo aos clientes.
Um caso de uso particularmente interessante do Clarify é o Bundesliga Match Facts powered by AWS, uma ferramenta da Deutsche Fußball Liga (DFL) desenvolvida utilizando serviços AWS. A ferramenta tem o objetivo de descobrir insights sobre as previsões do modelo xGoals. O Bundesliga Match Facts oferece uma experiência de torcedor mais envolvente durante partidas de futebol para torcedores da Bundesliga em todo o mundo. Ele fornece aos espectadores informações sobre como: a dificuldade de um chute, a performance de seus jogadores favoritos e pode ilustrar as tendências ofensivas e defensivas de cada equipe.

Com o Clarify, a DFL pode explicar interativamente quais são as principais features utilizadas para determinar o que levou o modelo de ML a prever um valor específico de xGoals. Um xGoal (abreviação de Gols Esperados) é a probabilidade calculada de um jogador marcar um gol ao chutar de qualquer posição no campo. Conhecer as atribuições de features e explicar seus resultados ajuda na depuração do modelo, o que resulta em previsões de maior qualidade e de menor bias. Talvez o mais importante seja que esse nível adicional de transparência ajuda a criar confiança nos modelos de ML, abrindo inúmeras oportunidades de cooperação e inovação no futuro. Uma melhor interpretação de resultados leva a uma melhor adoção. Sem mais delongas, vamos mergulhar no caso!

 

Bundesliga Match Facts

O Bundesliga Match Facts powered by AWS fornece estatísticas avançadas em tempo real e insights detalhados, gerados ao vivo a partir de dados oficiais das partidas da Bundesliga. Essas estatísticas são entregues aos telespectadores por meio de emissoras nacionais e internacionais, bem como plataformas, canais e aplicações da DFL. Com isso, mais de 500 milhões de torcedores da Bundesliga em todo o mundo obtêm insights mais avançados sobre os jogadores, as equipes e a liga, e beneficiam-se de uma experiência mais personalizada e da geração de estatísticas.

Com o Bundesliga Match Fact xGoals, a DFL pode avaliar a probabilidade de um jogador marcar um gol ao chutar de qualquer posição no campo. A probabilidade de marcar é calculada em tempo real para cada chute a fim de dar aos espectadores um insight sobre a dificuldade do chute e a probabilidade de um gol. Quanto maior o valor de xGoals (com todos os valores situados entre 0 e 1), maior a probabilidade de um gol. Nesta postagem, examinamos mais de perto a métrica xGoals, mergulhando no funcionamento interno do modelo de ML para determinar por que ele faz certas previsões, tanto para chutes individuais quanto para dados de temporadas inteiras de futebol.

 

Preparando e examinando os dados de treinamento

O modelo de ML do Bundesliga xGoals vai além dos modelos anteriores do xGoals, pois combina dados de eventos de chute a gol com dados de alta precisão obtidos por uma tecnologia de rastreamento avançada com taxa de quadros de 25 Hz. Com a posição da bola e do jogador em tempo real, um modelo personalizado pode determinar uma série de recursos adicionais, como: o ângulo para o gol; a distância de um jogador até o gol; a velocidade de um jogador; o número de defensores na linha de chute e a cobertura do goleiro, para citar apenas alguns. Usamos a área sob a curva ROC (AUC) como a métrica durante o processo de treinamento, treinado o modelo xGoals usando mais de 40.000 chutes a gol registrados na Bundesliga desde 2017, usando o algoritmo Amazon SageMaker XGBoost. Para obter mais informações sobre o processo de treinamento do xGoals com o Amazon SageMaker Python SDK e a otimização de hiperparâmetros XGBoost, consulte The tech behind the Bundesliga Match Facts xGoals: How machine learning is driving data-driven insights in soccer (A tecnologia por trás do Bundesliga Match Facts xGoals: como o machine learning está gerando insights orientados por dados no futebol).
Quando olhamos para algumas das linhas do conjunto de dados de treinamento original, temos uma ideia dos tipos de features com os quais estamos lidando: uma mistura de valores binários, categóricos e contínuos em uma grande lista de tentativas de chutes a gol. A captura de tela a seguir mostra 8 das 17 features usadas tanto para treinamento como processamento de explicabilidade.

 

SageMaker Clarify

O SageMaker tem sido fundamental para permitir que cientistas de dados novatos e acadêmicos com experiência em ML preparem conjuntos de dados, construam e treinem modelos personalizados e os implantem em produção em uma ampla variedade de setores, incluindo saúde, mídia e entretenimento e finanças.

Como a maioria das ferramentas de ML, faltava uma maneira de explorar os resultados desses modelos mais afundo ou de investigar conjuntos de dados de treinamento para possíveis vieses. Tudo isso mudou com o anúncio do Clarify, que oferece a capacidade de detectar vieses e implementar explicabilidade de modelo de maneira repetível e escalável.

A falta de explicabilidade muitas vezes pode criar uma barreira para as organizações adotarem ML. As abordagens teóricas para superar essa falta de explicabilidade do modelo amadureceram inegavelmente nos últimos anos, com um framework de destaque se tornando uma ferramenta crucial no mundo da IA explicável: SHAP (Explicações Aditivas ShapleY). Embora uma explicação completa deste método esteja além do escopo deste blogpost, em seu núcleo, o SHAP constrói explicações do modelo fazendo a seguinte pergunta: “Como uma previsão muda quando um determinada feature é removida do modelo?”

Os valores SHAP são a resposta para essa pergunta, pois calculam diretamente a contribuição de uma feature em uma previsão em termos de magnitude e direção. Com suas raízes na teoria dos jogos de coalizão, os valores SHAP visam caracterizar valores de features de uma amostra de dados como jogadores em uma coalizão e, posteriormente, nos diz como distribuir de forma justa o pagamento (a previsão) entre as diferentes features. Uma característica elegante do framework SHAP é que ele funciona independentemente do modelo e é altamente escalável, funcionando tanto em modelos lineares simples assim como em redes neurais profundas com potencialmente centenas de camadas.

Explicando o comportamento do modelo Bundesliga xGoals com o Clarify

Agora que apresentamos nosso conjunto de dados e o conceito de explicabilidade de ML, podemos inicializar o Clarify processor, que calcula os valores SHAP desejados. Todos os argumentos neste processador são genéricos e estão relacionados apenas ao seu ambiente AWS atual e aos recursos da AWS à sua disposição.

Primeiro, vamos definir um trabalho de processamento do Clarify, juntamente com a sessão do SageMaker, uma AWS Identity and Access Management (IAM) role e um bucket do Amazon Simple Storage Service (Amazon S3) com o seguinte código:

from sagemaker import clarify
import os 

session = sagemaker.Session()
role = sagemaker.get_execution_role()
bucket = session.default_bucket ()
region = session.boto_region_name

prefix = ‘sagemaker/dfl-tracking-data-xgb’ 

clarify_processor = clarify.SageMakerClarifyProcessor(role=role,
                                instance_count=1, 
                                instance_type=’ml.c5.xlarge’, 
                                sagemaker_session=session, 
                                max_runtime_in_seconds=1200*30, 
                                volume_size_in_gb=100*10)

Com isso, podemos salvar o arquivo de treinamento CSV no bucket S3 e então especificar a rota para os dados de treinamento e uma rota para os resultados o resultado do trabalho do Clarify da seguinte maneira:

DATA_LAKE_OBSERVED_BUCKET = ‘sts-openmatchdatalake-dev’
DATA_PREFIX = ‘sagemaker_input’
MODEL_TYPE = ‘observed’
TRAIN_TARGET_FINAL = ‘train-clarify-dfl-job.csv’

csv_train_data_s3_path = os.path.join(
                “s3://”, 
                DATA_LAKE_OBSERVED_BUCKET, 
                DATA_PREFIX, 
                MODEL_TYPE, 
                TRAIN_TARGET_FINAL
                )

RESULT_FILE_NAME = ‘dfl-clarify-explainability-results’ 

analysis_result_path = ‘s3://{}/{}/{}’.format(bucket, prefix, RESULT_FILE_NAME)

Agora que instanciamos o processador Clarify e definimos o conjunto de dados de treinamento de explicabilidade, podemos começar a especificar a configuração experimental específica do nosso problema:

BASELINE = [-1, 61.91, 25.88, 16.80, 15.52, 3.41, 2.63, 1,
     -1, 1, 2.0, 3.0, 2.0, 0.0, 12.50, 0.46, 0.68]

COLUMN_HEADERS = [“target”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”,
             “9”, “10”, “11”, “12”, “13”, “14”, “15”, “16”, “17”]

NBR_SAMPLES = 1000
AGG_METHOD = “mean_abs”
TARGET_NAME = ‘target’
MODEL_NAME = ‘sagemaker-xgboost-201014-0704-0010-a28f221a’

Os parâmetros a seguir são devem ser observados, como visto no trecho de código anterior:

  • BASELINE: Essas baselines são cruciais para calcular as explicações do modelo. Há uma baseline para cada feature. Para nossos experimentos, usamos a média em features numéricas contínuas e o modo em features categóricas. Para obter mais informações, consulte SHAP baselines para explicabilidade.
  • NBR_SAMPLES: O número de amostras a serem usadas no algoritmo SHAP.
  • AGG_METHOD: O método de agregação utilizado para calcular valores SHAP globais, que no nosso caso é a média de valores SHAP absolutos para todas as instâncias.
  • TARGET_NAME: O nome da feature de interesse que o modelo XGBoost está tentando prever.
  • MODEL_NAME: O nome do endpoint do modelo SageMaker XGBoost treinado (anteriormente).

Passamos diretamente os parâmetros para as instâncias clarify.ModelConfig, clarify.SHAPConfig e clarify.DataConfig. Executar o código a inicia o processamento:

model_config = clarify.ModelConfig(model_name=MODEL_NAME, 
                         instance_type=’ml.c5.xlarge’, 
                         instance_count=1, 
                            accept_type=’text/csv’)

shap_config = clarify.SHAPConfig(baseline=[BASELINE], 
                       num_samples=NBR_SAMPLES, 
                       agg_method=AGG_METHOD, 
                       use_logit=False, 
                       save_local_shap_values=True)

explainability_data_config = clarify.DataConfig(
     s3_data_input_path=csv_train_data_s3_path,
     s3_output_path=analysis_result_path, 
     label=TARGET_NAME, 
     headers=COLUMN_HEADERS, 
     dataset_type=’text/csv’)

clarify_processor.run_explainability(data_config=explainability_data_config, 
                         model_config=model_config,
                         explainability_config=shap_config)

Explicações globais

Depois de executarmos a análise de explicabilidade do Clarify no conjunto de treinamento xGoals, podemos visualizar de forma rápida e fácil os valores globais de SHAP e sua distribuição para cada feature, o que permite mapear como mudanças positivas ou negativas no valor de uma feature afetam a previsão final. Usamos a biblioteca de código aberto SHAP para plotar os valores SHAP que são calculados dentro de um processamento.
O gráfico a seguir é um exemplo de uma explicação global, que permite entender o modelo e suas combinações de features, agregadas em vários data points. As features AngleToGoal, DistanceToGoal e DistanceToGoalClosest desempenham as funções mais importantes na previsão da feature de interesse, ou seja, se um gol é marcado ou não.

 

 

Esse tipo de gráfico pode ir ainda mais longe, fornecendo mais contexto do que o gráfico de barras, um maior nível de insight sobre a distribuição do valor SHAP para cada feature (permitindo mapear como as mudanças no valor de um recurso específico afetam a previsão final), e as relações positivas e negativas dos preditores com a feature de interesse. Cada ponto de dados nos gráficos a seguir representa uma única tentativa de gol.

 

 

Conforme sugerido pelo eixo vertical no lado direito do gráfico, o ponto de dados vermelho indica um valor maior da feature e o ponto de dados azul indica um valor menor. O impacto positivo e negativo no valor de previsão de gol é mostrado no eixo horizontal, derivado dos valores de SHAP. A partir disso é possível inferir logicamente, por exemplo, que um aumento no ângulo para o gol leva a contribuições positivas sob a previsão final (previsão de que um gol será marcado).

Vale a pena notar que nas regiões com uma dispersão vertical aumentada de resultados, simplesmente temos uma maior concentração de pontos de dados sobrepostos. Isso nos dá uma noção da distribuição dos valores de Shapley por feature.

As features são ordenadas de acordo com sua importância, de cima para baixo. Quando comparamos esse gráfico nas três temporadas (2017 – 2018, 2018 – 2019 e 2019 – 2020), vemos pouca ou nenhuma mudança na importância de uma feature e na distribuição do seu valor SHAP associado. O mesmo acontece em todos os clubes individuais da competição da Bundesliga, com apenas alguns clubes se desviando da norma.

Embora nenhum dos nossos eventos de jogo tenham sido penalidades (todos com um valor de feature =1), esta possibilidade ainda deve ser incluída no trabalho de processamento do Clarify pois também foi incluída no conjunto dados de treinamento do modelo XGBoost. Devemos ter consistência entre os conjuntos de features utilizado no treinamento de modelo e no processamento do Clarify.

Dependência de features no xGoals

Podemos investigar ainda mais fundo e observar os gráficos de dependência de features SHAP, possivelmente a interpretação global mais simples. Basicamente, selecionamos uma feature e plotamos o valor da feature no eixo horizontal e o valor SHAP correspondente no eixo vertical. O gráfico a seguir mostra esta relação para as features mais importantes:

  • AngleToGoal: Ângulos pequenos (< 25) diminuem a probabilidade de haver um gol, enquanto ângulos maiores a aumentam.
  • DistanceToGoal: Há uma queda acentuada (imitando uma função logaritmicamente decrescente) na probabilidade de um gol ocorrer à medida que você se afasta do centro do gol. Depois de uma certa distância isso não tem impacto no valor SHAP; em circunstâncias iguais, um chute de 20 metros tem a mesma probabilidade de entrar que um de 40 metros. Essa observação talvez possa ser explicada pelo fato de que jogadores dentro dessa faixa só vão chutar por algum motivo especial que aumentaria as chances de gol; seja o goleiro estar fora de sua linha ou não haver defensores por perto para fechar o jogador e bloquear o chute.
  • DistanceToGoalClosest: Sem surpresas, existe uma grande correlação aqui com o DistanceToGoal, mas se trata de uma relação linear: o valor SHAP diminui à medida que a distância até o ponto mais próximo do gol aumenta.

 

 

Quando olhamos mais de perto das nossas variáveis (menos influentes) categóricas, vemos que, nas mesmas circunstâncias, uma cabeçada invariavelmente diminui a probabilidade de um gol, enquanto que um chute livre a aumenta. Dada a dispersão vertical em torno do valor 0 SHAP para FootShot=Yes e FreeKick=No, não há nada a concluir sobre seus efeitos nas previsões de gols.

 

Interação do recurso xGoals

Podemos melhorar os gráficos de dependência destacando a interação entre diferentes features; o efeito adicional, depois de levarmos em conta os efeitos de features individuais. Usamos o índice de interação Shapley da teoria dos jogos para calcular os valores de interação SHAP dentre todas as features para obter uma matriz por feature com dimensões F X F, sendo F o número de features. Com esse índice de interação, podemos colorir o gráfico de dependência de features SHAP com a interação mais forte.

Por exemplo, suponha que queremos saber como as variáveis DistanceToGoal e PressureSum interagem, e o efeito que elas têm no valor SHAP para DistanceToGoal. PressureSum é calculado simplesmente ao somar todas as pressões individuais dos jogadores adversários no jogador que vai chutar. Podemos ver uma relação negativa entre a DistanceToGoal e a variável gol, com a probabilidade de um gol aumentando à medida que nos aproximamos do gol. Sem surpresa, existe uma forte relação inversa entre DistanceToGoal e PressureSum para jogos com uma alta previsão de gols; à medida que o primeiro diminui, o último aumenta.

Quase todos os gols marcados perto do gol possuem um ângulo maior que 45 graus. À medida que você se afasta do gol, o ângulo diminui. Isso faz sentido; com que frequência você vê alguém marcar um gol da linha lateral quando está a 40 metros de distância?

 

 

Tendo em mente que, com base nos resultados anteriores, um ângulo alto em relação ao gol aumenta a probabilidade de se marcar um gol, podemos olhar para o valor SHAP do número de defensores e determinar que esse é apenas o caso quando apenas um ou dois defensores estão perto do atacante.

 

 

Olhando para o gráfico de resumo global inicial com atenção, é possível visualizar alguma incerteza (representada pelo agrupamento denso em torno da marca de valor SHAP zero) para as features PressureSum e PressureMax. Podemos usar gráficos de interação para averiguar esses valores mais profundamente e tentar identificar o que está causando isso.

Após a inspeção, vemos que mesmo para as duas features mais importantes, têm um efeito mínimo na alteração do valor SHAP da variável PressureSum. A principal vantagem aqui é que quando há pouca ou nenhuma pressão sobre um jogador, uma baixa DistanceToGoal aumenta a probabilidade de um gol, enquanto o inverso é verdadeiro para quando há muita pressão perto do gol: o jogador tem menos probabilidade de marcar. Esses efeitos são novamente invertidos para o AngleToGoal: à medida que a pressão aumenta, vemos que o aumento do AngleToGoal diminui o valor SHAP do PressureSum. É reconfortante ver que os gráficos de interação de recursos confirmam as ideias preconcebidas do jogo e quantificam as muitas forças em jogo.

 

 

Sem surpresa, poucas cabeçadas com um ângulo menor que 25 resultaram em gols. Mais interessante, no entanto, ao comparar os efeitos que um cabeçada ou FootShot tem sobre a probabilidade de um gol ser marcado, vemos que para qualquer ângulo na faixa de 25 a 75, a cabeçada a reduz. Isso pode ser simplificado da seguinte forma: se o jogador favorito tiver com a bola nos pés em um ângulo amplo em relação ao gol, é mais provável que ele marque o gol do que se a bola estiver voando pelo ar.

Por outro lado, para ângulos maiores que 25, um jogador se movendo com uma velocidade lenta em direção ao gol reduz a probabilidade de um gol em comparação com um jogador se movendo com uma velocidade maior. Como podemos ver em ambos os gráficos, existe uma divisão perceptível entre o impacto que o AngleToGoal < 25 e o AngleToGoal > 25 têm na previsão do gol. Assim, podemos a ver o valor do uso de valores SHAP para analisar os dados das temporadas, pois identificamos rapidamente uma tendência universal nos dados.

 

Explicações locais

A análise até agora se concentrou apenas nos resultados de explicabilidade para todo o conjunto de dados(explicações globais). Agora vamos explorar algumas partidas particularmente interessantes e seus eventos de gol, observando o que é chamado de explicação local.

Quando olhamos para trás, para um dos jogos mais interessantes da temporada 2019–2020, em que o Bayer 04 Leverkusen venceu o Borussia Dortmund em um emocionante 4 a 3, em 8 de fevereiro de 2020, podemos observar os efeitos variados que cada feature tem nos valores do xGoals (o valor de saída do modelo que vemos no eixo horizontal). Vemos como, começando de baixo e subindo, as features começam a ter um impacto cada vez maior na previsão final, com alguns casos extremos mostrando como o AngleToGoal, a DistanceToGoalClosest e a DistanceToGoal realmente tem a palavra final na previsão de probabilidade do modelo XGBoost. As linhas tracejadas são aqueles eventos de jogo que ocorreu um gol.

 

 

Quando olhamos para o sexto gol do jogo, marcado por Leon Bailey, que o modelo previu com relativa facilidade, podemos ver que muitos dos valores de feature (principais) estão excedendo sua média e contribuindo para aumentar a probabilidade de um gol, conforme refletido no valor relativamente alto de xGoals de 0,36 no seguinte gráfico de força:

 

 

O valor base que vemos é o valor médio de xGoals em todas as tentativas de chute na Bundesliga nas últimas três temporadas que é 0,0871! O modelo XGBoost inicia a previsão nessa linha de base, com forças positivas e negativas que aumentam ou diminuem a previsão. No gráfico, o valor SHAP de um recurso serve como uma seta que empurra para aumentar (valor positivo) ou diminuir (valor negativo) o valor da previsão. No caso anterior, nenhuma das features é capaz de neutralizar o alto AngleToGoal (56.37), o número baixo de AmountOfDefenders (1.0) e a pequena DistanceToGoal (6.63) para este chute no gol. Todas as descrições qualitativas (como pequenas, baixas e grandes) estão relacionadas aos valores médios no conjunto de dados para cada feature respectiva.

No outro extremo, existem certos gols que o modelo XGBoost não pode prever e os valores SHAP não conseguem explicar. Eleito o melhor gol da temporada 2019–2020 por 22% dos telespectadores da Bundesliga, o chute espantoso de Emre Can teve uma chance quase zero (3%) de entrar e, levando em consideração sua grande distância do gol (aproximadamente 30 metros) e em um ângulo tão plano (11,55 graus), podemos ver o porquê. As únicas features que trabalharam para aumentar as chances de marcar eram o fato de que havia muito pouca pressão sobre ele naquele momento, com apenas dois jogadores nas imediações capazes de pará-lo. Mas isso claramente não foi suficiente para parar Can. Como sempre foi o caso no futebol, todos aspectos de um gol podem ser perfeitos demais para que qualquer humano, muito menos um modelo avançado de ML, possa prever o resultado.

 

 

Vamos dar uma olhada no gol de Can em ação, trazido à vida por uma animação 2D simplesmente usando os dados de rastreamento da posição dos jogadores no momento do gol.

 

 

 

Conclusão: implicações para a Bundesliga Match Facts

As principais implicações para a Bundesliga Match Facts powered by AWS daqui em diante são duplas. Os resultados experimentais nesta postagem demonstram que:

  • Começamos a automatizar o processo de exploração e análise de dados de previsão de gols em escala de maneiras inovadoras
  • Oferecemos uma plataforma de explicabilidade e detecção de viés em modelos que pode ser aprimorada para a captura adicional de padrões de chutes

Em cenários do mundo real tão complexos quanto um jogo de futebol, sistemas convencionais ou baseados em regras específicas de lógica começam a ruir após implementação, falhando em oferecer qualquer tipo de previsão de evento de jogo, muito menos uma explicação detalhada de como foi feita a previsão. Quando aplicamos o Clarify, podemos aprimorar os modelos de previsão de gols e contextualizar eventos de partidas de futebol unicamente.
Assim como a tecnologia para capturar dados de futebol avançou dramaticamente nos últimos anos, o mesmo acontece com os modelos que podemos utilizar para modelar essa crescente montanha de dados. À medida que a complexidade, profundidade e riqueza do conjunto de dados da Bundesliga Match Facts continua a crescer, a equipe está continuamente explorando ideias novas e empolgantes para fatos adicionais sobre partidas e como ajustar nossos melhores modelos em produção à luz de resultados de explicabilidade e insights. Isso, em conjunto com atualizações e melhorias inevitáveis e contínuas do Clarify, abre uma variedade de caminhos para o futuro, tanto para os xGoals quanto para o Bundesliga Match Facts.

“O Amazon SageMaker Clarify traz o poder dos algoritmos de IA explicáveis de última geração para a ponta dos dedos dos desenvolvedores em questão de minutos e se integra perfeitamente ao restante da plataforma digital do Bundesliga Match Facts – Uma parte fundamental de nossa estratégia de longo prazo de padronizar os fluxos de trabalho de ML no Amazon SageMaker”, relata Gabriel Anzer, cientista de dados na Sportec Solutions (STS), uma das principais organizações parceiras da Bundesliga Match Facts desenvolvida pela AWS.

Esta solução permite que os jogadores de futebol fantasiem uma vantagem em sua liga local, fornece aos gerentes uma avaliação objetiva da performance atual e futura (e prevista) de um jogador ou serve como um iniciador de conversa para especialistas notáveis em futebol na identificação de tendências ofensivas e defensivas para jogadores e equipes. Agora você pode apreciar o valor tangível criado em todas as áreas do ecossistema do futebol, através da aplicação do Clarify na Bundesliga Match Facts.

 

Este artigo foi traduzido do Blog da AWS em Inglês.

 

 


Sobre os autores

Nick McCarthy é cientista de dados na equipe da AWS Professional Services. Ele trabalhou com clientes da AWS em vários setores, incluindo saúde, finanças e esportes e mídia para acelerar os resultados de negócios por meio da IA/ML. Fora do trabalho, ele adora passar o tempo viajando, experimentando novas cozinhas e lendo sobre ciência e tecnologia. A formação de Nick é em astrofísica e machine learning e, apesar de ocasionalmente seguir a Bundesliga, ele é fã do Manchester United desde jovem.

 

 

 

 

Luuk Figdo é cientista de dados na equipe AWS Professional Services. Ele trabalha com clientes de todos os setores para ajudá-los a contar histórias com dados usando machine learning. Em seu tempo livre ele gosta de aprender tudo sobre a mente e a interseção entre psicologia, economia e IA.

 

 

 

 

 

Gabriel Anzer é o principal cientista de dados da Sportec Solutions AG, uma subsidiária da DFL. Ele trabalha na extração de insights interessantes de dados de futebol usando IA/ML para fãs e clubes. A formação de Gabriel é em matemática e machine learning, mas ele também está cursando seu doutorado em análise esportiva na University of Tübingen e trabalhando em sua licença de treinador de futebol.