A barátaim nekem adták a Tinder-adataikat…

aug 5, 2021
admin

2018. október 3., szerda volt, és én a hátsó sorban ültem a közgyűlés adattudományi kurzusán. Az oktatóm épp most említette, hogy minden diáknak két adattudományi projektötlettel kell előállnia, amelyek közül az egyiket a kurzus végén be kell mutatnom az egész osztály előtt. Teljesen kiürült az agyam, amit általában az vált ki belőlem, hogy ennyire szabad kezet kapok szinte bármi kiválasztásában. A következő néhány napot azzal töltöttem, hogy intenzíven próbáltam kitalálni egy jó/érdekes projektet. Egy befektetési menedzsernél dolgozom, így az első gondolatom az volt, hogy valami befektetési menedzserrel kapcsolatosat választok, de aztán arra gondoltam, hogy minden nap 9+ órát töltök a munkahelyemen, így nem akartam, hogy a szent szabadidőmet is a munkával kapcsolatos dolgok foglalják le.

Pár nappal később az egyik csoportos WhatsApp csevegésemben az alábbi üzenetet kaptam:

Ez egy ötletet szült. Mi lenne, ha a tanfolyamon tanult adattudományi és gépi tanulási ismereteket felhasználhatnám arra, hogy növeljem annak valószínűségét, hogy egy adott beszélgetés a Tinderen “sikeres” lesz? Így született meg a projektötletem. A következő lépés? Mondd el a barátnőmnek…

Néhány Tinder tény, amit maga a Tinder tett közzé:

  • az alkalmazásnak körülbelül 50 millió felhasználója van, akik közül 10 millióan naponta használják az alkalmazást
  • 2012 óta több mint 20 milliárd találat volt a Tinderen
  • összesen 1.6 milliárd lecsapás történik naponta az alkalmazáson
  • az átlagos felhasználó NAPONként 35 percet tölt az alkalmazáson
  • becslések szerint 1,5 millió randi történik HETENKÉNT az alkalmazásnak köszönhetően

1. probléma: adatok szerzése

De hogyan szereznék adatokat az elemzéshez? Nyilvánvaló okokból a felhasználók Tinder beszélgetései és a párosítási előzmények stb. biztonságosan kódolva vannak, így a felhasználón kívül senki sem láthatja őket. Egy kis guglizás után erre a cikkre bukkantam:

Ez vezetett arra a felismerésre, hogy a Tinder most arra kényszerült, hogy az információszabadságról szóló törvény részeként olyan szolgáltatást hozzon létre, ahol a saját adatait kérheti tőlük. Jelszó, az “adatok letöltése” gomb:

Amint rákattintasz, 2-3 munkanapot kell várnod, mire a Tinder elküldi neked a linket, ahonnan letöltheted az adatfájlt. Kíváncsian vártam ezt az e-mailt, mivel a jelenlegi kapcsolatomat megelőzően körülbelül másfél évig lelkes Tinder-felhasználó voltam. Fogalmam sem volt, hogy mit fogok érezni, amikor visszanézek egy ilyen nagyszámú beszélgetést, amelyek végül (vagy nem is annyira végül) kifulladtak.

Az egy örökkévalóságnak tűnő idő után megjött az email. Az adatok (szerencsére) JSON formátumban voltak, így egy gyors letöltés és feltöltés pythonba, és bosh, hozzáférés a teljes online társkereső előzményeimhez.

Az adatok

Az adatfájl 7 különböző részre oszlott:

Ezek közül csak kettő volt igazán érdekes/hasznos számomra:

  • Messages
  • Usage

A további elemzés során a “Usage” fájl az “App Opens”, “Matches”, “Messages Received”, “Messages Sent”, “Swipes Right” és “Swipes Left” adatokat tartalmazza, az “Messages file” pedig a felhasználó által küldött összes üzenetet tartalmazza, idő/időbélyegzővel és az üzenet címzettjének azonosítójával. Biztosan el tudod képzelni, hogy ez meglehetősen érdekes olvasmányhoz vezetett…

