Mijn vrienden gaven me hun Tinder-gegevens…

aug 5, 2021
admin

Het was woensdag 3 oktober 2018, en ik zat op de achterste rij van de General Assembly Data Science-cursus. Mijn docent had net gezegd dat elke student met twee ideeën voor data science-projecten moest komen, waarvan ik er een aan het einde van de cursus aan de hele klas zou moeten presenteren. Mijn geest was helemaal leeg, een effect dat ik meestal heb als ik zo vrij mag kiezen uit bijna alles. De volgende paar dagen heb ik intensief geprobeerd een goed/interessant project te bedenken. Ik werk voor een investeringsmanager, dus mijn eerste gedachte was om iets investeringsmanager-achtigs te kiezen, maar toen bedacht ik dat ik elke dag meer dan 9 uur op mijn werk zit, dus ik wilde niet dat mijn heilige vrije tijd ook in beslag zou worden genomen door werkgerelateerde dingen.

Een paar dagen later ontving ik het onderstaande bericht op een van mijn WhatsApp-groepen:

Dit bracht me op een idee. Wat als ik de vaardigheden op het gebied van datawetenschap en machinaal leren die ik in de cursus heb geleerd, zou kunnen gebruiken om de kans te vergroten dat een bepaald gesprek op Tinder een ‘succes’ wordt? Zo werd mijn projectidee gevormd. De volgende stap? Het aan mijn vriendin vertellen…

Een paar Tinder feiten, gepubliceerd door Tinder zelf:

  • de app heeft ongeveer 50m gebruikers, waarvan er 10m de app dagelijks gebruiken
  • sinds 2012 zijn er meer dan 20bn matches geweest op Tinder
  • een totaal van 1.6bn swipes vinden elke dag plaats op de app
  • de gemiddelde gebruiker besteedt 35 minuten PER DAG op de app
  • er vinden naar schatting 1,5m dates PER WEEK plaats dankzij de app

Probleem 1: gegevens verkrijgen

Maar hoe zou ik aan gegevens komen om te analyseren? Om voor de hand liggende redenen zijn de Tinder gesprekken van gebruikers en de match geschiedenis etc. veilig gecodeerd zodat niemand anders dan de gebruiker ze kan zien. Na wat googelen kwam ik dit artikel tegen:

Dit leidde me tot het besef dat Tinder nu gedwongen is om een dienst te bouwen waar je je eigen gegevens bij hen kunt opvragen, als onderdeel van de wet op de vrijheid van informatie. Cue, de knop ‘download gegevens’:

Eenmaal aangeklikt, moet je 2-3 werkdagen wachten voordat Tinder je een link stuurt waarmee je het gegevensbestand kunt downloaden. Ik keek reikhalzend uit naar deze e-mail, omdat ik al anderhalf jaar voor mijn huidige relatie een fervent Tinder-gebruiker was. Ik had geen idee hoe ik me zou voelen, terugbladerend op zo’n groot aantal gesprekken die uiteindelijk (of niet zo uiteindelijk) waren doodgelopen.

Na wat voelde als een eeuwigheid, kwam de e-mail. De gegevens waren (gelukkig) in JSON-formaat, dus een snelle download en upload in python en bosh, toegang tot mijn hele online dating geschiedenis.

De gegevens

Het gegevensbestand is opgesplitst in 7 verschillende secties:

Van deze, slechts twee waren echt interessant / bruikbaar voor mij:

  • Messages
  • Usage

Bij nadere analyse bevat het bestand “Usage” gegevens over “App Opens”, “Matches”, “Messages Received”, “Messages Sent”, “Swipes Right” en “Swipes Left”, en het bestand “Messages” bevat alle berichten die door de gebruiker zijn verzonden, met tijd/datumstempels, en de ID van de persoon aan wie het bericht is verzonden. Zoals je je vast wel kunt voorstellen, leidde dit tot nogal interessante lectuur…

Probleem 2: Meer gegevens verzamelen

Ok, ik heb mijn eigen Tinder-gegevens, maar om ervoor te zorgen dat de resultaten die ik behaal niet statistisch volkomen onbetekenend/zwaar vertekend zijn, heb ik gegevens van andere mensen nodig. Maar hoe doe ik dat…

Cue een niet onbelangrijke hoeveelheid smeken.

Miraculeus, ik slaagde erin om 8 van mijn vrienden over te halen om mij hun gegevens te geven. Ze varieerden van doorgewinterde gebruikers tot sporadische “gebruik wanneer verveeld” gebruikers, die gaf me een redelijke dwarsdoorsnede van de gebruikers types ik voelde. Het grootste succes? Mijn vriendin gaf me ook haar gegevens.

