Estrelas realinhadas: melhorando o sistema de classificação do IMDb

Publicados: 2022-03-11

Os observadores de filmes às vezes usam classificações para selecionar o que assistir. Depois de fazer isso, notei que muitos dos filmes mais bem classificados pertenciam ao mesmo gênero: drama. Isso me fez pensar que o ranking poderia ter algum tipo de viés de gênero.

Eu estava em um dos sites mais populares para os amantes do cinema, o IMDb, que cobre filmes de todo o mundo e de qualquer ano. Seu famoso ranking é baseado em uma enorme coleção de comentários. Para essa análise de dados do IMDb, decidi baixar todas as informações disponíveis lá para analisá-las e tentar criar um ranking novo e refinado que considerasse uma gama mais ampla de critérios.

O sistema de classificação do IMDb: filtrando os dados do IMDb

Consegui baixar informações sobre 242.528 filmes lançados entre 1970 e 2019 inclusive. As informações que o IMDb me deu para cada um foram: Rank , Title , ID , Year , Certificate , Rating , Votes , Metascore , Synopsis , Runtime , Genre , Gross e SearchYear .

Para ter informações suficientes para analisar, eu precisava de um número mínimo de resenhas por filme, então a primeira coisa que fiz foi filtrar filmes com menos de 500 resenhas. Isso resultou em um conjunto de 33.296 filmes, e na tabela a seguir, podemos ver uma análise resumida de seus campos:

Campo Tipo Contagem Nula Quer dizer Mediana
Classificação Fator 0
Título Fator 0
identificação Fator 0
Ano Int 0 2003 2006
Certificado Fator 17587
Avaliação Int 0 6.1 6.3
Votos Int 0 21040 2017
Metascore Int 22350 55,3 56
Sinopse Fator 0
Tempo de execução Int 132 104,9 100
Gênero Fator 0
Bruto Fator 21415
PesquisaAno Int 0 2003 2006

Nota: Em R, Factor refere-se a strings. Rank e Gross são assim no conjunto de dados original do IMDb devido a ter, por exemplo, milhares de separadores.

Antes de começar a refinar a pontuação, tive que analisar melhor esse conjunto de dados. Para começar, os campos Certificate , Metascore e Gross tinham mais de 50% de valores nulos, então não são úteis. O Rank depende intrinsecamente do Rating (a variável a ser refinada), portanto, não contém nenhuma informação útil. O mesmo acontece com o ID , pois é um identificador exclusivo para cada filme.

Finalmente, Title e Synopsis são campos de texto curto. Poderia ser possível usá-los através de alguma técnica de PNL, mas por ser uma quantidade limitada de texto, decidi não levá-los em consideração para esta tarefa.

Após esse primeiro filtro, fiquei com Genre , Rating , Year , Votes , SearchYear e Runtime . No campo Genre , houve mais de um gênero por filme, separados por vírgulas. Então, para capturar o efeito aditivo de ter muitos gêneros, eu o transformei usando a codificação one-hot. Isso resultou em 22 novos campos booleanos — um para cada gênero — com valor 1 se o filme tivesse esse gênero ou 0 caso contrário.

Análise de dados do IMDb

Para ver as correlações entre as variáveis, calculei a matriz de correlação.

Uma matriz de correlação entre todas as colunas originais restantes e as novas colunas de gênero. Números próximos a zero resultam em espaços em branco na grade. Correlações negativas resultam em pontos vermelhos e correlações positivas em pontos azuis. Os pontos são maiores e mais escuros quanto mais forte for a correlação. (Os destaques visuais são descritos no texto do artigo principal.)

Aqui, um valor próximo a 1 representa uma forte correlação positiva e valores próximos a -1 uma forte correlação negativa. Por este gráfico, fiz muitas observações:

  • Year e SearchYear são absolutamente correlacionados. Isso significa que eles provavelmente têm os mesmos valores e que ter os dois é o mesmo que ter apenas um, então eu mantive apenas Year .
  • Alguns campos esperavam correlações positivas, como:
    • Music com Musical
    • Action com Adventure
    • Animation com Adventure
  • O mesmo para correlações negativas:
    • Drama vs. Horror
    • Comedy x Horror
    • Horror vs. Romance
  • Relacionado à variável chave ( Rating ) notei:
    • Tem uma correlação positiva e importante com Runtime e Drama .
    • Tem menor correlação com Votes , Biography e History .
    • Tem uma correlação consideravelmente negativa com Horror e uma negativa mais baixa com Thriller , Action , Sci-Fi e Year .
    • Não tem outras correlações significativas.

Parecia que dramas longos eram bem avaliados, enquanto filmes de terror curtos não eram. Na minha opinião – eu não tinha os dados para verificar – não se correlacionava com o tipo de filme que gera mais lucros, como os filmes da Marvel ou da Pixar.

