Сілтемені болжауға арналған нұсқаулық - Facebook-тағы болашақ байланыстарды қалай болжау керек

Шолу

  • Болжамдарды, оның қалай жұмыс істейтінін және оны нақты әлемде қай жерде қолдануға болатынын байланыстыратын кіріспе
  • Сілтемелерді болжаудың әлеуметтік медиадағы маңызы туралы біліңіз
  • Python көмегімен Facebook-ті қолдану жағдайына арналған алғашқы Link Prediction моделін жасаңыз

Кіріспе

Facebook-тағы келесі байланысыңыз кім болатындығы туралы ойландыңыз ба? Келесі сұрау кімнен шығуы мүмкін?

Мұны алдын-ала болжаудың жолы бар деп айтсам ше?

Мен өзімнің Facebook-тегі аккаунтымды қараған кезде миға шабуыл жасауды және осы мәселелер туралы ойлағанды ​​ұнатамын. Бұл деректерді зерттеушінің ақыл-ойына ие болудың бір ерекшелігі!

Көптеген әлеуметтік медиа платформалар, соның ішінде Facebook, график түрінде құрылымдалуы мүмкін. Тіркелген пайдаланушылар желілер әлемінде өзара байланысты. Бұл желілер мен графикаларда жұмыс істеу үшін бізге әртүрлі тәсілдер, құралдар мен алгоритмдер қажет (машинаны оқытудың дәстүрлі әдістерінің орнына).

Сонымен, осы мақалада біз әлеуметтік желінің проблемасын графтар мен машиналық оқытудың көмегімен шешеміз. Біз Facebook-тің кейсті зерттемес бұрын және оны Python-да енгізбестен бұрын, сілтемені болжаудың негізгі түсініктері мен компоненттерін түсінеміз

Төмендегі мақалаларға графиктердің не екенін және олардың қалай жұмыс жасайтынын білуге ​​кеңес беремін:

Мазмұны

  1. Әлеуметтік желі талдауларына шолу
  2. Сілтемені болжау туралы оқулық
  3. Сілтемені болжау мәселесін шешу стратегиясы
  4. Кейс-стади: Facebook парақтары арасындағы болашақ байланыстарды болжау - Мәліметтерді түсіну - Деректер базасын дайындау үлгісін құру - Мүмкіндіктер алу - Модель құру: Сілтемелерді болжау моделі

Әлеуметтік желі талдауларына шолу

Сілтемені болжау тұжырымдамасына кіріспес бұрын алдымен әлеуметтік желіні анықтайық.

Әлеуметтік желі дегеніміз - бұл әлеуметтік құрылымдардың, мысалы, адамдар, ұйымдар, үкіметтер, саяси партиялар және т.б. сияқты қатынастардың көрінісі.

Осы субъектілердің өзара әрекеттестігі хабарламалар, чаттар хабарламалары, твиттер, ұнатулар, пікірлер, акциялар және т.б. түрінде болжанбайтын көлемді деректерді қалыптастырады. Бұл біз жұмыс істей алатын мүмкіндіктер мен жағдайларды ашады.

Бұл бізді әлеуметтік желілердің аналитикасына (SNA) әкеледі. Біз оны әлеуметтік желілерде орындалатын бірнеше әрекеттің жиынтығы ретінде анықтай аламыз. Бұл іс-шараларға интернеттегі әлеуметтік желілерден ақпараттар жинау және сол деректерді бизнес шешімдер қабылдау үшін пайдалану кіреді.

Әлеуметтік желі талдауларының артықшылықтары өте пайдалы болуы мүмкін. Мұнда бірнеше негізгі артықшылықтар бар:

  • Аудиторияңызды жақсырақ түсінуге көмектеседі
  • Клиенттерді сегментациялау үшін қолданылады
  • Ұсыныс жүйелерін жобалау үшін қолданылады
  • Жалған жаңалықтарды анықтаңыз, басқалармен қатар

Сілтемені болжау туралы оқулық

Сілтемелерді болжау - бұл графтар мен желілер саласындағы маңызды тақырыптардың бірі. Сілтемелерді болжаудың мақсаты болашақта сілтеме жасайтын немесе жасамайтын түйіндерді анықтау болып табылады.

