I miei amici mi hanno dato i loro dati di Tinder…

Ago 5, 2021
admin

Era mercoledì 3 ottobre 2018, ed ero seduta nell’ultima fila del corso di Data Science dell’Assemblea Generale. Il mio tutor aveva appena accennato al fatto che ogni studente doveva proporre due idee per progetti di scienza dei dati, uno dei quali avrei dovuto presentare a tutta la classe alla fine del corso. La mia mente si è svuotata completamente, un effetto che generalmente ha su di me il fatto di essere lasciato libero di scegliere quasi tutto. Ho passato il paio di giorni successivi cercando di pensare intensamente a un progetto buono/interessante. Lavoro per un manager di investimenti, quindi il mio primo pensiero è stato quello di scegliere qualcosa di legato ai manager di investimenti, ma poi ho pensato che passo più di 9 ore al lavoro ogni giorno, quindi non volevo che il mio sacro tempo libero fosse occupato da cose legate al lavoro.

Pochi giorni dopo, ho ricevuto il seguente messaggio su una delle mie chat WhatsApp di gruppo:

Questo ha fatto scattare un’idea. E se potessi usare la scienza dei dati e le competenze di apprendimento automatico apprese nel corso per aumentare la probabilità che una particolare conversazione su Tinder sia un ‘successo’? Così si è formata la mia idea di progetto. Il prossimo passo? Dillo alla mia ragazza…

Alcuni fatti su Tinder, pubblicati da Tinder stesso:

  • l’app ha circa 50 milioni di utenti, 10 milioni dei quali usano l’app quotidianamente
  • dal 2012, ci sono stati oltre 20 miliardi di incontri su Tinder
  • un totale di 1.6 miliardi di strisciate si verificano ogni giorno sull’app
  • l’utente medio trascorre 35 minuti AL GIORNO sull’app
  • si stima che 1,5 milioni di appuntamenti si verificano alla settimana grazie all’app

Problema 1: ottenere dati

Ma come potrei ottenere dati da analizzare? Per ovvie ragioni, le conversazioni degli utenti di Tinder e la cronologia delle partite ecc. sono codificate in modo sicuro, in modo che nessuno oltre all’utente possa vederle. Dopo un po’ di ricerche su Google, mi sono imbattuto in questo articolo:

Questo mi ha portato alla consapevolezza che Tinder è stato costretto a costruire un servizio in cui è possibile richiedere i propri dati da loro, come parte della legge sulla libertà di informazione. Cue, il pulsante ‘scarica dati’:

Una volta cliccato, devi aspettare 2-3 giorni lavorativi prima che Tinder ti invii un link da cui scaricare il file dei dati. Ho atteso con ansia questa e-mail, essendo stato un avido utente di Tinder per circa un anno e mezzo prima della mia attuale relazione. Non avevo idea di come mi sarei sentita, sfogliando un così gran numero di conversazioni che alla fine (o non così alla fine) si erano spente.

Dopo quella che sembrava un’eternità, l’e-mail arrivò. I dati erano (fortunatamente) in formato JSON, quindi un rapido download e caricamento in python e bosh, accesso alla mia intera storia di incontri online.

I dati

Il file dei dati è diviso in 7 sezioni diverse:

Di queste, solo due erano davvero interessanti/utili per me:

  • Messaggi
  • Usage

A un’ulteriore analisi, il file “Usage” contiene dati su “App Opens”, “Matches”, “Messages Received”, “Messages Sent”, “Swipes Right” e “Swipes Left”, e il “Messages file” contiene tutti i messaggi inviati dall’utente, con data e ora e l’ID della persona a cui il messaggio è stato inviato. Come sono sicuro che puoi immaginare, questo ha portato ad una lettura piuttosto interessante…

Problema 2: Ottenere più dati

Destra, ho i miei dati di Tinder, ma al fine di ottenere risultati che non siano completamente statisticamente insignificanti/fortemente distorti, ho bisogno di ottenere i dati di altre persone. Ma come faccio a farlo…

C’è una quantità non irrilevante di suppliche.

Miraculamente, sono riuscito a convincere 8 dei miei amici a darmi i loro dati. Andavano da utenti esperti a utenti sporadici “che usano quando sono annoiati”, il che mi ha dato una sezione trasversale ragionevole dei tipi di utenti. Il più grande successo? Anche la mia ragazza mi ha dato i suoi dati.

Un’altra cosa difficile era definire un “successo”. Ho stabilito che la definizione fosse o un numero ottenuto dall’altra parte, o un appuntamento tra i due utenti. Poi, attraverso una combinazione di domande e analisi, ho classificato ogni conversazione come un successo o meno.