Een ander heikel punt was het definiëren van een ‘succes’. Ik kwam uit op de definitie dat ofwel een nummer werd verkregen van de andere partij, of een de twee gebruikers gingen op een datum. Door een combinatie van vragen stellen en analyseren categoriseerde ik elk gesprek als een succes of niet.

Probleem 3: Wat nu?

Nou, ik heb meer gegevens, maar wat nu? De cursus Data Science richtte zich op data science en machine learning in Python, dus het importeren naar python (ik gebruikte anaconda/Jupyter notebooks) en het opschonen ervan leek een logische volgende stap. Spreek met elke data wetenschapper, en ze zullen je vertellen dat het opschonen van data a) het meest vervelende deel van hun werk is en b) het deel van hun werk dat 80% van hun tijd in beslag neemt. Opschonen is saai, maar ook cruciaal om zinvolle resultaten uit de data te kunnen halen.

Ik maakte een map aan, waarin ik alle 9 databestanden dropte, vervolgens schreef ik een scriptje om deze te doorlopen, ze te importeren in de omgeving en elk JSON-bestand aan een woordenboek toe te voegen, met als sleutels de naam van elke persoon. Ik heb ook de “Gebruik”-gegevens en de berichtgegevens in twee afzonderlijke woordenboeken gesplitst, zodat het gemakkelijker is om analyses op elke dataset afzonderlijk uit te voeren.

Probleem 4: Verschillende e-mailadressen leiden tot verschillende datasets

Wanneer je je aanmeldt bij Tinder, gebruikt de overgrote meerderheid van de mensen hun Facebook-account om in te loggen, maar meer voorzichtige mensen gebruiken gewoon hun e-mailadres. Helaas had ik een van deze mensen in mijn dataset, wat betekent dat ik twee sets bestanden voor hen had. Dit was een beetje lastig, maar over het algemeen niet al te moeilijk om mee om te gaan.

Nadat ik de gegevens in woordenboeken had geïmporteerd, liep ik door de JSON-bestanden en extraheerde elk relevant gegevenspunt in een pandas-dataframe, dat er ongeveer zo uitzag:

Gebruiksgegevens waarvan de namen zijn verwijderd

Berichtgegevens met namen verwijderd

Voordat iemand zich zorgen gaat maken over het opnemen van de id in het bovenstaande dataframe, Tinder heeft dit artikel gepubliceerd, waarin staat dat het onmogelijk is om gebruikers op te zoeken tenzij je met ze gematcht bent:

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

Nu de gegevens in een mooi formaat stonden, slaagde ik erin een paar samenvattende statistieken op hoog niveau te produceren. De dataset bevatte:

  • 2 meisjes
  • 7 jongens
  • 9 deelnemers
  • 502 één bericht gesprekken
  • 1330 unieke gesprekken
  • 6.344 matches
  • 6.750 berichten ontvangen
  • 8,755 berichten verzonden
  • 34,233 app opens
  • 94,027 right swipes
  • 403,149 left swipes

Goed, ik had een behoorlijke hoeveelheid data, maar ik had niet echt de tijd genomen om na te denken over hoe een eindproduct eruit zou zien. Uiteindelijk besloot ik dat een eindproduct een lijst van aanbevelingen zou zijn over hoe iemands kansen op succes met online dating te verbeteren.

En dus, met de gegevens in een mooi formaat, kon de verkenning beginnen!

De verkenning

Ik begon met het bekijken van de “Gebruik”-gegevens, één persoon per keer, puur uit nieuwsgierigheid. Ik heb dit gedaan door een aantal grafieken te plotten, variërend van eenvoudige geaggregeerde metrische plots, zoals de onderstaande:

tot meer betrokken, afgeleide metrische plots, zoals de toepasselijke naam ‘Loyalty Plot’, hieronder weergegeven:

De eerste grafiek spreekt voor zich, maar de tweede behoeft wellicht enige uitleg. In wezen stelt elke rij/horizontale lijn een uniek gesprek voor, waarbij de begindatum van elke lijn de datum is van het eerste bericht dat in het gesprek werd verzonden, en de einddatum de datum van het laatste bericht dat in het gesprek werd verzonden. Het idee van deze plot was om te proberen te begrijpen hoe mensen de app gebruiken in termen van messaging meer dan één persoon tegelijk.

Hoewel interessant, zag ik niet echt duidelijke trends of patronen die ik verder kon ondervragen, dus wendde ik me tot de geaggregeerde “Usage” gegevens. In eerste instantie keek ik naar verschillende statistieken in de tijd, opgesplitst per gebruiker, om te proberen trends op hoog niveau vast te stellen:

maar niets sprong er meteen uit.

Toen besloot ik dieper in de berichtgegevens te duiken, die, zoals eerder vermeld, van een handige tijdstempel waren voorzien. Nadat ik het aantal berichten per dag van de week en per uur van de dag had geaggregeerd, realiseerde ik me dat ik op mijn eerste aanbeveling was gestuit.

