Mijn vrienden gaven me hun Tinder-gegevens…
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:
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
- Gebruik Tinder om 21.00 uur op een zondag voor maximaal publiek
- Spendeer tijd aan het opstellen van berichten en gebruik geen sms
- Bereid je voor op het vragen om een nummer of een date tussen het 20e en 30e bericht
- Ben positief, maar niet te positief
- 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:
- Mijn dataset is een zeer, zeer kleine steekproef, waardoor de meeste inzichten nutteloos zijn
- De dataset is bevooroordeeld ten opzichte van het type mensen dat ik ken,
- De dataset is bevooroordeeld ten opzichte van mannen
- De dataset bevat slechts één kant van het gesprek
- De boodschap en gebruik statistieken komen niet noodzakelijkerwijs overeen als gevolg van gebruikers die de app verwijderen en opnieuw installeren
- 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!