Amicii mei mi-au dat datele lor de pe Tinder…
Aceasta mi-a stârnit o idee. Ce-ar fi dacă aș putea folosi știința datelor și abilitățile de învățare automată învățate în cadrul cursului pentru a crește probabilitatea ca o anumită conversație pe Tinder să fie un „succes”? Astfel, s-a format ideea mea de proiect. Care este următorul pas? Să-i spun prietenei mele…
Câteva date despre Tinder, publicate chiar de Tinder:
- aplicația are aproximativ 50 de milioane de utilizatori, dintre care 10 milioane folosesc aplicația zilnic
- din 2012, au existat peste 20 de miliarde de potriviri pe Tinder
- un total de 1.6bn swipe-uri au loc în fiecare zi pe aplicație
- utilizatorul mediu petrece 35 de minute PE ZI pe aplicație
- se estimează că 1,5 milioane de întâlniri au loc PE SĂPTĂMÂNĂ datorită aplicației
Problema 1: Obținerea de date
Dar cum aș putea obține date pentru a le analiza? Din motive evidente, conversațiile utilizatorului Tinder și istoricul meciurilor etc. sunt codificate în mod securizat, astfel încât nimeni în afară de utilizator să nu le poată vedea. După un pic de căutare pe Google, am dat peste acest articol:
Aceasta m-a condus la realizarea faptului că Tinder a fost acum forțat să construiască un serviciu prin care să puteți solicita propriile date de la ei, ca parte a legii privind libertatea de informare. Cue, butonul „download data”:
După ce ai dat click, trebuie să aștepți 2-3 zile lucrătoare înainte ca Tinder să-ți trimită un link de unde să descarci fișierul de date. Am așteptat cu nerăbdare acest e-mail, fiind un utilizator avid de Tinder timp de aproximativ un an și jumătate înainte de relația mea actuală. Habar nu aveam cum mă voi simți, răsfoind în urmă un număr atât de mare de conversații care în cele din urmă (sau nu atât de în cele din urmă) se stinseseră.
După ceea ce mi s-a părut o veșnicie, a venit e-mailul. Datele erau (din fericire) în format JSON, așa că o descărcare rapidă și o încărcare în python și bosh, acces la întregul meu istoric de întâlniri online.
Datele
Fila de date este împărțită în 7 secțiuni diferite:
Dintre acestea, doar două au fost cu adevărat interesante/utile pentru mine:
- Messages
- Usage
În urma unei analize mai amănunțite, fișierul „Usage” conține date despre „App Opens”, „Matches”, „Messages Received”, „Messages Sent”, „Swipes Right” și „Swipes Left”, iar „Messages file” conține toate mesajele trimise de utilizator, cu ștampile de dată și oră, precum și ID-ul persoanei căreia i-a fost trimis mesajul. După cum sunt sigur că vă puteți imagina, acest lucru a dus la o lectură destul de interesantă…
Problema 2: Obținerea mai multor date
În regulă, am propriile mele date Tinder, dar pentru ca orice rezultate pe care le obțin să nu fie complet nesemnificative din punct de vedere statistic/foarte distorsionate, trebuie să obțin datele altor persoane. Dar cum fac acest lucru…
Cu o cantitate nesemnificativă de cerșetorie.
Miraculos, am reușit să conving 8 dintre prietenii mei să-mi dea datele lor. Aceștia au variat de la utilizatori experimentați la utilizatori sporadici „folosiți când vă plictisiți”, ceea ce mi-a oferit o secțiune transversală rezonabilă a tipurilor de utilizatori pe care am simțit-o. Cel mai mare succes? Prietena mea mi-a dat și ea datele ei.
Un alt lucru dificil a fost definirea unui „succes”. Am stabilit ca definiția să fie fie că s-a obținut un număr de la cealaltă parte, fie că cei doi utilizatori au ieșit la o întâlnire. Apoi, printr-o combinație de întrebări și analize, am clasificat fiecare conversație ca fiind fie un succes, fie nu.
Problema 3: Și acum ce facem?
Bine, am mai multe date, dar acum ce facem? Cursul Data Science s-a axat pe știința datelor și învățarea mașinilor în Python, așa că importarea lor în python (am folosit anaconda/Jupyter notebook-uri) și curățarea lor părea un pas logic următor. Vorbiți cu orice cercetător de date și vă va spune că curățarea datelor este a) cea mai plictisitoare parte a muncii lor și b) partea care le ocupă 80% din timp. Curățarea este plictisitoare, dar este, de asemenea, esențială pentru a putea extrage rezultate semnificative din date.
Am creat un folder, în care am aruncat toate cele 9 fișiere de date, apoi am scris un mic script pentru a parcurge ciclic aceste fișiere, a le importa în mediu și a adăuga fiecare fișier JSON la un dicționar, cheile fiind numele fiecărei persoane. De asemenea, am împărțit datele de „Utilizare” și datele privind mesajele în două dicționare separate, pentru a ușura efectuarea analizei pe fiecare set de date în parte.
Problema 4: Diferitele adrese de e-mail duc la seturi de date diferite
Când vă înscrieți pe Tinder, marea majoritate a oamenilor își folosesc contul de Facebook pentru a se autentifica, dar oamenii mai precauți folosesc doar adresa de e-mail. Din păcate, am avut una dintre aceste persoane în setul meu de date, ceea ce înseamnă că aveam două seturi de fișiere pentru ele. Acest lucru a fost un pic supărător, dar, în general, nu a fost prea dificil de rezolvat.
După ce am importat datele în dicționare, am iterat apoi prin fișierele JSON și am extras fiecare punct de date relevant într-un dataframe pandas, care arată cam așa:
Înainte ca cineva să fie îngrijorat de includerea id-ului în cadrul de date de mai sus, Tinder a publicat acest articol, afirmând că este imposibil să cauți utilizatorii dacă nu ești potrivit cu ei:
https://www.help.tinder.com/hc/en-us/articles/115003359366-Can-I-search-for-a-specific-person-on-Tinder-
Acum că datele se aflau într-un format frumos, am reușit să produc câteva statistici sumare de nivel înalt. Setul de date conținea:
- 2 fete
- 7 băieți
- 9 participanți
- 502 conversații cu un singur mesaj
- 1330 conversații unice
- 6.344 de potriviri
- 6.750 de mesaje primite
- 8,755 de mesaje trimise
- 34.233 de deschideri de aplicații
- 94.027 de glisări spre dreapta
- 403.149 de glisări spre stânga
Grozav, aveam o cantitate decentă de date, dar nu-mi luasem timp să mă gândesc cum ar arăta un produs final. În cele din urmă, am decis că un produs final ar fi o listă de recomandări cu privire la modul în care se pot îmbunătăți șansele de succes la întâlnirile online.
Și astfel, cu datele într-un format frumos, explorarea putea începe!
Explorarea
Am început prin a analiza datele „Utilizare”, persoană cu persoană, din pură curiozitate. Am făcut acest lucru prin trasarea câtorva diagrame, variind de la simple diagrame metrice agregate, cum ar fi cel de mai jos:
la diagrame metrice derivate, mai implicate, cum ar fi cel denumit pe bună dreptate „Loyalty Plot”, prezentat mai jos:
Primul grafic este destul de autoexplicativ, dar cel de-al doilea ar putea avea nevoie de explicații. În esență, fiecare rând/linie orizontală reprezintă o conversație unică, data de început a fiecărei linii fiind data primului mesaj trimis în cadrul conversației, iar data de sfârșit fiind ultimul mesaj trimis în cadrul conversației. Ideea acestui grafic a fost de a încerca să înțelegem modul în care oamenii folosesc aplicația în ceea ce privește trimiterea de mesaje mai multor persoane în același timp.
Deși interesant, nu am văzut cu adevărat tendințe sau modele evidente pe care să le pot interoga mai departe, așa că am apelat la datele agregate „Usage”. Inițial, am început să mă uit la diverse măsurători în timp, împărțite în funcție de utilizator, pentru a încerca să determin orice tendințe de nivel înalt:
dar nimic nu a ieșit imediat în evidență.
Apoi am decis să mă uit mai în profunzime la datele privind mesajele, care, așa cum am menționat mai devreme, au venit cu un marcaj de timp util. După ce am agregat numărul de mesaje în funcție de ziua săptămânii și de ora din zi, mi-am dat seama că am dat peste prima mea recomandare.
La ora 21:00 într-o duminică este cel mai bun moment pentru „Tinder”, prezentată mai jos ca fiind ora/data la care a fost trimis cel mai mare volum de mesaje în cadrul eșantionului meu.
Aici, am folosit volumul de mesaje trimise ca un proxy pentru numărul de utilizatori online la fiecare oră, astfel încât ‘Tindering’ la această oră vă va asigura cea mai mare audiență.
Apoi am început să analizez lungimea mesajului atât în termeni de cuvinte cât și de litere, precum și numărul de mesaje pe conversație. Inițial, puteți vedea mai jos că nu au fost prea multe lucruri care au sărit în evidență… (aici un ‘succes’ este roșu)
Dar, odată ce începeți să săpați, există câteva tendințe clare:
- Mesajele mai lungi au mai multe șanse de a genera un succes (până la un punct)
- Numărul mediu de mesaje într-o conversație în care se găsește un „succes” este de 27, cu o mediană de 21.
Aceste observații conduc la cea de-a doua și a treia recomandare a mea.
A doua recomandare:
Dispuneți mai mult timp pentru a vă construi mesajele și, pentru numele lui Dumnezeu, nu folosiți limbajul de text… în general, cuvintele mai lungi sunt cuvinte mai bune. O avertizare aici este că datele conțin link-uri, care se numără ca și cuvinte lungi, așa că acest lucru poate distorsiona rezultatele.
Cea de-a treia recomandare:
Nu vă grăbiți prea tare când încercați să obțineți un număr. ‘hei, ești în formă, care este numărul tău’ este probabil cel mai rău lucru pe care îl poți spune în ceea ce privește șansele tale. În egală măsură, nu o lăsați prea mult timp. Între al 20-lea și al 30-lea mesaj este cel mai bine.
După ce am analizat destul de mult lungimea cuvântului/mesajului/conversației, am decis apoi să analizez sentimentul. Dar nu știam absolut nimic despre cum să fac acest lucru. În timpul cursului, am acoperit un pic de procesare a limbajului natural (sac de cuvinte, o codificare la cald, toate preprocesările necesare etc., împreună cu diverși algoritmi de clasificare), dar nu am abordat sentimentul. Am petrecut ceva timp cercetând subiectul și am descoperit că nltk sentiment.vader SentimentIntensityAnalyzer ar fi o idee destul de bună.
Acesta funcționează oferindu-i utilizatorului patru scoruri, bazate pe procentul din textul de intrare care a fost:
- pozitiv
- neutru
- negativ
- o combinație a celor trei
În mod fericit, se ocupă, de asemenea, de lucruri precum contextul cuvintelor, argoul și chiar emoticoanele. Deoarece mă uitam la sentiment, nu a fost efectuată nicio preprocesare (diminuarea literelor mici, eliminarea punctuației etc.) pentru a nu elimina niciun context ascuns.
Am început această analiză introducând fiecare conversație întreagă în analizator, dar mi-am dat seama rapid că acest lucru nu a funcționat cu adevărat, deoarece sentimentul conversației tindea rapid spre 1 după primele câteva mesaje și mă străduiesc să cred că o conversație de 100 de mesaje a fost 100% sigură tot timpul.
Apoi am împărțit conversațiile în mesajele lor constitutive și le-am introdus pe rând, făcând o medie a scorurilor până la nivelul conversației. Acest lucru a produs un rezultat mult mai realist, după părerea mea:
Am împărțit aceste date în funcție de „Succes” sau „Fără succes” și am văzut rapid că apare un model:
Acesta a fost cel mai bun indiciu pentru a patra mea recomandare.
Cea de-a patra recomandare:
Să fii pozitiv, dar nu prea pozitiv.
Sentimentul mediu pentru o conversație reușită a fost de 0,31 față de 0,20 pentru o conversație nereușită. Acestea fiind spuse, a fi prea pozitiv este aproape la fel de rău ca și a fi prea negativ.
Alerta finală pe care am explorat-o a fost ce efect au avut diverse detalii despre primul mesaj asupra succesului conversației. Gândurile inițiale despre lucrurile care ar putea avea un efect au fost:
- lungime
- dacă a fost folosit un nume
- sentiment
- prezența emoticoanelor
- conținut explicit
Cum era de așteptat, cu cât primul mesaj este mai lung, cu atât este mai mare probabilitatea ca acea conversație să continue până la un „Succes”. Ca o extensie, vă dublați probabilitatea de succes dacă nu folosiți doar un singur cuvânt deschizător, de exemplu, nu spuneți doar ‘hei’ sau ‘bună’ sau ‘daayyuumm’ (exemplu real).
Cât de surprinzător, folosirea unui nume în primul mesaj a avut un efect foarte mic asupra ‘Raportului de succes’ (Nr. succese/Nr. fără succese).
Sentimentul primului mesaj s-a dovedit a fi cu aproximativ 0,09 mai mare pentru conversațiile „de succes” decât pentru conversațiile „fără succes”, ceea ce nu a fost chiar o surpriză… dacă insultați pe cineva într-un prim mesaj, este intuitiv mai puțin probabil ca acesta să vă răspundă.
Analiza emoticoanelor a fost o sarcină la care nu mă gândisem cu adevărat și care avea potențialul de a fi complicată. Din fericire, există un pachet numit „emoji”, care preia automat prezența emoji-urilor în text. Din păcate, și spre marea mea consternare, se pare că utilizarea unui emoji într-un prim mesaj crește probabilitatea de a obține un „Succes”.
Acum să trecem la conținutul explicit… O altă problemă care avea potențialul de a fi destul de dificilă, deoarece nu există biblioteci încorporate care să detecteze utilizarea de înjurături etc. (din câte știu eu). Din fericire, am dat peste asta:
Pot să vă asigur că în el se găsesc niște „crack-uri” absolute.
Apoi am verificat care dintre primele mesaje conțineau un cuvânt din această listă, dintre care 40 conțineau. Așa cum se întâmplă întotdeauna cu astfel de lucruri, am găsit câteva cazuri limită interesante:
FYI acesta era un tip care vorbea despre jambierele sale de canotaj…
Rezultate? Se pare că niciunul dintre primele mesaje care au conținut explicit nu a dus la un „Succes”
Acest lucru m-a condus la a cincea și ultima mea recomandare.
Cea de-a cincea recomandare:
Când trimiteți un prim mesaj:
- Să fii pozitiv
- 8 cuvinte sunt optime
- Utilizați un emoji sau două
- Nu fiți explicit
Așa că, pentru a rezuma
- Utilizați Tinder la ora 21:00 într-o zi de duminică pentru o audiență maximă
- Pasați timp construind mesajele și nu folosiți limbajul text
- Pregătiți-vă să cereți un număr sau o întâlnire între al 20-lea și al 30-lea mesaj
- Să fiți pozitivi, dar nu prea pozitiv
- Să trimiteți altceva decât „hei” ca prim mesaj, încercați să folosiți în jur de 8 cuvinte, poate folosiți un emoji și nu fiți explicit
Câteva capcane ale datelor:
- Setul meu de date este un eșantion foarte, foarte mic, ceea ce face ca majoritatea informațiilor să fie inutile
- Setul de date este influențat de tipul de persoane pe care le cunosc, precum și înclinat către bărbați
- Setul de date conține doar o parte a conversației
- Statisticile privind mesajele și utilizarea nu se aliniază neapărat din cauza dezinstalării și reinstalării aplicației de către utilizatori
- Nici o tehnică NLP nu va fi perfectă din cauza sarcasmului/variațiilor în modul în care vorbesc oamenii
Câteva idei pentru lucrări viitoare:
- Colectați mai multe date
- Faceți mai mult pentru a determina rezultatele semnificative din punct de vedere statistic față de observații
- Veziți analiza conversațiilor în funcție de subiect – ce tip de mesaje alcătuiesc sentimentul bun și rău
- Încercați să analizați sarcasmul
- Investigați alte aplicații (Bumble, Hinge etc.)
- Un fel de analiză de clasificare dacă ar fi incluse mai multe date, deoarece am avut doar 70ish succese
- Urmăriți mai mult diviziunile de gen dacă ar fi incluse mai multe date
Câteva date interesante din date:
- Cele mai multe swipe-uri de către o singură persoană într-o singură zi: 8096
- Băieții sunt mai predispuși să lase mult timp (7ish zile) înainte de a trimite un al doilea mesaj
- Punând o întrebare într-un prim mesaj scade de fapt șansele de reușită
- Femeile fac swipe la dreapta în medie 1% din timp, în timp ce bărbații fac ~50% din timp
- Pentru fiecare aplicație deschisă, femeile fac swipe de 3 ori mai multe ori decât bărbații
Citește mai departe:
- A fost publicată o lucrare intitulată „A First Look at User Activity on Tinder” (O primă privire asupra activității utilizatorilor pe Tinder), link aici
- Există un API Tinder, dar, din păcate, acesta este doar pentru persoanele care folosesc aplicația, în loc să ofere acces la un fel de bază de date. Oricum, utilizarea acesteia pentru a testa anumite ipoteze ar putea fi interesantă.
- Tinderbox este un software care poate învăța de cine ești atras prin reducerea dimensionalității. Are, de asemenea, un chatbot încorporat, dacă doriți cu adevărat să automatizați procesul…
Mulțumesc pentru lectură, orice idei pentru munca viitoare ar fi foarte apreciate!