友人からTinderのデータをもらった…

2018年10月3日水曜日、私は総会データサイエンス講座の後列に座っていました。 私のチューターは、各生徒がデータサイエンス・プロジェクトのアイデアを2つ考えなければならず、そのうちの1つをコースの最後にクラス全体に発表しなければならないと述べたところでした。 そのうちの1つを、コースの最後にクラス全員に発表しなければならないのです。ほとんど何でも自由に選べるというのは、概して私に影響を与えるものです。 それから2、3日、集中的に良い企画、面白い企画を考えようとしました。 私は投資顧問会社で働いているので、最初は投資顧問に関連したものを考えていました。しかし、私は毎日9時間以上仕事で過ごしているので、神聖な自由時間を仕事に関連したものに取られたくないと考えていました。
数日後、あるグループの WhatsApp チャットで次のようなメッセージを受け取りました:

これがあるアイデアを呼び起こしたのです。 コースで学んだデータサイエンスと機械学習のスキルを使って、Tinder での特定の会話が「成功」する可能性を高めることができたらどうだろう? こうして、私のプロジェクトのアイデアが生まれました。 次のステップは?
Tinder 自身が発表した、いくつかの Tinder の事実:
- Tinder のユーザー数は約 50 百万人、そのうち 10 百万人は毎日アプリを使用しています。
- Since 2012, there is over 200bn matches on Tinder
- a total of 1.スワイプ回数は毎日60億回
- 平均的なユーザーのアプリ利用時間は1日あたり35分
- アプリが原因で1週間あたり150万回のデートが発生すると推定される
問題1:データの取得
しかし分析用のデータをどのようにして取得すればよいのでしょうか。 Tinderの会話やマッチング履歴は、本人以外には見えないように暗号化されています。 このことから、Tinder は、情報公開法の一環として、自分のデータを要求できるサービスを構築することを余儀なくされていることに気づきました。 データのダウンロード」ボタンの出番です。

一度クリックすると、2~3 営業日後にデータファイルをダウンロードするリンク先が送られてくるのですが、その前に待たなければなりませんでした。 私はこのメールを心待ちにしていました。現在の交際に至るまで、約1年半にわたってTinderの熱心なユーザーだったからです。 最終的に(あるいは最終的でなくとも)消えてしまった膨大な数の会話を見返すことで、自分がどのような気持ちになるのか見当もつきませんでした。 データは (ありがたいことに) JSON 形式だったので、すぐにダウンロードして python にアップロードすると、私のオンライン デートの全履歴にアクセスできました。
The Data
データ ファイルは 7 つのセクションに分かれています:

これらのうち、私にとって本当に興味深く、役に立つのは 2つだけでした。
- Messages
- Usage
さらに分析すると、「使用状況」ファイルには「アプリ開封」「マッチ」「受信メッセージ」「送信メッセージ」「右スワイプ」「左スワイプ」に関するデータが、「メッセージ ファイル」にはユーザーが送信したすべてのメッセージと時間/日付スタンプおよびメッセージ送信者の ID が含まれていました。 想像できると思いますが、これはかなり面白い読み物になりました。
問題 2: より多くのデータを取得する
さて、私は自分の Tinder データを持っていますが、私の結果が完全に統計的に重要ではなく、大きく偏らないためには、他の人のデータを取得する必要があります。
奇跡的に、8人の友人を説得して、データを提供してもらうことができました。 彼らはベテランのユーザーから、「退屈なときに使う」ような散発的なユーザーまで、さまざまなユーザー タイプの妥当な横断面を与えてくれたと感じています。 最大の成功は?
もうひとつ厄介なのは、「成功」を定義することです。 相手から数字をもらうか、2人のユーザーがデートに行くかのどちらかである、という定義に落ち着きました。 その後、質問と分析を組み合わせて、各会話を成功かどうかに分類しました。
問題 3: 次は何でしょうか。 データサイエンスのコースでは、Python でのデータサイエンスと機械学習に焦点を当てましたので、Python (私は anaconda/Jupyter notebooks を使用しました) にインポートしてクリーニングすることは、論理的な次のステップのように思われました。 データサイエンティストに話を聞くと、データのクリーニングは彼らの仕事の中でa)最も退屈な部分であり、b)彼らの仕事の80%の時間を占める部分である、と言うでしょう。
私はフォルダを作成し、そこに 9 つのデータ ファイルをすべてドロップし、これらを循環させて環境にインポートし、各人の名前をキーとする辞書に各 JSON ファイルを追加する小さなスクリプトを作成しました。 また、「使用状況」データとメッセージ データを 2 つの別々の辞書に分割し、各データセットを別々に分析しやすくしました。
問題 4: 異なる電子メールアドレスは異なるデータセットをもたらす
Tinder にサインアップすると、大多数の人は Facebook アカウントを使ってログインしますが、より慎重な人は電子メールアドレスだけを使っています。 残念なことに、私のデータセットにはこれらの人々のうちの1人が含まれており、彼らのために2セットのファイルを持っていることを意味します。 これは少し面倒でしたが、全体的にはそれほど難しいことではありませんでした。
データを辞書にインポートした後、JSON ファイルを繰り返し、関連する各データ ポイントを pandas のデータフレームに抽出します。


