en es
Sobre a Matera
  • Sobre a Matera
  • Mercados
  • Soluções
  • Parcerias
  • Sustentabilidade
  • Conteúdos
  • Carreira
  • Contato
  • en es
Blog Notícias Ebook Podcasts Webinars

Blog

Machine Learning - Dividir amostra em treino e teste

Por: ronaldo.chicareli@matera.com

Tuesday, December 5, 2017

No exemplo do post anterior (em que falamos sobre Naive Bayes e você pode ler aqui) usamos todos os dados para treinar o algoritmo, mas será que o algoritmo não ficou viciado e acabou aprendendo a prever apenas dados parecidos com aqueles que usou para ser treinado?

Na prática, normalmente dividimos os dados históricos em 70% para treino e 30% para teste.

Não é necessariamente 70% e 30%, pode ser 90% e 10% ou o que você achar mais adequado dependendo da quantidade de dados que possui e dos requisitos de negócio.

Abordagem simples

Vamos ver um exemplo simples de como fazer isso:

from sklearn.naive_bayes import MultinomialNB

dados = [[1, 50, 1], [0, 1, 0], [0, 60, 1], [0, 100, 1], [1, 70, 0], [0, 3, 1], [1, 1, 0], [1, 200, 1], [0, 2, 1], [1, 1, 1]]
resultados = [1, 0, 1, 1, 1, 0, 0, 1, 1, 1]

clf = MultinomialNB()

treino_dados = dados [:7] # primeiras 7 linhas
treino_resultados = resultados [:7] 
teste_dados = dados [-3:] # ultimas 3 linhas
teste_resultados = resultados [-3:]
clf.fit (treino_dados, treino_resultados) # usamos 70% dos dados para treinar
previsao = clf.predict (teste_dados) # prevemos o resultado dos 30% restantes

print(previsao) # exibe 1, 0, 0 
print(teste_resultados) # exibe 1, 1, 1

Nas linhas 3 e 4 inicializamos arrays com nosso dados (features) e resultados (labels).

Nas linhas 8 e 9 salvamos as 7 primeiras linhas do array (70% dos dados) em novos arrays que chamamos de dados de treino e resultados de treino.

Nas linhas 10 e 11 salvamos as 3 últimas linhas do array (os 30% restante dos dados) em novos arrays que chamamos de dados de teste e resultados de teste.

Na linha 12 treinamos o modelo usando apenas os arrays de TREINO, ou seja, 70% dos dados.

Na linha 13 prevemos um resultado novo usando apenas os 30% restante dos dados.

Na linha 15 exibimos o resultado previsto (1, 0, 0), enquanto na linha 16 exibimos o resultado esperado dos 30% dos dados (1, 1, 1). Assim podemos validar se nosso modelo tende a acertar ou errar os dados quando colocarmos em produção.

Resultado previsto = 1, 0, 0

Resultado esperado = 1, 1, 1

1 ACERTO

No nosso caso, eles acabaram sendo diferentes, ou seja, os 70% de dados não foram capazes de treinar o algoritmo suficientemente bem, são necessários mais dados.

Abordagem mais inteligente

Uma outra forma de dividir os dados segue abaixo, usando a função train_test_split. Essa forma é um pouco mais inteligente, pois leva em consideração as diferentes características dos dados, tentando não dividi-los randomicamente, mas de forma igualitária levando em consideração suas características.

from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split

dados = [[1, 50, 1], [0, 1, 0], [0, 60, 1], [0, 100, 1], [1, 70, 0], [0, 3, 1], [1, 1, 0], [1, 200, 1], [0, 2, 1], [1, 1, 1]]
resultados = [1, 0, 1, 1, 1, 0, 0, 1, 1, 1]

clf = MultinomialNB()

treino_dados, teste_dados, treino_resultados, teste_resultados = train_test_split(dados, resultados) # 75% para treino e 25% para teste

clf.fit (treino_dados, treino_resultados)
pred = clf.predict (teste_dados)

print(pred) # exibe 1, 1, 0
print(teste_resultados) # exibe 1, 0, 0

Na linha 2 importamos a função train_test_split e a usamos na linha 9 passando os arrays com todos os dados históricos. A própria função divide os dados em 75% para treino e 25% para teste, embora isso possa ser alterado via parâmetro [1].

Resultado previsto = 1, 1, 0

Resultado esperado = 1, 0, 0

2 ACERTOS

Especificamente no nosso caso, os resultados previstos se aproximaram dos resultados de teste originais. Se você mandar imprimir as variáveis treino_dados do primeiro exemplo e do segundo, você verá que os dados considerados para treino são diferentes.

Conclusão

Antes de aplicar algoritmos de Machine Learning a qualquer problema de negócio, é necessário sempre dividir os dados históricos nestes 2 grupos: treino e teste. Assim, treinamos o algoritmo com um grande volume de dados de treino; depois validamos o resultado deste algoritmo com os dados de teste; e só então poderemos colocar nosso algoritmo em produção, com confiança de que ele realmente consegue prever dados reais.

Mas, em um cenário real, teremos muito mais dados do que nestes exemplos e não faz sentido ficar digitando-os a cada nova execução. Quer aprender a ler os dados direto de um arquivo CSV? Fique ligado no próximo post.

Referência

[1] http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
Categorias:
  • Inteligência Artificial
Compartilhe:
emailfacebooklinkedintwitter

Categorias


  • → Ágil
  • → Carreira
  • → Design e UX
  • → e-Commerce
  • → Fintech
  • → Frontend
  • → Gestão de Riscos
  • → Gestão Empresarial
  • → Infra
  • → Inovação
  • → Institucional
  • → Inteligência Artificial
  • → Mercado Financeiro
  • → Mobile
  • → Nuvem
  • → Pagamentos Instantâneos
  • → Programação (Backend)
  • → Responsabilidade Social
  • → Serviços
  • → Tecnologia
  • → Testes
  • → Varejo

Newsletter


Quer saber quais são as últimas notícias do setor em primeira mão? O seu próximo clique tem que ser aqui.

Siga-nos nas redes sociais

Política de privacidade Termos e condições de uso Suporte
  • • Sobre a Matera
  • • Historia
  • • Manifesto
  • • Código de Ética
  • • Mercados
  • • Digital Bank
  • • Risk
  • • Fintech
  • • Soluções
  • • Matera Digital Bank
  • • Matera Fintech
  • • Matera Risk
  • • Instant Payments
  • • Parcerias
  • • Alinanças
  • • Canais
  • • Sustentabilidade
  • • Ações
  • • Instituições Apoiadas
  • • Relatórios Anuais
  • • Conteúdos
  • • Blog
  • • Notícias
  • • Podcasts
  • • Ebooks
  • • Webinars
  • • Carreira
  • • Processo seletivo
  • • Vagas abertas
  • • Curso de Férias
  • • Contato
  • • Fale conosco
  • • Denúncias
  • • Imprensa

Copyright © 2020 Matera