Mina vänner gav mig sina Tinder-data…
Det var onsdagen den 3 oktober 2018 och jag satt på bakre raden på General Assembly Data Science-kursen. Min handledare hade just nämnt att varje student skulle komma med två idéer till datavetenskapsprojekt, varav jag skulle få presentera ett för hela klassen i slutet av kursen. Mitt huvud blev helt tomt, en effekt som det i allmänhet har på mig att få så fria händer att välja nästan vad som helst. Jag tillbringade de följande dagarna intensivt med att försöka komma på ett bra/intressant projekt. Jag arbetar för en investeringsförvaltare, så min första tanke var att välja något investeringsförvaltarrelaterat, men sedan tänkte jag att jag tillbringar mer än nio timmar på jobbet varje dag, så jag ville inte att min heliga fritid också skulle upptas av jobbrelaterade saker.
Ett par dagar senare fick jag nedanstående meddelande i en av mina grupp WhatsApp-chattar:
Detta väckte en idé. Tänk om jag kunde använda de kunskaper om datavetenskap och maskininlärning som jag lärt mig i kursen för att öka sannolikheten för att en viss konversation på Tinder ska bli en ”framgång”? Så formades min projektidé. Nästa steg? Berätta för min flickvän…
Några fakta om Tinder, publicerade av Tinder själva:
- appen har cirka 50 miljoner användare, varav 10 miljoner använder appen dagligen
- Sedan 2012 har det funnits över 20 miljarder matchningar på Tinder
- totalt 1.6 miljarder swipes sker varje dag på appen
- den genomsnittliga användaren spenderar 35 minuter PER DAG på appen
- det uppskattas att 1,5 miljoner dejter sker per vecka tack vare appen
Problem 1: Att få fram data
Men hur skulle jag få fram data att analysera? Av uppenbara skäl är användarens Tinder-konversationer och matchningshistorik etc. säkert kodade så att ingen annan än användaren kan se dem. Efter att ha googlat lite kom jag över den här artikeln:
Detta ledde mig till insikten att Tinder nu har tvingats bygga upp en tjänst där du kan begära dina egna uppgifter från dem, som en del av lagen om informationsfrihet. Knapparna för att ladda ner data:
När du väl har klickat på knappen måste du vänta 2-3 arbetsdagar innan Tinder skickar dig en länk från vilken du kan ladda ner datafilen. Jag väntade med spänning på detta mejl, eftersom jag varit en ivrig Tinder-användare i ungefär ett och ett halvt år före mitt nuvarande förhållande. Jag hade ingen aning om hur jag skulle känna mig, när jag bläddrade tillbaka på ett så stort antal konversationer som så småningom (eller inte så småningom) hade spruckit ut.
Efter vad som kändes som en evighet kom mejlet. Uppgifterna var (tack och lov) i JSON-format, så en snabb nedladdning och uppladdning till python och bosh, tillgång till hela min dejtinghistoria på nätet.
Data
Datafilen är uppdelad i 7 olika avsnitt:
Av dessa var det bara två som var riktigt intressanta/användbara för mig:
- Messages
- Usage
Vid ytterligare analys innehåller ”Usage”-filen data om ”App Opens” (öppningar av appen), ”Matches” (matchningar), ”Messages Received” (mottagna meddelanden), ”Messages Sent” (skickade meddelanden), ”Swipes Right” (svep till höger) och ”Swipes Left” (svep till vänster) och ”Messages file” (meddelandefilen) alla meddelanden som skickats av användaren med tids- och datumstämpel och ID för den person som meddelandet skickades till. Som ni säkert kan föreställa er ledde detta till ganska intressant läsning…
Problem 2: Att få fram mer data
Okej, jag har mina egna Tinder-data, men för att alla resultat jag uppnår inte ska vara helt statistiskt obetydliga/stort snedvridna måste jag få fram andras data. Men hur gör jag det…
Sätt igång med en icke obetydlig mängd tiggeri.
Mirakulöst nog lyckades jag övertala 8 av mina vänner att ge mig deras data. De varierade från erfarna användare till sporadiska användare som bara använder dem när de är uttråkade, vilket gav mig ett rimligt tvärsnitt av användartyperna. Den största framgången? Min flickvän gav mig också sina uppgifter.
En annan knepig sak var att definiera en ”framgång”. Jag bestämde mig för att definitionen skulle vara att man antingen fick ett nummer från den andra parten eller att de två användarna gick ut på en träff. Genom en kombination av att fråga och analysera kategoriserade jag sedan varje samtal som antingen en framgång eller inte.
Problem 3: Vad händer nu?
Okej, jag har fått mer data, men vad händer nu? Data Science-kursen fokuserade på datavetenskap och maskininlärning i Python, så att importera dem till Python (jag använde anaconda/Jupyter notebooks) och rensa dem verkade vara ett logiskt nästa steg. Prata med vilken datavetare som helst och de kommer att berätta att rensning av data är a) den tråkigaste delen av deras arbete och b) den del av deras arbete som tar 80 % av deras tid i anspråk. Rengöring är tråkigt, men är också avgörande för att kunna utvinna meningsfulla resultat från data.
Jag skapade en mapp i vilken jag släppte alla nio datafiler och skrev sedan ett litet skript för att cykla igenom dessa, importera dem till miljön och lägga till varje JSON-fil i ett lexikon, där nycklarna är varje persons namn. Jag delade också upp ”Usage”-data och meddelandedata i två separata ordböcker, för att göra det lättare att genomföra analyser på varje dataset separat.
Problem 4: Olika e-postadresser leder till olika dataset
När du registrerar dig på Tinder använder de allra flesta sitt Facebook-konto för att logga in, men mer försiktiga personer använder bara sin e-postadress. Tyvärr hade jag en av dessa personer i mitt dataset, vilket innebär att jag hade två uppsättningar filer för dem. Detta var lite jobbigt, men på det hela taget inte alltför svårt att hantera.
Efter att ha importerat data till ordböcker itererade jag sedan genom JSON-filerna och extraherade varje relevant datapunkt till ett pandas-dataframe, som såg ut ungefär så här:
till mer involverade, härledda metriska plottar, som den passande benämningen ”Loyalty Plot”, som visas nedan:
Det första diagrammet är ganska självförklarande, men det andra kan behöva förklaras. I huvudsak representerar varje rad/horisontell linje en unik konversation, där startdatumet för varje rad är datumet för det första meddelandet som skickades i konversationen och slutdatumet är det sista meddelandet som skickades i konversationen. Tanken med den här diagrammet var att försöka förstå hur folk använder appen när det gäller att skicka meddelanden till mer än en person på en gång.
Tyvärr såg jag inga uppenbara trender eller mönster som jag kunde förhöra ytterligare, så jag vände mig till de aggregerade uppgifterna om ”Användning”. Jag började först titta på olika mätvärden över tid uppdelade per användare, för att försöka fastställa några trender på hög nivå:
men ingenting stack omedelbart ut.
Jag bestämde mig sedan för att titta djupare på meddelandeuppgifterna, som som som tidigare nämnts kom med en praktisk tidsstämpel. Efter att ha aggregerat antalet meddelanden upp efter veckodag och timme på dagen insåg jag att jag hade snubblat över min första rekommendation.
Natten på söndag är den bästa tiden att ”Tinder”, vilket visas nedan som den tid/det datum då den största volymen meddelanden skickades inom mitt urval.
Här har jag använt volymen av skickade meddelanden som en approximation för antalet användare som är online vid varje tidpunkt, så att ”Tinder” vid den här tiden kommer att se till att du har den största publiken.
Jag började sedan titta på meddelandets längd i termer av både ord och bokstäver, samt antalet meddelanden per konversation. Till en början kan du se nedan att det inte var mycket som stack ut… (här är en ”framgång” röd)
Men när du väl börjar gräva så finns det några tydliga trender:
- längre meddelanden är mer sannolika att generera en framgång (upp till en viss punkt)
- Det genomsnittliga antalet meddelanden i en konversation där en ”framgång” hittas är 27, med en median på 21.
Dessa observationer leder till min andra och tredje rekommendation.
Den andra rekommendationen:
Besök mer tid för att konstruera dina meddelanden, och för guds skull använd inte textspråk… i allmänhet är längre ord bättre ord. En invändning här är att uppgifterna innehåller länkar, som räknas som långa ord, så detta kan snedvrida resultaten.
Den tredje rekommendationen:
Var inte för hastig när du försöker få fram en siffra. ”hey, ur fit, what’s ur number” är förmodligen det sämsta du kan säga när det gäller dina chanser. På samma sätt ska du inte låta det dröja för länge. Någonstans mellan ditt 20:e och 30:e meddelande är bäst.
Efter att ha tittat på längden på ord/meddelanden/konversationer ganska mycket bestämde jag mig sedan för att titta på sentiment. Men jag visste absolut ingenting om hur man gör det. Under kursen hade vi behandlat lite naturlig språkbehandling (bag of words, one hot encoding, all nödvändig förbehandling etc. tillsammans med olika klassificeringsalgoritmer), men vi hade inte berört sentiment. Jag ägnade lite tid åt att undersöka ämnet och upptäckte att nltk sentiment.vader SentimentIntensityAnalyzer skulle vara ett ganska bra tips.
Detta fungerar genom att ge användaren fyra poäng, baserat på hur stor andel av den inmatade texten som var:
- positiv
- neutral
- negativ
- en kombination av de tre
Glatt nog hanterar den även saker som ordkontext, slang och till och med emojis. Eftersom jag tittade på sentimentet gjordes ingen förbearbetning (små bokstäver, borttagning av interpunktion etc.) för att inte ta bort någon dold kontext.
Jag började analysen med att mata in varje hel konversation i analysatorn, men insåg snabbt att detta inte riktigt fungerade, eftersom sentimentet i konversationen snabbt tenderade att bli 1 efter de första meddelandena och jag har svårt att tro att en konversation med 100 meddelanden var 100 % säker hela tiden.
Jag delade sedan upp konversationerna i sina beståndsdelar och matade in dem genom ett i taget, med ett genomsnitt av poängen upp till konversationsnivå. Detta gav ett mycket mer realistiskt resultat enligt min mening:
Om jag delade upp dessa data efter ”framgång” eller ”ingen framgång” såg jag snabbt ett mönster framträda:
Detta gav mig en fjärde rekommendation.
Den fjärde rekommendationen:
Var positiv, men inte för positiv.
Den genomsnittliga känslan för en lyckad konversation var 0,31 jämfört med 0,20 för en icke lyckad konversation. Med det sagt är det nästan lika illa att vara för positiv som att vara för negativ.
Den sista gränden jag undersökte var vilken effekt olika detaljer om det första meddelandet hade på samtalets framgång. Initiala tankar om saker som kunde ha en effekt var:
- längd
- om ett namn användes
- sentiment
- närvaro av emojis
- explicit innehåll
Som väntat är det så att ju längre det första meddelandet är, desto större är sannolikheten att den konversationen kommer att fortsätta till en ”framgång”. I förlängningen fördubblar man sannolikheten för framgång genom att inte bara använda en öppnare med ett ord, t.ex. genom att inte bara säga ”hey” eller ”hi” eller ”daayyuumm” (verkligt exempel).
Mässigt mer överraskande är att användandet av ett namn i det första meddelandet hade en mycket liten effekt på ”framgångskvoten” (antal lyckade meddelanden/ antal icke lyckade meddelanden).
Sentimentet i det första meddelandet visade sig vara ungefär 0,09 högre för ”framgångsrika” konversationer än för ”icke framgångsrika” konversationer, vilket egentligen inte var någon överraskning… om du förolämpar någon i ett första meddelande är det intuitivt mindre troligt att de kommer att svara.
Analysera emojis var en uppgift som jag inte riktigt hade tänkt på, och som hade potential att bli knepig. Som tur är finns det ett paket som heter ”emoji”, som automatiskt tar upp närvaron av emojis i en text. Tyvärr, och till min förskräckelse, verkar det som att om man använder en emoji i ett första meddelande så ökar sannolikheten för att man ska få ”Success”.
Nu till uttryckligt innehåll… Ännu en fråga som kunde bli ganska knepig, eftersom det inte finns några inbyggda bibliotek som fångar upp användandet av svordomar osv. (som jag känner till). Lyckligtvis snubblade jag över detta:
Jag kan försäkra er om att det finns en del absoluta knäppgökar i det.
Jag kontrollerade sedan vilka första meddelanden som innehöll ett ord från denna lista, och 40 av dem gjorde det. Som alltid när det gäller sådana här saker hittade jag några intressanta fall:
FYI detta var en kille som pratade om sina roddleggings…
Resultat? Det visar sig att inget av de första meddelanden som innehöll explicit innehåll ledde till en ”framgång”
Detta leder mig till min femte och sista rekommendation.
Den femte rekommendationen:
När du skickar ett första meddelande:
- Var positiv
- 8 ord är optimalt
- Använd en emoji eller två
- Var inte explicit
Så att sammanfatta
- Använd Tinder klockan 21.00 på en söndag för maximal publik
- Besök tid för att konstruera meddelanden och använd inte textspråk
- Förbered dig på att be om ett nummer eller en dejt mellan det 20:e och 30:e meddelandet
- Var positiv, men inte för positiv
- Sänd något annat än ”hej” som första meddelande, sikta på cirka 8 ord, använd kanske en emoji och var inte explicit
Några fallgropar i uppgifterna:
- Mitt dataset är ett mycket, mycket litet urval, vilket gör de flesta insikterna värdelösa
- Dataset är snedvridet mot den typ av människor jag känner, samt att den är snedvriden mot män
- Datasetetet innehåller bara en sida av samtalet
- Meddelande- och användningsstatistiken stämmer inte nödvändigtvis överens på grund av att användarna avinstallerar och återinstallerar appen
- Ingen NLP-teknik kommer att vara perfekt på grund av sarkasm/variationer i människors sätt att prata
För framtida arbete har jag några idéer:
- Samla in mer data
- Göra mer för att fastställa statistiskt signifikanta resultat jämfört med observationer
- Kolla på analys av konversationer efter ämne – vilken typ av meddelanden utgör den goda och den dåliga stämningen
- Försök att undersöka sarkasm
- Undersöka andra appar (Bumble, Hinge osv.).)
- Någon form av klassificeringsanalys om mer data inkluderades, eftersom vi bara hade 70ish framgångar
- Leta mer efter könsuppdelningar om mer data inkluderades
För att få några intressanta fakta från data:
- Mest swipes av en enskild person på en enda dag: 8096
- Killar är mer benägna att lämna en lång tid (7ish dagar) innan de skickar ett andra meddelande
- Att ställa en fråga i ett första meddelande minskar faktiskt din chans att lyckas
- Kvinnor sveper till höger i genomsnitt 1 % av tiden, medan männen gör det ~50 % av tiden
- På en app som öppnas sveper kvinnor tre gånger så många gånger som män
Fortsatt läsning:
- En artikel publicerades med titeln ”A First Look at User Activity on Tinder”, länk här
- Det finns ett Tinder API, men tyvärr är det bara för personer som använder appen snarare än att ge tillgång till en databas av något slag. Hur som helst kan det vara intressant att använda det för att testa vissa hypoteser.
- Tinderbox är en mjukvara som kan lära sig vem du är attraherad av via dimensionalitetsreduktion. Den har också en chatbot inbyggd om du verkligen vill automatisera processen…
Tack för att du läste, alla idéer för framtida arbete skulle vara mycket uppskattade!