Pode ser que as pessoas que votam neste site não sejam o melhor representante do critério geral de pessoas. Faz sentido porque aqueles que dedicam tempo para enviar resenhas no site provavelmente são algum tipo de crítico de cinema com um critério mais específico. De qualquer forma, meu objetivo era remover o efeito de recursos comuns de filmes, então tentei remover esse viés no processo.

Distribuição de gênero no sistema de classificação do IMDb

O próximo passo foi analisar a distribuição de cada gênero ao longo da classificação. Para fazer isso, criei um novo campo chamado Principal_Genre baseado no primeiro gênero que apareceu no campo Genre original. Para visualizar isso, fiz um gráfico de violino.

Um gráfico de violino mostrando a distribuição de classificação para cada gênero.

Mais uma vez, pude ver que Drama se correlaciona com classificações altas e Horror com baixas. No entanto, este gráfico também revelou outros gêneros com boas pontuações: Biography e Animation . O fato de suas correlações não aparecerem na matriz anterior foi provavelmente porque havia poucos filmes com esses gêneros. Então, em seguida, criei um gráfico de barra de frequência por gênero.

Um gráfico de barras mostrando quantos filmes de cada gênero estavam no banco de dados. Comédia, Drama e Ação tiveram frequências em torno de 6.000 ou mais; Crime e Horror estavam acima de 2.000; o resto estava abaixo de 1.000.

Efetivamente, Biography e Animation tiveram pouquíssimos filmes, assim como Sport e Adult . Por esta razão, eles não estão muito bem correlacionados com Rating .

Outras variáveis ​​no sistema de classificação do IMDb

Depois disso, comecei a analisar as covariáveis ​​contínuas: Year , Votes e Runtime . No gráfico de dispersão, você pode ver a relação entre Rating e Year .

Um gráfico de dispersão de classificação e anos.

Como vimos anteriormente, Year parecia ter uma correlação negativa com Rating : À medida que o ano aumenta, a variação de classificação também aumenta, atingindo valores mais negativos em filmes mais recentes.

Em seguida, fiz o mesmo gráfico para Votes .

Um gráfico de dispersão de classificações e votos.

Aqui, a correlação era mais clara: quanto maior o número de votos, maior a classificação. No entanto, a maioria dos filmes não teve tantos votos e, neste caso, Rating teve uma variação maior.

Por fim, analisei o relacionamento com o Runtime .

Um gráfico de dispersão entre classificação e tempo de execução.

Novamente, temos um padrão semelhante, mas ainda mais forte: tempos de execução mais altos significam classificações mais altas, mas havia muito poucos casos de tempos de execução altos.

Refinamentos do sistema de classificação do IMDb

Depois de toda essa análise, tive uma ideia melhor dos dados com os quais estava lidando, então decidi testar alguns modelos para prever as classificações com base nesses campos. Minha ideia era que a diferença entre minhas melhores previsões de modelo e a Rating real removeria a influência dos recursos comuns e refletiria as características particulares que tornam um filme melhor do que outros.

Comecei com o modelo mais simples, o linear. Para avaliar qual modelo teve melhor desempenho, observei os erros quadrático médio (RMSE) e absoluto médio (MAE). São medidas padrão para esse tipo de tarefa. Além disso, eles estão na mesma escala que a variável prevista, por isso são fáceis de interpretar.

Neste primeiro modelo, o RMSE foi de 1,03 e o MAE de 0,78. Mas os modelos lineares supõem independência sobre os erros, mediana de zero e variância constante. Se isso estiver correto, o gráfico “valores residuais vs. previstos” deve se parecer com uma nuvem sem estrutura. Então decidi fazer um gráfico para corroborar isso.

Gráfico de dispersão dos valores residuais vs. previstos.

Pude ver que até 7 nos valores previstos, tinha uma forma não estruturada, mas após esse valor, tem uma forma de descida linear clara. Consequentemente, as suposições do modelo eram ruins, e também tive um “estouro” nos valores previstos porque, na realidade, o Rating não pode ser superior a 10.

Na análise de dados anterior do IMDb, com maior quantidade de Votes , o Rating melhorou; no entanto, isso aconteceu em alguns casos e por uma enorme quantidade de votos. Isso pode causar distorções no modelo e produzir esse estouro de Rating . Para verificar isso, avaliei o que aconteceria com esse mesmo modelo, removendo o campo Votes .

Gráfico de dispersão de valores residuais vs. previstos quando o campo Votos é removido.

