Os meus amigos deram-me os seus dados do Tinder…
Era quarta-feira, 3 de Outubro de 2018, e eu estava sentado na fila de trás do curso de Ciência dos Dados da Assembleia Geral. Meu tutor tinha acabado de mencionar que cada aluno tinha que apresentar duas idéias para projetos de ciência de dados, uma das quais eu teria que apresentar para toda a turma no final do curso. Minha mente ficou completamente em branco, um efeito que o fato de ter um reinado tão livre sobre a escolha de quase tudo geralmente tem sobre mim. Passei os dias seguintes intensamente tentando pensar em um projeto bom/interessante. Eu trabalho para um Gestor de Investimentos, por isso o meu primeiro pensamento foi ir para algo relacionado com um gestor de investimentos, mas depois pensei que passava mais de 9 horas no trabalho todos os dias, por isso não queria que o meu tempo livre sagrado também fosse ocupado com coisas relacionadas com o trabalho.
Poucos dias depois, recebi a mensagem abaixo num dos chats WhatsApp do meu grupo:
Isto deu origem a uma ideia. E se eu pudesse usar a ciência dos dados e as habilidades de aprendizagem de máquinas aprendidas dentro do curso para aumentar a probabilidade de qualquer conversa em particular no Tinder de ser um ‘sucesso’? Assim, a minha ideia de projecto foi formada. O próximo passo? Conte à minha namorada…
alguns factos Tinder, publicados pela própria Tinder:
- a aplicação tem cerca de 50m de utilizadores, 10m dos quais utilizam a aplicação diariamente
- desde 2012, já houve mais de 20bn partidas no Tinder
- um total de 1.6bn swipes ocorrem todos os dias no app
- o usuário médio gasta 35 minutos POR DIA no app
- uma data estimada de 1,5m POR SEMANA devido ao app
Problema 1: Obtendo dados
Mas como eu obteria dados para analisar? Por razões óbvias, as conversas do usuário no Tinder e o histórico de correspondência, etc., são codificados com segurança para que ninguém além do usuário possa vê-los. Depois de um pouco de googling, deparei-me com este artigo:
Isto levou-me a perceber que o Tinder foi agora forçado a construir um serviço onde pode pedir os seus próprios dados a partir deles, como parte do acto da liberdade de informação. Cue, o botão ‘download data’:
Após clicar, você tem que esperar 2-3 dias úteis antes que o Tinder lhe envie um link a partir do qual você poderá baixar o arquivo de dados. Eu esperava ansiosamente este e-mail, tendo sido um ávido usuário do Tinder por cerca de um ano e meio antes do meu relacionamento atual. Eu não tinha idéia de como eu me sentiria, navegando por um número tão grande de conversas que eventualmente (ou não) se esgotaram.
Depois do que me pareceu uma idade, o e-mail chegou. Os dados estavam (felizmente) no formato JSON, então um rápido download e upload em python e bosh, acesso a todo o meu histórico de encontros online.
Os Dados
O arquivo de dados é dividido em 7 seções diferentes:
Destes, apenas dois foram realmente interessantes/utilitários para mim:
- Mensagens
- Utilização
Em análise posterior, o ficheiro “Utilização” contém dados sobre “Abrir aplicação”, “Fósforos”, “Mensagens recebidas”, “Mensagens enviadas”, “Passa para a direita” e “Passa para a esquerda”, e o ficheiro “Mensagens” contém todas as mensagens enviadas pelo utilizador, com carimbos de hora/data, e a identificação da pessoa para quem a mensagem foi enviada. Como tenho certeza que você pode imaginar, isto levou a uma leitura bastante interessante…
Problema 2: Obtendo mais dados
Direito, eu tenho meus próprios dados do Tinder, mas para que qualquer resultado que eu consiga não seja completamente estatisticamente insignificante/prejudicial, eu preciso obter os dados de outras pessoas. Mas como faço isso…
Cue uma quantidade não insignificante de mendicidade.
Miraculosamente, consegui persuadir 8 dos meus amigos a darem-me os seus dados. Eles variavam de usuários experientes a usuários “esporádicos” quando entediados, o que me deu uma seção transversal razoável de tipos de usuários que eu sentia. O maior sucesso? Minha namorada também me deu seus dados.
Outra coisa complicada foi definir um ‘sucesso’. Eu me conformei com a definição de que ou um número era obtido da outra parte, ou os dois usuários saíam em uma data. Eu então, através de uma combinação de perguntar e analisar, categorizei cada conversa como um sucesso ou não.
Problema 3: Agora o quê?
Direito, tenho mais dados, mas agora o quê? O curso de Ciência de Dados focou em ciência de dados e aprendizagem de máquinas em Python, então importar para python (usei anaconda/Jupyter notebooks) e limpá-lo pareceu ser um próximo passo lógico. Fale com qualquer cientista de dados, e eles lhe dirão que limpar dados é a) a parte mais enfadonha do seu trabalho e b) a parte do seu trabalho que ocupa 80% do seu tempo. A limpeza é chata, mas também é crítica para poder extrair resultados significativos dos dados.
Criei uma pasta, na qual larguei todos os 9 arquivos de dados, depois escrevi um pequeno script para percorrer estes, importá-los para o ambiente e adicionar cada arquivo JSON a um dicionário, com as chaves sendo o nome de cada pessoa. Eu também dividi os dados de “Uso” e os dados da mensagem em dois dicionários separados, de modo a facilitar a análise de cada conjunto de dados separadamente.
Problema 4: Diferentes endereços de e-mail levam a diferentes conjuntos de dados
Quando você se inscreve no Tinder, a grande maioria das pessoas usa sua conta do Facebook para fazer o login, mas as pessoas mais cautelosas apenas usam seu endereço de e-mail. Infelizmente, eu tinha uma dessas pessoas no meu conjunto de dados, o que significa que eu tinha dois conjuntos de arquivos para eles. Isto foi um pouco chato, mas no geral não foi muito difícil de lidar.
A partir daí, importei os dados para os dicionários, depois iterei através dos ficheiros JSON e extraí cada ponto de dados relevantes para um ficheiro pandas dataframe, parecendo algo do género:
O primeiro gráfico é bastante auto-explicativo, mas o segundo pode precisar de algumas explicações. Essencialmente, cada linha horizontal/fileira representa uma conversa única, sendo a data de início de cada linha a data da primeira mensagem enviada dentro da conversa, e a data final a última mensagem enviada na conversa. A idéia desta trama era tentar entender como as pessoas usam o aplicativo em termos de mensagens para mais de uma pessoa ao mesmo tempo.
Apesar de ser interessante, eu realmente não vi nenhuma tendência ou padrão óbvio que eu pudesse interrogar mais, então eu me voltei para os dados agregados de “Uso”. Inicialmente comecei a olhar para várias métricas ao longo do tempo divididas por usuário, para tentar determinar quaisquer tendências de alto nível:
mas nada imediatamente se destacou.
Decidi então olhar mais profundamente para os dados da mensagem, que, como mencionado anteriormente, vieram com um prático carimbo de tempo. Tendo agregado a contagem de mensagens por dia da semana e hora do dia, percebi que tinha tropeçado na minha primeira recomendação.
9pm num domingo é o melhor horário para ‘Tinder’, mostrado abaixo como a hora/data em que o maior volume de mensagens foi enviado dentro da minha amostra.
Aqui, usei o volume de mensagens enviadas como proxy para o número de usuários online em cada momento, então ‘Tindering’ neste momento vai garantir que você tenha a maior audiência.
Comecei então a olhar a duração da mensagem em termos de palavras e letras, bem como o número de mensagens por conversa. Inicialmente, você pode ver abaixo que não houve muito que pulou… (aqui um ‘sucesso’ é vermelho)
Mas uma vez que você começa a cavar, há algumas tendências claras:
- As mensagens mais longas têm mais probabilidade de gerar um sucesso (até certo ponto)
- O número médio de mensagens numa conversa é de 27, com uma mediana de 21.
Estas observações levam à minha segunda e terceira recomendações.
A Segunda Recomendação:
Gaste mais tempo construindo suas mensagens, e por amor de deus não use texto fale… geralmente palavras mais longas são melhores palavras. Uma ressalva aqui é que os dados contêm links, que contam como palavras longas, então isso pode distorcer os resultados.
A Terceira Recomendação:
Não seja muito precipitado ao tentar obter um número. Ei, o que é o número de ur’ é provavelmente a pior coisa que você pode dizer em termos de suas chances. Da mesma forma, não o deixe muito tempo. Qualquer lugar entre sua 20ª e 30ª mensagem é melhor.
Servir olhou para o comprimento de palavra/mensagem/conversação bastante extensivamente, eu então decidi olhar para o sentimento. Mas eu não sabia absolutamente nada sobre como fazer isso. Durante o curso, cobrimos um pouco do processamento natural da linguagem (saco de palavras, uma codificação a quente, todo o pré-processamento necessário, etc., juntamente com vários algoritmos de classificação), mas não tocámos no sentimento. Passei algum tempo pesquisando o tópico, e descobri que o nltk sentiment.vader SentimentIntensityAnalyzer seria um grito muito bom.
Isto funciona dando ao usuário quatro pontuações, baseadas na porcentagem do texto de entrada que foi:
- positivo
- neutro
- negativo
- uma combinação dos três
Felizmente, também lida com coisas como contexto de palavras, gírias e até emojis. Como eu estava olhando para o sentimento, não foi feito nenhum pré-processamento (rebaixamento, remoção da pontuação, etc.) para não remover nenhum contexto oculto.
Comecei esta análise alimentando cada conversa inteira no analisador, mas rapidamente percebi que isso não funcionou, pois o sentimento da conversa tendeu rapidamente a 1 após as primeiras mensagens, e eu luto para acreditar que uma conversa de 100 mensagens foi 100% confiante o tempo todo.
Dividi então as conversas em suas mensagens constituintes e as alimentei através de uma de cada vez, calculando a média de pontuação até o nível de conversação. Isto produziu um resultado muito mais realista na minha opinião:
Dividir estes dados por ‘Sucesso’ ou ‘Sem Sucesso’, e rapidamente vi um padrão emergindo:
Esta tee’d up minha quarta recomendação.
A quarta recomendação:
Sê positivo, mas não demasiado positivo.
O sentimento médio para uma conversa bem sucedida foi de 0,31 vs 0,20 para uma conversa sem sucesso. Dito isto, ser demasiado positivo é quase tão mau como ser demasiado negativo.
O beco final que explorei foi o efeito que vários detalhes sobre a primeira mensagem tiveram no sucesso da conversa. Os pensamentos iniciais das coisas que poderiam ter um efeito foram:
- comprimento
- Se foi usado um nome
- sentimento
- presença de emojis
- conteúdo explícito
Como esperado, quanto mais longa a primeira mensagem, maior a probabilidade de que a conversa continue para um ‘Sucesso’. Como uma extensão, você dobra sua probabilidade de sucesso não usando apenas um abridor de palavras, por exemplo, não apenas dizendo ‘hey’ ou ‘hi’ ou ‘daayyuumm’ (exemplo real).
Mais surpreendente ainda, usar um nome na primeira mensagem teve muito pouco efeito na ‘Relação de Sucesso’ (No. Sucessos/No. No. Sucessos).
O sentimento da primeira mensagem acabou sendo cerca de 0,09 mais alto para conversas “Bem sucedidas” do que para conversas “Sem Sucesso”, o que não foi realmente uma surpresa… se você insultar alguém em uma primeira mensagem, é intuitivamente menos provável que ele responda.
Analizar Emojis era uma tarefa que eu não tinha pensado, e tinha o potencial de ser complicado. Por sorte, existe um pacote chamado ‘emoji’, que automaticamente capta a presença de emojis dentro do texto. Infelizmente, e para minha consternação, aparece usando um emoji em uma primeira mensagem aumenta a probabilidade de se obter um ‘Sucesso’.
Agora em conteúdo explícito… Outro que tinha o potencial de ser bastante complicado, pois não existem bibliotecas construídas que captam o uso de expletivos, etc. (que eu saiba). Felizmente tropecei nisto:
Posso assegurar-lhe que existem alguns crackers absolutos contidos dentro dele.
Vejamos quais as primeiras mensagens que continham uma palavra desta lista, 40 das quais continham. Como sempre acontece com coisas como esta, encontrei alguns casos interessantes de bordas:
FYI este era um tipo a falar sobre as suas leggings de remo…
Resultados? Acontece que nenhuma das primeiras mensagens que continham conteúdo explícito leva a um “Sucesso”
Isto leva-me à minha quinta e última recomendação.
A Quinta Recomendação:
Quando se envia uma primeira mensagem:
- Sê positivo
- 8 palavras é óptimo
- Utilizar um emoji ou dois
- Não seja explícito
SO TO SUM UP
- Utilizar o Tinder às 21h numa Domingo para a audiência máxima
- Passar tempo construindo mensagens e não usar texto fale
- Preparar para pedir um número ou uma data entre a 20ª e 30ª mensagem
- Ser positivo, mas não muito positivo
- Enviar algo diferente de ‘ei’ como primeira mensagem, apontar para cerca de 8 palavras, talvez usar um emoji e não ser explícito
Umas poucas armadilhas dos dados:
- O meu conjunto de dados é uma amostra muito, muito pequena, tornando inútil a maioria dos insights
- O conjunto de dados é tendencioso para o tipo de pessoas que conheço, além de ser tendencioso em relação aos homens
- O conjunto de dados contém apenas um lado da conversa
- As mensagens e estatísticas de uso não se alinham necessariamente devido aos usuários desinstalarem e reinstalarem os app
- Nenhuma técnica de PNL será perfeita devido ao sarcasmo/variações na maneira como as pessoas falam
Umas poucas idéias para trabalho futuro:
- Reagrupar mais dados
- Fazer mais para determinar resultados estatisticamente significativos vs observações
- Leve em conta a análise da conversa por tópico – que tipo de mensagens compõem o bom e o mau sentimento
- Tente olhar para o sarcasmo
- Investigue outras aplicações (Bumble, Hinge, etc.))
- Algum tipo de análise de classificação se mais dados foram incluídos, pois só tivemos 70 sucessos
- Consulte mais em divisões de gênero se mais dados foram incluídos
Alguns factóides interessantes dos dados:
- Muito mais desliza por uma única pessoa em um único dia: 8096
- Guys são mais propensos a deixar um longo tempo (7 dias) antes de enviar uma segunda mensagem
- Deslizar uma pergunta na primeira mensagem diminui a sua chance de sucesso
- As mulheres deslizam em média 1% do tempo, enquanto os homens deslizam ~50% do tempo
- Por aplicação aberta, as mulheres deslizam 3 vezes mais do que os homens
Outra leitura:
- Foi publicado um artigo chamado ‘A First Look at User Activity on Tinder’, link aqui
- Existe uma API Tinder, mas infelizmente é apenas para pessoas que utilizam o aplicativo, em vez de dar acesso a um banco de dados de algum tipo. De qualquer forma, usá-la para testar certas hipóteses pode ser interessante.
- Tinderbox é um software que pode aprender a quem você se sente atraído através da redução da dimensionalidade. Também tem um chatbot integrado se você realmente quiser automatizar o processo…
Poisas para leitura, qualquer idéia para trabalho futuro seria muito apreciada!