Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Resultados do modelo preditivo em 2017 #33

Open
arnaldog12 opened this issue Dec 8, 2017 · 37 comments
Open

Resultados do modelo preditivo em 2017 #33

arnaldog12 opened this issue Dec 8, 2017 · 37 comments

Comments

@arnaldog12
Copy link
Collaborator

Nessa planilha você pode conferir os jogadores que o nosso modelo preditivo acreditou que iam fazer boas pontuações e a pontuação real do jogador na respectiva rodada.

Esse ano utilizamos Redes Neurais como principal modelo preditivo, mas também chegamos a testar Random Forests e XGb. Ainda não fizemos nenhuma análise em cima das predições, mas pretendemos fazer em breve.

E aí? Você acha que nosso modelo mandou bem ou não?
Será que deveríamos ter utilizado outros modelos?

@fir3f0x
Copy link

fir3f0x commented Apr 17, 2018

Opa bom dia.. Estou iniciando meus estudos em ciencia de dados e achei esses script do cartola e comecei a estuda-lo... Mas esta dando erro ao rodar:

df_players = predict_best_players(df_samples, reg, n_players=25)
df_rodada.iloc[df_players.index][['Apelido', 'Posicao', 'ClubeID']].sort_values('Posicao')

image
image

Ja rodei pra tentar arrumar e nada kkk

@arnaldog12
Copy link
Collaborator Author

Boa noite, @fir3f0x

tentei rodar aqui agora o código do Jupyter notebook Análise dos Dados.ipynb e o código funcionou tranquilo. Analisando o erro que você mostrou, por algum motivo está faltando alguma coluna nos seus dados. Então, talvez possa ser alguma dessas coisas:

  • Você está com o código mais atualizado do repositório?
  • Você rodou todas as células das seções "0. Dependências e configurações", "1. Limpeza dos dados" e "2. Criação das amostras", antes de rodar a seção "4. Predições"?

@fir3f0x
Copy link

fir3f0x commented Apr 18, 2018

Estou rodando no windows 10.. Ja quando tento rodar o conda env create ja aparece

image

Mas todos os pacotes estao instalados só nao nessas versões. Seria um problema?
E sim rodei todas as celulas na sequencia. De qualquer forma baixei novamente os arquivos e vou rodar . Mas ja era a ultima versao disponivel

@fir3f0x
Copy link

fir3f0x commented Apr 18, 2018

Acho que descobri minha falha... Rodei a sessão 3. Treinamento do modelo. Essa sessão não deve ser executada novamente?

Segui na sequencia que vc falou e deu certo. Executei a sessão 3 e o erro volta.. Mudei apenas pra ele pegar os dados de 2016 e 2017 mas ai já da o erro.

@arnaldog12
Copy link
Collaborator Author

A sessão 3 não precisa ser executada se você não quer treinar um novo modelo.
Já que você está executando a sessão 3, você talvez deve estar esquecendo alguma coluna.
Tem como você criar um gist com o seu Jupyter notebook?

@macsong
Copy link

macsong commented Apr 18, 2018

Arnaldo,
Bem interessante o seu trabalho, mas os cálculos estatísticos voltaram com um resultado médio muito baixo. Eu participo do Cartola desde a sua origem e tenho trabalhado nesta linha estatística há algum tempo.

Acredito que falta apenas um pequeno dado para que sua predição seja melhorada em pelo menos 20%.

Mande um e-mail para mim. Vamos conversar sobre: macson.guedes@flir.com.br

Abraço

@rafaelpierre
Copy link

Põe na roda ai, @macsong :)

Olhando os resultados, achei o modelo muito bom.

No meu caso, o que trouxe alguma melhoria foi utilizar Random Forests como modelo preditivo ao invés de Redes Neurais.

@macsong
Copy link

macsong commented Apr 18, 2018 via email

@nandoccp
Copy link

nandoccp commented Jun 7, 2018

Eu tive o mesmo problema que o @fir3f0x ao rodar o notebook nos comandos abaixo:
df_players = predict_best_players(df_samples, reg, n_players=25)
df_rodada.iloc[df_players.index][['Apelido', 'Posicao', 'ClubeID']].sort_values('Posicao')

@fir3f0x voce conseguiu resolver o problema ?

@brunoeurico
Copy link

Boa tarde.

Gostaria de saber, como vocês fazem para realizar a atualização das rodadas? Como vocês fazem para obter os dados de cada rodada? Existe alguma API para obter todos esses dados das rodadas?

@arnaldog12
Copy link
Collaborator Author

Boa noite, @brunoeurico

Nós utilizamos a API do Cartola mesmo. O lado ruim é que a API do Cartola só disponibiliza os dados rodada a rodada, ou seja, não há um histórico desses dados via API. Por conta disso, toda semana a gente pega esses dados e vai armazenando para criar o histórico.

