Una guia per predir els enllaços: com prediuen les futures connexions a Facebook

Visió general

  • Una introducció per enllaçar la predicció, el seu funcionament i on es pot utilitzar al món real
  • Obteniu informació sobre la importància de Link Prediction als mitjans de comunicació social
  • Creeu el vostre primer model d’enllaç de prediccions d’enllaços per a un cas d’ús de Facebook mitjançant Python

Introducció

Alguna vegada us heu preguntat qui pot ser la vostra següent connexió a Facebook? És curiós de qui podria venir la següent sol·licitud?

Què passaria si et digués que hi havia una manera de predir això?

M’encanta fer una pluja d’idees i trobar aquestes declaracions de problemes quan estic navegant pel meu compte de Facebook. És un dels avantatges de tenir la mentalitat d’un científic de dades.

La majoria de plataformes de xarxes socials, inclosa Facebook, es poden estructurar com a gràfics. Els usuaris registrats estan interconnectats en un univers de xarxes. I per treballar en aquestes xarxes i gràfics, necessitem un conjunt diferent d’enfocaments, eines i algorismes (en lloc dels mètodes tradicionals d’aprenentatge automàtic).

Així que en aquest article resoldrem un problema de xarxa social amb l'ajuda de gràfics i d'aprenentatge automàtic. Primer comprendrem els conceptes bàsics i els components de la predicció d’enllaços abans d’iniciar un estudi de cas de Facebook i implementar-lo a Python.

Us recomano recórrer els articles que es descriuen a continuació per obtenir un resum dels gràfics i el seu funcionament:

Taula de continguts

  1. Una descripció general de les xarxes socials Analytics
  2. Una previsió d'enllaç
  3. Estratègia per resoldre un problema de predicció d'enllaç
  4. Estudi de cas: prediu les connexions futures entre pàgines de Facebook - Comprensió de les dades - Model de preparació de bases de dades: extracció de funcions - Model de construcció: model de predicció d'enllaç

Una descripció general de les xarxes socials Analytics

Definim primer una xarxa social abans de capbussar-nos en el concepte de predicció d’enllaços.

Una xarxa social és essencialment una representació de les relacions entre entitats socials, com ara persones, organitzacions, governs, partits polítics, etc.

Les interaccions entre aquestes entitats generen quantitats de dades inimaginables en forma de publicacions, missatges de xat, tuits, likes, comentaris, comparticions, etc. Això obre una finestra d’oportunitats i casos en què podem treballar.

Això ens porta a Analytics Social Network (SNA). Podem definir-lo com una combinació de diverses activitats que es realitzen a les xarxes socials. Aquestes activitats inclouen la recollida de dades de llocs de comunicació social en línia i l'ús d'aquestes dades per prendre decisions empresarials.

Els avantatges de l’analítica de xarxes socials poden ser molt gratificants. Aquests són alguns avantatges clau:

  • Us ajuda a entendre millor el vostre públic
  • Utilitzat per a la segmentació de clients
  • S'utilitza per dissenyar sistemes de recomanació
  • Detecta notícies falses, entre altres coses

Una previsió d'enllaç

La predicció d'enllaç és un dels temes de recerca més importants en el camp dels gràfics i les xarxes. L’objectiu de la predicció d’enllaços és identificar parells de nodes que formaran un enllaç o no en el futur.

La predicció d'enllaç té un gran ús en aplicacions del món real. A continuació, es detallen alguns dels casos d’ús importants de la predicció d’enllaços:

  • Prediu quins clients podran comprar quins productes en mercats en línia com Amazon. Pot ajudar a fer millors recomanacions sobre els productes
  • Suggeriu interaccions o col·laboracions entre empleats d'una organització
  • Obteniu informació vital de les xarxes terroristes

En aquest article, explorarem un cas d’ús una mica diferent de predicció d’enllaços: predicció d’enllaços en una xarxa social en línia.

Estratègia per resoldre un problema de predicció d'enllaç

Si d'alguna manera podem representar un gràfic en forma de conjunt de dades estructurat amb un conjunt de característiques, potser podem utilitzar l'aprenentatge automàtic per predir la formació d'enllaços entre els parells de nodes no connectats del gràfic.