Isso foi muito melhor! Ele tinha uma forma mais clara, não estruturada, sem valores previstos de estouro. O campo Votes também depende da atividade do revisor e não é uma característica dos filmes, então decidi abandonar esse campo também. Os erros após removê-lo foram 1,06 no RMSE e 0,81 no MAE - um pouco pior, mas não tanto, e eu preferia ter melhores suposições e seleção de recursos do que um desempenho um pouco melhor no meu conjunto de treinamento.

Análise de dados do IMDb: como funcionam outros modelos?

A próxima coisa que fiz foi tentar modelos diferentes para analisar qual teve melhor desempenho. Para cada modelo, usei a técnica de busca aleatória para otimizar os valores dos hiperparâmetros e validação cruzada de 5 vezes para evitar o viés do modelo. Na tabela a seguir estão os erros estimados obtidos:

Modelo RMSE MAE
Rede neural 1.044596 0,795699
Impulsionando 1.046639 0,7971921
Árvore de inferência 1,05704 0,8054783
GAM 1.0615108 0,8119555
Modelo linear 1.066539 0,8152524
Reg Linear Penalizada 1.066607 0,8153331
KNN 1.066714 0,8123369
Cordilheira Bayesiana 1,068995 0,8148692
SVM 1.073491 0,8092725

Como você pode ver, todos os modelos têm desempenho semelhante, então usei alguns deles para analisar um pouco mais de dados. Eu queria saber a influência de cada campo sobre a classificação. A maneira mais simples de fazer isso é observando os parâmetros do modelo linear. Mas para evitar distorções neles anteriormente, eu dimensionei os dados e depois treinei novamente o modelo linear. Os pesos foram como na foto aqui.

Um gráfico de barras de pesos de modelos lineares variando de aproximadamente -0,25 para Horror a quase 0,25 para Drama.

Neste gráfico, fica claro que duas das variáveis ​​mais importantes são Horror e Drama , onde a primeira tem um impacto negativo na classificação e a segunda positiva. Há também outros campos que impactam positivamente – como Animation e Biography – enquanto Action , Sci-Fi e Year impactam negativamente. Além disso, Principal_Genre não tem um impacto considerável, então é mais importante quais gêneros um filme possui do que qual é o principal.

Com o modelo aditivo generalizado (GAM), pude ver também um impacto mais detalhado para as variáveis ​​contínuas, que neste caso foi o Year .

Um gráfico de Ano vs. s(Ano) usando o modelo aditivo generalizado. O valor de s(Year) segue uma curva começando perto de 0,6 para 1970, chegando abaixo de 0 em 2010 e aumentando para perto de 0 novamente em 2019.

Aqui temos algo mais interessante. Embora fosse verdade que, para filmes recentes, a classificação tendia a ser mais baixa, o efeito não era constante. Ele tem o valor mais baixo em 2010 e, em seguida, parece “recuperar”. Seria intrigante descobrir o que aconteceu depois daquele ano na produção cinematográfica que poderia ter produzido essa mudança.

O melhor modelo foram as redes neurais, que apresentaram os menores RMSE e MAE, mas como você pode ver, nenhum modelo atingiu o desempenho perfeito. Mas isso não era uma má notícia em termos do meu objetivo. A informação disponível permite-me estimar um pouco bem o desempenho, mas não é suficiente. Há algumas outras informações que não consegui do IMDb que estão fazendo com que o Rating seja diferente da pontuação esperada com base em Genre , Runtime e Year . Pode ser a atuação do ator, roteiros de filmes, fotografia ou muitas outras coisas.

Do meu ponto de vista, essas outras características são o que realmente importa na escolha do que assistir. Não me importo se um determinado filme é um drama, ação ou ficção científica. Quero que tenha algo especial, algo que me faça divertir, me faça aprender alguma coisa, me faça refletir sobre a realidade, ou apenas me entretenha.

Então, criei uma classificação nova e refinada pegando a classificação do IMDb e subtraindo a classificação prevista do melhor modelo. Ao fazer isso, eu estava removendo o efeito de Genre , Runtime e Year e mantendo essas outras informações desconhecidas que são muito mais importantes para mim.

Alternativa ao sistema de classificação do IMDb: os resultados finais

Vamos ver agora quais são os 10 melhores filmes pela minha nova classificação vs. pela classificação real do IMDb:

IMDb

Título Gênero Classificação IMDb Classificação refinada
Ko para tamo peva Aventura, Comédia, Drama 8,9 1,90
Dipu Número 2 Aventura, Família 8,9 3.14
El señor de los anillos: El retorno do rei Aventura, Drama, Fantasia 8,9 2,67
El señor de los anillos: La comunidad del anillo Aventura, Drama, Fantasia 8,8 2,55
Anbe Sivam Aventura, Comédia, Drama 8,8 2,38
Hababam Sinifi Tatilde Aventura, Comédia, Drama 8,7 1,66
El señor de los anillos: Las dos torres Aventura, Drama, Fantasia 8,7 2,46
Chamada de Mudras Aventura, Drama, Romance 8,7 2,34
Interesse Aventura, Drama, Ficção Científica 8.6 2,83
Voltar ao futuro Aventura, Comédia, Ficção Científica 8,5 2,32

