¿Cuánto puede decir un perfil en una red social sobre una persona? Fotos, publicaciones, comentarios, suscripciones: un campo intacto para el análisis. Hoy hablaremos sobre cómo determinamos los intereses de los usuarios en función de sus suscripciones de Instagram.
FuenteEl enfoque obvio es clasificar las suscripciones de una persona. Por ejemplo, entre las suscripciones del usuario Ivan encontramos dos autobloggers y tres cuentas con imágenes divertidas, el resto de los perfiles no son temáticos (suponemos que son amigos, familiares, colegas, etc.). De esto concluimos: Ivan es una persona alegre, aficionada a los autos. Ganancia Todo lo que necesitamos es la correspondencia "blogger + contenido temático", pero no todo es tan simple aquí.
¿Quién es un blogger? Un blogger en Instagram no es diferente de una cuenta normal (y, en general, es algo así como un estado mental). Idealmente, estamos interesados en cuentas temáticas con una gran parte de una audiencia en vivo, aunque no queremos simplemente cortar el número de suscriptores, podríamos perder algo.
¿Dónde conseguir una buena taxonomía? Si se te ocurren las categorías, entonces algo interesante seguramente se perderá en "cosas diferentes", y cuando todo esté listo, resulta que las categorías son demasiado amplias. Queremos obtener una partición natural y, por lo tanto, agruparemos a los bloggers.
¿Puede un blogger pertenecer a varias categorías? Solo asi! Muy a menudo, él es simultáneamente un suizo, un segador y un tipo que juega (así como viajes, estilo de vida, esposa y madre).
Por lo tanto, necesitamos un conjunto de datos con una gran cantidad de blogueros y un algoritmo de agrupamiento con grupos de intersección en la salida.
Como empezó todo
Nos acercan clientes que desean colocar sus anuncios con líderes de opinión en Instagram de la manera más efectiva. A veces hay una lista de bloggers, y luego resolvemos el problema de optimización: llegar a más personas por menos dinero, y a veces no hay una lista y es necesario encontrar bloggers relevantes. Esta vez buscaron perfiles de oftalmólogos.
Utilizamos un enfoque similar a un sistema de recomendación:
- Elija 3-7 perfiles adecuados con sus manos ("comunidad central")
- Utilizando la intersección de suscriptores, identificamos a las personas que están interesadas en el tema ("entusiastas")
- Estamos buscando nuevos médicos en las suscripciones de personas "entusiastas"
- Si es necesario, repita los pasos 1 a 3 (agregar nuevos médicos al "núcleo" o cambiarlo)
Ahora más en detalle en un ejemplo.
Paso 1. Usando una búsqueda en Instagram, seleccionamos 6 cuentas de oftalmólogos de diferentes regiones de Rusia:
La lista es bastante aleatoria, pero fue suficiente para nosotros que el blog realmente coincida con el tema y los suscriptores no sean menos de 1000 personas.
Paso 2. Después de cruzar todos los suscriptores, miramos la distribución.
¡Hurra! Hay intersecciones
Además, ¡hay dos personas suscritas a los seis perfiles! Entonces, ahora debe determinar a quién consideramos oftalmología "entusiasta". Decidimos llevar a todos, comenzando con tres suscripciones. Como dicen, 1 vez es un accidente, 2 veces es una coincidencia, 3 es una regularidad. Así, se encontraron 131 (2 + 3 + 24 + 102) usuarios "entusiastas".
Paso 3. Descargue las suscripciones de personas “entusiastas” y agregue nuevamente de todas las formas posibles.
Obtuvimos una impresionante lista de cuentas, de las cuales ahora seleccionaremos nuevos oftalmólogos. La columna de la derecha muestra cuántas de las 131 personas que fueron seleccionadas en el segundo paso están suscritas al perfil. En la parte superior había perfiles de nuestros seis originales, lo cual no es sorprendente. Si ahora seleccionamos el umbral y decimos: "Todos los perfiles con un valor de conteo de más de diez son médicos nuevos", entonces corremos el riesgo de atribuir cuentas populares como Olga Buzova a oftalmólogos y al mismo tiempo perder perfiles pequeños pero relevantes, así que agregue uno más columna el número de suscriptores y calcular el porcentaje de usuarios entusiastas entre los suscriptores.
Por conveniencia, la fracción se multiplica por 100 (por lo que compartir es el porcentaje de hecho). Como resultado, con la condición contar> = 6 y compartir> = 0.05, recibieron 166 nuevos oftalmólogos. Clase!
Paso 4. 172 cuentas se convirtieron en el nuevo "núcleo" de la comunidad, esto ayudó a encontrar alrededor de 500 oftalmólogos nuevos más, pero el resultado ya se transfirió a cuentas extranjeras.
Cuentas similares en recomendaciones de Instagram
Todo esto es interesante, por supuesto, y ahora sabemos cómo encontrar cuentas que sean similares entre sí, pero aún soñamos con desglosar todos los instaladores en categorías. Y luego se me ocurrió la idea de mirar las recomendaciones de Instagram ya hechas.
El hecho es que las cuentas temáticas tienen recomendaciones, pero la gente común no. Aquí está la respuesta a la pregunta de a quién considerar bloggers y menos un dolor de cabeza. ¡Hurra!
En las recomendaciones, un blogger tiene hasta 80 perfiles similares. Teníamos una lista de 1000 blogs rusos, comenzamos con ella. Tomaron otras similares, luego similares, luego ... bueno, ya entiendes :)
El plan era que algún día este proceso terminaría, ya que los perfiles pequeños con un par de cientos de suscriptores no se incluirán en las recomendaciones, pero de hecho nos detuvimos cuando se acabó la paciencia. Siempre puede continuar recopilando el conjunto de datos, pero hasta ahora no ha sido útil, con una alta probabilidad de que hayamos cubierto a casi todos los bloggers rusos, y está bien.
Ahora tenemos un gráfico con 3,428,453 vértices (blogueros) y 96,967,974 aristas (similitud de dos blogueros entre sí).
Así es como se ve nuestro gráfico en una muestra muy pequeñaPor cierto, resultó que no fuimos los primeros en elegir
este enfoque.Aparentemente, las recomendaciones en Instagram se forman en función de a quién siguen los seguidores de este perfil, por lo que un médico de Bryansk tendrá cuentas populares de Bryansk y otros médicos en las recomendaciones. Esto es similar a nuestra búsqueda de oftalmólogos, pero ahora podemos considerar todas las comunidades a las que pertenece el blogger al mismo tiempo. Además, la velocidad de procesamiento aumenta significativamente, ya que no es necesario analizar a todos los suscriptores del blogger, es suficiente con tomar solo 80 cuentas recomendadas.
Selección y descripción del algoritmo.
Genial Los datos se han preparado, ahora necesitamos elegir una herramienta y un algoritmo que pueda hacer frente a un gráfico tan grande, preferiblemente en un tiempo adecuado. Permíteme recordarte que en el resultado queremos obtener un conjunto de comunidades donde un blogger puede pertenecer a varias de ellas.
Optamos por la biblioteca Stanford Network Analysis Platform (SNAP)
Stanford Network Analysis Platform (SNAP) es una biblioteca de minería de gráficos y análisis de red de uso general. Está escrito en C ++ y se escala fácilmente a redes masivas con cientos de millones de nodos y miles de millones de bordes. Manipula eficientemente gráficos grandes, calcula propiedades estructurales, genera gráficos regulares y aleatorios, y admite atributos en nodos y bordes.
Nos llamaron la atención el algoritmo AGMfit (AGM - Modelo de gráfico afiliado) y, como resultado, utilizamos BIGCLAM (Modelo de afiliación de clúster para grandes redes). Solo difieren en que, en el primer caso, el problema de optimización se resuelve combinatoriamente, lo que lo hace menos escalable, y el segundo simplemente le permite alimentar gráficos como el nuestro.
La idea principal y bastante intuitiva: cuanto más dos nodos tienen comunidades comunes, mayor es la probabilidad de comunicación entre estos dos nodos. Ambos algoritmos se basan en el modelo de gráfico afiliado, así que analicemos con más detalle:
Supongamos que tenemos un gráfico bipartito en el que los picos redondos son comunidades (
A y
B ) y cuadrado: usuarios de la red social y cada persona (
u ) se refiere a diferentes comunidades con pesos específicos (
FuA y
FuB ) Cuanto mayor es el peso, mayor es la probabilidad de que el participante esté conectado (familiarizado) con otros miembros de la comunidad.
Ejemplo: los colegas que estudiaron en la misma universidad se siguen en Instagram. Ambos son graduados de la misma universidad (comunidad 1) y trabajan en la misma compañía (comunidad 2), no sabemos qué causó la "amistad" en la red y cuándo se conocieron. Si uno se gradúa de la universidad y consigue un trabajo, el segundo se gradúa hace cinco años y ha estado trabajando en la empresa todo este tiempo, entonces el peso de pertenecer a la primera comunidad 1 será mayor, y a la comunidad 2 menor y viceversa.
Para cada comunidad común de un par de personas, tenemos una oportunidad independiente de familiarizarnos:
1−exp(−Fuc cdotFvc)
Por lo tanto, cuanto más comunes son las comunidades, más probable es que se conozcan:
1−exp(− sumcFuc cdotFvc)
Si calculamos la probabilidad de una conexión entre cada par de usuarios, entonces en la salida obtenemos un gráfico donde los vértices son personas y los bordes entre ellos son un hecho de conocimiento o suscripción entre ellos.
Por lo tanto, desde la vista de la izquierda, nos trasladamos a la imagen de la derecha.
Ahora comprendamos cómo se usa este modelo en el descubrimiento comunitario.
Tenemos un gráfico de bloggers similares y nuestro objetivo es descubrir
K comunidades que utilizan el modelo descrito anteriormente, seleccionando la matriz de peso más adecuada
F (su dimensión
N nodos en
K comunidades) para que el gráfico obtenido en la salida sea similar al nuestro original. Esto se hace maximizando la función de probabilidad.
l(F)=logP(G|F)
Y, sin embargo, todo esto se puede representar como una descomposición matricial no negativa, que solo da una ventaja en la escalabilidad del algoritmo BIGCLAM en comparación con AGMfit.
Lea más
aquí y
aquí .
Numeración y lanzamiento de la comunidad
En BIGCLAM, puede especificar tanto el número exacto de comunidades como el intervalo. El algoritmo selecciona el 20% de los pares de nodos por prueba, y el 80% es el ajuste del modelo con un número diferente de comunidades.
Formamos un archivo de entrada con una lista de bordes y ejecutamos:
./bigclam -o:bloggers -i:query_graph_all.edgelist -c:-1 -nc:20 -mc:50000 -xc:200000 -nt:10
Los parámetros le permiten especificar el número de intentos, el número mínimo y máximo de comunidades (o exacto, si es necesario), el número de subprocesos para la paralelización y el prefijo de los archivos de salida. En nuestro caso, establecemos el intervalo de 50 a 200 mil comunidades con 20 intentos en 10 hilos. Todo este esplendor se contó cinco días con 2 CPU Intel® Xeon® Gold 6150 a 2,70 GHz. La salida recibió dos archivos, uno para Gephi, el segundo texto, en el que cada línea es una comunidad.
De hecho, ejecutamos el algoritmo dos veces y por primera vez encontramos el límite superior de 50 mil comunidades, el resultado no fue malo, pero las comunidades mixtas a menudo se encontraron. Esta vez nuevamente alcanzamos el valor máximo de 200 mil comunidades, pero fueron mucho mejores, y nos detuvimos en eso. Probablemente podría obtener el resultado aún mejor, pero doscientas mil comunidades sin nombre asustaron nuestra imaginación.
Hermosa foto¿Qué hacer ahora con todo esto?
Por un lado, las comunidades resultantes nos ayudan a buscar rápidamente grupos estrechos de blogueros (como entonces con los oftalmólogos). Si hay un par de bloggers como ejemplo, entonces tomamos todas las comunidades a las que pertenecen, descartamos las innecesarias y eso es todo. Puede usar una búsqueda por nombre, por ejemplo, una de las comunidades sobre decoración y diseño de interiores:
Por otro lado, para determinar los intereses de los usuarios, todas estas comunidades deben ser llamadas de alguna manera significativa. O tal vez no todo es necesario.
CRank
Desafortunadamente, no todas las comunidades recibidas son igualmente buenas, y para encontrar las más interesantes, decidimos intentar usar el método de priorización CRank de la misma biblioteca SNAP. Está diseñado para coincidir automáticamente con el rango de cada comunidad en función de la estructura del gráfico: cuanto mayor sea el valor, mejor será la comunidad.
En la entrada del programa, presentamos las comunidades que encontramos anteriormente, para cada una de ellas se calculan las métricas de prioridad (4 piezas), luego estas métricas se agregan y obtenemos una estimación.
Lee más
aquí .
Lanzamiento
./crank -i:bloggers_cmtyvv.txt -c:query_graph_all.edgelist -o:bloggers_prioritization.txt
Durante el lanzamiento, encontraron un problema de compatibilidad con Ubuntu 18.04, ofrecen una solución
aquí .
Dado que nuestro archivo de comunidad bloggers_cmtyvv.txt y la lista de bordes query_graph_all.edgelist inicialmente contenían apodos (de tipo cadena), tuvimos que hacer hash para que fuera int, de lo contrario, juramentos.
Veamos cómo funciona esto con un ejemplo:
Seleccionaremos varias comunidades donde haya perfiles que contengan la cadena "lokomotiv" en el nombre, según lo planeado, esta debería ser la comunidad de fanáticos del fútbol del club Lokomotiv, veamos qué es realmente. Los miembros de la comunidad están marcados en rojo, debajo de cada imagen hay una puntuación correspondiente.
Comunidad 1, puntaje 0.4Comunidad 2, puntaje 0.41Comunidad 3, puntaje 0.34Comunidad 4, puntaje 0.13Luego, después de mirar todos los perfiles de este subgrafo, seleccionamos aquellos que realmente pertenecen a la comunidad deseada, resultó así:
Resulta que las dos primeras comunidades realmente contienen lo que necesitamos, casi sin errores (excepto el perfil del equipo de fútbol ruso Rusia), la tercera comunidad es buena, pero cubre menos cuentas que las dos primeras, por lo tanto, el puntaje es menor y la cuarta la comunidad, aunque consiste en cuentas sobre un tema de fútbol (aquí están los jugadores de otros clubes, sus esposas y gerentes), pero, por eso, no nos conviene.
Podemos concluir que CRank funciona bastante bien.
Marcado manual para colorear y resultados.
Para resolver el problema de colorear a los usuarios por intereses, también analizamos los textos de las publicaciones y queríamos ver dónde el resultado es mejor / más interesante (en textos o en suscripciones) y si hay alguna coincidencia. Para una pequeña muestra de personas, alrededor de 800 comunidades tuvieron que ser etiquetadas independientemente. Estábamos más que satisfechos con el resultado y decidimos que este enfoque debería desarrollarse. El método de detección de la comunidad le permite encontrar categorías de interés muy estrechas e inusuales, por ejemplo, suscribiéndose a perfiles de ratas (en el sentido de pequeños roedores grises) y otras cosas sorprendentes, puede descubrir qué tipo de deporte le interesa a una persona y no empujar todo a la categoría "extrema" y así sucesivamente
Probablemente no marcaremos las 200 mil comunidades, pero tal vez juguemos con los resultados de CRank y dejemos solo a las comunidades con alta velocidad, y tal vez las marcaremos según sea necesario. Tales cosas :)
Gracias
Este artículo fue escrito conjuntamente con mi supervisor Artyom Korolev ( korolevart ) R&D Dentsu Aegis Network RusiaFuente