上記のデータフレームにIDを含めることに不安を感じる人がいる前に、この記事を読んでください。 Tinderは、マッチングしない限りユーザーを調べることは不可能であるとし、このような記事を発表しています。
https://www.help.tinder.com/hc/en-us/articles/115003359366-Can-I-search-for-a-specific-person-on-Tinder-
さて、データが良い形式になったので、いくつかのハイレベルな要約統計を作成することに成功しました。 データセットには
- 2人の女性
- 7人の男性
- 9人の参加者
- 502件のワンメッセージ会話
- 1330件のユニーク会話
- 6344件のマッチ
- 6,750 メッセージ受信
- 8人,755メッセージ送信
- 34,233 アプリ開封
- 94,027 右スワイプ
- 403,149 左スワイプ
データはそれなりにありましたが、実際にどのような最終製品にするかは考えていなかったんですね。 最終的に、最終製品は、オンライン デートで成功する可能性を高める方法について推奨するリストにすることにしました。 以下のような単純な集計メトリック プロットから、以下に示す「Loyalty Plot」のようなより詳細な派生メトリック プロットまで、いくつかのチャートをプロットすることによって行いました。

最初のグラフはかなりわかりやすいですが、2 番目のグラフには少し説明が必要でしょう。 基本的に、各行/水平線は固有の会話を表し、各行の開始日は会話内で送信された最初のメッセージの日付で、終了日は会話内で送信された最後のメッセージです。 このプロットのアイデアは、一度に複数の人にメッセージを送るという点で、ユーザーがアプリをどのように使用しているかを理解することでした。
興味深いものの、さらに調査できるような明らかな傾向やパターンがなかったので、集約された「使用状況」データに目を向けました。 当初は、ユーザーごとに分割された時間の経過とともにさまざまな指標を調べ、ハイレベルな傾向を判断しようとしました:

しかし、すぐに目立つものはありませんでした。 3839>
日曜日の午後 9 時は、「Tinder」に最適な時間帯であり、サンプル内で最も多くのメッセージが送信された時間/日付として以下に示されています。

ここで、メッセージ送信量を各時間のオンラインユーザー数の代理として使用したので、この時間に「Tinder」すれば、最大の視聴者を確保することができます。 当初は、あまり目立つものはありませんでしたが… (ここで「成功」は赤)

しかし、一度掘り始めると、いくつかの明確な傾向があります。
- 長いメッセージは、より成功しやすい(ある程度まで)
- 会話の中で「成功」を発見した平均メッセージ数は27で、中央値は21である。
これらの観察から、2番目と3番目の推奨を導き出します。
2番目の推奨:
メッセージを構成するのにもっと時間をかけ、お願いだからテキストスピーチは使わないでください。 このデータにはリンクが含まれており、これは長い単語としてカウントされるため、結果が歪む可能性があります。 このような場合、”Hey, ur fit, what’s ur number “は、おそらくあなたのチャンスという点では最悪の発言でしょう。 また、あまりに長い時間放置するのもよくありません。 3839>

長文、メッセージ、会話について広範囲に調べて、次に感情について調べることにした。 しかし、その方法について全く何も知りませんでした。 コースでは、自然言語処理 (bag of words、one hot encoding、必要なすべての前処理、さまざまな分類アルゴリズムなど) について少し触れましたが、センチメントについては触れませんでした。 私はこのトピックを研究するのに時間を費やし、nltk sentiment.vader SentimentIntensityAnalyzerがかなり良い候補であることを発見しました。