Problema 3: E adesso?

Va bene, ho più dati, ma adesso? Il corso Data Science si concentrava sulla scienza dei dati e l’apprendimento automatico in Python, quindi importarli in python (ho usato i notebook di Anaconda/Jupyter) e pulirli sembrava un passo logico successivo. Parlate con qualsiasi scienziato dei dati e vi dirà che la pulizia dei dati è a) la parte più noiosa del suo lavoro e b) la parte del suo lavoro che occupa l’80% del suo tempo. La pulizia è noiosa, ma è anche fondamentale per essere in grado di estrarre risultati significativi dai dati.

Ho creato una cartella, in cui ho lasciato cadere tutti i 9 file di dati, poi ho scritto un piccolo script per ciclare attraverso questi, importarli nell’ambiente e aggiungere ogni file JSON a un dizionario, con le chiavi che sono i nomi di ogni persona. Ho anche diviso i dati “Usage” e i dati dei messaggi in due dizionari separati, in modo da rendere più facile condurre l’analisi su ciascun set di dati separatamente.

Problema 4: indirizzi email diversi portano a set di dati diversi

Quando ci si iscrive a Tinder, la stragrande maggioranza delle persone usa il proprio account Facebook per accedere, ma le persone più prudenti usano semplicemente il loro indirizzo email. Ahimè, avevo una di queste persone nel mio set di dati, il che significa che avevo due set di file per loro. Questo è stato un po’ doloroso, ma nel complesso non troppo difficile da gestire.

Avendo importato i dati nei dizionari, ho poi iterato attraverso i file JSON ed estratto ogni punto di dati rilevante in un dataframe pandas, con un aspetto simile a questo:

Dati di utilizzo con nomi rimossi

Dati del messaggio con nomi rimossi

Prima che qualcuno si preoccupi di includere l’id nel dataframe sopra, Tinder ha pubblicato questo articolo, affermando che è impossibile cercare gli utenti se non si è abbinati con loro:

https://www.help.tinder.com/hc/en-us/articles/115003359366-Can-I-search-for-a-specific-person-on-Tinder-

Ora che i dati erano in un bel formato, sono riuscito a produrre alcune statistiche riassuntive di alto livello. Il set di dati conteneva:

  • 2 ragazze
  • 7 ragazzi
  • 9 partecipanti
  • 502 conversazioni con un messaggio
  • 1330 conversazioni uniche
  • 6.344 incontri
  • 6.750 messaggi ricevuti
  • 8,755 messaggi inviati
  • 34.233 aperture di app
  • 94.027 strisciate a destra
  • 403.149 strisciate a sinistra

Bene, avevo una quantità decente di dati, ma non mi ero preso il tempo di pensare a come sarebbe stato un prodotto finale. Alla fine, ho deciso che il prodotto finale sarebbe stato una lista di raccomandazioni su come migliorare le proprie possibilità di successo con gli incontri online.

E così, con i dati in un bel formato, l’esplorazione poteva iniziare!

L’esplorazione

Ho iniziato a guardare i dati “Uso”, una persona alla volta, per pura curiosità. Ho fatto questo tracciando alcuni grafici, che vanno da semplici grafici metrici aggregati, come il seguente:

a grafici metrici derivati più coinvolti, come il giustamente chiamato ‘Grafico della fedeltà’, mostrato di seguito:

Il primo grafico è abbastanza auto esplicativo, ma il secondo potrebbe richiedere qualche spiegazione. Essenzialmente, ogni riga/linea orizzontale rappresenta una conversazione unica, con la data di inizio di ogni riga che è la data del primo messaggio inviato all’interno della conversazione, e la data di fine che è l’ultimo messaggio inviato nella conversazione. L’idea di questo grafico era quella di cercare di capire come le persone usano l’app in termini di messaggistica con più di una persona alla volta.

Anche se interessante, non ho davvero visto alcuna tendenza evidente o modelli che potessi interrogare ulteriormente, così mi sono rivolto ai dati aggregati “Usage”. Inizialmente ho iniziato a guardare varie metriche nel tempo divise per utente, per cercare di determinare qualsiasi tendenza di alto livello:

ma niente si è subito distinto.

Ho poi deciso di guardare più a fondo nei dati dei messaggi, che, come detto prima, erano dotati di una comoda marca temporale. Dopo aver aggregato il conteggio dei messaggi per giorno della settimana e ora del giorno, mi sono reso conto di essermi imbattuto nella mia prima raccomandazione.