Сілтемелерді болжау нақты әлемдегі қосымшаларда қолданылады. Сілтемені болжаудың бірнеше маңызды жағдайлары:

  • Amazon сияқты онлайн-базарларда қандай тұтынушылар қандай өнімдерді сатып алатынын алдын-ала болжаңыз. Бұл өнімге жақсырақ ұсыныстар жасауға көмектеседі
  • Ұйымдағы қызметкерлердің өзара әрекеттесуін немесе өзара әрекеттесуін ұсыныңыз
  • Террористік желілерден өмірлік маңызды түсініктерді алыңыз

Бұл мақалада біз сілтемені болжаудың аздап басқаша жағдайын - желідегі әлеуметтік желідегі сілтемелерді болжауды қарастырамыз!

Сілтемені болжау мәселесін шешу стратегиясы

Егер біз қандай да бір түрде графиканың құрылымдық мәліметтер жиынтығы түріндегі бейнесін ұсына алсақ, онда графикалық байланыссыз түйін-жұп арасындағы байланыстардың пайда болуын болжау үшін машиналық оқытуды қолдана аламыз.

Бұл идеяны түсіну үшін мультипликациялық графиканы алайық. Төменде 7 түйіндік график, ал түйіннің жұптары AF, BD, BE, BG және EG болып табылады:

Уақыт бойынша график t

Енді деректерді талдаймыз және келесі кестені ойластырдық делік. Бірнеше жаңа қосылыстар пайда болды (сілтемелер қызыл түспен):

T + n уақытындағы график

Машиналарды оқытудың кез-келген моделін құру үшін бізге болжалды және айнымалы айнымалылар жиынтығы керек, иә? Сонымен, бұл айнымалылар қайда? Ал, біз оны графиктің өзінен аламыз! Мұның қалай жасалғанын көрейік.

Біздің мақсатымыз кез-келген екі түйін арасында байланыс болатынын болжау. T уақытында желіден келесі түйін жұптарын аламыз, олардың арасында байланыс жоқ:

  1. АФ
  2. BD
  3. БОЛУЫ
  4. BG
  5. ЭГ

Назар аударыңыз, ыңғайлы болу үшін мен бір-бірінен бөлек орналасқан бірнеше түйіндерді ғана қарастырдым.

Біз үшін келесі қадам - ​​түйіндердің әр және әр жұпына мүмкіндіктер жасау. Жақсы жаңалық - желідегі түйіндерден ерекшеліктерді алудың бірнеше әдістері бар. Айталық, біз осы әдістердің бірін қолданамыз және осы жұптардың әрқайсысына ерекшеліктер жасаймыз. Дегенмен, біз мақсатты айнымалының не екенін әлі білмейміз. Уайымдамайтын ештеңе жоқ - мұны да оңай алуға болады.

T + n уақытында графикке қараңыз. Біз желіде сәйкесінше AF, BD және BE жұптары үшін үш жаңа сілтеме бар екенін көреміз. Сондықтан біз олардың әрқайсысына 1 мәнін тағайындаймыз. BG және EG жұптарының түйіндері 0-ге тағайындалады, өйткені түйіндер арасында әлі де байланыс жоқ.

Демек, деректер келесідей болады:

Енді бізде мақсатты айнымалы болғандықтан, сілтемені болжау үшін осы мәліметтерді қолдана отырып, машиналық оқыту моделін жасай аламыз.

Осылайша, мақсатты айнымалы мәнді алу үшін әлеуметтік диаграммаларды уақыттың екі жағдайында пайдалану керек, яғни түйін жұбы арасында байланыс болуы керек. Есіңізде болсын, нақты өмір сценарийлерінде бізде тек қазіргі уақыттағы мәліметтер болады.

Үлгіні құру графигінен деректерді шығарыңыз

Жоғарыда келтірілген бөлімде t + n уақытында графикке қол жетімді болғандықтан, мақсатты айнымалы үшін белгілерді алдық. Алайда, нақты сценарийлерде бізде бір ғана графикалық мәліметтер жиынтығы болады. Міне бітті!