2. probléma: További adatok beszerzése

Rendben, megvan a saját Tinder-adatom, de ahhoz, hogy az általam elért eredmények ne legyenek statisztikailag teljesen jelentéktelenek/erősen torzítottak, szükségem van mások adataira. De hogyan csinálom ezt….

A nem jelentéktelen mennyiségű könyörgés.

Csodálatos módon sikerült meggyőznöm 8 barátomat, hogy adják meg nekem az adataikat. A tapasztalt felhasználóktól a szórványos “unaloműző” felhasználókig terjedtek, ami szerintem ésszerű keresztmetszetet adott a felhasználói típusokról. A legnagyobb siker? A barátnőm is nekem adta az adatait.

A másik trükkös dolog a “siker” meghatározása volt. Megállapodtam abban a definícióban, hogy vagy egy számot kaptam a másik féltől, vagy a két felhasználó randevúzni ment. Ezután a kérdezés és az elemzés kombinációjával minden egyes beszélgetést sikeresnek vagy sikertelennek minősítettem.

3. probléma: Most mi lesz?

Rendben, több adatom van, de most mi lesz? A Data Science kurzus az adattudományra és a gépi tanulásra összpontosított Pythonban, így az adatok pythonba való importálása (anaconda/Jupyter notebookokat használtam) és tisztítása logikus következő lépésnek tűnt. Beszélj bármelyik adattudóssal, és el fogja mondani, hogy az adatok tisztítása a) a munkájuk legunalmasabb része, és b) a munkájuknak az a része, amely az idejük 80%-át elveszi. A tisztítás unalmas, de egyben kritikus is ahhoz, hogy értelmes eredményeket lehessen kinyerni az adatokból.

Létrehoztam egy mappát, amelybe mind a 9 adatfájlt beledobtam, majd írtam egy kis szkriptet, amely ezeket végigjárja, importálja őket a környezetbe, és minden JSON fájlt hozzáad egy szótárhoz, ahol a kulcsok az egyes személyek nevei. A “Használat” adatokat és az üzenetadatokat is két külön szótárba osztottam, hogy könnyebb legyen külön-külön elemzést végezni az egyes adathalmazokon.

4. probléma: A különböző e-mail címek különböző adathalmazokhoz vezetnek

A Tinderre való regisztrációkor az emberek nagy többsége a Facebook-fiókját használja bejelentkezéshez, de az óvatosabbak csak az e-mail címüket használják. Sajnos, egy ilyen ember volt az adatállományomban, ami azt jelenti, hogy két fájlkészletem volt róluk. Ez egy kicsit fájdalmas volt, de összességében nem volt túl nehéz kezelni.

Az adatok szótárakba történő importálása után ezután végigjártam a JSON-fájlokat, és minden releváns adatpontot egy pandas adatkeretbe vontam ki, ami valahogy így nézett ki:

Használati adatok nevek eltávolításával
.

Használati adatok nevek nélkül

Mielőtt bárki aggódni kezdene, hogy a fenti adatkeretben szerepel az id, A Tinder közzétette ezt a cikket, amelyben azt állítja, hogy lehetetlen megnézni a felhasználókat, hacsak nem párosítanak velük:

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

Most, hogy az adatok szép formátumban voltak, sikerült néhány magas szintű összefoglaló statisztikát készítenem. Az adatkészlet tartalmazta:

  • 2 lány
  • 7 fiú
  • 9 résztvevő
  • 502 együzenetes beszélgetés
  • 1330 egyedi beszélgetés
  • 6344 találat
  • 6750 kapott üzenet
  • 8 db,755 elküldött üzenet
  • 34,233 alkalmazás megnyitás
  • 94,027 jobbra suhintás
  • 403,149 balra suhintás