@getzleo
Copy link

getzleo commented Aug 22, 2018

df_players = predict_best_players(df_samples, reg, n_players=25)
df_rodada.iloc[df_players.index][['Apelido', 'Posicao', 'ClubeID']].sort_values('Posicao')

Com erro?

Solucao:
df_samples['e'] = 1
df_rodada = df_test[(df_test['Rodada'] == (ROUND_TO_PREDICT-1)) & (df_test['Status'] == "Provável")]
df_samples = to_samples(df_rodada)

@tdanf
Copy link
Contributor

tdanf commented Sep 30, 2018

Fala pessoal,

Nas últimas semanas testei uns modelos pra fazer predições pro Cartola e criei um repositório pra quem quiser dar uma olhada e também tiver alguma sugestão (tdanf/cartola-predictions).
Vocês tão fazendo modelos para 2018?

Abraço!

@henriquepgomide
Copy link
Owner

henriquepgomide commented Oct 4, 2018 via email

@tdanf
Copy link
Contributor

tdanf commented Oct 5, 2018

Opa! Segue o link https://github.com/tdanf/cartola-predictions

@thdesouzasilva
Copy link

Olá, como gero o arquivo dados_agregados ?
Gostaria de executar as predições com os dados de 2019, mas não sei qual deve ser a ordem de execução dos algoritmos.

@mranjos
Copy link

mranjos commented May 16, 2019

Porque os dados de treino tem que ter dois jogos consecutivos de um jogador? a pontuação dele só está sendo prevista de acordo com a rodada passada?

@arnaldog12
Copy link
Collaborator Author

Oi, @mranjos
Sim. Em 2017, eu utilizava só os dados da última rodada para prever a próxima, mesmo sabendo que isso não era o ideal. Mesmo assim, a rede funcionou bem.
Entretanto, esse ano já comecei o desenvolvimento de uma rede neural recorrente (LSTM) para levar em consideração o histórico de rodadas do jogador. Se você puder me ajudar, o código encontra-se aqui.

@mranjos
Copy link

mranjos commented May 20, 2019

@arnaldog12 entendi. Então, sou pouco familiarizado com o Python, estava transcrevendo os códigos para o R e ai acabei parando nessa etapa pois não tinha entendido muito bem. Estava pensando em criar uma regressão mais simples e interpretável do que uma rede neural, mas pode ser testada várias técnicas. Poderia ajudar sim na rede recorrente, mas ai seria no R, porque gastaria um tempinho pra aprender implementar no python.

@getzleo
Copy link

getzleo commented May 20, 2019

@arnaldog12 primeiro de tudo, show o LSTM, realmente é a melhor opção para regressão, estou fazendo alguns testes (ando complicado de tempo para testar) porem existem alguns parametros que estou mudando não na NN para nos dados.

Tem uma gama de resultados / dados adicionais que são importantes:

  1. RNN dos times, jogos anteriores: X vs S, gera score dos times.
  2. Separar os jogadores realmente por posicao, principalmente defesa onde o SG é fator relevante. (Um mesmo time pode ter um ataca fraco e ter uma defesa forte, ai o SG faz diferença), score do time tem que entrar como feature do jogador
  3. Cruzamento de jogos da rodada atual (prognostico), evitando cruzar ataque e defesa de times que se enfrentam na roda.

@mranjos
Copy link

mranjos commented May 20, 2019

Concordo com o @getzleo , acho que seria interessante montar um book de variáveis antes de ir pra técnica, adicionando ao que o @getzleo falou, talvez segmentar os times em grandes / médios / pequenos, jogos em casa e fora, como feature também, possa ser interessante, por exemplo, jogador X quando joga contra time grande fora de casa tende a ter em média um score menor ou maior.

@getzleo
Copy link

getzleo commented May 20, 2019

@mranjos casa vs fora é geralmente 65/35% não importa muito o time, e tem o empate na jogada ainda. Isto é fato.

Não precisa segmentar em grande/medio/pequeno, apenas colocando os % de casa/empate/fora já é um score a mais.

Tem outros fatores também , inclusive "clima/tempo". Pensa pessoal do sul jogando no calor infernal do nordeste ou vice-versa, até isto influencia.

Por isto o score casa vs fora é importante alem do jogo em si

@getzleo
Copy link

getzleo commented May 21, 2019

Outra, alterei o Model para:

model = Sequential()
model.add(LSTM(units=256, return_sequences=True, input_shape=x.shape[1:]))
model.add(Dropout(rate=0.2))
model.add(Dense(units=64, activation='linear'))
model.add(Dropout(rate=0.2))
model.add(Dense(units=16, activation='relu'))
model.add(Dropout(rate=0.2))
model.add(LSTM(units=16, return_sequences=False))

model.add(Dense(units=1, activation='linear'))
model.summary()

