Kaverini antoivat minulle Tinder-tietonsa…
Olikin keskiviikko 3.10.2018, ja istuin takarivissä Yleisötilaisuuden Data Science -kurssilla. Opettajani oli juuri maininnut, että jokaisen opiskelijan piti keksiä kaksi ideaa datatieteen projektiin, joista toisen minun pitäisi esitellä koko luokalle kurssin lopussa. Aivoni menivät täysin tyhjiksi, mikä yleensä vaikuttaa minuun, kun minulle annetaan näin vapaat kädet valita melkein mitä tahansa. Vietin seuraavat pari päivää intensiivisesti yrittäen keksiä hyvää/kiinnostavaa hanketta. Työskentelen sijoituspäällikön palveluksessa, joten ensimmäinen ajatukseni oli valita jotain sijoituspäällikköön liittyvää, mutta sitten ajattelin, että vietän joka päivä yli 9 tuntia töissä, joten en halunnut, että pyhä vapaa-aikani kuluu myös työhön liittyviin asioihin.
Pari päivää myöhemmin sain eräässä ryhmäni WhatsApp-keskustelussa alla olevan viestin:
Tämä herätti ajatuksen. Mitä jos voisinkin käyttää kurssilla opittuja datatieteen ja koneoppimisen taitoja kasvattaakseni minkä tahansa tietyn Tinderissä käydyn keskustelun todennäköisyyttä olla ”menestys”? Näin syntyi projekti-ideani. Seuraava askel? Kerro tyttöystävälleni…
Muutama Tinderin itsensä julkaisema Tinder-fakta:
- sovelluksella on noin 50 miljoonaa käyttäjää, joista 10 miljoonaa käyttää sovellusta päivittäin
- vuodesta 2012 lähtien Tinderissä on ollut yli 20 miljardia matchia
- kokonaisuudessaan 1.6 miljardia pyyhkäisyä joka päivä sovelluksessa
- keskimääräinen käyttäjä viettää 35 minuuttia PÄIVITTÄIN sovelluksen parissa
- arviolta 1,5 miljoonaa treffejä tapahtuu VIIKOSSA sovelluksen ansiosta
Obgelma 1: Datan hankkiminen
Mutta miten saisin dataa analysoitavaksi? Ilmeisistä syistä käyttäjän Tinder-keskustelut ja match-historia jne. ovat turvallisesti koodattuja, jotta kukaan muu kuin käyttäjä ei näe niitä. Pienen googlailun jälkeen törmäsin tähän artikkeliin:
Tästä päädyin siihen, että Tinderin on nyt pakko rakentaa palvelu, jossa voit pyytää heiltä omia tietojasi osana tiedonvapauslakia. Cue, ”lataa tiedot” -painike:
Klikattuasi joudut odottamaan 2-3 työpäivää, ennen kuin Tinder lähettää sinulle linkin, josta voit ladata datatiedoston. Odotin tätä sähköpostia innolla, sillä olin ollut innokas Tinderin käyttäjä noin puolitoista vuotta ennen nykyistä suhdettani. Minulla ei ollut aavistustakaan, miltä minusta tuntuisi, kun selailisin taaksepäin niin suurta määrää keskusteluja, jotka olivat lopulta (tai eivät niinkään lopulta) kariutuneet.
Vanhalta tuntuneen ajan kuluttua sähköposti tuli. Tiedot olivat (onneksi) JSON-muodossa, joten nopea lataus ja lataus pythoniin ja bosh, pääsy koko nettideittihistoriaani.
Data
Datatiedosto on jaettu seitsemään eri osioon:
Näistä vain kaksi oli oikeasti kiinnostavia/hyödyllisiä minulle:
- Viestit
- Käyttö
Tarkemmassa analyysissä ”Käyttö”-tiedosto sisältää tietoja ”Sovelluksen avauksista”, ”Vastauksista”, ”Vastaanotetuista viesteistä”, ”Lähetetyistä viesteistä”, ”Pyyhkäisyistä oikealle” ja ”Pyyhkäisyistä vasemmalle”, ja ”Viestit-tiedosto” sisältää kaikki käyttäjän lähettämät viestit kellonaika- ja päivämäärän leimoineen sekä sen henkilön tunnuksen, jolle viesti on lähetetty. Kuten varmasti voitte kuvitella, tämä johti melko mielenkiintoiseen lukemiseen…
Obgelma 2: Lisää dataa
Oikea, minulla on omat Tinder-tietoni, mutta jotta kaikki tulokset eivät olisi tilastollisesti täysin merkityksettömiä/vahvasti vääristyneitä, minun on saatava muiden ihmisten tietoja. Mutta miten teen tämän…
Kiitos ei-merkittävä määrä kerjäämistä.
Ihmeellisesti onnistuin suostuttelemaan 8 ystävääni antamaan minulle datansa. He vaihtelivat kokeneista käyttäjistä satunnaisiin ”käytän kun on tylsää” -käyttäjiin, mikä antoi mielestäni kohtuullisen läpileikkauksen käyttäjätyypeistä. Suurin menestys? Myös tyttöystäväni antoi minulle tietonsa.
Toinen hankala asia oli ”onnistumisen” määrittely. Päädyin määritelmään, jonka mukaan joko toiselta osapuolelta saatiin numero tai kaksi käyttäjää meni treffeille. Tämän jälkeen luokittelin jokaisen keskustelun kysymisen ja analysoinnin yhdistelmällä joko onnistuneeksi tai ei-onnistuneeksi.
Obgelma 3: Mitä nyt?
Oikein, minulla on enemmän dataa, mutta mitä nyt? Data Science -kurssilla keskityttiin datatieteeseen ja koneoppimiseen Pythonissa, joten datan tuominen pythoniin (käytin anaconda/Jupyter-muistiinpanovihkoja) ja puhdistaminen tuntui loogiselta seuraavalta askeleelta. Puhu kenelle tahansa datatieteilijälle, ja hän kertoo, että datan puhdistaminen on a) työläin osa hänen työtään ja b) osa, joka vie 80 prosenttia hänen työajastaan. Puhdistus on tylsää, mutta se on myös kriittisen tärkeää, jotta datasta voidaan poimia mielekkäitä tuloksia.
Loin kansion, johon pudotin kaikki yhdeksän datatiedostoa, ja kirjoitin sitten pienen skriptin, joka käy nämä läpi, tuo ne ympäristöön ja lisää jokaisen JSON-tiedoston sanakirjaan, jonka avaimina on kunkin henkilön nimi. Jaoin myös ”Käyttö”-datan ja viestidatan kahteen erilliseen sanakirjaan, jotta analyysi olisi helpompi tehdä kummallekin tietokokonaisuudelle erikseen.
Obgelma 4: Erilaiset sähköpostiosoitteet johtavat erilaisiin tietokokonaisuuksiin
Tinderiin kirjauduttaessa valtaosa ihmisistä käyttää kirjautumiseen Facebook-tiliään, mutta varovaisemmat ihmiset käyttävät vain sähköpostiosoitettaan. Valitettavasti aineistossani oli yksi näistä ihmisistä, mikä tarkoittaa, että minulla oli kaksi tiedostosarjaa heitä varten. Tämä oli hieman hankalaa, mutta kaiken kaikkiaan ei liian vaikeaa.
Kun olin tuonut tiedot sanakirjoihin, iteroin sitten JSON-tiedostojen läpi ja poimin jokaisen asiaankuuluvan datapisteen pandas-datakehykseen, joka näytti jotakuinkin tältä:
Ennen kuin kukaan huolestuu id:n sisällyttämisestä yllä olevaan datakehykseen, Tinder julkaisi tämän artikkelin, jossa todetaan, että käyttäjiä on mahdotonta katsoa, ellei heidän kanssaan ole matchattu:
https://www.help.tinder.com/hc/en-us/articles/115003359366-Can-I-search-for-a-specific-person-on-Tinder-
Nyt kun tiedot olivat mukavassa muodossa, onnistuin tuottamaan muutamia korkean tason yhteenvetotilastoja. Tietoaineisto sisälsi:
- 2 tyttöä
- 7 poikaa
- 9 osallistujaa
- 502 yhden viestin keskustelua
- 1330 ainutkertaista keskustelua
- 6344 osumaa
- 6750 vastaanotettua viestiä
- 8,755 lähetettyä viestiä
- 34,233 sovelluksen avausta
- 94,027 pyyhkäisyä oikealle
- 403,149 pyyhkäisyä vasemmalle
Hienoa, minulla oli kunnollinen määrä dataa, mutta en ollut oikeastaan ottanut aikaa miettiä, miltä lopputuote näyttäisi. Lopulta päätin, että lopputuote olisi luettelo suosituksista siitä, miten parantaa menestymismahdollisuuksia nettideittailussa.
Ja näin, kun tiedot olivat mukavassa muodossa, tutkimus saattoi alkaa!
Tutkimus
Aloitin ”Käyttö”-tietojen tarkastelun yksi henkilö kerrallaan, puhtaasti uteliaisuudesta. Tein tämän piirtämällä muutamia kaavioita, jotka vaihtelivat yksinkertaisista aggregoiduista metriikkakuvioista, kuten alla olevasta:
sekavampiin, johdettuihin metriikkakuvioihin, kuten alla olevaan osuvasti nimettyyn ”Lojaliteettikuvioon”:
Ensimmäinen kaavio on melko itsestään selvä, mutta jälkimmäinen saattaa vaatia selittämistä. Pohjimmiltaan jokainen rivi/vaakaviiva edustaa yksilöllistä keskustelua, ja kunkin rivin alkupäivämäärä on keskustelussa lähetetyn ensimmäisen viestin päivämäärä ja loppupäivämäärä on keskustelussa lähetetyn viimeisen viestin päivämäärä. Tämän kuvaajan ideana oli yrittää ymmärtää, miten ihmiset käyttävät sovellusta viestien lähettämiseen useammalle kuin yhdelle henkilölle kerralla.
Vaikka se olikin mielenkiintoista, en nähnyt mitään selviä trendejä tai malleja, joita olisin voinut tutkia tarkemmin, joten käännyin aggregoitujen ”Usage”-tietojen puoleen. Aluksi aloin tarkastella eri mittareita ajallisesti jaettuna käyttäjäkohtaisesti yrittäessäni määrittää mitään korkean tason trendejä:
mutta mikään ei heti noussut esiin.
Päättelin sen jälkeen perehtyä syvällisemmin viestien data-aineistoon, joka oli, kuten jo aiemmin todettiin, varustettuna kätevällä aikaleimalla. Kun olin yhdistänyt viestien lukumäärän viikonpäivän ja kellonajan mukaan, tajusin, että olin törmännyt ensimmäiseen suositukseeni.
Sunnuntaina kello 21.00 on paras aika ”Tinderöidä”, mikä näkyy alla kellonaikana/päivämääränä, jolloin otoksessani lähetettiin eniten viestejä.
Tässä olen käyttänyt lähetettyjen viestien volyymia korvaavana tekijänä verkossa olevien käyttäjien lukumäärälle kullakin kellonajankohdalla, joten ’Tinderöimällä’ tähän aikaan varmistat, että sinulla on suurin yleisö.
Aloitin sitten tarkastelemalla viestin pituutta sanojen ja kirjainten osalta sekä viestien lukumäärää keskustelua kohden. Aluksi alla näkyy, että ei ollut paljoa, mikä ponnahti esiin… (tässä ’onnistuminen’ on punainen)
Mutta kun alat kaivaa, on muutama selkeä trendi:
- pitkemmät viestit tuottavat todennäköisemmin onnistumisen (tiettyyn pisteeseen asti)
- Keskimääräinen määrä viestejä keskustelussa, jossa ”onnistuminen” löytyy, on 27, ja mediaani on 21.
Nämä havainnot johtavat toiseen ja kolmanteen suositukseeni.
Kakkonen suositus:
Käyttäkää enemmän aikaa viestienne rakentamiseen, älkääkä herran tähden käyttäkö tekstipuhetta… yleensä pidemmät sanat ovat parempia sanoja. Yksi varoitus tässä on se, että aineisto sisältää linkkejä, jotka lasketaan pitkiksi sanoiksi, joten tämä saattaa vääristää tuloksia.
Kolmas suositus:
Älä ole liian hätäinen, kun yrität saada numeron. ’hei, ur fit, what’s ur number’ on luultavasti huonointa, mitä voit sanoa mahdollisuuksiesi kannalta. Samoin älä jätä sitä liian pitkäksi aikaa. 20. ja 30. viestin välillä on paras.
Katsottuani sanan/viestin/keskustelun pituutta melko laajasti päätin sitten tutkia tunnetta. Mutta en tiennyt yhtään mitään siitä, miten se tehdään. Kurssilla olimme käsitelleet hieman luonnollisen kielen käsittelyä (sanapussi, yksi kuuma koodaus, kaikki tarvittavat esikäsittelyt jne. sekä erilaiset luokittelualgoritmit), mutta emme olleet käsitelleet sentimenttiä. Käytin jonkin aikaa aiheen tutkimiseen ja huomasin, että nltk sentiment.vader SentimentIntensityAnalyzer olisi aika hyvä huuto.
Tämä toimii antamalla käyttäjälle neljä pistemäärää, jotka perustuvat siihen, kuinka monta prosenttia syötetystä tekstistä oli:
- positiivinen
- neutraali
- negatiivinen
- kolmen yhdistelmä
Onneksi se käsittelee myös sellaisia asioita kuin sanayhteys, slangi ja jopa emojit. Koska tarkastelin sentimenttiä, mitään esikäsittelyä ei tehty (pienaakkoset, välimerkkien poistaminen jne.), jotta piilotettua kontekstia ei poistettaisi.
Aloitin tämän analyysin syöttämällä jokaisen koko keskustelun analysaattoriin, mutta tajusin nopeasti, että tämä ei oikeastaan toiminut, koska keskustelun sentimentti pyrki nopeasti 1:een muutamien ensimmäisten viestien jälkeen, ja minun on vaikea uskoa, että sata viestiä käsittävässä keskustelussa oltaisiin oltu 100-prosenttisen varmoja siitä, että keskustelu on ollut 100-prosenttisen varmoja koko ajan.
Jakouduin sitten keskusteluihin niiden sisältämiin viesteihin ja syötin ne yksi kerrallaan läpi, jolloin pistemäärät keskiarvoistettiin keskustelutasolle asti. Tämä tuotti mielestäni paljon realistisemman tuloksen:
Jakaessani tämän datan ”Onnistumisen” tai ”Ei onnistumisen” mukaan huomasin nopeasti kuvion syntyvän:
Tämä teippasi neljännen suositukseni.
Neljäs suositus:
Ole positiivinen, mutta älä liian positiivinen.
Keskimääräinen sentimentti onnistuneessa keskustelussa oli 0,31 vs. 0,20 ei-onnistuneessa keskustelussa. Tämän sanottuani, liian positiivinen on melkein yhtä huono asia kuin liian negatiivinen.
Viimeisenä kuutena tutkin, millainen vaikutus ensimmäisen viestin eri yksityiskohdilla oli keskustelun onnistumiseen. Alustavia ajatuksia asioista, joilla voisi olla vaikutusta, olivat:
- pituus
- käytettiinkö nimeä
- sentimentti
- emojien esiintyminen
- eksplisiittinen sisältö
Odotetusti mitä pidempi ensimmäinen viesti on, sitä suurempi on todennäköisyys, että kyseinen keskustelu jatkuu ”Onnistumiseen”. Laajennuksena voidaan todeta, että onnistumisen todennäköisyys kaksinkertaistuu, kun ei käytetä vain yhden sanan avausta, esim. ei sanota vain ’hei’ tai ’hei’ tai ’daayyuumm’ (todellinen esimerkki).
Hieman yllättävämpää oli se, että nimen käyttäminen ensimmäisessä viestissä vaikutti hyvin vähän ’Onnistumissuhteeseen’ (Onnistumisten lkm/ei onnistumisten lkm).
Ensimmäisen viestin sentimentti osoittautui noin 0,09 korkeammaksi ”Onnistuneissa” keskusteluissa kuin ”Epäonnistuneissa” keskusteluissa, mikä ei oikeastaan ollut yllätys… jos loukkaat jotakuta ensimmäisessä viestissä, hän intuitiivisesti vastaa harvemmin.
Emojien analysointi oli tehtävä, jota en ollut oikeastaan miettinyt, ja se saattoi olla hankala. Onneksi on olemassa paketti nimeltä ”emoji”, joka havaitsee automaattisesti emojien läsnäolon tekstissä. Valitettavasti, ja suureksi harmikseni, näyttää siltä, että emojin käyttäminen ensimmäisessä viestissä lisää todennäköisyyttä saada ’Success’.
Kerrotaan nyt eksplisiittisestä sisällöstä… Toinen asia, joka saattoi olla melko hankala, koska ei ole olemassa sisäänrakennettuja kirjastoja, jotka poimivat kirosanojen yms. käytön. (tietääkseni). Onneksi törmäsin tähän:
Voin vakuuttaa teille, että se sisältää joitain ehdottomia kekkereitä.
Tarkistin sitten, mitkä ensimmäiset viestit sisälsivät sanan tästä luettelosta, ja 40 niistä sisälsi. Kuten tällaisissa asioissa on aina tapana, löysin joitain mielenkiintoisia ääritapauksia:
Tämä oli kaveri, joka puhui soutulenkkareistaan…
Tulokset? Kävi ilmi, että yksikään ensimmäisistä viesteistä, jotka sisälsivät yksiselitteistä sisältöä, ei johtanut ”Onnistumiseen”
Tämä johti viidenteen ja viimeiseen suositukseeni.
Viides suositus:
Kun lähetät ensimmäisen viestin:
- Ole positiivinen
- 8 sanaa on optimaalinen
- Käytä hymiötä tai kahta
- Älä ole yksiselitteinen
SO YHTEENVETONA
- Käyttäkää Tinderiä klo 21.00. Sunday for maximum audience
- Vietä aikaa viestien rakentamiseen äläkä käytä tekstipuhetta
- Valmistaudu kysymään numeroa tai treffejä 20. ja 30. viestin välillä
- Ole positiivinen, mutta älä liian positiivinen
- Lähetä ensimmäisenä viestinä jotain muuta kuin ”hei”, pyri noin 8 sanaan, käytä ehkä hymiötä äläkä ole yksiselitteinen
Muutamia aineiston sudenkuoppia:
- Aineistoni on hyvin, hyvin pieni otos, mikä tekee suurimmasta osasta oivalluksista hyödyttömiä
- Aineisto on vinoutunut tuntemieni ihmisten suhteen, sekä puolueellinen miehiä kohtaan
- Tietoaineisto sisältää vain yhden puolen keskustelusta
- Viesti- ja käyttötilastot eivät välttämättä vastaa toisiaan johtuen siitä, että käyttäjät poistavat ja asentavat sovelluksen uudelleen
- Mikään NLP-tekniikka ei ole täydellinen johtuen sarkasmista/vaihteluista ihmisten puhetavassa
Muutamia ideoita tulevaa työtä varten:
- Kerätä lisää dataa
- Tehdä enemmän tilastollisesti merkittävien tulosten määrittämiseksi vs. havainnot
- Katsoa keskustelun analyysia aihealueittain – minkä tyyppiset viestit muodostavat hyvän ja huonon sentimentin
- Yritä tutkia sarkasmia
- Tutkiskella muita sovelluksia (Bumble, Hinge jne.)
- Jonkinlainen luokitteluanalyysi, jos mukaan otettaisiin enemmän dataa, koska meillä oli vain noin 70 onnistunutta
- Tarkastella enemmän sukupuolijakaumia, jos mukaan otettaisiin enemmän dataa
Muutama mielenkiintoinen fakta data-aineistosta:
- Lisäksi eniten pyyhkäisyjä yhden henkilön toimesta yhden päivän aikana: 8096
- Miehet jättävät todennäköisemmin pitkäksi aikaa (noin 7 päivää) ennen kuin lähettävät toisen viestin
- Kysymyksen esittäminen ensimmäisessä viestissä itse asiassa vähentää onnistumisen mahdollisuutta
- Naiset pyyhkäisevät oikealle keskimäärin 1 %:lla kerralla, kun taas miehet tekevät niin ~50 %:lla kerralla
- Naiset pyyhkäisevät sovelluksen aukioloa kohden keskimäärin 3 kertaa useammin oikealle kuin miehet
Lisälukemista:
- Julkaistiin paperi nimeltä ”A First Look at User Activity on Tinder”, linkki täällä
- Tinderillä on API, mutta valitettavasti se koskee vain sovellusta käyttäviä ihmisiä eikä anna pääsyä jonkinlaiseen tietokantaan. Joka tapauksessa sen käyttäminen tiettyjen hypoteesien testaamiseen voisi olla mielenkiintoista.
- Tinderbox on ohjelmisto, joka voi oppia, keneen tunnet vetoa dimensionaalisuuden vähentämisen avulla. Siinä on myös sisäänrakennettu chatbot, jos todella haluat automatisoida prosessin…
Kiitos lukemisesta, kaikki ideat tulevaan työhön olisivat erittäin tervetulleita!