Nagyszerű, volt egy tisztességes mennyiségű adatom, de valójában nem szántam időt arra, hogy átgondoljam, hogyan nézne ki egy végtermék. Végül úgy döntöttem, hogy a végtermék egy lista lesz, amely ajánlásokat tartalmaz arra vonatkozóan, hogyan lehet javítani a siker esélyeit az online randizásban.

És így, az adatok szép formátumban, elkezdődhetett a felfedezés!

A felfedezés

A “Használati” adatokat kezdtem vizsgálni, egyszerre egy személyt, pusztán kíváncsiságból. Ezt néhány diagram felrajzolásával tettem, az egyszerű aggregált metrikus ábráktól kezdve, mint például az alábbi:

a bonyolultabb, származtatott metrikus ábrákig, mint például az alább látható, találóan “Loyalty Plot”-nak nevezett:

Az első diagram meglehetősen magától értetődő, de a második talán némi magyarázatra szorul. Lényegében minden sor/horizontális vonal egy egyedi beszélgetést jelöl, az egyes sorok kezdődátuma a beszélgetésen belül elküldött első üzenet dátuma, a végdátum pedig a beszélgetésen belül elküldött utolsó üzenet dátuma. Ennek a grafikonnak az volt a lényege, hogy megpróbáljuk megérteni, hogyan használják az emberek az alkalmazást az egynél több személynek egyszerre küldött üzenetek tekintetében.

Bár érdekes volt, nem igazán láttam olyan nyilvánvaló trendeket vagy mintákat, amelyeket tovább tudtam volna vizsgálni, ezért az összesített “Használat” adatokhoz fordultam. Kezdetben a különböző időbeli mérőszámokat kezdtem el nézni a felhasználók szerinti bontásban, hogy megpróbáljak meghatározni bármilyen magas szintű tendenciát:

de semmi sem tűnt fel azonnal.

Aztán úgy döntöttem, hogy mélyebben megvizsgálom az üzenetadatokat, amelyek, mint már említettem, praktikus időbélyegzővel voltak ellátva. Miután összesítettem az üzenetek számát a hét napja és a nap órája szerint, rájöttem, hogy rábukkantam az első ajánlásomra.

Vasárnap este 9 óra a legjobb időpont a “taplózáshoz”, az alábbiakban az az időpont/nap látható, amikor a mintámon belül a legnagyobb mennyiségű üzenetet küldték.

Itt az elküldött üzenetek mennyiségét használtam az egyes időpontokban online lévő felhasználók számának helyettesítőjeként, így az ilyenkor történő “Tinderezés” biztosítja a legnagyobb közönséget.

Ezután az üzenet hosszát kezdtem vizsgálni mind a szavak, mind a betűk tekintetében, valamint a beszélgetésenkénti üzenetek számát. Kezdetben az alábbiakban látható, hogy nem sok minden ugrott ki… (itt a ‘siker’ piros színű)

De ha elkezdesz ásni, van néhány egyértelmű trend:

  • A hosszabb üzenetek nagyobb valószínűséggel generálnak sikert (egy bizonyos pontig)
  • A beszélgetés során átlagosan 27 üzenetben találunk “sikert”, a medián pedig 21 üzenet.

Ezek a megfigyelések vezetnek a második és harmadik ajánlásomhoz.

A második ajánlás:

Tölts több időt az üzeneteid felépítésével, és az isten szerelmére, ne használj szöveges beszédet… általában a hosszabb szavak jobbak. Egy figyelmeztetés itt, hogy az adatok tartalmaznak linkeket, amelyek hosszú szavaknak számítanak, így ez torzíthatja az eredményeket.

A harmadik ajánlás:

Ne légy túl elhamarkodott, ha számot akarsz kapni. A ‘hé, ur fit, mi a számod’ valószínűleg a legrosszabb dolog, amit mondhatsz az esélyeid szempontjából. Ugyanígy ne hagyd túl sokáig. A 20. és 30. üzenet között a legjobb.

A sikeres és sikertelen beszélgetések átlagos üzenetszáma

