Mis amigos me dieron sus datos de Tinder…
Era el miércoles 3 de octubre de 2018, y yo estaba sentado en la última fila del curso de Ciencia de Datos de la Asamblea General. Mi tutor acababa de mencionar que cada alumno tenía que aportar dos ideas para proyectos de ciencia de datos, una de las cuales tendría que presentar a toda la clase al final del curso. Mi mente se quedó completamente en blanco, un efecto que suele tener en mí el hecho de que me den tanta libertad para elegir casi cualquier cosa. Pasé los dos días siguientes intentando pensar en un proyecto bueno o interesante. Trabajo para una gestora de inversiones, así que lo primero que pensé fue en algo relacionado con la gestión de inversiones, pero luego pensé que paso más de 9 horas en el trabajo todos los días, así que no quería que mi sagrado tiempo libre se ocupara también con cosas relacionadas con el trabajo.
Unos días después, recibí el siguiente mensaje en uno de mis chats de WhatsApp del grupo:
Esto despertó una idea. ¿Qué pasaría si pudiera utilizar los conocimientos de ciencia de datos y aprendizaje automático aprendidos en el curso para aumentar la probabilidad de que una conversación concreta en Tinder fuera un «éxito»? Así se formó mi idea de proyecto. ¿El siguiente paso? Contarle a mi novia…
Algunos datos de Tinder, publicados por la propia Tinder:
- la aplicación tiene alrededor de 50 millones de usuarios, 10 millones de los cuales utilizan la aplicación diariamente
- desde 2012, ha habido más de 20.000 millones de coincidencias en Tinder
- un total de 1.6.000 millones de swipes se producen cada día en la aplicación
- el usuario medio pasa 35 minutos AL DÍA en la aplicación
- se estima que se producen 1,5 millones de citas A LA SEMANA gracias a la aplicación
Problema 1: Conseguir datos
¿Pero cómo conseguiría datos para analizar? Por razones obvias, las conversaciones de Tinder de los usuarios y el historial de coincidencias, etc., están codificados de forma segura para que nadie más que el usuario pueda verlos. Después de buscar en Google, me encontré con este artículo:
Esto me llevó a la conclusión de que Tinder se ha visto obligado a crear un servicio en el que puedes solicitar tus propios datos, como parte de la ley de libertad de información. El botón de «descarga de datos»:
Una vez pulsado, tienes que esperar 2-3 días laborables antes de que Tinder te envíe un enlace para descargar el archivo de datos. Esperaba ansiosamente este correo electrónico, ya que había sido un ávido usuario de Tinder durante un año y medio antes de mi actual relación. No tenía ni idea de cómo me sentiría, revisando un número tan grande de conversaciones que finalmente (o no tan eventualmente) se habían esfumado.
Después de lo que me pareció una edad, el correo electrónico llegó. Los datos estaban (afortunadamente) en formato JSON, así que una rápida descarga y carga en python y bosh, acceso a todo mi historial de citas online.
Los datos
El archivo de datos se divide en 7 secciones diferentes:
De estos, sólo dos eran realmente interesantes/útiles para mí:
- Mensajes
- Uso
Al analizarlo más a fondo, el archivo «Uso» contiene datos sobre «Aperturas de la aplicación», «Coincidencias», «Mensajes recibidos», «Mensajes enviados», «Swipes a la derecha» y «Swipes a la izquierda», y el «Archivo de mensajes» contiene todos los mensajes enviados por el usuario, con marcas de hora/fecha, y el ID de la persona a la que se envió el mensaje. Como estoy seguro de que puedes imaginar, esto llevó a una lectura bastante interesante…
Problema 2: Conseguir más datos
De acuerdo, tengo mis propios datos de Tinder, pero para que cualquier resultado que consiga no sea completamente insignificante/altamente sesgado estadísticamente, necesito conseguir los datos de otras personas. Pero cómo lo hago…
Por lo tanto, no hay que rogar mucho.
Milagrosamente, conseguí convencer a 8 de mis amigos para que me dieran sus datos. Los datos iban desde usuarios experimentados hasta usuarios esporádicos «cuando se aburren», lo que me proporcionó una sección transversal razonable de tipos de usuarios. ¿El mayor éxito? Mi novia también me dio sus datos.
Otra cosa complicada fue definir un «éxito». Me decanté por la definición de que o bien se obtenía un número de la otra parte, o bien los dos usuarios tenían una cita. A continuación, mediante una combinación de preguntas y análisis, clasifiqué cada conversación como exitosa o no.
Problema 3: ¿Y ahora qué?
Bien, tengo más datos, pero ¿ahora qué? El curso de Ciencia de Datos se centró en la ciencia de datos y el aprendizaje automático en Python, por lo que importarlos a python (utilicé cuadernos de anaconda/Jupyter) y limpiarlos parecía el siguiente paso lógico. Habla con cualquier científico de datos, y te dirá que la limpieza de datos es a) la parte más tediosa de su trabajo y b) la parte de su trabajo que ocupa el 80% de su tiempo. La limpieza es aburrida, pero también es fundamental para poder extraer resultados significativos de los datos.
Creé una carpeta, en la que dejé caer los 9 archivos de datos, luego escribí un pequeño script para recorrerlos, importarlos al entorno y añadir cada archivo JSON a un diccionario, siendo las claves el nombre de cada persona. También dividí los datos de «Uso» y los datos de los mensajes en dos diccionarios separados, para facilitar el análisis de cada conjunto de datos por separado.
Problema 4: Diferentes direcciones de correo electrónico conducen a diferentes conjuntos de datos
Cuando te registras en Tinder, la gran mayoría de la gente utiliza su cuenta de Facebook para iniciar sesión, pero la gente más precavida sólo utiliza su dirección de correo electrónico. Por desgracia, tenía una de estas personas en mi conjunto de datos, lo que significa que tenía dos conjuntos de archivos para ellos. Esto fue un poco molesto, pero en general no fue demasiado difícil de manejar.
Habiendo importado los datos en los diccionarios, entonces iteré a través de los archivos JSON y extraje cada punto de datos relevante en un dataframe de pandas, con un aspecto similar a este:
El primer gráfico se explica por sí mismo, pero el segundo puede necesitar alguna explicación. Esencialmente, cada fila/línea horizontal representa una única conversación, siendo la fecha de inicio de cada línea la fecha del primer mensaje enviado dentro de la conversación, y la fecha de finalización el último mensaje enviado en la conversación. La idea de este gráfico era tratar de entender cómo la gente utiliza la aplicación en términos de mensajería de más de una persona a la vez.
Aunque interesante, realmente no vi ninguna tendencia o patrón obvio que pudiera interrogar más, así que me dirigí a los datos agregados de «Uso». Inicialmente empecé a mirar varias métricas a lo largo del tiempo divididas por usuario, para intentar determinar cualquier tendencia de alto nivel:
pero nada destacó inmediatamente.
Entonces decidí mirar más profundamente en los datos de los mensajes, que, como mencioné antes, venían con una práctica marca de tiempo. Tras agregar el recuento de mensajes por día de la semana y hora del día, me di cuenta de que había dado con mi primera recomendación.
Las 9 de la noche de un domingo es la mejor hora para ‘Tinder’, mostrada a continuación como la hora/fecha en la que se envió el mayor volumen de mensajes dentro de mi muestra.
Aquí, he utilizado el volumen de mensajes enviados como un proxy para el número de usuarios en línea en cada momento, por lo que ‘Tindering’ en este momento se asegurará de que usted tiene la mayor audiencia.
Luego empecé a mirar la longitud del mensaje en términos de palabras y letras, así como el número de mensajes por conversación. Inicialmente, se puede ver a continuación que no había mucho que saltara a la vista… (aquí un «éxito» es rojo)
Pero una vez que se empieza a escarbar, hay unas cuantas tendencias claras:
- Los mensajes más largos tienen más probabilidades de generar un éxito (hasta cierto punto)
- La media de mensajes en una conversación que se encuentra un «éxito» es de 27, con una mediana de 21.
Estas observaciones me llevan a mi segunda y tercera recomendación.
La segunda recomendación:
Dedica más tiempo a construir tus mensajes, y por el amor de Dios no utilices palabras de texto… generalmente las palabras más largas son mejores palabras. Una advertencia aquí es que los datos contienen enlaces, que cuentan como palabras largas, por lo que esto puede sesgar los resultados.
Tercera recomendación:
No te precipites al tratar de conseguir un número. «Oye, estás en forma, ¿cuál es tu número?» es probablemente lo peor que puedes decir en cuanto a tus posibilidades. Del mismo modo, no lo dejes pasar demasiado tiempo. Entre el 20º y el 30º mensaje es lo mejor.
Después de analizar la longitud de la palabra/mensaje/conversación de forma exhaustiva, decidí analizar el sentimiento. Pero no sabía absolutamente nada sobre cómo hacerlo. Durante el curso, habíamos tratado un poco de procesamiento del lenguaje natural (bolsa de palabras, codificación en caliente, todo el preprocesamiento necesario, etc., junto con varios algoritmos de clasificación), pero no habíamos tocado el tema del sentimiento. Pasé algún tiempo investigando el tema, y descubrí que el nltk sentiment.vader SentimentIntensityAnalyzer sería un buen grito.
Esto funciona dando al usuario cuatro puntuaciones, basadas en el porcentaje del texto de entrada que fue:
- positivo
- neutral
- negativo
- una combinación de los tres
Por suerte, también se ocupa de cosas como el contexto de las palabras, la jerga e incluso los emojis. Como estaba mirando el sentimiento, no se hizo ningún preprocesamiento (minúsculas, eliminación de puntuación, etc.) para no eliminar ningún contexto oculto.
Empecé este análisis alimentando cada conversación completa en el analizador, pero rápidamente me di cuenta de que esto no funcionaba realmente, ya que el sentimiento de la conversación tendía rápidamente a 1 después de los primeros mensajes, y me cuesta creer que una conversación de 100 mensajes fuera 100% segura todo el tiempo.
Entonces dividí las conversaciones en sus mensajes constituyentes y los pasé de uno en uno, promediando las puntuaciones hasta el nivel de la conversación. Esto produjo un resultado mucho más realista en mi opinión:
Dividí estos datos por «éxito» o «sin éxito», y rápidamente vi un patrón emergente:
Esto me llevó a la cuarta recomendación.
La cuarta recomendación:
Sea positivo, pero no demasiado positivo.
El sentimiento medio de una conversación exitosa fue de 0,31 frente a 0,20 de una conversación no exitosa. Dicho esto, ser demasiado positivo es casi tan malo como ser demasiado negativo.
El último callejón que exploré fue qué efecto tenían varios detalles sobre el primer mensaje en el éxito de la conversación. Las ideas iniciales de cosas que podrían tener un efecto fueron:
- longitud
- si se utilizó un nombre
- sentimiento
- presencia de emojis
- contenido explícito
Como era de esperar, cuanto más largo sea el primer mensaje, mayor será la probabilidad de que esa conversación continúe hasta llegar a un «éxito». Como extensión, se duplica la probabilidad de éxito si no se utiliza un abridor de una sola palabra, por ejemplo, no limitarse a decir «hey» o «hi» o «daayyuumm» (ejemplo real).
Algo más sorprendente es que utilizar un nombre en el primer mensaje tuvo muy poco efecto en el ‘Ratio de Éxito’ (Nº de Éxitos/Nº de No Éxitos).
El sentimiento del primer mensaje resultó ser aproximadamente 0,09 más alto para las conversaciones «Exitosas» que para las «No Exitosas», lo cual no fue realmente una sorpresa… si insultas a alguien en un primer mensaje, es intuitivamente menos probable que te respondan.
Analizar los Emojis fue una tarea en la que no había pensado realmente, y tenía el potencial de ser complicada. Por suerte, existe un paquete llamado ‘emoji’ que detecta automáticamente la presencia de emojis en el texto. Por desgracia, y para mi desgracia, parece que el uso de un emoji en un primer mensaje aumenta la probabilidad de obtener un «éxito».
Ahora, el contenido explícito… Otro que tenía el potencial de ser bastante complicado, ya que no hay bibliotecas incorporadas que recojan el uso de improperios, etc. (que yo sepa). Por suerte me topé con esto:
Te aseguro que hay auténticos cracks en él.
Luego comprobé qué primeros mensajes contenían una palabra de esta lista, 40 de los cuales sí. Como siempre ocurre con este tipo de cosas, encontré algunos casos interesantes:
FYI este era un tipo hablando de sus polainas de remo…
¿Resultados? Resulta que ninguno de los primeros mensajes con contenido explícito condujo a un ‘Éxito’
Esto me llevó a mi quinta y última recomendación.
La quinta recomendación:
Al enviar un primer mensaje:
- Sé positivo
- 8 palabras es lo óptimo
- Usa un emoji o dos
- No seas explícito
Así que PARA RESUMIR
- Usa Tinder a las 9 de la noche de un domingo para conseguir la máxima audiencia
- Dedica tiempo a construir los mensajes y no utilices text speak
- Prepárate para pedir un número o una cita entre el 20º y el 30º mensaje
- Sé positivo, pero no demasiado
- Envía algo que no sea «hola» como primer mensaje, apunta a unas 8 palabras, quizás usa un emoji y no seas explícito
Algunas trampas de los datos:
- Mi conjunto de datos es una muestra muy, muy pequeña, haciendo que la mayoría de las ideas sean inútiles
- El conjunto de datos está sesgado hacia el tipo de gente que conozco, El conjunto de datos sólo contiene una parte de la conversación
- Los mensajes y las estadísticas de uso no se alinean necesariamente debido a que los usuarios desinstalan y vuelven a instalar la aplicación
- Ninguna técnica de PNL será perfecta debido al sarcasmo/las variaciones en la forma de hablar de la gente
Algunas ideas para el trabajo futuro:
- Recoger más datos
- Hacer más para determinar los resultados estadísticamente significativos frente a las observaciones
- Investigar el análisis de la conversación por temas – qué tipo de mensajes componen el sentimiento bueno y malo
- Tratar de investigar el sarcasmo
- Investigar otras apps (Bumble, Hinge etc.)
- Algún tipo de análisis de clasificación si se incluyeran más datos, ya que solo tuvimos 70 éxitos
- Investigar más sobre las divisiones de género si se incluyeran más datos
Algunas factoides interesantes de los datos:
- Mayor número de swipes por una sola persona en un solo día: 8096
- Los chicos son más propensos a dejar pasar mucho tiempo (7 días más o menos) antes de enviar un segundo mensaje
- Hacer una pregunta en un primer mensaje en realidad disminuye tu probabilidad de éxito
- Las mujeres hacen swipe a la derecha en promedio el 1% de las veces, mientras que los hombres lo hacen ~50% de las veces
- Por aplicación abierta, las mujeres hacen swipe 3 veces más que los hombres
Más información:
- Se ha publicado un artículo llamado ‘A First Look at User Activity on Tinder’, enlace aquí
- Hay una API de Tinder, pero desgraciadamente es sólo para la gente que usa la app en lugar de dar acceso a una base de datos de algún tipo. De todos modos, utilizarla para probar ciertas hipótesis podría ser interesante.
- Tinderbox es una pieza de software que puede aprender por quién te sientes atraído a través de la reducción de la dimensionalidad. También tiene un chatbot incorporado si realmente quieres automatizar el proceso…
Gracias por leer, cualquier idea para el trabajo futuro sería muy apreciada!