Op zondag 21.00 uur is de beste tijd om te ‘Tinderen’, hieronder weergegeven als de tijd/datum waarop het grootste aantal berichten werd verzonden binnen mijn steekproef.

Hierbij heb ik het volume van de verzonden berichten gebruikt als een benadering voor het aantal gebruikers dat op elk tijdstip online is, zodat ‘Tinderen’ op dit tijdstip ervoor zorgt dat je het grootste publiek hebt.

Daarna ben ik gaan kijken naar de lengte van het bericht in termen van zowel woorden als letters, evenals het aantal berichten per gesprek. In eerste instantie zie je hieronder dat er niet veel uitsprong… (hier is een ‘succes’ rood)

Maar als je eenmaal begint te graven, zijn er een paar duidelijke trends:

  • langere berichten hebben meer kans om een succes te genereren (tot op zekere hoogte)
  • Het gemiddelde aantal berichten in een gesprek waarin een ‘succes’ wordt gevonden is 27, met een mediaan van 21.

Deze observaties leiden tot mijn tweede en derde aanbeveling.

De tweede aanbeveling:

Spendeer meer tijd aan het construeren van je berichten, en gebruik voor de liefde van god geen text speak… over het algemeen zijn langere woorden betere woorden. Een voorbehoud hier is dat de gegevens bevat links, die tellen als lange woorden, dus dit kan scheef de resultaten.

De derde aanbeveling:

Wees niet te haastig wanneer het proberen om een nummer te krijgen. ‘hey, ur fit, what’s ur number’ is waarschijnlijk het slechtste wat je kunt zeggen in termen van je kansen. Evenzo, laat het niet te lang duren. Ergens tussen je 20e en 30e bericht is het beste.

Gemiddelde aantal berichten van succesvolle vs niet-succesvolle gesprekken

Nadat ik de lengte van het woord/bericht/gesprek vrij uitgebreid had bekeken, besloot ik me vervolgens te verdiepen in het sentiment. Maar ik wist helemaal niets over hoe ik dat moest doen. Tijdens de cursus hadden we het een en ander behandeld over natuurlijke taalverwerking (zak met woorden, een hot codering, alle vereiste voorbewerkingen enz. samen met verschillende classificatiealgoritmen), maar we hadden het niet gehad over sentiment. Ik heb wat onderzoek gedaan naar het onderwerp, en ontdekte dat de nltk sentiment.vader SentimentIntensityAnalyzer een goede keuze zou zijn.

Dit werkt door de gebruiker vier scores te geven, gebaseerd op het percentage van de ingevoerde tekst dat was:

  • positief
  • neutraal
  • negatief
  • een combinatie van de drie

Gelukkig genoeg houdt het ook rekening met zaken als woordcontext, slang en zelfs emoji’s. Omdat ik naar het sentiment keek, werd er geen voorbewerking uitgevoerd (kleine letters, interpunctie verwijderen, enz.) om geen verborgen context te verwijderen.

Ik begon deze analyse door elk heel gesprek in de analyser te voeren, maar realiseerde me al snel dat dit niet echt werkte, omdat het sentiment van het gesprek na de eerste paar berichten snel naar 1 neigde, en ik heb moeite te geloven dat een gesprek van 100 berichten de hele tijd 100% vertrouwen had.

Ik heb toen de gesprekken opgesplitst in de samenstellende berichten en deze één voor één doorgevoerd, waarbij ik het gemiddelde nam van de scores tot op gespreksniveau. Dit leverde naar mijn mening een veel realistischer resultaat op:

Splitste ik deze gegevens op naar ‘Succes’ of ‘Geen succes’, dan zag ik al snel een patroon opdoemen:

Dit maakte mijn vierde aanbeveling compleet.

De vierde aanbeveling:

Ben positief, maar niet te positief.

Het gemiddelde sentiment voor een succesvol gesprek was 0,31 tegenover 0,20 voor een niet-succesvol gesprek. Dat gezegd hebbende, te positief zijn is bijna even erg als te negatief zijn.

De laatste allee die ik onderzocht was welk effect verschillende details over het eerste bericht hadden op het succes van het gesprek. Eerste gedachten van dingen die een effect zouden kunnen hebben waren:

  • lengte
  • of er een naam werd gebruikt
  • sentiment
  • aanwezigheid van emoji’s
  • expliciete inhoud

Zoals verwacht, hoe langer het eerste bericht, hoe groter de kans dat dat gesprek tot een ‘Succes’ zal doorgaan. In het verlengde daarvan verdubbel je je kans op succes door niet slechts een opener met één woord te gebruiken, b.v. door niet slechts ‘hey’ of ‘hi’ of ‘daayyuumm’ te zeggen (echt voorbeeld).