Le 9 di sera di domenica sono il momento migliore per ‘Tinder’, mostrato di seguito come l’ora/data in cui è stato inviato il maggior volume di messaggi nel mio campione.

Qui ho usato il volume di messaggi inviati come proxy per il numero di utenti online ad ogni ora, quindi ‘Tindering’ a quest’ora ti assicurerà di avere il più grande pubblico.

Ho poi iniziato a guardare la lunghezza del messaggio in termini di parole e lettere, così come il numero di messaggi per conversazione. Inizialmente, puoi vedere qui sotto che non c’era molto che saltasse fuori… (qui un ‘successo’ è rosso)

Ma una volta che inizi a scavare, ci sono alcune tendenze chiare:

  • I messaggi più lunghi hanno più probabilità di generare un successo (fino a un certo punto)
  • Il numero medio di messaggi in una conversazione in cui viene trovato un ‘successo’ è 27, con una mediana di 21.

Queste osservazioni portano alla mia seconda e terza raccomandazione.

La seconda raccomandazione:

Passa più tempo a costruire i tuoi messaggi, e per l’amor di Dio non usare il text speak… generalmente le parole più lunghe sono parole migliori. Un avvertimento qui è che i dati contengono link, che contano come parole lunghe, quindi questo può alterare i risultati.

La terza raccomandazione:

Non essere troppo frettoloso quando cerchi di ottenere un numero. “Ehi, sei in forma, qual è il tuo numero” è probabilmente la cosa peggiore che puoi dire in termini di possibilità. Allo stesso modo, non lasciarlo troppo a lungo. Ovunque tra il 20° e il 30° messaggio è meglio.

Conteggio medio dei messaggi delle conversazioni di successo rispetto a quelle senza successo

Dopo aver esaminato la lunghezza delle parole/messaggio/conversazione piuttosto estesamente, ho deciso di esaminare il sentiment. Ma non sapevo assolutamente nulla su come farlo. Durante il corso, avevamo coperto un po’ di elaborazione del linguaggio naturale (bag of words, una codifica a caldo, tutti i preprocessi necessari ecc. insieme a vari algoritmi di classificazione), ma non avevamo toccato il sentiment. Ho passato un po’ di tempo a ricercare l’argomento, e ho scoperto che il nltk sentiment.vader SentimentIntensityAnalyzer sarebbe stato un bel colpo.

Questo funziona dando all’utente quattro punteggi, basati sulla percentuale del testo inserito che era:

  • positivo
  • neutro
  • negativo
  • una combinazione dei tre

Per fortuna, si occupa anche di cose come il contesto delle parole, lo slang e persino gli emoji. Dato che stavo guardando il sentiment, non è stato fatto alcun pre-processing (minuscolo, rimozione della punteggiatura ecc.) al fine di non rimuovere alcun contesto nascosto.

Ho iniziato questa analisi alimentando ogni intera conversazione nell’analizzatore, ma mi sono subito reso conto che questo non funzionava davvero, poiché il sentiment della conversazione tendeva rapidamente a 1 dopo i primi messaggi, e faccio fatica a credere che una conversazione di 100 messaggi fosse sicura al 100% per tutto il tempo.

Ho quindi suddiviso le conversazioni nei loro messaggi costituenti e li ho inseriti uno alla volta, facendo la media dei punteggi a livello di conversazione. Questo ha prodotto un risultato molto più realistico secondo me:

Suddividendo questi dati per ‘Successo’ o ‘Nessun successo’, ho visto emergere rapidamente un modello:

Questo mi ha portato alla quarta raccomandazione.

La quarta raccomandazione:

Siate positivi, ma non troppo positivi.

Il sentiment medio per una conversazione di successo era 0,31 contro 0,20 per una conversazione non di successo. Detto questo, essere troppo positivi è quasi peggio che essere troppo negativi.

L’ultimo vicolo che ho esplorato era quale effetto avessero i vari dettagli del primo messaggio sul successo della conversazione. I pensieri iniziali di cose che potrebbero avere un effetto erano:

  • lunghezza
  • se è stato usato un nome
  • sentimento
  • presenza di emoji
  • contenuto esplicito

Come previsto, più lungo è il primo messaggio, maggiore è la probabilità che quella conversazione continui fino ad un ‘Successo’. Come estensione, si raddoppia la probabilità di successo non usando solo un’apertura di una parola, per esempio non dicendo solo ‘hey’ o ‘ciao’ o ‘daayyuumm’ (esempio reale).

Un po’ più sorprendentemente, usare un nome nel primo messaggio ha avuto un effetto molto piccolo sul ‘Success Ratio’ (No. Successes/No. No Successes).

Il sentiment del primo messaggio è risultato essere circa 0,09 più alto per le conversazioni di “Successo” rispetto a quelle di “Non Successo”, il che non è stato davvero una sorpresa… se insulti qualcuno in un primo messaggio, è intuitivamente meno probabile che risponda.

Analizzare gli emoji era un compito a cui non avevo davvero pensato, e aveva il potenziale di essere difficile. Fortunatamente, esiste un pacchetto chiamato ‘emoji’, che rileva automaticamente la presenza di emoji nel testo. Sfortunatamente, e con mia grande costernazione, sembra che usare un emoji in un primo messaggio aumenti la probabilità di ottenere un ‘Successo’.

Ora parliamo di contenuti espliciti… Un altro che aveva il potenziale di essere abbastanza complicato, poiché non ci sono librerie integrate che raccolgono l’uso di imprecazioni ecc. (che io sappia). Fortunatamente mi sono imbattuto in questo:

Vi posso assicurare che ci sono dei cracker assoluti contenuti in esso.

Ho poi controllato per vedere quali primi messaggi contenevano una parola di questa lista, 40 dei quali lo facevano. Come è sempre il caso con cose come questa, ho trovato alcuni interessanti casi limite:

Si trattava di un tizio che parlava dei suoi gambali da canottaggio…

Risultati? Risulta che nessuno dei primi messaggi che contenevano contenuti espliciti ha portato ad un ‘Successo’

Questo mi porta alla mia quinta ed ultima raccomandazione.

La quinta raccomandazione:

Quando si invia un primo messaggio:

  • Sii positivo
  • 8 parole è ottimale
  • Usa un emoji o due
  • Non essere esplicito

Così per riassumere

  1. Usa Tinder alle 9 di sera di Domenica per avere il massimo dell’audience
  2. Passa del tempo a costruire i messaggi e non usare il text speak
  3. Preparati a chiedere un numero o un appuntamento tra il 20° e il 30° messaggio
  4. Sii positivo, ma non troppo positivo
  5. Invia qualcosa di diverso da ‘hey’ come primo messaggio, punta a circa 8 parole, magari usa un emoji e non essere esplicito

Alcune insidie dei dati:

  1. Il mio set di dati è un campione molto, molto piccolo, rendendo la maggior parte delle intuizioni inutili
  2. Il set di dati è distorto verso il tipo di persone che conosco, così come è prevenuto verso gli uomini
  3. Il set di dati contiene solo un lato della conversazione
  4. I messaggi e le statistiche di utilizzo non sono necessariamente allineati a causa degli utenti che disinstallano e reinstallano l’applicazione
  5. Nessuna tecnica NLP sarà perfetta a causa del sarcasmo/variazioni nel modo di parlare delle persone

Alcune idee per il lavoro futuro:

  • Raccogliere più dati
  • Fare di più per determinare i risultati statisticamente significativi rispetto alle osservazioni
  • Guardare l’analisi delle conversazioni per argomento – che tipo di messaggi compongono il sentimento buono e cattivo
  • Provare ad analizzare il sarcasmo
  • Indagare altre app (Bumble, Hinge ecc.)
  • Qualche tipo di analisi di classificazione se fossero inclusi più dati, dato che abbiamo avuto solo circa 70 successi
  • Guardare di più nelle suddivisioni di genere se fossero inclusi più dati

Alcuni fatti interessanti dai dati:

  • Più strisciate da una singola persona in un singolo giorno: 8096
  • I ragazzi sono più propensi a lasciar passare molto tempo (circa 7 giorni) prima di inviare un secondo messaggio
  • Fare una domanda in un primo messaggio diminuisce effettivamente le possibilità di successo
  • Le donne passano il dito a destra in media l’1% delle volte, mentre gli uomini lo fanno ~50% delle volte
  • Per app aperta, le donne passano il dito 3 volte più volte degli uomini

Altra lettura:

  • È stato pubblicato un documento chiamato ‘A First Look at User Activity on Tinder’, link qui
  • C’è un’API di Tinder, ma sfortunatamente è solo per le persone che usano l’app piuttosto che dare accesso ad un database di qualche tipo. Comunque, usarla per testare certe ipotesi potrebbe essere interessante.
  • Tinderbox è un software che può imparare da chi sei attratto attraverso la riduzione della dimensionalità. Ha anche un chatbot incorporato se vuoi davvero automatizzare il processo…

Grazie per aver letto, qualsiasi idea per il lavoro futuro sarebbe molto apprezzata!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.