Skip to content

Instantly share code, notes, and snippets.

@Msamuelsons
Forked from elo7-developer/teste_data_science.md
Created October 30, 2023 19:04
Show Gist options
  • Save Msamuelsons/4370dcdaa11d987723a1fbcad67f0992 to your computer and use it in GitHub Desktop.
Save Msamuelsons/4370dcdaa11d987723a1fbcad67f0992 to your computer and use it in GitHub Desktop.
Teste Data Science

Teste Data Science Elo7

Esse teste faz parte da segunda etapa do processo seletivo para a vaga no time Data Science do Elo7. O objetivo do teste é avaliar como você desenvolve uma solução completa (em nível de prova de conceito) para um problema de sistemas de recomendação, que é uma das tarefas que mais realizamos no nosso dia-a-dia.

Dataset:

O dataset escolhido para esse teste foi a base pública do Movie Lens, que é muito utilizado para avaliar algoritmos de sistemas de recomendação. Ele contém avaliações e tags textuais dadas por usuários a filmes. Os dados podem ser obtidos a partir desse link.

Em resumo, o dataset contém 20.000.263 ratings e 465.564 tags aplicadas a 27.278 filmes, distribuidos em 138.493 usuários. Todos os usuários avaliaram ao menos 20 filmes e todos os filmes possuem, ao menos, 1 avaliação. Mais detalhes sobre a estrutura dos dados se encontram aqui.

Para facilitar a estrutura do teste, nós separamos o desenvolvimento em três etapas: 1) Análise Exploratória, 2) Sistema de Recomendação e 3) Avaliação do sistema de recomendação.

Parte 1 - Análise Exploratória

Essa etapa é uma das mais importantes de qualquer trabalho de um Data Scientist. Antes de executar qualquer algoritmo, nós precisamos primeiro entender o nosso problema. Por isso, gostaríamos que você realizasse uma análise exploratória e indicasse as principais características presentes nos dados. Você tem total liberdade para escolher qualquer ferramenta ou algoritmo nessa etapa.

Dica 1: Para facilitar um pouco o fluxo de informações, recomendamos começar essa etapa explicitando as perguntas que você deseja responder com as análises. Dessa forma, a análise ficará mais estruturada.

Dica 2: Possíveis perguntas que você pode fazer: - Existe alguma relação entre o gênero do filme e o padrão de avaliação dos usuários? - Existe correlação entre os gêneros de filme? Usuários que gostam de um gênero também gostam de outro(s)?

Use bastante criatividade nessa etapa! Muito provavelmente, essa análise fornecerá ideias para o sistema de recomendação que você precisará desenvolver na etapa seguinte.

Parte 2 - Sistema de Recomendação

Implemente um sistema de recomendação (a nível de prova de conceito) que recomenda filmes que um determinado usuário possa gostar com base nos reviews que ele fez. O input do sistema vai ser o id de um usuário.

Não vamos indicar nenhum algoritmo ou técnica para executar essa tarefa, porque isso enviesaria a sua solução. Entretanto, gostaríamos que você documentasse todas as decisões tomadas. Não se preocupe em encontrar o melhor algoritmo para resolver o problema. Preferimos que você se preocupe em criar uma boa "história" com os dados, alternando código e o seu raciocínio.

A avaliação dessa etapa vai consistir nesses pontos:

  • Estrutura: Código + história
  • Conhecimento do problema:
    • Ferramentas de manipulação dos dados
    • Aplicação das técnicas
  • Criatividade =)

Obs: Não esperamos que você tenha conhecimento prévio em sistemas de recomendação, mas seria interessante estudar um pouco (pouco mesmo!) sobre os tipos de sistemas de recomendação para o problema. Veja também sites como a Amazon, Netflix e Spotify para verificar como eles abordam os sistemas de recomendação deles. Leia também esses artigos interessante do Netflix (1 e 2) sobre as dificuldades práticas de um algoritmo de sistemas de recomendação de filmes na Netflix. A ideia aqui é entender que a solução do problema pode ser um pouco mais complicada do que apenas a implementação de um algoritmo preciso.

Parte 3 - Avaliação do sistema de recomendação

Nessa etapa, gostaríamos que você pensasse sobre que métrica(s) você gostaria de utilizar para avaliar o sistema de recomendação criado na Parte 2.

Essa etapa é muito importante para avaliar e comparar diferentes algoritmos. Podemos utilizar diversas métricas para testar diferentes hipóteses, mas dificilmente teremos uma métrica única para todos os problemas. Que técnica(s) você utilizará para avaliar o seu algoritmo?

Atenção: lembre-se de justificar sua escolha da(s) métrica(s) de avaliação.

Obs: Novamente, seja criativo!

Observações gerais:

Você deve submeter um jupyter notebook com o código desenvolvido por você com a solução de ambos os desafios. Lembre-se de documentar seu código e utilizar células Markdown para explicar detalhadamente sua solução. Lembre-se de explicar seu raciocínio e justificar os métodos utilizados por você. Explicite os algoritmos utilizados e as etapas de pré-processamento que você recomenda fazer, justificando o porquê de cada uma das decisões tomadas.

Aqui você pode ver uma lista de linguagens compatíveis com o jupyter e aqui algumas instruções que podem auxiliar na instalação da mesma.

Suba um arquivo final .ipynb, um .html e um requirements.txt (gerado pelo comando pip freeze > requirements.txt) em seu github pessoal. Deixe o repositório público e nos mande o link por email. Caso tenha utilizado uma linguagem diferente de Python, nos explique como rodar o seu projeto localmente. Se preferir a utilização do Python, por favor submeta o teste utilizando o Python 3+.

Sinta-se à vontade para fazer o uso de bibliotecas (como o scikit-learn e scipy), mas, novamente, você deve saber explicar o porquê de você aplicar determinado algoritmo para determinada situação.

Não queremos a solução ideal para o problema! Queremos entender sua forma de pensar. =)

IMPORTANTE: Seja criativo na resolução do problema! O trabalho de um Data Scientist envolve conhecimento técnico, metodologia científica e muita criatividade para abordar problemas complexos. Você encontrará muitas formas padrão de resolver o problema de recomendação de filmes para o dataset do MovieLens. Será que você consegue encontrar novas formas de abordar o mesmo problema? Tente formular uma hipótese, crie o algoritmo de recomendação - seja de Machine Learning ou não! - e encontre uma métrica que teste a sua hipótese.

Boa sorte e qualquer dúvida, pode nos mandar um e-mail!

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