Enigszins verrassender was dat het gebruik van een naam in het eerste bericht zeer weinig effect had op de ‘Succes Ratio’ (No. Successes/No. No Successes).

Het sentiment van het eerste bericht bleek ongeveer 0,09 hoger te zijn voor “Succesvolle” gesprekken dan voor “Onsuccesvolle” gesprekken, wat niet echt een verrassing was… als je iemand beledigt in een eerste bericht, is de kans intuïtief kleiner dat hij antwoordt.

Analyseren van emoji’s was een taak waar ik niet echt over had nagedacht, en die in potentie lastig zou kunnen zijn. Gelukkig bestaat er een pakket genaamd ‘emoji’, dat automatisch de aanwezigheid van emoji’s in tekst oppikt. Helaas, en tot mijn grote ontsteltenis, blijkt dat het gebruik van een emoji in een eerste bericht de kans op een ‘Succes’ vergroot.

Nu over expliciete inhoud… Nog een potentieel lastige, aangezien er geen ingebouwde bibliotheken zijn die het gebruik van schuttingwoorden en dergelijke oppikken (voor zover ik weet). (voor zover ik weet). Gelukkig kwam ik dit tegen:

Ik kan je verzekeren dat er een aantal absolute krakers tussen zitten.

Ik heb toen gekeken welke eerste berichten een woord uit deze lijst bevatten, en 40 daarvan bevatten dat woord. Zoals altijd het geval is met dit soort dingen, vond ik een aantal interessante randgevallen:

FYI dit was een kerel die het over zijn roeibroek had…

Resultaten? Het blijkt dat geen van de eerste berichten die expliciete inhoud bevatten tot een ‘Succes’

Dit bracht me bij mijn vijfde en laatste aanbeveling.

De vijfde aanbeveling:

Bij het verzenden van een eerste bericht:

  • Wees positief
  • 8 woorden is optimaal
  • Gebruik een emoji of twee
  • Wees niet expliciet

SO TO SUM UP

  1. Gebruik Tinder om 21.00 uur op een zondag voor maximaal publiek
  2. Spendeer tijd aan het opstellen van berichten en gebruik geen sms
  3. Bereid je voor op het vragen om een nummer of een date tussen het 20e en 30e bericht
  4. Ben positief, maar niet te positief
  5. Stuur iets anders dan ‘hey’ als eerste bericht, mik op ongeveer 8 woorden, gebruik misschien een emoji en wees niet expliciet

Een paar valkuilen van de gegevens:

  1. Mijn dataset is een zeer, zeer kleine steekproef, waardoor de meeste inzichten nutteloos zijn
  2. De dataset is bevooroordeeld ten opzichte van het type mensen dat ik ken,
  3. De dataset is bevooroordeeld ten opzichte van mannen
  4. De dataset bevat slechts één kant van het gesprek
  5. De boodschap en gebruik statistieken komen niet noodzakelijkerwijs overeen als gevolg van gebruikers die de app verwijderen en opnieuw installeren
  6. Geen NLP techniek zal perfect zijn als gevolg van sarcasme / variaties in de manier waarop mensen spreken

Een paar ideeën voor toekomstig werk:

  • Verzamel meer data
  • Doe meer om statistisch significante resultaten vs observaties te bepalen
  • Kijk naar gespreksanalyse per onderwerp – welk type berichten vormen het goede en slechte sentiment
  • Probeer te kijken naar sarcasme
  • Onderzoek andere apps (Bumble, Hinge etc.
  • Een soort classificatie-analyse als meer gegevens waren opgenomen, aangezien we slechts 70ish successen
  • Look meer in gender opsplitsingen als meer gegevens waren opgenomen

Enkele interessante weetjes uit de gegevens:

  • Meer swipes door een enkele persoon in een enkele dag: 8096
  • Guys hebben meer kans om een lange tijd (7ish dagen) te laten liggen voordat ze een tweede bericht sturen
  • Een vraag stellen in een eerste bericht verlaagt eigenlijk je kans op succes
  • Vrouwen swipen gemiddeld 1% van de tijd naar rechts, terwijl mannen dat ~50% van de tijd doen
  • Per geopende app swipen vrouwen 3x zo vaak als mannen

Verder lezen:

  • Er is een paper gepubliceerd genaamd ‘A First Look at User Activity on Tinder’, link hier
  • Er is een Tinder API, maar helaas is het alleen voor mensen die de app gebruiken in plaats van toegang te geven tot een of andere database. Hoe dan ook, het gebruik ervan om bepaalde hypotheses te testen zou interessant kunnen zijn.
  • Tinderbox is een stuk software dat kan leren tot wie je je aangetrokken voelt via dimensionaliteitsreductie. Het heeft ook een chatbot ingebouwd als je het proces echt wilt automatiseren…

Bedankt voor het lezen, alle ideeën voor toekomstig werk zouden zeer gewaardeerd worden!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.