これは、入力テキストのパーセントに基づいて、ユーザーに 4 つのスコアを与えることによって動作します。
- ポジティブ
- ニュートラル
- ネガティブ
- この 3 つの組み合わせ
幸いにも、単語の文脈やスラング、絵文字といったものも処理されるようになっています。 私はセンチメントを見ていたので、隠れたコンテキストを削除しないように、前処理 (小文字にする、句読点を削除するなど) は行いませんでした。
私は、各会話全体を分析装置に入力してこの分析を始めましたが、最初の数メッセージで会話のセンチメントはすぐに 1 になり、100 メッセージの会話がずっと 100% 信頼できると信じるには苦労したので、これは本当に機能しないことにすぐに気がつきました。

そこで、会話を構成メッセージに分割し、一度に 1 つずつ送信して、会話レベルまでスコアを平均化しました。 これは、より現実的な結果だと思います。

このデータを「成功」「成功しない」で分割すると、すぐにパターンが浮かび上がりました。

これで4番目の推薦にピタッときた。
The Fourth Recommendation:
Be positive, but not too positive.

会話に成功したときの平均センチメントは 0.31 で、成功しないときは 0.20 であった。 とはいえ、肯定的すぎるのも否定的すぎるのと同じくらい悪いことです。
最後に、最初のメッセージに関するさまざまな詳細が会話の成功にどのような影響を及ぼすかについて調べました。
- 長さ
- 名前が使われているか
- 感情
- 絵文字の有無
- 露骨な内容
予想通り、最初のメッセージが長いほど、その会話が「成功」に至る可能性が高くなります。 その延長として、一言のオープナーを使用するだけでなく、たとえば、’hey’ や ‘hi’ や ‘daayyuumm’ (実際の例) を言うだけでも、成功の確率が 2 倍になります。
少し意外だったのは、最初のメッセージで名前を使用しても、「成功率」 (No. 成功 / No. 成功しない) にはほとんど影響がないことです。
最初のメッセージのセンチメントは、「成功した」会話では「失敗した」会話よりも約 0.09 高かったことが判明しました。 幸運なことに、テキスト内の絵文字の存在を自動的に検出する ‘emoji’ というパッケージが存在します。

さて、露骨なコンテンツですが、これもかなり厄介な可能性を秘めていました。 (私が知っている限り) 組み込みのライブラリはありません。 幸運にも、私はこれを偶然見つけました:

私は、この中にいくつかの素晴らしいものが含まれていると断言できます。
次に、最初のメッセージにこのリストの単語が含まれているかどうかを調べると、そのうち40個が含まれていました。

参考までに、これは男性が自分のボート用レギンスについて話していました…
結果は? 露骨な内容を含む最初のメッセージは、どれも「成功」につながらないことがわかりました

これが、5 番目にして最後の推奨につながりました。
第 5 の推奨事項:
最初のメッセージを送信するとき。
- ポジティブに
- 8文字が最適
- 絵文字を1つか2つ使う
- 露骨にしない
So to sum up
- Tinder は夜の9時に使うこと
- Tinder は夜の9時前に使うこと。 日曜日は聴衆が多い
- メッセージの構成に時間をかけ、テキストトークは使わない
- 20通目から30通目の間に番号やデートを尋ねる準備をする
- ポジティブでいることだ。 6523>
- ファーストメッセージは「ヘイ」以外、8文字程度を目安に、絵文字を使ったり、露骨にしないこと
データに潜むいくつかの落とし穴。
- 私のデータセットは非常に小さなサンプルであり、ほとんどの洞察は役に立たない
- データセットは、私が知っている人々のタイプに偏っています。
- The dataset only contains one side of conversation
- The message and usage stats don’t necessarily line up due to users uninstall and reinstalling the app
- No NLP techniques will be perfect due to sarcasm/variations in people speak way
A few ideas for future work.The data set has a single side of conversation.If you have been upgraded:
- もっとデータを集める
- 統計的に有意な結果と観察を比較するためにもっとやる
- トピックごとの会話分析を調べる – どんなタイプのメッセージが良い感情と悪い感情を構成するか
- 皮肉を調べる
- 他のアプリ (Bumble, Hinge など) について研究する。)
- もっとデータがあれば、何らかの分類分析をしてみたい。
- もっとデータがあれば、性別の分類をもっと調べてみたい
データからいくつかの興味深い事実を紹介します。 8096
さらに読む:
- 「A First Look at User Activity on Tinder」という論文が発表されました(リンクはこちら)
- TinderのAPIはありますが、残念ながら、何らかのデータベースにアクセスするのではなく、アプリを使用している人だけがアクセスできるようになっています。 Tinderboxは、次元削減によって誰に惹かれるかを学習するソフトウェアです。 また、このプロセスを自動化したい場合は、チャットボットを内蔵しています。
読んでくださってありがとうございます。