Бізде әлеуметтік желінің төмендегі графигі бар делік, онда түйіндер пайдаланушылар болып табылады, ал шеттері қандай да бір қатынастарды білдіреді:

Болашақта сілтеме құра алатын үміткер түйіндерінің жұптары (1 & 2), (2 & 4), (5 & 6), (8 & 10) және т.б. Біз осы түйін жұптарының арасында байланыс болатынын немесе болмайтынын болжайтын модель құруымыз керек. Сілтемені болжау дегеніміз осы!

Дегенмен, сілтемені болжау моделін құру үшін біз осы кестеден тыс жаттығулар жиынтығын дайындауымыз керек. Мұны қарапайым трюк көмегімен жасауға болады.

Мұны көз алдыңа елестетіп көрші - бұл граф бұрынғы кездерде қалай көрінер еді? Түйіндердің арасында жиектер аз болады, өйткені уақыт өткен сайын әлеуметтік желідегі байланыстар біртіндеп құрылады.

Демек, осыны ескере отырып, біз берілген графиктен жиектердің бірнешеуін жасыруға болады, содан кейін жаттығулар жиынтығын құру үшін алдыңғы бөлімде түсіндірілген әдісті қолдана аламыз.

Графиктен Strike Off сілтемелері

Сілтемелер мен жиектерді алып тастағанда, оқшауланған түйін (шеті жоқ түйін) немесе оқшауланған тор пайда болуы мүмкін кез келген жиекті алып тастамау керек. Біздің желідегі кейбір шеттерін алып тастайық:

Көріп отырғаныңыздай, түйіндердегі жиектер (1 & 4), (7 & 9) және (3 & 8) алынып тасталды.

Шығарылған мәліметтерге белгілерді қосыңыз

Әрі қарай, біз барлық байланыстырылмаған түйіндердің жұптары үшін, соның ішінде жиектері алынып тасталған жұптар үшін мүмкіндіктер жасауымыз керек. Алынған жиектер '1', ал түйін жұптары '0' деп белгіленеді.

Мақсатты айнымалы бұл деректер базасында өте теңгерімсіз болады. Нақты әлемдегі графикаларда да осылай болады. Байланыстырылмаған түйіндердің саны үлкен болар еді.

Кейс-стадионы қарастырып, Python көмегімен сілтемені болжау мәселесін шешейік.

Кейс-стади: Facebook парақтары арасындағы болашақ байланыстарды болжау

Міне, біз жоғарыда айтылғандардың барлығын таңғажайып шынайы сценарийге қолданамыз.

Біз графикалық мәліметтер жиынтығымен жұмыс жасайтын боламыз, онда түйіндер бүкіл әлемдегі танымал тағамдар мен танымал аспазшылардың Facebook парақшалары болып табылады. Егер кез-келген екі бет (түйін) бір-біріне ұнайтын болса, онда олардың арасында жиек (сілтеме) болады.

Деректер базасын осы жерден жүктей аласыз.

Мақсаты: байланыстырылмаған түйіндер (Facebook парақтары) арасындағы болашақ байланыстарды (өзара ұнату) болжау үшін сілтемені болжау моделін жасаңыз.

Jupyter дәптерімізді (немесе Colab) өшірейік!

Деректерді түсіну

Алдымен біз барлық қажетті кітапханалар мен модульдерді импорттаймыз:

Фейсбук парақтарын түйіндер және парақтардың бір-біріне ұнауы ретінде жүктейік:

Шығу мәліметтері: (620, 2102)

Бізде 620 түйін және 2110 сілтеме бар. Енді барлық түйіндердің деректер форматын құрайық. Бұл деректер жолының әрбір жолы сәйкесінше 'node_1' және 'node_2' бағандарындағы түйіндер арқылы құрылған сілтемені білдіреді:

fb_df.head ()

'276', '58', '132', '603' және '398' түйіндері '0' түйінімен байланысады. Біз Facebook парақтарының осы құрылымын график түрінде оңай ұсына аламыз:

Wow, бұл бір нәрсе көрінеді. Facebook-тің торлы торы (көгілдір нүктелер). Қара сызықтар - бұл барлық түйіндерді бір-бірімен байланыстыратын сілтемелер немесе жиектер.

Деректер базасын модель құруға дайындау

Деректер қорын басқарылмайтын графиктен дайындау керек. Бұл мәліметтер базасында түйін жұптарының ерекшеліктері болады және мақсатты айнымалы сілтемелердің болуын (немесе болмауын) көрсететін екілік сипатта болады.

Байланыстырылмаған түйін жұптарын алыңыз - теріс үлгілерді алыңыз

Сілтемені болжау есептерін шешу үшін біз берілген графиктен мәліметтер базасын дайындауымыз керек екенін бұрыннан түсіндік. Бұл мәліметтер базасының негізгі бөлігі теріс үлгілер немесе түйіндердің қосылыстары болып табылады. Бұл бөлімде мен сызбадан байланыссыз түйін жұптарын қалай шығаруға болатындығын көрсетемін.

Алдымен біз қандай түйіндердің жалғанбағанын табу үшін іргелес матрицаны құрамыз.

Мысалы, төмендегі сызбаның көршілес орналасуы - бұл квадрат матрица, онда жолдар мен бағандар графикалық түйіндермен ұсынылған:

Сілтемелер матрицадағы мәндермен белгіленеді. 1 дегеніміз, түйін жұбы арасында байланыс бар, ал 0 түйін жұбы арасында байланыс бар. Мысалы, 1 және 3 түйіндердің матрицадағы қиылысуында 0-ге тең, ал бұл түйіндердің де жоғарыдағы графикада жиегі жоқ.

Көршілес матрицаның осы қасиетін G бастапқы графикасынан барлық түйінсіз жұптарды табу үшін қолданамыз:

Көршілес матрицаның пішінін тексерейік:

adj_G.shape

Шығу мәліметтері: (620, 620)

Көріп отырғаныңыздай, бұл квадрат матрица. Енді нөлдердің орнын табу үшін іргелес матрицадан өтеміз. Есіңізде болсын, біз бүкіл матрицадан өтудің қажеті жоқ. Матрицадағы мәндер диагональдың үстінде және астында бірдей, төменде көрсетілгендей:

Біз диагональдың үстіндегі мәндерді (жасыл бөлік) немесе төмендегі мәндерді (қызыл бөлік) іздей аламыз. Нөл үшін диагональ мәндерін іздейік:

Міне, біздің деректер қорында түйіндердің қанша жұбы бар:

len (барлығы_қосылған_жақтар)

Шығу: 19,018

Бізде 19 018 жұп бар. Бұл түйін жұптары сілтемені болжау моделін оқыту барысында теріс үлгі ретінде әрекет етеді. Бұл жұптарды деректер форматында сақтайық:

Сілтемелерді қосылған түйін жұптарынан алып тастаңыз - оң үлгілер

Жоғарыда талқылайтын болсақ, біз сызбадан жиектердің бір бөлігін кездейсоқ түрде алып тастаймыз. Алайда, жиектерді кездейсоқ алып тастау нәтижесінде бос байланыстырылған түйіндер мен графиктің бөліктері кесілуі мүмкін. Бұл бізге қамқор болу керек нәрсе. Біз жиектерді түсірген кезде, графиктің барлық түйіндері байланыссыз қалуы керек.

Төмендегі код блогында біз алдымен түйіндер жұбының түсуі графиктің бөлінуіне (түйіндер саны = 1) немесе түйіндер санының азаюына әкелетіндігін тексереміз. Егер екі нәрсе де орын алмаса, онда біз сол түйіннің жұбын түсіріп, келесі түйінді жұппен бірдей процесті қайталаймыз.

Ақыр соңында, біз сызбадан шығаруға болатын түйіндердің жұптарының тізімін аламыз, және барлық түйіндер әлі де өзгеріссіз қалады:

len (мүмкін емес_линкс_индекс)

Шығу: 1483

Графиктен алып тастай алатын 1400-ден астам сілтемелер бар. Бұл түсірілген шектер сілтемені болжау моделін оқыту барысында жағымды оқу мысалдары болады.