Miután elég alaposan utánanéztem a szó/üzenet/beszélgetés hosszának, úgy döntöttem, hogy megvizsgálom a hangulatot. De abszolút semmit sem tudtam arról, hogyan kell ezt megtenni. A kurzus során egy kicsit foglalkoztunk a természetes nyelvi feldolgozással (szavak zsákja, egy forró kódolás, az összes szükséges előfeldolgozás stb. a különböző osztályozási algoritmusokkal együtt), de a hangulatot nem érintettük. Egy kis időt töltöttem a téma kutatásával, és felfedeztem, hogy az nltk sentiment.vader SentimentIntensityAnalyzer elég jó kiáltás lenne.

Ez úgy működik, hogy négy pontszámot ad a felhasználónak, aszerint, hogy a bemeneti szöveg hány százaléka volt:

  • pozitív
  • semleges
  • negatív
  • a három kombinációja

Szerencsére olyan dolgokkal is foglalkozik, mint a szókapcsolat, a szleng és még az emojik. Mivel a sentimentet vizsgáltam, nem végeztem előfeldolgozást (kisbetűzés, írásjelek eltávolítása stb.), hogy ne távolítsam el a rejtett kontextust.

Az elemzést úgy kezdtem, hogy minden egyes teljes beszélgetést betápláltam az elemzőbe, de hamar rájöttem, hogy ez nem igazán működik, mivel a beszélgetés sentimentje az első néhány üzenet után gyorsan 1-re hajlott, és nehezen hiszem, hogy egy 100 üzenetből álló beszélgetés végig 100%-os biztonsággal működött.

Ezután a beszélgetéseket alkotó üzenetekre bontottam, és egyesével tápláltam be őket, a pontszámokat beszélgetésszintig átlagoltam. Ez véleményem szerint sokkal reálisabb eredményt hozott:

Az adatokat “Siker” vagy “Nincs siker” szerint felosztottam, és gyorsan láttam egy minta kialakulását:

Ez a negyedik ajánlásom.

A negyedik ajánlás:

Légy pozitív, de ne túl pozitív.

A sikeres beszélgetés átlagos érzelmi értéke 0,31 volt a nem sikeres beszélgetés 0,20-as értékével szemben. Ezt leszögezve, túl pozitívnak lenni majdnem olyan rossz, mint túl negatívnak lenni.

Az utolsó alley, amit megvizsgáltam, az volt, hogy az első üzenettel kapcsolatos különböző részletek milyen hatással vannak a beszélgetés sikerére. Az első gondolatok, amelyek hatással lehetnek a következők voltak:

  • hosszúság
  • név használata
  • érzelmek
  • emojik jelenléte
  • explicit tartalom

Ahogyan az várható volt, minél hosszabb az első üzenet, annál nagyobb a valószínűsége, hogy az adott beszélgetés “sikerrel” folytatódik. Kiterjesztésként megduplázza a siker valószínűségét, ha nem csak egyszavas nyitómondatot használunk, pl. nem csak azt mondjuk, hogy “hey” vagy “hi” vagy “daayyuumm” (valós példa).

Némileg meglepő módon a név használata az első üzenetben nagyon kevés hatással volt a “sikerarányra” (No. Successes/No. No. No Successes).

Az első üzenet hangulatáról kiderült, hogy a “Sikeres” beszélgetések esetében körülbelül 0,09-cel magasabb, mint a “Sikertelen” beszélgetések esetében, ami nem volt igazán meglepő… ha valakit sértegetsz az első üzenetben, akkor intuitív módon kevésbé valószínű, hogy válaszol.

Az emojik elemzése olyan feladat volt, amire nem igazán gondoltam, és potenciálisan trükkös lehetett. Szerencsére létezik egy “emoji” nevű csomag, amely automatikusan felismeri az emojik jelenlétét a szövegben. Sajnos, és legnagyobb megdöbbenésemre, úgy tűnik, hogy az emoji használata az első üzenetben növeli a “siker” valószínűségét.