Prenem un gràfic maniquí per entendre aquesta idea. A continuació, es mostra un gràfic de 7 nodes i els parells de nodes no connectats són AF, BD, BE, BG i EG:

Gràfic a l’hora t

Ara, diguem que analitzem les dades i vam trobar el gràfic següent. S'han format algunes connexions noves (enllaços en vermell):

Gràfic a l’hora t + n

Hem de tenir un conjunt de variables de predicció i una variable de destinació per construir qualsevol tipus de model d’aprenentatge automàtic, oi? Aleshores, on són aquestes variables? Bé, el podem obtenir del gràfic en si! Vegem com es fa.

El nostre objectiu és predir si hi hauria un enllaç entre dos nodes no connectats. De la xarxa en el moment t, podem extreure els parells de nodes següents que no tenen enllaços entre ells:

  1. AF
  2. BD
  3. SER
  4. BG
  5. PER EXEMPLE

Tingueu en compte que, per comoditat, només he considerat els nodes que tenen un parell d’enllaços a part.

El següent pas per nosaltres és crear funcions per a cada parell de nodes. La bona notícia és que hi ha diverses tècniques per extreure funcions dels nodes d’una xarxa. Suposem que utilitzem una d’aquestes tècniques i que construïm funcions per a cadascuna d’aquestes parelles. Tot i això, encara no sabem quina és la variable objectiu. Res de què preocupar, també ho podem obtenir fàcilment.

Mireu el gràfic en el moment t + n. Veiem que hi ha tres enllaços nous a la xarxa per a les parelles AF, BD i BE respectivament. Per tant, assignarem a cadascun d'ells un valor de 1. Els parells de nodes BG i EG seran assignats 0 perquè encara no hi ha enllaços entre els nodes.

Per tant, les dades es veuran així:

Ara que tenim la variable objectiu, podem crear un model d’aprenentatge de màquines utilitzant aquestes dades per realitzar la predicció d’enllaços.

Així, és així com hem d’utilitzar gràfics socials en dos casos diferents de temps per extreure la variable objectiu, és a dir, la presència d’un enllaç entre un parell de nodes. Tingueu en compte, però, que en els escenaris del món real, només tindrem dades de l’actualitat.

Extreu dades d'un gràfic per crear el vostre model

A la secció anterior, vam poder obtenir etiquetes per a la variable objectiu perquè teníem accés al gràfic en el moment t + n. Tanmateix, en els escenaris del món real, tindríem un sol conjunt de dades gràfics a la mà. Això és!

Suposem que tenim el gràfic següent d’una xarxa social on els nodes són els usuaris i els talls representen algun tipus de relació:

Les parelles de nodes candidats, que poden formar un enllaç en un futur futur, són (1 i 2), (2 i 4), (5 i 6), (8 i 10), etc. Hem de construir un model que predigui si hi hauria un enllaç entre aquestes parelles de nodes o no. Això és el que fa la predicció d'enllaços.

Tanmateix, per crear un model de predicció d'enllaços, hem de preparar un conjunt de dades d'entrenament fora d'aquest gràfic. Es pot fer mitjançant un truc senzill.

Imatge això: com podria semblar aquest gràfic en algun moment del passat? Hi hauria menys vores entre els nodes perquè les connexions en una xarxa social es creen gradualment amb el pas del temps.

Per tant, tenint present això, podem ocultar aleatòriament algunes de les vores del gràfic indicat i després seguir la mateixa tècnica que s’explica a l’apartat anterior per crear el conjunt de dades d’entrenament.

Vés als enllaços del gràfic

Tot i eliminar els enllaços o les vores, hauríem d’eliminar qualsevol vora que pugui produir un node aïllat (node ​​sense cap vora) o una xarxa aïllada. Retirem algunes de les vores de la nostra xarxa:

Com podeu veure, s’han eliminat les vores de les parelles de nodes (1 i 4), (7 i 9) i (3 i 8).

Afegiu etiquetes a les dades extretes

A continuació, hauríem de crear funcions per a totes les parelles de nodes sense connexió, incloses les que hem omès les vores. Les vores suprimides es marcaran com a "1" i els parells de nodes no connectats com a "0".

La variable de destinació es desequilibrarà molt en aquest conjunt de dades. Això és el que trobareu en els gràfics del món real. El nombre de parells de nodes no connectats seria enorme.