model.compile(optimizer='adam', loss='mean_squared_error')

model.fit(x, y, batch_size=64, epochs=300)

Melhorou muito os "negativos" e os positivos pico de pontuação

@getzleo
Copy link

getzleo commented May 21, 2019

Captura de Tela 2019-05-20 às 23 06 59
Com o Model acima

@arnaldog12
Copy link
Collaborator Author

Também concordo com @mranjos e o @getzleo que devemos colocar mais algumas variáveis. Acho que as mais importantes agora são com qual time o jogador irá jogar na próxima rodada e se jogará fora ou em casa. O importante é que esses dados sejam da próxima rodada, já que a rede vai tentar prever baseado na próxima rodada. Alguém se disponibiliza a gerar esses dados, por favor?

@arnaldog12
Copy link
Collaborator Author

Esse seu modelo ficou muito legal, @getzleo
Nunca tinha visto colocar camadas Dense entre camadas LSTM. Isso é comum?

Independente disso, os resultados ficaram legais. Você deu commit nessa rede?

@getzleo
Copy link

getzleo commented May 21, 2019

@arnaldog12 vamos lá.
O que ao meu ver falta e vou tentar implementar o quanto antes:

1 - Jogos da rodada, ranking times
2 - Jogador: Joga em Casa ou Fora
3 - Divisão em: Defesa e Ataque (quem começa com SG tem que ser tratado diferente, pois o ZERO dele são 5 pontos)
4 - Na previsão: Soltar 5 jogadores com maiores "predictions" de pontuacao por posição, e mostrar o quanto o sistema preve de pontos.
5 - Não muito dificil dar input das cartoletas que você tem Ex: 110,00 e ele montar o time para você com maiores probalilidades até 110,00 de gasto, pois não adianta nada ele soltar um time que você não pode montar, outra coisa importante a verificar é a relação pontos/cartoleta do jogador na linha de tempo. Tem muitos jogadores caros que não valem a escalação

Quanto ao Dense dentro do LSTM sim , em alguns modelos é normal e sobe muito a confiança do modelo. Mas deve ser sempre testado e validado. Ainda mais com ativadores diferentes, não dei commit não, mas fique a vontade para comitar se quiser

@arnaldog12
Copy link
Collaborator Author

Opa, @getzleo

Os atributos dos itens 1 e 2 são interessantíssimos. O item 3, entretanto, eu acredito que não seja necessário. Uma rede neural facilmente faz essa associação. Por exemplo, se construíssimos uma rede que calculasse a pontuação dado os scouts + posição do jogador, com certeza o erro seria zero. Então, acho que não precisamos perder tempo com esse atributo.

Os itens 4 e 5 eu me comprometo a fazer. Então, se você extrair os atributos dos itens 1 e 2, eu fico com os itens 4 e 5. Pode ser?

@mranjos
Copy link

mranjos commented May 21, 2019

@getzleo Esse ranking times seria a posição do time na tabela? Senão, acho que seria interessante essa informação também.

@henriquepgomide
Copy link
Owner

henriquepgomide commented May 21, 2019 via email

@getzleo
Copy link

getzleo commented May 21, 2019

@mranjos @henriquepgomide quando digo raking é o resultado da RNN dos jogos. Um "Rating" e não ranking, para ser mais especifico.
Posicao simples no campeonato nao muda muito.

Valor do Elenco é relativo, tem jogador caro pontuando pouco.
O que pode ser a melhor opcao talvez seja Resultados Jogos + Media dos Time + Jogo seguinte, ai ter um rating para deixar como feature de jogador, vou fazer umas analises cruzando estes dados e ver o nivel de confiança desta informaçao.

@getzleo
Copy link

getzleo commented May 21, 2019

@arnaldog12 vou tentar validar e implementar os itens 1 e 2 o quanto antes

@arnaldog12
Copy link
Collaborator Author

ótimo, @getzleo 💯

@henriquepgomide
Copy link
Owner

henriquepgomide commented May 21, 2019 via email

@mranjos
Copy link

mranjos commented May 21, 2019

Vocês já estão com os dados limpos acrescentando 2018 e 2019?

@traluog
Copy link

traluog commented May 27, 2019

Fala Henrique tudo bem? Cara ano passado fiz contato com vc por não conseguir rodar o os scripts aqui disponibilizados por vc,... Data Science era uma grande caixa preta para mim,.. mas fui para a luta, e hoje volto aqui com disposição a tentar ajudar no projeto.
Com os dados disponibilizados por vc e outros web scraping que fiz pela net,... consegui criar uma analise sobre os confrontos da rodada. Dê uma olhada nesse link www.cartolytics.club.

Vou começar a interagir por aqui para ajudar no que precisar.... abraços!

@henriquepgomide
Copy link
Owner

henriquepgomide commented May 31, 2019 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests