Mine venner gav mig deres Tinder-data…

aug 5, 2021
admin

Det var onsdag den 3. oktober 2018, og jeg sad på den bagerste række på General Assembly Data Science-kurset. Min underviser havde netop nævnt, at hver studerende skulle komme med to idéer til datavidenskabsprojekter, hvoraf jeg skulle præsentere det ene for hele klassen ved kursets afslutning. Jeg blev helt blank i hovedet, en effekt, som det generelt har på mig at få så frie hænder til at vælge næsten hvad som helst. Jeg brugte de næste par dage intensivt på at forsøge at finde på et godt/interessant projekt. Jeg arbejder for en investeringsforvalter, så min første tanke var at vælge noget investeringsforvalterrelateret, men så tænkte jeg, at jeg bruger 9+ timer på arbejde hver dag, så jeg ville ikke have, at min hellige fritid også skulle bruges på arbejdsrelaterede ting.

Et par dage senere modtog jeg nedenstående besked på en af mine gruppe WhatsApp-chats:

Dette vakte en idé. Hvad hvis jeg kunne bruge de færdigheder inden for datalogi og maskinlæring, som jeg lærte på kurset, til at øge sandsynligheden for, at en bestemt samtale på Tinder bliver en “succes”? Således blev min projektidé dannet. Det næste skridt? Fortælle min kæreste…

Et par Tinder-fakta, offentliggjort af Tinder selv:

  • appen har omkring 50 mio. brugere, hvoraf 10 mio. bruger appen dagligt
  • Siden 2012 har der været over 20 mia. matches på Tinder
  • i alt 1.6 mia. swipes sker hver dag på appen
  • den gennemsnitlige bruger bruger bruger 35 minutter PER DAG på appen
  • der sker anslået 1,5 mio. dates PER UGE på grund af appen

Problem 1: Få data

Men hvordan skulle jeg få data til at analysere? Af indlysende årsager er brugerens Tinder-samtaler og matchhistorik osv. sikkert kodet, så ingen andre end brugeren kan se dem. Efter lidt googling faldt jeg over denne artikel:

Dette førte mig til den erkendelse, at Tinder nu er blevet tvunget til at opbygge en tjeneste, hvor du kan anmode om dine egne data fra dem, som en del af loven om informationsfrihed. Cue, the ‘download data’ button:

Når man klikker på den, skal man vente 2-3 arbejdsdage, før Tinder sender et link, hvorfra man kan downloade datafilen. Jeg ventede spændt på denne e-mail, da jeg har været en ivrig Tinder-bruger i omkring halvandet år før mit nuværende forhold. Jeg havde ingen anelse om, hvordan jeg ville have det, når jeg bladrede tilbage på et så stort antal samtaler, der til sidst (eller ikke så til sidst) var gået i vasken.

Efter hvad der føltes som en evighed, kom e-mailen. Dataene var (heldigvis) i JSON-format, så en hurtig download og upload til python og bosh, adgang til hele min online dating historie.

Dataene

Datafilen er opdelt i 7 forskellige sektioner:

Af disse var kun to virkelig interessante/brugelige for mig:

  • Messages
  • Usage

Ved nærmere analyse indeholder filen “Usage” data om “App Opens”, “Matches”, “Messages Received”, “Messages Sent”, “Swipes Right” og “Swipes Left”, og filen “Messages” indeholder alle de beskeder, som brugeren har sendt, med tids- og datostempler og ID på den person, som beskeden blev sendt til. Som du sikkert kan forestille dig, førte dette til noget ret interessant læsning…

Problem 2: Få flere data

Okay, jeg har mine egne Tinder-data, men for at eventuelle resultater, jeg opnår, ikke skal være fuldstændig statistisk ubetydelige/stort skævvredne, skal jeg have andres data. Men hvordan gør jeg det…

Cue en ikke ubetydelig mængde tiggeri.

Mirakuløst lykkedes det mig at overtale 8 af mine venner til at give mig deres data. De varierede fra erfarne brugere til sporadiske “brug når de keder sig” brugere, hvilket gav mig et rimeligt tværsnit af brugertyper, følte jeg. Den største succes? Min kæreste gav mig også sine data.

En anden vanskelig ting var at definere en “succes”. Jeg besluttede mig for, at definitionen skulle være, at der enten blev opnået et tal fra den anden part, eller at de to brugere gik på en date. Derefter kategoriserede jeg gennem en kombination af at spørge og analysere hver enkelt samtale som enten en succes eller ej.

Problem 3: Hvad nu?

Okay, jeg har fået flere data, men hvad nu? Data Science-kurset fokuserede på datavidenskab og maskinlæring i Python, så at importere det til python (jeg brugte anaconda / jupyter notebooks) og rense det virkede som et logisk næste skridt. Tal med enhver dataforsker, og de vil fortælle dig, at rensning af data er a) den mest kedelige del af deres arbejde og b) den del af deres arbejde, der tager 80% af deres tid. Rensning er kedeligt, men er også afgørende for at kunne uddrage meningsfulde resultater fra dataene.

Jeg oprettede en mappe, hvori jeg smed alle 9 datafiler, og skrev derefter et lille script til at cykle gennem disse, importere dem til miljøet og tilføje hver JSON-fil til en ordbog, hvor nøglerne er hver persons navn. Jeg opdelte også “Usage”-dataene og meddelelsesdataene i to separate ordbøger for at gøre det lettere at foretage analyser på hvert datasæt separat.

Problem 4: Forskellige e-mail-adresser fører til forskellige datasæt

Når du tilmelder dig Tinder, bruger langt de fleste mennesker deres Facebook-konto til at logge ind, men mere forsigtige mennesker bruger bare deres e-mail-adresse. Desværre havde jeg en af disse personer i mit datasæt, hvilket betyder, at jeg havde to sæt filer for dem. Dette var en smule besværligt, men generelt ikke alt for svært at håndtere.

Har jeg importeret dataene i ordbøger, itererede jeg derefter gennem JSON-filerne og ekstraherede hvert relevant datapunkt i et pandas-dataframe, der så nogenlunde sådan ud:

Brugsdata med navne fjernet

Beskeddata med navne fjernet

Hvor nogen bliver bekymrede over at inkludere id i ovenstående dataframe, Tinder offentliggjorde denne artikel, hvori det fremgår, at det er umuligt at slå brugere op, medmindre du er matchet med dem:

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

Nu da dataene var i et pænt format, lykkedes det mig at producere et par sammenfattende statistikker på højt niveau. Datasættet indeholdt:

  • 2 piger
  • 7 fyre
  • 9 deltagere
  • 502 samtaler med én besked
  • 1330 unikke samtaler
  • 6.344 matches
  • 6.750 modtagne beskeder
  • 8,755 beskeder sendt
  • 34,233 app-åbninger
  • 94,027 højre swipes
  • 403,149 venstre swipes

Godt nok havde jeg en anstændig mængde data, men jeg havde faktisk ikke taget mig tid til at tænke over, hvordan et slutprodukt ville se ud. I sidste ende besluttede jeg, at et slutprodukt ville være en liste med anbefalinger til, hvordan man kan forbedre sine chancer for succes med online dating.

Og således, med dataene i et fint format, kunne udforskningen begynde!

Udforskningen

Jeg startede med at kigge på “Usage”-dataene, én person ad gangen, udelukkende af nysgerrighed. Det gjorde jeg ved at plotte et par diagrammer, lige fra simple aggregerede metriske plot, som f.eks. nedenstående:

til mere involverede, afledte metriske plot, som f.eks. det passende navn “Loyalty Plot”, der er vist nedenfor:

Det første diagram er ret selvforklarende, men det andet skal måske forklares lidt. I det væsentlige repræsenterer hver række/horisontal linje en unik samtale, hvor startdatoen for hver linje er datoen for den første besked, der er sendt i samtalen, og slutdatoen er den sidste besked, der er sendt i samtalen. Ideen med dette plot var at forsøge at forstå, hvordan folk bruger appen med hensyn til at sende beskeder til mere end én person på én gang.

Selv om det var interessant, så kunne jeg ikke rigtig se nogen åbenlyse tendenser eller mønstre, som jeg kunne afhøre yderligere, så jeg vendte mig mod de samlede “Usage”-data. Jeg begyndte i første omgang at se på forskellige målinger over tid opdelt efter bruger for at forsøge at bestemme eventuelle tendenser på højt niveau:

men der var ikke noget, der umiddelbart skilte sig ud.

Jeg besluttede derefter at kigge dybere ind i meddelelsesdataene, der som nævnt kom med et praktisk tidsstempel. Efter at have aggregeret antallet af beskeder op efter ugedag og time på dagen, indså jeg, at jeg var stødt på min første anbefaling.

Den bedste tid til ‘Tinder’ er kl. 21.00 om søndagen, vist nedenfor som det tidspunkt/den dato, hvor den største mængde beskeder blev sendt i min stikprøve.

Her har jeg brugt mængden af sendte beskeder som en proxy for antallet af brugere online på hvert tidspunkt, så ‘Tinder’ på dette tidspunkt vil sikre, at du har det største publikum.

Jeg begyndte derefter at se på længden af beskeden i form af både ord og bogstaver, samt antallet af beskeder pr. samtale. I første omgang kan du se nedenfor, at der ikke var meget, der sprang ud… (her er en ‘succes’ rødt)

Men når man først begynder at grave, er der et par klare tendenser:

  • Længere beskeder er mere tilbøjelige til at generere en succes (op til et vist punkt)
  • Det gennemsnitlige antal beskeder i en samtale, hvor der findes en “succes”, er 27, med en median på 21.

Disse observationer fører til min anden og tredje anbefaling.

Den anden anbefaling:

Brug mere tid på at konstruere dine beskeder, og lad for guds skyld være med at bruge tekstsprog… generelt er længere ord bedre ord. Et forbehold her er, at dataene indeholder links, som tæller som lange ord, så det kan skævvride resultaterne.

Den tredje anbefaling:

Du skal ikke være for hurtig, når du forsøger at få et tal. ‘hey, ur fit, what’s ur number’ er nok det værste, du kan sige i forhold til dine chancer. Ligeledes skal du heller ikke lade det gå for længe. Et sted mellem din 20. og 30. besked er bedst.

Gennemsnitligt antal beskeder i vellykkede vs. ikke-succesfulde samtaler

Efter at have undersøgt længde af ord/beskeder/samtaler ret grundigt, besluttede jeg mig derefter for at se på sentiment. Men jeg vidste absolut intet om, hvordan man gør det. I løbet af kurset havde vi dækket en smule naturlig sprogbehandling (bag of words, one hot encoding, al den nødvendige forbehandling osv. sammen med forskellige klassifikationsalgoritmer), men havde ikke berørt sentiment. Jeg brugte lidt tid på at undersøge emnet og opdagede, at nltk sentiment.vader SentimentIntensityAnalyzer ville være et ret godt skud.

Dette fungerer ved at give brugeren fire scoringer, baseret på den procentdel af den indtastede tekst, der var:

  • positiv
  • neutral
  • negativ
  • en kombination af de tre

Luksusvis tager den også højde for ting som ordkontekst, slang og endda emojis. Da jeg kiggede på sentimentet, blev der ikke foretaget nogen forbehandling (små bogstaver, fjernelse af tegnsætning osv.) for ikke at fjerne nogen skjult kontekst.

Jeg startede denne analyse ved at indlæse hver enkelt hel samtale i analysatoren, men indså hurtigt, at dette ikke rigtig fungerede, da samtalens sentiment hurtigt havde en tendens til 1 efter de første par beskeder, og jeg har svært ved at tro, at en samtale på 100 beskeder var 100 % sikker hele tiden.

Jeg splittede derefter samtalerne op i deres bestanddele og førte dem igennem en ad gangen, idet jeg beregnede et gennemsnit af scorerne op til samtaleniveau. Dette gav efter min mening et langt mere realistisk resultat:

Spaltede jeg disse data op efter “Succes” eller “Ingen succes”, så jeg hurtigt et mønster fremkomme:

Det gav mig en fjerde anbefaling.

Den fjerde anbefaling:

Vær positiv, men ikke for positiv.

Den gennemsnitlige følelse for en vellykket samtale var 0,31 mod 0,20 for en ikke-succesfuld samtale. Når det er sagt, er det næsten lige så slemt at være for positiv som at være for negativ.

Den sidste gyde, jeg undersøgte, var, hvilken effekt forskellige detaljer om den første besked havde på samtalens succes. De første tanker om ting, der kunne have en effekt, var:

  • længde
  • hvorvidt der blev brugt et navn
  • sentiment
  • nærværelse af emojis
  • nærværelse af emojis
  • eksplicit indhold

Som forventet er der større sandsynlighed for, at den pågældende samtale fortsætter til en “succes”, jo længere den første besked er. I forlængelse heraf fordobler man sandsynligheden for succes ved ikke blot at bruge en åbningsbesked med ét ord, f.eks. ved ikke blot at sige “hey” eller “hi” eller “daayyuumm” (virkeligt eksempel).

Det var lidt mere overraskende, at brugen af et navn i den første besked havde meget lille effekt på ‘Succes-forholdet’ (antal succeser/antal succeser uden succeser).

Sentimentet i første besked viste sig at være ca. 0,09 højere for “succesfulde” samtaler end “ikke-succesfulde” samtaler, hvilket ikke rigtig var en overraskelse … hvis du fornærmer nogen i en første besked, er de intuitivt mindre tilbøjelige til at svare.

Analyse af emojis var en opgave, som jeg ikke rigtig havde tænkt over, og som havde potentiale til at blive vanskelig. Heldigvis findes der en pakke kaldet “emoji”, som automatisk opfanger tilstedeværelsen af emojis i en tekst. Desværre, og til min store forfærdelse, ser det ud til, at brugen af en emoji i en første besked øger ens sandsynlighed for at få et “Succes”.

Nu til eksplicit indhold… Endnu en, der havde potentiale til at blive ret tricky, da der ikke findes nogen indbyggede biblioteker, der opfanger brugen af eksplektiver osv. (som jeg kender til). Heldigvis faldt jeg over dette:

Jeg kan forsikre dig om, at der er nogle absolutte knækere indeholdt i det.

Jeg undersøgte derefter, hvilke første meddelelser der indeholdt et ord fra denne liste, og det gjorde 40 af dem. Som det altid er tilfældet med ting som dette, fandt jeg nogle interessante edge-cases:

FYI dette var en fyr, der talte om sine rowing leggings …

Resultater? Det viser sig, at ingen af de første meddelelser, der indeholdt eksplicit indhold, førte til en “Succes”

Dette førte mig til min femte og sidste anbefaling.

Den femte anbefaling:

Når man sender en første besked:

  • Være positiv
  • 8 ord er optimalt
  • Brug en emoji eller to
  • Brug ikke eksplicit

SO TO SUM UP

  1. Brug Tinder kl. 21.00 på en søndag for maksimalt publikum
  2. Brug tid på at konstruere beskederne, og brug ikke tekstsprog
  3. Forbered dig på at bede om et nummer eller en date mellem den 20. og 30. besked
  4. Vær positiv, men ikke for positiv
  5. Send noget andet end “hey” som første besked, sigt efter ca. 8 ord, brug evt. en emoji og vær ikke eksplicit

Et par faldgruber i dataene:

  1. Mit datasæt er en meget, meget lille prøve, hvilket gør de fleste indsigter ubrugelige
  2. Datasættet er forudindtaget i forhold til den type mennesker, jeg kender, samt er forudindtaget i forhold til mænd
  3. Datasættet indeholder kun den ene side af samtalen
  4. Meddelelses- og brugsstatistikken stemmer ikke nødvendigvis overens på grund af brugere, der afinstallerer og geninstallerer appen
  5. Ingen NLP-teknik vil være perfekt på grund af sarkasme/variationer i den måde, folk taler på

Et par ideer til fremtidigt arbejde:

  • Saml flere data
  • Gør mere for at bestemme statistisk signifikante resultater vs. observationer
  • Se på konversationsanalyse efter emne – hvilken type meddelelser udgør den gode og dårlige stemning
  • Forsøg at se på sarkasme
  • Undersøg andre apps (Bumble, Hinge osv.).)
  • En form for klassifikationsanalyse, hvis flere data blev inkluderet, da vi kun havde 70ish succeser
  • Se mere på kønsopdelinger, hvis flere data blev inkluderet

Et par interessante faktabokse fra dataene:

  • Mest swipes af en enkelt person på en enkelt dag: 8096
  • Fyre er mere tilbøjelige til at lade lang tid gå (7ish dage), før de sender en anden besked
  • Stille et spørgsmål i en første besked mindsker faktisk din chance for en succes
  • Kvinder swiper til højre i gennemsnit 1% af tiden, mens mænd gør ~50% af tiden
  • Per app åben, kvinder swiper 3x så mange gange som mænd

Videre læsning:

  • Der blev offentliggjort en artikel med titlen “A First Look at User Activity on Tinder”, link her
  • Der er et Tinder API, men desværre er det kun for folk, der bruger appen, snarere end at give adgang til en database af en slags. Under alle omstændigheder kunne det være interessant at bruge det til at teste visse hypoteser.
  • Tinderbox er et stykke software, der kan lære, hvem du er tiltrukket af via dimensionalitetsreduktion. Det har også en chatbot indbygget, hvis du virkelig ønsker at automatisere processen….

Tak for læsning, alle ideer til fremtidigt arbejde ville blive meget værdsat!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.