Prenem un estudi de cas i resolem el problema de la predicció d’enllaços mitjançant Python.

Estudi de cas: prediu les connexions futures entre pàgines de Facebook

Aquí és on aplicarem tot allò anterior en un escenari fantàstic del món real.

Treballarem amb un conjunt de dades gràfic en què els nodes són pàgines de Facebook d’articles de menjar populars i cuiners reconeguts d’arreu del món. Si hi ha dues pàgines (nodes) entre elles, hi ha una vora (enllaç) entre elles.

Podeu descarregar el conjunt de dades des d’aquí.

Objectiu: crear un model de predicció d'enllaços per predir enllaços futurs (mútues) entre nodes no connectats (pàgines de Facebook).

Aprofitem el nostre quadern de Jupyter (o Colab)!

Comprensió de les dades

Primer importarem totes les biblioteques i mòduls necessaris:

Carreguem les pàgines de Facebook com a nodes i respostes mútues entre les pàgines com a vores:

Sortida: (620, 2102)

Tenim 620 nodes i 2.102 enllaços. Ara creem un fotograma de dades de tots els nodes. Cada fila d'aquest fotograma de dades representa un enllaç format pels nodes de les columnes "node_1" i "node_2", respectivament:

fb_df.head ()

Els nodes "276", "58", "132", "603" i "398" formen enllaços amb el node "0". Podem representar fàcilment aquesta ordenació de pàgines de Facebook en forma de gràfic:

Wow, això sembla bastant. Això ho tractarem: una malla metàl·lica de pàgines de Facebook (punts blaus). Les línies negres són els enllaços o vores que connecten tots els nodes entre ells.

Preparació de conjunt de dades per a la construcció de models

Hem de preparar el conjunt de dades a partir d’un gràfic no dirigit. Aquest conjunt de dades tindrà característiques de parells de nodes i la variable de destinació seria de naturalesa binària, indicant la presència d’enllaços (o no).

Recupereu parells de nodes no connectats: mostres negatives

Ja hem entès que per resoldre un problema de predicció d'enllaç, hem de preparar un conjunt de dades a partir del gràfic indicat. Una part important d’aquest conjunt de dades són les mostres negatives o els parells de nodes no connectats. En aquesta secció, us mostraré com podem extreure els parells de nodes no connectats d’un gràfic.

Primer, crearem una matriu d’adjacència per trobar quins parells de nodes no estan connectats.

Per exemple, l'adacència del gràfic següent és una matriu quadrada en què les files i les columnes estan representades pels nodes del gràfic:

Els enllaços es denoten pels valors de la matriu. 1 significa que hi ha un enllaç entre la parella de nodes i 0 significa que hi ha un enllaç entre la parella de nodes. Per exemple, els nodes 1 i 3 tenen 0 en la seva cruïlla a la matriu i aquests nodes tampoc tenen cap avantatge en el gràfic anterior.

Utilitzarem aquesta propietat de la matriu d’adjacència per trobar tots els parells de nodes no connectats del gràfic G original:

Vegem la forma de la matriu d’adacència:

forma adj_G.shap

Sortida: (620, 620)

Com podeu veure, és una matriu quadrada. Ara, recorrerem la matriu d’adacència per trobar les posicions dels zeros. Tingueu en compte que no hem de passar per tota la matriu. Els valors de la matriu són els mateixos per sobre i per sota de la diagonal, com podeu veure a continuació:

Podem cercar els valors per sobre de la diagonal (part verda) o els valors següents (part vermella). Cerquem zero els valors en diagonal:

A continuació, es detallen quantes parelles de nodes no connectades tenim al nostre conjunt de dades:

len (all_unconnected_pairs)

Sortida: 19.018

Tenim 19.018 parells no connectats. Aquests parells de nodes actuaran com a mostres negatives durant l'entrenament del model de predicció d'enllaç. Conservem aquestes parelles en un marc de dades:

Elimineu els enllaços dels parells de nodes connectats: mostres positives

Com hem comentat anteriorment, sortirem aleatòriament algunes de les vores del gràfic. No obstant això, l'eliminació aleatòria de les vores pot produir un tall de nodes i fragments del gràfic connectats. Això és el que hem de cuidar. Hem d’assegurar-nos que en el procés de deixar caure les arestes, tots els nodes del gràfic han de romandre connectats.

Al bloc de codi següent, comprovarem primer si deixar-se una parella de nodes produeix la divisió del gràfic (nombre_conectat_components> 1) o una reducció del nombre de nodes. Si no passen les dues coses, deixem la parella de nodes i repetim el mateix procés amb la següent parella de nodes.

Finalment, obtindrem una llista de parells de nodes que es poden deixar caure del gràfic i tots els nodes es mantindrien intactes:

len (omissible_links_index)

Sortida: 1483

Tenim més de 1400 enllaços que podem treure del gràfic. Aquests vores caiguts actuaran com a exemples d'entrenament positius durant l'entrenament del model de predicció d'enllaç.

Dades de formació de models

A continuació, afegirem aquestes vores desmuntables al fotograma de dades de parells de nodes no connectats. Com que aquestes noves vores són mostres positives, tindran un valor objectiu de "1":

Comprovem la distribució dels valors de la variable meta:

data ['enllaç']. value_counts ()

0 -19018 1 -1483

Resulta que es tracta de dades molt desequilibrades. La ràtio d’enllaç versus no d’enllaç és propera al 8%. A la secció següent, extreurem les funcions per a tots aquests parells de nodes.

Extracció de funcions

Utilitzarem l’algorisme node2vec per extreure les característiques del node del gràfic després d’haver deixat els enllaços. Per tant, primer creem un gràfic nou després de deixar els enllaços extraïbles:

A continuació, instal·larem la biblioteca node2vec. És bastant similar a l’algorisme de DeepWalk. Tot i això, implica passejades aleatòries esbiaixades. Per obtenir més informació sobre node2vec, sens dubte heu de consultar aquest document node2vec: Aprenentatge de funcions escalables per a xarxes.

De moment, només cal tenir en compte que node2vec s’utilitza per a la representació vectorial dels nodes d’un gràfic. Instal·lem-ho:

! pip d'instal·lació node2vec

Podeu trigar una estona a instal·lar-vos a la vostra màquina local (és molt ràpid si feu servir Colab).

Ara, formarem el model node2vec al nostre gràfic (G_data):

A continuació, aplicarem el model de node2vec entrenat a cada parell de nodes a les 'dades' del fotograma de dades. Per calcular les característiques d’una parella o una vora, afegirem les característiques dels nodes d’aquest parell:

x = [(n2w_model [str (i)] + n2w_model [str (j)]) per a i, j en zip (dades ['node_1'], dades ['node_2'])]

Construint el nostre model de predicció d'enllaços

Per validar el rendiment del nostre model, hauríem de dividir les nostres dades en dues parts: una per entrenar el model i una altra per provar el rendiment del model:

Encaixem primer un model de regressió logística:

Ara farem prediccions sobre el conjunt de proves:

preditions = lr.predict_proba (xtest)

Utilitzarem la puntuació AUC-ROC per comprovar el rendiment del nostre model.

roc_auc_score (ytest, prediccions [:, 1])

Sortida: 0,7817

Obtenim una puntuació de 0,78 mitjançant un model de regressió logística. Vegem si podem obtenir una millor puntuació mitjançant un model més complex.

La formació es va aturar després de la iteració del 208 perquè vam aplicar els criteris d’aturada precoç. El més important, el model va obtenir una impressionant puntuació de 0,9273 AUC al conjunt de proves. Us animo a fer una ullada a la documentació lightGBM per obtenir més informació sobre els diferents paràmetres.

Notes finals

En els gràfics hi ha un enorme potencial. Podem aprofitar això per resoldre un gran nombre de problemes del món real, dels quals un predicció d'enllaç és un.

En aquest article, hem presentat com es pot afrontar un problema de predicció d'enllaços mitjançant l'aprenentatge automàtic i quines són les limitacions i aspectes importants que hem de tenir en compte mentre resolem aquest problema.

No dubteu a fer qualsevol pregunta o deixar els vostres comentaris a la secció de comentaris que hi ha a continuació. Segueix explorant!

Publicat originalment a https://www.analyticsvidhya.com el 16 de gener de 2020.