Модельдік оқытуға арналған мәліметтер

Әрі қарай, біз алынбалы жиектерді байланыстырылмаған түйін жұптарының дерекқорына қосамыз. Бұл жаңа жиектер оң үлгілер болғандықтан, олардың мақсатты мәні '1' болады:

Мақсатты айнымалы мәндерінің таралуын тексерейік:

деректер ['link']. value_counts ()

0 -19018 1 -1483

Бұл өте теңгерімсіз деректер екендігі белгілі болды. Сілтеме жоқ сілтеменің қатынасы шамамен 8% құрайды. Келесі бөлімде біз осы түйіндердің барлық жұптарының ерекшеліктерін аламыз.

Мүмкіндіктер экстракциясы

Сілтемелерді түсіргеннен кейін node2vec алгоритмін графиктен түйіндік ерекшеліктерді алу үшін қолданамыз. Алдымен алынбалы сілтемелерді тастағаннан кейін жаңа график құрайық:

Әрі қарай, node2vec кітапханасын орнатамыз. Ол DeepWalk алгоритміне өте ұқсас. Алайда оған кездейсоқ серуендеу жатады. Node2vec туралы көбірек білу үшін сіз node2vec қағазын міндетті түрде тексеріп көріңіз: Желілерге арналған мүмкіндіктерді кеңейту мүмкіндігі.

Әзірге node2vec графикалық түйіндерді векторлық бейнелеу үшін қолданылатынын есте сақтаңыз. Орнатайық:

! node2vec орнатыңыз

Жергілікті машинада орнатуға біраз уақыт кетуі мүмкін (егер сіз Colab пайдалансаңыз, бұл өте жылдам).

Енді біз node2vec моделін графикте (G_data) үйретеміз:

Әрі қарай, біз node2vec үйренген модельді «деректер» дерекқорындағы әр түйін жұпына қолданамыз. Жұптың немесе жиектің ерекшеліктерін есептеу үшін біз осы жұптағы түйіндердің ерекшеліктерін қосамыз:

x = [(n2w_model [str (i)] + n2w_model [str (j)]) i, j үшін zip (деректер ['node_1'], деректер ['node_2'])]

Сілтемені болжау моделін құру

Біздің модельдің өнімділігін тексеру үшін, біз деректерді екі бөлікке бөлуіміз керек - біреуі модельді үйрету үшін, ал екіншісі модельдің жұмысын тексеру үшін:

Алдымен логистикалық регрессия моделіне сәйкес келейік:

Енді біз тесттер жиынтығында болжау жасаймыз:

болжау = lr.predict_proba (xtest)

Біз модельдің жұмысын тексеру үшін AUC-ROC есебін қолданамыз.

roc_auc_score (дәл, болжау [:, 1])

Шығу: 0.7817

Біз логистикалық регрессиялық модельді қолдана отырып, 0.78 балл аламыз. Күрделі модельді қолдана отырып, жақсы ұпай жинай алатынымызды көрейік.

208-ші итерациядан кейін жаттығу тоқтады, өйткені біз ерте тоқтау критерийлерін қолдандық. Ең бастысы, модель тест жиынтығында 0,9273 AUC әсерлі балл алды. Сізден әр түрлі параметрлер туралы көбірек білу үшін lightGBM құжаттамасымен танысуға кеңес беремін.

Соңғы ескертпелер

Графикте үлкен әлеует бар. Біз бұны байланыстыратын болжау біреу болатын нақты әлемдегі көптеген мәселелерді шешу үшін қолдана аламыз.

Бұл мақалада біз машинаны оқыту арқылы сілтемені болжау мәселесін қалай шешуге болатындығын және мұндай проблеманы шешкен кезде ескеруіміз керек шектеулер мен маңызды аспектілерді атап өттік.

Төмендегі түсініктемелер бөлімінде сұрақтар қоюға немесе пікірлеріңізді қалдыруға болады. Зерттеуді жалғастыра беріңіз!

Алғашында https://www.analyticsvidhya.com сайтында 2020 жылдың 16 қаңтарында жарияланған.