Most pedig a kifejezett tartalom… Egy másik, ami elég trükkös lehetett, mivel nincsenek beépített könyvtárak, amelyek kiszúrják a káromkodásokat stb. (tudomásom szerint). Szerencsére erre bukkantam:

Biztosíthatlak, hogy van benne néhány abszolút őrült.

Ezután megnéztem, hogy az első üzenetek közül 40 tartalmazott szót ebből a listából. Mint mindig az ilyen dolgoknál, találtam néhány érdekes esetet:

Egy fickó az evezős leggingséről beszélt…

Eredmények? Kiderült, hogy az első, explicit tartalmat tartalmazó üzenetek egyike sem vezetett “Siker”

Ez elvezetett az ötödik és egyben utolsó ajánlásomhoz.

Az ötödik ajánlás:

Az első üzenet küldésekor:

  • Légy pozitív
  • 8 szó az optimális
  • Használj egy-két emojit
  • Ne légy egyértelmű

Így összegezve

  1. A Tindert este 9 órakor használd egy Vasárnap este 9 órakor a maximális közönségért
  2. Tölts időt az üzenetek felépítésével, és ne használj szöveges beszédet
  3. Készülj fel arra, hogy a 20. és 30. üzenet között számot vagy randit kérsz
  4. Légy pozitív, de ne túl pozitívan
  5. Első üzenetként küldj valami mást a “hé”-n kívül, törekedj 8 szó körüli értékre, esetleg használj egy emojit, és ne légy egyértelmű

Az adatok néhány buktatója:

  1. Az adatállományom nagyon-nagyon kis minta, ami a legtöbb meglátást használhatatlanná teszi
  2. Az adatállomány elfogult az általam ismert emberek típusa felé, valamint elfogult a férfiakkal szemben
  3. Az adathalmaz csak a beszélgetés egyik oldalát tartalmazza
  4. Az üzenet és a használati statisztikák nem feltétlenül egyeznek meg, mivel a felhasználók eltávolítják és újratelepítik az alkalmazást
  5. Nem lesz tökéletes NLP technika a szarkazmus/az emberek beszédmódjának eltérései miatt

Néhány ötlet a jövőbeli munkához:

  • Több adatot gyűjtsünk
  • Tegyünk többet a statisztikailag szignifikáns eredmények vs. megfigyelések meghatározására
  • Nézzük meg a beszélgetések elemzését témák szerint – milyen típusú üzenetek alkotják a jó és rossz hangulatot
  • Próbáljuk megvizsgálni a szarkazmust
  • Vizsgáljunk meg más alkalmazásokat (Bumble, Hinge stb.)
  • Egyfajta osztályozási elemzés, ha több adat szerepelne, mivel csak 70 körüli sikerünk volt
  • Nézzük meg jobban a nemek szerinti felosztást, ha több adat szerepelne

Néhány érdekes tény az adatokból:

  • A legtöbb swipet egy személy tette egy nap alatt:
  • A pasik nagyobb valószínűséggel hagynak hosszú időt (7 nap körüli) a második üzenet küldése előtt
  • Az első üzenetben feltett kérdés valójában csökkenti a siker esélyét
  • A nők átlagosan 1%-ban suhintanak jobbra, míg a férfiak ~50%-ban
  • Egy megnyitott alkalmazásonként a nők 3x annyit suhintanak, mint a férfiak

További olvasmányok:

  • Egy tanulmány jelent meg “A First Look at User Activity on Tinder” címmel, link itt
  • Létezik egy Tinder API, de sajnos csak az alkalmazást használók számára, nem pedig valamiféle adatbázishoz ad hozzáférést. Mindenesetre érdekes lehet bizonyos hipotézisek tesztelésére használni.
  • A Tinderbox egy olyan szoftver, amely a dimenziócsökkentés segítségével képes megtanulni, hogy kihez vonzódsz. Van benne egy beépített chatbot is, ha tényleg automatizálni akarod a folyamatot…

Köszönöm az olvasást, bármilyen ötletet a jövőbeli munkához nagyra értékelnék!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.