Minha

Título Gênero Classificação IMDb Classificação refinada
Dipu Número 2 Aventura, Família 8,9 3.14
Interesse Aventura, Drama, Ficção Científica 8.6 2,83
El señor de los anillos: El retorno do rei Aventura, Drama, Fantasia 8,9 2,67
El señor de los anillos: La comunidad del anillo Aventura, Drama, Fantasia 8,8 2,55
Kolah ghermezi vai pesar khale Aventura, Comédia, Família 8.1 2,49
El señor de los anillos: Las dos torres Aventura, Drama, Fantasia 8,7 2,46
Anbe Sivam Aventura, Comédia, Drama 8,8 2,38
Los caballeros de la mesa cuadrada Aventura, Comédia, Fantasia 8.2 2,35
Chamada de Mudras Aventura, Drama, Romance 8,7 2,34
Voltar ao futuro Aventura, Comédia, Ficção Científica 8,5 2,32

Como você pode ver, o pódio não mudou radicalmente. Isso era esperado porque o RMSE não era tão alto, e aqui estamos vendo o topo. Vamos ver o que aconteceu com os 10 piores:

IMDb

Título Gênero Classificação IMDb Classificação refinada
Holnap tortent - A nagy bulvarfilm Comédia, Mistério 1 -4,86
Cumali Ceber: Allah Seni Alsin Comédia 1 -4,57
Badang Comédia, Fantasia 1 -4,74
Aaaaaaaaa!!! Kosmiczna nominacja Comédia 1.1 -4,52
Americano orgulhoso Drama 1.1 -5,49
Casacos Marrons: Guerra da Independência Ação, Ficção Científica, Guerra 1.1 -3,71
O fim de semana que vive Comédia, Terror, Mistério 1.2 -4,53
Bolívar: o herói Animação, Biografia 1.2 -5,34
A Ascensão do Morcego Negro Ação, Ficção Científica 1.2 -3,65
Hatsukoi Drama 1.2 -5,38

Minha

Título Gênero Classificação IMDb Classificação refinada
Americano orgulhoso Drama 1.1 -5,49
Papai Noel e o Coelhinho do Sorvete Família, Fantasia 1.3 -5,42
Hatsukoi Drama 1.2 -5,38
Reis Biografia, Drama 1,5 -5,35
Bolívar: o herói Animação, Biografia 1.2 -5,34
Hanum & Rangga: Fé e a Cidade Drama, Romance 1.2 -5,28
Depois da última temporada Animação, Drama, Ficção Científica 1,7 -5,27
Barschel - Mord em Genf Drama 1,6 -5,23
Rasshu raifu Drama 1,5 -5,08
Kamifusen Drama 1,5 -5,08

A mesma coisa aconteceu aqui, mas agora podemos ver que mais dramas aparecem no caso refinado do que no IMDb, o que mostra que alguns dramas podem ser superestimados apenas por serem dramas.

Talvez o pódio mais interessante de se ver sejam os 10 filmes com a maior diferença entre a pontuação do sistema de classificação do IMDb e a minha refinada. Esses filmes são os que têm mais peso em suas características desconhecidas e tornam o filme muito melhor (ou pior) do que o esperado por seus recursos conhecidos.

Título Classificação IMDb Classificação refinada Diferença
Kanashimi no beradonna 7.4 -0,71 8.11
Jesucristo Superstar 7.4 -0,69 8.09
Pink Floyd A Muralha 8.1 0,03 8.06
Tenshi no tamago 7.6 -0,42 8.02
Jibon Theke Neya 9.4 1,52 7,87
El baile 7,8 0,00 7,80
Papai Noel e os Três Ursos 7.1 -0,70 7,80
La alegre historia de Scrooge 7,5 -0,24 7,74
Piel de asno 7 -0,74 7,74
1776 7.6 -0,11 7,71

Se eu fosse um diretor de cinema e tivesse que produzir um novo filme, depois de fazer toda essa análise de dados do IMDb, eu poderia ter uma ideia melhor de que tipo de filme fazer para ter uma melhor classificação no IMDb. Seria um longo drama de biografia animada que seria um remake de um filme antigo – por exemplo, Amadeus. Provavelmente isso garantiria um bom ranking no IMDb, mas não tenho certeza sobre os lucros…

O que você acha dos filmes que se classificam nesta nova medida? Você gosta deles? Ou prefere os originais? Deixe-me saber nos comentários abaixo!