Moi przyjaciele dali mi swoje dane z Tindera…
Była środa 3 października 2018 roku, a ja siedziałem w tylnym rzędzie na kursie Data Science General Assembly. Mój prowadzący właśnie wspomniał, że każdy student musi wymyślić dwa pomysły na projekty z zakresu nauki o danych, z których jeden będę musiał zaprezentować całej klasie na koniec kursu. Mój umysł stał się całkowicie pusty, co jest efektem tego, że bycie obdarzonym taką wolną wolą w wyborze prawie wszystkiego zazwyczaj ma na mnie wpływ. Spędziłem kilka następnych dni intensywnie próbując wymyślić dobry/interesujący projekt. Pracuję dla menadżera inwestycyjnego, więc moją pierwszą myślą było pójście na coś związanego z menadżerem inwestycyjnym, ale potem pomyślałem, że spędzam 9+ godzin w pracy każdego dnia, więc nie chciałem, aby mój święty wolny czas był również zajęty rzeczami związanymi z pracą.
Kilka dni później otrzymałem poniższą wiadomość na jednym z moich grupowych czatów WhatsApp:
To wywołało pomysł. Co by było, gdybym mógł wykorzystać umiejętności z zakresu nauki o danych i uczenia maszynowego zdobyte na kursie, aby zwiększyć prawdopodobieństwo, że każda konkretna rozmowa na Tinderze zakończy się „sukcesem”? Tak oto powstał mój pomysł na projekt. Następny krok? Powiedzieć mojej dziewczynie…
Kilka faktów z Tindera, opublikowanych przez samego Tindera:
- aplikacja ma około 50 milionów użytkowników, z czego 10 milionów używa jej codziennie
- od 2012 roku było ponad 20 miliardów dopasowań na Tinderze
- w sumie 1.6bn swipes występują każdego dnia w aplikacji
- średni użytkownik spędza 35 minut dziennie w aplikacji
- szacuje się, że 1,5 mln randek występuje w tygodniu dzięki aplikacji
Problem 1: Uzyskanie danych
Ale jak mógłbym uzyskać dane do analizy? Z oczywistych powodów, rozmowy użytkownika Tinder i historia meczów itp. są bezpiecznie zakodowane tak, że nikt poza użytkownikiem nie może ich zobaczyć. Po trochę googlowania, natknąłem się na ten artykuł:
To doprowadziło mnie do uświadomienia sobie, że Tinder zostały teraz zmuszone do budowania usługi, gdzie można zażądać własnych danych od nich, jako część ustawy o wolności informacji. Przycisk „pobierz dane”:
Po kliknięciu musisz poczekać 2-3 dni robocze, zanim Tinder wyśle ci link, z którego możesz pobrać plik z danymi. Z niecierpliwością czekałem na tego maila, będąc zapalonym użytkownikiem Tindera przez około półtora roku przed moim obecnym związkiem. Nie miałem pojęcia, jak będę się czuł, przeglądając tak dużą liczbę rozmów, które w końcu (lub nie tak w końcu) zgasły.
Po tym, co czułem się jak wiek, e-mail przyszedł. Dane były (na szczęście) w formacie JSON, więc szybkie pobranie i załadowanie do pythona i bosh, dostęp do całej mojej historii randek online.
Dane
Plik danych jest podzielony na 7 różnych sekcji:
Wśród nich tylko dwie były dla mnie naprawdę interesujące/użyteczne:
- Messages
- Usage
Po dalszej analizie, plik „Usage” zawiera dane na temat „App Opens”, „Matches”, „Messages Received”, „Messages Sent”, „Swipes Right” i „Swipes Left”, a plik „Messages” zawiera wszystkie wiadomości wysłane przez użytkownika, ze znacznikami czasu/daty oraz ID osoby, do której wiadomość została wysłana. Jak jestem pewien, że możesz sobie wyobrazić, doprowadziło to do dość interesującej lektury…
Problem 2: Zdobycie większej ilości danych
Prawda, mam swoje własne dane z Tindera, ale aby jakiekolwiek wyniki, które osiągnę nie były całkowicie statystycznie nieistotne/bardzo stronnicze, muszę zdobyć dane innych ludzi. Ale jak to zrobić…
Cue a noninsignificant amount of begging.
Miraculous, I managed to persuade 8 of my friends to give me their data. Wahali się od doświadczonych użytkowników do sporadycznych „używać, gdy znudzony” użytkowników, co dało mi rozsądny przekrój typów użytkowników czułem. Największy sukces? Moja dziewczyna również dała mi swoje dane.
Inną trudną rzeczą było zdefiniowanie „sukcesu”. Ustaliłem, że definicja będzie albo numer został uzyskany od drugiej strony, albo dwóch użytkowników poszło na randkę. Następnie, poprzez kombinację pytań i analiz, sklasyfikowałem każdą rozmowę jako sukces lub nie.
Problem 3: Co teraz?
Dobra, mam więcej danych, ale co teraz? Kurs Data Science skupiał się na nauce o danych i uczeniu maszynowym w Pythonie, więc zaimportowanie ich do Pythona (użyłem notatników anaconda/Jupyter) i wyczyszczenie ich wydawało się logicznym następnym krokiem. Porozmawiaj z każdym naukowcem zajmującym się danymi, a powie Ci, że czyszczenie danych jest a) najbardziej żmudną częścią jego pracy i b) częścią pracy, która pochłania 80% jego czasu. Czyszczenie jest nudne, ale jest również krytyczne, aby móc wydobyć znaczące wyniki z danych.
Utworzyłem folder, do którego wrzuciłem wszystkie 9 plików danych, a następnie napisałem mały skrypt, aby przejść przez te pliki, zaimportować je do środowiska i dodać każdy plik JSON do słownika, z kluczami będącymi nazwiskami każdej osoby. Podzieliłem również dane „Usage” i dane wiadomości na dwa osobne słowniki, aby ułatwić przeprowadzenie analizy na każdym zbiorze danych osobno.
Problem 4: Różne adresy e-mail prowadzą do różnych zbiorów danych
Gdy rejestrujesz się na Tinderze, zdecydowana większość ludzi używa swojego konta na Facebooku do logowania, ale bardziej ostrożni używają po prostu swojego adresu e-mail. Niestety, miałem jedną z tych osób w moim zbiorze danych, co oznacza, że miałem dla nich dwa zestawy plików. Było to trochę bolesne, ale ogólnie nie było zbyt trudne do załatwienia.
Po zaimportowaniu danych do słowników, następnie iterowałem przez pliki JSON i wyodrębniłem każdy istotny punkt danych do ramki danych pandas, wyglądającej coś takiego:
Zanim ktokolwiek zacznie się martwić o włączenie id do powyższej ramki danych, Tinder opublikował ten artykuł, stwierdzając, że niemożliwe jest przeglądanie użytkowników, chyba że jesteś z nimi dopasowany:
https://www.help.tinder.com/hc/en-us/articles/115003359366-Can-I-search-for-a-specific-person-on-Tinder-
Teraz, gdy dane były w ładnym formacie, udało mi się stworzyć kilka wysokopoziomowych statystyk podsumowujących. Zbiór danych zawierał:
- 2 dziewczyny
- 7 chłopaków
- 9 uczestników
- 502 rozmowy z jedną wiadomością
- 1330 unikalnych rozmów
- 6,344 dopasowań
- 6,750 otrzymanych wiadomości
- 8,755 wiadomości wysłanych
- 34,233 otwarć aplikacji
- 94,027 machnięć w prawo
- 403,149 machnięć w lewo
Świetnie, miałem przyzwoitą ilość danych, ale tak naprawdę nie poświęciłem czasu na zastanowienie się, jak wyglądałby produkt końcowy. W końcu zdecydowałem, że produktem końcowym będzie lista zaleceń, jak poprawić swoje szanse na sukces w randkach online.
I w ten sposób, z danymi w ładnym formacie, eksploracja mogła się rozpocząć!
Kolejna eksploracja
Zacząłem od spojrzenia na dane „Użytkowania”, jedna osoba na raz, czysto z wścibstwa. Zrobiłem to, sporządzając kilka wykresów, od prostych zagregowanych wykresów metrycznych, takich jak poniższy:
do bardziej zaangażowanych, pochodnych wykresów metrycznych, takich jak trafnie nazwany „Loyalty Plot”, pokazany poniżej:
ale nic nie wyróżniało się od razu.
Potem zdecydowałem się spojrzeć głębiej na dane wiadomości, które, jak wspomniano wcześniej, pochodziły z poręcznym znacznikiem czasu. Po zagregowaniu liczby wiadomości według dnia tygodnia i godziny, zdałem sobie sprawę, że natknąłem się na moje pierwsze zalecenie.
9pm w niedzielę to najlepszy czas na 'Tinder’, pokazany poniżej jako czas/data, w której największa ilość wiadomości została wysłana w ramach mojej próbki.
W tym miejscu użyłem objętości wysłanych wiadomości jako przybliżenia liczby użytkowników online w każdym czasie, więc 'Tinderowanie’ w tym czasie zapewni Ci największą publiczność.
Potem zacząłem przyglądać się długości wiadomości zarówno pod względem słów jak i liter, a także liczby wiadomości na konwersację. Początkowo, można zobaczyć poniżej, że nie było wiele, że wyskoczył … (tutaj „sukces” jest czerwony)
Ale gdy zaczniesz kopać, istnieje kilka wyraźnych trendów:
- dłuższe wiadomości są bardziej prawdopodobne, aby wygenerować sukces (do punktu)
- Średnia liczba wiadomości do rozmowy „sukces” jest znaleziony jest 27, z medianą 21.
Te obserwacje prowadzą do moich drugich i trzecich zaleceń.
Drugie zalecenie:
Spędź więcej czasu na konstruowaniu swoich wiadomości, i na miłość boską nie używaj text speak… generalnie dłuższe słowa są lepszymi słowami. Jednym zastrzeżeniem jest to, że dane zawierają linki, które liczą się jako długie słowa, więc to może przekrzywić wyniki.
Trzecie zalecenie:
Nie bądź zbyt pochopny, gdy próbujesz uzyskać numer. 'hey, ur fit, what’s ur number’ is probably the worst thing you can say in terms of your chances. Podobnie, nie zostawiaj go zbyt długo. Gdziekolwiek pomiędzy 20 a 30 wiadomością jest najlepiej.
Spojrzawszy na długość słowa/wiadomości/rozmowy dość szeroko, zdecydowałem się spojrzeć na sentyment. Nie wiedziałem jednak absolutnie nic o tym, jak to zrobić. W trakcie kursu, zajęliśmy się trochę przetwarzaniem języka naturalnego (worek słów, kodowanie na gorąco, wszystkie wymagane przetwarzanie wstępne itp. wraz z różnymi algorytmami klasyfikacji), ale nie poruszyliśmy tematu sentymentu. Spędziłem trochę czasu badając temat i odkryłem, że nltk sentiment.vader SentimentIntensityAnalyzer byłby całkiem dobrym krzykiem.
Działa to w ten sposób, że daje użytkownikowi cztery wyniki, oparte na procencie tekstu wejściowego, który był:
- pozytywny
- neutralny
- negatywny
- kombinacja tych trzech
Na szczęście zajmuje się również takimi rzeczami jak kontekst słów, slang, a nawet emojis. Ponieważ patrzyłem na sentyment, żadne wstępne przetwarzanie nie zostało zrobione (zmniejszanie czcionki, usuwanie interpunkcji itp.), aby nie usuwać żadnego ukrytego kontekstu.
Zacząłem tę analizę karmiąc każdą całą rozmowę do analizatora, ale szybko zdałem sobie sprawę, że to naprawdę nie działa, ponieważ sentyment rozmowy szybko miał tendencję do 1 po pierwszych kilku wiadomościach, i walczę, aby uwierzyć, że rozmowa 100 wiadomości była w 100% pewna przez cały czas.
Następnie podzieliłem konwersacje na ich części składowe i podawałem je pojedynczo, uśredniając wyniki do poziomu konwersacji. Moim zdaniem dało to znacznie bardziej realistyczny wynik:
Podzielenie tych danych na 'Sukces’ i 'Brak Sukcesu’ pozwoliło mi szybko dostrzec wyłaniający się wzór:
To podniosło moją czwartą rekomendację.
Czwarte zalecenie:
Bądź pozytywny, ale nie zbyt pozytywny.
Średni sentyment dla udanej rozmowy wynosił 0,31 vs 0,20 dla nieudanej rozmowy. Mając na uwadze, że zbyt pozytywne jest prawie tak samo złe jak zbyt negatywne.
Ostatni zaułek I zbadane było jaki wpływ różne szczegóły dotyczące pierwszej wiadomości miał na sukces rozmowy. Początkowe myśli o rzeczach, które mogą mieć wpływ były:
- długość
- czy imię zostało użyte
- sentyment
- obecność emojis
- wyraźna treść
Jak oczekiwano, im dłuższa pierwsza wiadomość, tym większe prawdopodobieństwo, że rozmowa będzie kontynuowana do „Sukcesu”. Jako rozszerzenie, podwajasz swoje prawdopodobieństwo sukcesu, nie tylko używając jednego słowa otwieracza, np. nie tylko mówiąc „hej” lub „hi” lub „daayyuumm” (prawdziwy przykład).
Nieco bardziej zaskakujące, używając nazwy w pierwszej wiadomości miał bardzo mały wpływ na „Success Ratio” (No. Successes/No. No Successes).
Odczucie pierwszej wiadomości okazało się być o 0.09 wyższe dla „Udanych” rozmów niż „Nieudanych”, co tak naprawdę nie było niespodzianką… jeśli obrazisz kogoś w pierwszej wiadomości, intuicyjnie jest mniej prawdopodobne, że odpowie.
Analiza Emojis była zadaniem, o którym tak naprawdę nie myślałem, i miała potencjał bycia podchwytliwą. Na szczęście istnieje pakiet o nazwie ’emoji’, który automatycznie wyłapuje obecność emojis w tekście. Niestety, ku mojemu przerażeniu, wygląda na to, że użycie emoji w pierwszej wiadomości zwiększa prawdopodobieństwo uzyskania 'Sukcesu’.
Teraz na wyraźną treść… Kolejna, która miała potencjał bycia dość podchwytliwą, jako że nie ma wbudowanych bibliotek, które wyłapują użycie wykrzykników itp. (o których wiem). Na szczęście natknąłem się na to:
Zapewniam cię, że jest tam kilka absolutnych cracków.
Następnie sprawdziłem, które pierwsze wiadomości zawierały słowo z tej listy, z czego 40 zawierało. Jak to zwykle bywa z tego typu rzeczami, znalazłem kilka interesujących przypadków brzegowych:
FYI to był facet mówiący o swoich legginsach do wiosłowania…
Wyniki? Okazuje się, że żadna z pierwszych wiadomości, które zawierały wyraźne treści nie doprowadziła do „Sukcesu”
To doprowadziło mnie do mojego piątego i ostatniego zalecenia.
Piąte zalecenie:
Przy wysyłaniu pierwszej wiadomości:
- Be positive
- 8 słów jest optymalne
- Use an emoji or two
- Don’t be explicit
SO TO SUM UP
- Use Tinder at 9pm on a niedzielę dla maksymalnej oglądalności
- Spędzaj czas na konstruowaniu wiadomości i nie używaj mowy tekstowej
- Przygotuj się do poproszenia o numer lub randkę między 20. a 30. wiadomością
- Bądź pozytywny, ale nie zbyt pozytywny
- Wyślij coś innego niż „hej” jako pierwszą wiadomość, celuj w około 8 słów, może użyj emoji i nie bądź jednoznaczny
Kilka pułapek związanych z danymi:
- Mój zbiór danych jest bardzo, bardzo małą próbką, czyniąc większość spostrzeżeń bezużytecznymi
- Zbiór danych jest stronniczy w stosunku do typu ludzi, których znam, jak również jest stronniczy w kierunku mężczyzn
- Zbiór danych zawiera tylko jedną stronę rozmowy
- Statystyki wiadomości i użytkowania niekoniecznie się zgadzają z powodu użytkowników odinstalowujących i ponownie instalujących aplikację
- Żadna technika NLP nie będzie idealna z powodu sarkazmu/zmienności w sposobie mówienia ludzi
Kilka pomysłów na przyszłą pracę:
- Gather more data
- Do more to determine statistically significant results vs observations
- Look into conversation analysis by topic – what type of messages make up the good and bad sentiment
- Try to look into sarcasm
- Investigate other apps (Bumble, Hinge etc.)
- Jakiegoś rodzaju analiza klasyfikacji, jeśli więcej danych zostało uwzględnionych, ponieważ mieliśmy tylko 70ish sukcesów
- Spojrzenie bardziej na podziały płci, jeśli więcej danych zostało uwzględnionych
Kilka interesujących faktów z danych:
- Większość machnięć przez jedną osobę w ciągu jednego dnia: 8096
- Chłopaki częściej zostawiają długi czas (7ish days) przed wysłaniem drugiej wiadomości
- Zadawanie pytania w pierwszej wiadomości faktycznie zmniejsza Twoje szanse na sukces
- Kobiety swipe’ują w prawo średnio 1% czasu, podczas gdy mężczyźni robią to ~50% czasu
- Per app open, women swipe 3x tyle razy co mężczyźni
Dalsza lektura:
- Opublikowano artykuł o nazwie „A First Look at User Activity on Tinder”, link tutaj
- Istnieje API Tindera, ale niestety dotyczy tylko osób korzystających z aplikacji, a nie daje dostępu do jakiejś bazy danych. Tak czy inaczej, użycie go do testowania pewnych hipotez może być interesujące.
- Tinderbox to kawałek oprogramowania, które może dowiedzieć się, kogo przyciągasz poprzez redukcję wymiarowości. Ma również wbudowanego chatbota, jeśli naprawdę chcesz zautomatyzować proces…
Dzięki za przeczytanie, wszelkie pomysły na przyszłą pracę byłyby bardzo docenione!