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.
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.
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.
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.
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!
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!