Proqnozlaşdırma ilə əlaqələndirmək üçün bir bələdçi - Facebookdakı gələcək əlaqələri necə proqnozlaşdırmaq olar

Baxış

  • Proqnozlaşdırma, necə işlədiyini və real dünyada harada istifadə edə biləcəyinizi əlaqələndirən bir giriş
  • Sosial mediada Link Proqnozunun əhəmiyyəti haqqında məlumat əldə edin
  • Python'dan istifadə edərək Facebook istifadə işi üçün ilk Link Proqnozlaşdırma modelinizi yaradın

Giriş

Növbəti Facebook bağlantınızın kim ola biləcəyini düşündünüzmü? Növbəti istək kimin gələ biləcəyi ilə maraqlanır?

Bunu əvvəlcədən söyləmək üçün bir yolun olduğunu söyləsəm nə edim?

Facebook hesabımı gəzərkən beyin hücumlarını və bu problemli açıqlamalarla tanış olmağı sevirəm. Bu məlumat aliminin zehniyyətinə sahib olmağın vaciblərindən biridir!

Facebook da daxil olmaqla, əksər sosial media platformaları qrafik şəklində qurulula bilər. Qeydiyyata alınan istifadəçilər bir şəbəkə şəbəkəsində bir-birinə bağlıdırlar. Və bu şəbəkələrdə və qrafiklərdə işləmək üçün fərqli yanaşmalar, alətlər və alqoritmlər lazımdır (ənənəvi maşın öyrənmə metodları əvəzinə).

Beləliklə, bu yazıda bir qrafik və maşın öyrənməsi köməyi ilə bir sosial şəbəkə problemini həll edəcəyik. Facebook işini araşdırmadan və Python-da tətbiq etmədən əvvəl əvvəlcə təməl anlayışının əsas anlayışlarını və komponentlərini başa düşəcəyik!

Qrafiklərin nə olduğunu və necə işlədiyini öyrənmək üçün aşağıdakı məqalələrdən keçməyi məsləhət görürəm:

Mündəricat

  1. Sosial Şəbəkə Təhlilinə Baxış
  2. Bağlantı proqnozu haqqında bir primer
  3. Bir link proqnozlaşdırma problemini həll etmək strategiyası
  4. Case Study: Facebook Səhifələri arasındakı gələcək əlaqələri proqnozlaşdırmaq - Məlumatın Anlaşılması - Verilənlər bazası hazırlama modelinin qurulması - Bədii çıxarış - Model binası: Link Proqnozlaşdırma

Sosial Şəbəkə Təhlilinə Baxış

Bağlantı proqnozu anlayışına girmədən əvvəl əvvəlcə bir sosial şəbəkəni təyin edək.

Sosial şəbəkə, əslində insanlar, təşkilatlar, hökumətlər, siyasi partiyalar və s. Kimi sosial qurumlar arasındakı əlaqələrin bir nümayəndəsidir.

Bu qurumlar arasındakı qarşılıqlı əlaqə, mesajlar, söhbət mesajları, tvitlər, bəyənmələr, şərhlər, paylaşmalar və s. Şəklində təsəvvür edilməyən miqdarda məlumatlar yaradır.

Bu, bizi Sosial Şəbəkə Təhlilinə (SNA) gətirir. Bunu sosial mediada həyata keçirilən bir neçə fəaliyyətin birləşməsi kimi təyin edə bilərik. Bu fəaliyyətlərə onlayn sosial media saytlarından məlumat toplamaq və bu qərarları biznes qərarları vermək üçün istifadə etmək daxildir.

Sosial şəbəkə analitikasının faydaları yüksək dərəcədə faydalı ola bilər. Budur bir neçə əsas üstünlük:

  • Tamaşaçıları daha yaxşı başa düşməyinizə kömək edir
  • Müştəri seqmentləşdirmə üçün istifadə olunur
  • Tövsiyə sistemləri hazırlamaq üçün istifadə olunur
  • Saxta xəbərlər, digər şeylər arasında da aşkar edin

Bağlantı proqnozu haqqında bir primer

Bağlantı proqnozu qrafiklər və şəbəkələr sahəsində ən vacib tədqiqat mövzularından biridir. Bağlantı proqnozunun məqsədi gələcəkdə bir keçid meydana gətirəcək və ya etməyəcək cüt qovşaqları müəyyən etməkdir.

Link proqnozlaşdırılması real dünyada tətbiqlərdə bir ton istifadəyə malikdir. Bağlantı proqnozunun vacib istifadə hallarından bəziləri:

  • Amazon kimi onlayn bazarlarda hansı müştərilərin hansı məhsulları alacağını təxmin edin. Daha yaxşı məhsul tövsiyələrini verməyə kömək edə bilər
  • Bir təşkilatdakı işçilər arasında qarşılıqlı əlaqə və ya əməkdaşlıq təklif edin
  • Terror şəbəkələrindən həyati anlayışları çıxarın

Bu yazıda, link proqnozlaşdırma məsələsini bir az fərqli bir şəkildə araşdıracağıq - onlayn bir sosial şəbəkədəki əlaqələri proqnozlaşdırmaq!

Bir link proqnozlaşdırma problemini həll etmək strategiyası

Bir şəkildə bir sıra xüsusiyyətlərə sahib bir quruluşlu bir verilənlər bazası şəklində bir qrafı təqdim edə bilsək, bəlkə də qrafın bağlanmamış node cütləri arasındakı əlaqələrin meydana gəlməsini proqnozlaşdırmaq üçün maşın öyrənməsindən istifadə edə bilərik.

Bu fikri başa düşmək üçün nalayiq bir qrafik götürək. Aşağıda 7 node qrafiki və bağlanmamış node cütləri AF, BD, BE, BG və EG-dir:

Zaman qrafiki t

İndi deyək ki, məlumatları təhlil etdik və aşağıdakı qrafiklə tanış olduq. Bir neçə yeni əlaqə yaradıldı (bağlantılar qırmızı rəngdə):

T + n vaxtında qrafik

Hər hansı bir maşın öyrənmə modelini qurmaq üçün proqnozlaşdırıcı dəyişənlər dəsti və hədəf dəyişəninə sahib olmalıyıq? Bəs bu dəyişənlər haradadır? Yaxşı, onu qrafikdən əldə edə bilərik! Bunun necə edildiyini görək.

Məqsədimiz, hər hansı bir bağlı olmayan 2 qovşaq arasında bir əlaqənin olub olmadığını proqnozlaşdırmaqdır. T vaxtında şəbəkədən aralarında əlaqəsi olmayan aşağıdakı node cütlərini çıxara bilərik:

  1. AF
  2. BD
  3. OLUN
  4. BG
  5. EG

Unutmayın ki, rahatlıq üçün yalnız bir-birindən bir-birinə bağlanan qovşaqları nəzərdən keçirdim.

Bizim üçün növbəti addım hər bir qovşaq üçün xüsusiyyət yaratmaqdır. Yaxşı bir xəbər, bir şəbəkədəki qovşaqlardan xüsusiyyətləri çıxarmaq üçün bir neçə texnikanın olmasıdır. Deyək ki, bu texnikalardan birini istifadə edirik və bu cütlərin hər biri üçün xüsusiyyətlər yaradırıq. Bununla birlikdə hədəf dəyişəninin nə olduğunu hələ bilmirik. Narahat olmaq üçün heç bir şey yoxdur - bunu da asanlıqla əldə edə bilərik.

T + n vaxtında qrafikə baxın. Şəbəkədə müvafiq olaraq AF, BD və BE cütlükləri üçün üç yeni bağlantının olduğunu görə bilərik. Buna görə, hər birinə 1 dəyər təyin edəcəyik. Düyünlər arasında hələ də əlaqə olmadığı üçün BG və EG qovşaqlarının cütləri 0 təyin ediləcəkdir.

Beləliklə, məlumatlar bu kimi görünəcəkdir:

Hədəf dəyişən olduğumuz üçün, keçid proqnozunu yerinə yetirmək üçün bu məlumatları istifadə edərək maşın öyrənmə modeli qura bilərik.

Beləliklə, hədəf dəyişənini çıxarmaq üçün yəni iki node cütü arasında bir əlaqənin olması üçün sosial qrafiklərdən iki fərqli vaxtda necə istifadə etməliyik. Unutmayın ki, real ssenarilərdə yalnız indiki zamanın məlumatları olacaq.

Modelinizi yaratmaq üçün bir qrafadan məlumat çıxarın

Yuxarıda göstərilən hissədə hədəf dəyişən üçün etiketlər əldə edə bildik, çünki t + n vaxtında qrafikə daxil olduq. Bununla birlikdə, real dünya ssenarilərində əlimizdə yalnız bir qrafik məlumat bazası olardı. Bu belədir!

Düyünlərin istifadəçilər olduğu və kənarları bir növ əlaqəni ifadə edən bir sosial şəbəkənin aşağıdakı qrafikinə sahib olduğumuzu deyək:

Gələcəkdə bir əlaqə yarada biləcək namizəd node cütləri (1 & 2), (2 & 4), (5 & 6), (8 & 10) və s. Bu node cütləri arasında bir əlaqə olacağını və ya olmayacağını təxmin edəcək bir model qurmalıyıq. Bağlantı proqnozunun hamısı budur!

Bununla birlikdə, bir keçid proqnozlaşdırma modelini qurmaq üçün bu qrafikdən bir təlim məlumatı hazırlamalıyıq. Sadə bir hiylə istifadə edərək edilə bilər.

Təsəvvür edin - bu qrafik keçmişdəki bəzi nöqtələrə necə baxacaqdı? Düyünlər arasında kənarlar daha az olacaq, çünki zamanla bir sosial şəbəkədəki bağlantılar tədricən qurulur.

Beləliklə, bunu nəzərə alaraq, təsadüfi olaraq kənarları verilmiş qrafikdən gizlədə bilərik və sonra təlim məlumatlarını yaratmaq üçün əvvəlki hissədə izah edilən texnikanı izləyə bilərik.

Qrafikdən bağlantıları vurun

Bağlantıları və kənarları çıxardarkən, təcrid olunmuş bir node (heç bir kənar olmayan node) və ya təcrid olunmuş bir şəbəkə yarada biləcək hər hansı bir kənarın çıxarılmasından çəkinməliyik. Gəlin bəzi kənarlarımızı şəbəkəmizdən götürək:

Gördüyünüz kimi, düyün cütlərindəki kənarlar (1 & 4), (7 & 9) və (3 & 8) çıxarıldı.

Çıxarılan məlumatlara etiketlər əlavə edin

Sonrakı, kənarları buraxdığımız yerləri də daxil olmaqla bütün bağlanmamış node cütləri üçün xüsusiyyətlər yaratmalıyıq. Çıxarılan kənarlar '1', bağlanmamış node cütləri '0' olaraq qeyd ediləcəkdir.

Hədəf dəyişən bu məlumat bazasında yüksək balanssız olacaqdır. Bu da real dünya qrafiklərində qarşılaşacağınız şeydir. Bağlanmamış node cütlərinin sayı çox olardı.

Bir iş araşdıraq və Python-dan istifadə edərək keçid proqnozu problemini həll edək.

Case Study: Facebook Səhifələri arasındakı gələcək əlaqələri proqnozlaşdırın

Yuxarıda göstərilənlərin hamısını zəhmli real dünya ssenarisinə tətbiq edəcəyik.

Düyünlərin məşhur qida birləşmələrinin və dünyanın tanınmış aşpazlarının Facebook səhifələri olduğu bir qrafik məlumat bazası ilə işləyəcəyik. Hər hansı iki səhifə (qovşaq) bir-birinə bənzəyirsə, aralarında bir kənar (link) var.

Məlumatı buradan yükləyə bilərsiniz.

Məqsəd: Bağlanmamış qovşaqlar (Facebook səhifələri) arasındakı gələcək əlaqələri (qarşılıqlı bəyənmələri) proqnozlaşdırmaq üçün bir keçid proqnozu modelini yaradın.

Jupyter notebookumuzu (və ya Colab) atəşə tutaq!

Məlumatları anlamaq

Əvvəlcə bütün lazımi kitabxanaları və modulları idxal edəcəyik:

Facebook səhifələrini düyünlər və səhifələr arasında kənarları kimi qarşılıqlı bəyənmə kimi yükləyək:

Nəticə: (620, 2102)

620 qovşaq və 2110 bağlantımız var. İndi bütün qovşaqların bir dataframını yaradaq. Bu datafame'nin hər sətri, 'node_1' və 'node_2' sütundakı qovşaqların yaratdığı bir keçidi təmsil edir:

fb_df.head ()

'276', '58', '132', '603' və '398' qovşaqları '0' nodu ilə əlaqələndirir. Facebook səhifələrinin bu tənzimləməsini qrafik şəklində asanlıqla təmsil edə bilərik:

Wow, bu tamamilə bir şey görünür. Facebook ilə əlaqəli bir şey - mavi nöqtələr. Qara xətlər, bütün qovşaqları bir-birinə bağlayan keçidlər və ya kənarlardır.

Modelin qurulması üçün verilənlər bazasının hazırlanması

Məlumat bazasını yönləndirilməmiş bir qrafikdən hazırlamalıyıq. Bu məlumat bazasında node cütlərinin xüsusiyyətləri olacaq və hədəf dəyişən, əlaqələrin mövcudluğunu (və ya olmamasını) göstərən ikili xarakter daşıyacaqdır.

Bağlanmamış node cütlərini geri alın - mənfi nümunələr

Bir keçid proqnozlaşdırma problemini həll etmək üçün əvvəlcədən başa düşdük ki, verilmiş qrafikdən məlumat bazası hazırlamalıyıq. Bu məlumat bazasının böyük bir hissəsi mənfi nümunələr və ya bağlı olmayan node cütləridir. Bu hissədə bağlanmamış node cütlərini bir qrafikdən necə çıxara biləcəyimizi sizə göstərəcəyəm.

Birincisi, hansı cüt qovşaqların bağlanmadığını tapmaq üçün bir bitişik bir matris hazırlayacağıq.

Məsələn, aşağıda göstərilən qrafanın uyğunluğu, satır və sütunların qrafikin qovşaqları ilə təmsil olunduğu bir kvadrat matrisdir:

Bağlantılar matrisdəki dəyərlərlə işarələnir. 1 node cütü arasında bir əlaqə olduğunu və 0 node cütü arasında bir əlaqə olduğunu göstərir. Məsələn, 1 və 3 qovşaqlarının matrisdə kəsişməsində 0 var və bu qovşaqların da yuxarıdakı qrafikdə kənarı yoxdur.

Bitişiklik matrisinin bu xüsusiyyətini orijinal qrafik G-dən bütün bağlanmamış node cütlərini tapmaq üçün istifadə edəcəyik.

Bitişiklik matrisinin formasını yoxlayaq:

adj_G.shape

Nəticə: (620, 620)

Gördüyünüz kimi, kvadrat matrisdir. İndi sıfırların mövqelərini tapmaq üçün bitişiklik matrisini keçəcəyik. Xahiş edirəm unutmayın ki, bütün matrisdən keçməyimiz lazım deyil. Matrisdəki dəyərlər aşağıda gördüyünüz kimi diaqonaldan yuxarıda və aşağıda eynidir.

Diaqonal (yaşıl hissə) yuxarıdakı dəyərlər və ya aşağıdakı dəyərlər (qırmızı hissə) vasitəsilə axtarış edə bilərik. Diaqonal dəyərləri sıfıra görə axtaraq:

Budur verilənlər bazamızda neçə bağlı node cütü var:

len (all_unconnected_pairs)

Nəticə: 19,018

19.018 əlaqəsiz cütlük var. Bu node cütləri, keçid proqnozu modelinin təlimi zamanı mənfi nümunələr kimi çıxış edəcəkdir. Bu cütləri dataframe-də saxlayaq:

Bağlantı Node cütlərindən əlaqələri silmək - müsbət nümunələr

Yuxarıda müzakirə etdiyimiz kimi, təsadüfi olaraq bəzi kənarları qrafikdən çıxaracağıq. Bununla birlikdə, kənarların təsadüfi olaraq çıxarılması, boş bir şəkildə bağlanan qovşaqların və qrafikin parçalarının kəsilməsinə səbəb ola bilər. Bu, diqqət etməli olduğumuz bir şeydir. Kənarları boşaltma prosesində, qrafanın bütün qovşaqlarının bağlı qalmasına əmin olmalıyıq.

Aşağıdakı kod blokunda əvvəlcə bir node cütünün düşməsinin qrafikin bölünməsinə (sayı_connected_component> 1) və ya qovşaqların sayının azalmasına səbəb olub olmadığını yoxlayacağıq. Hər iki şey baş vermirsə, o node cütünü atırıq və eyni əməliyyatı növbəti node cütü ilə təkrarlayırıq.

Nəhayət, qrafikdən atıla bilən node cütlərinin siyahısını alacağıq və bütün qovşaqlar hələ də qalacaq:

len (omissible_links_index)

Çıxış: 1483

Qrafikdən ata biləcəyimiz 1400-dən çox bağlantımız var. Bu düşmüş kənarlar keçid proqnozlaşdırma model təlimi zamanı müsbət təlim nümunələri kimi çıxış edəcəkdir.

Model təlimi üçün məlumatlar

Sonra, bu çıxarıla bilən kənarları bağlanmamış node cütlərinin məlumat mərkəzinə əlavə edəcəyik. Bu yeni kənarlar müsbət nümunələr olduğundan, hədəf hədəfi '1' olacaqdır:

Hədəf dəyişəninin dəyərlərinin paylanmasını yoxlayaq:

data ['link']. value_counts ()

0 -19018 1 -1483

Məlum olur ki, bu çox balanssız məlumatlardır. Bağlantıya qarşı heç bir keçid nisbəti yalnız 8% -ə yaxındır. Növbəti hissədə bütün bu node cütləri üçün xüsusiyyətləri çıxaracağıq.

Xüsusiyyət çıxarış

Bağlantıları boşaltdıqdan sonra node2vec alqoritmini qrafikdən node xüsusiyyətləri çıxarmaq üçün istifadə edəcəyik. Beləliklə, çıxarıla bilən bağlantıları atdıqdan sonra əvvəlcə yeni bir qrafik yaradaq:

Bundan sonra node2vec kitabxanasını quraşdıracağıq. DeepWalk alqoritminə olduqca bənzəyir. Ancaq qərəzli təsadüfi gəzintiləri əhatə edir. Node2vec haqqında daha çox bilmək üçün mütləq bu kağıza baxmalısınız node2vec: Şəbəkələr üçün Ölçülən Bədii Öyrənmə.

Hal-hazırda node2vec-in bir qrafik qovşaqlarının vektor təmsil olunması üçün istifadə edildiyini unutmayın. Quraşdıraq:

! pip quraşdırma node2vec

Yerli maşınınıza quraşdırmaq üçün bir müddət lazım ola bilər (Colab istifadə edirsinizsə, olduqca sürətli).

İndi node2vec modelini qrafikimizdə hazırlayacağıq (G_data):

Sonra, məlumat verilənlərindəki 'data' hər node cütündə təlim keçmiş node2vec modelini tətbiq edəcəyik. Bir cüt və ya kənarın xüsusiyyətlərini hesablamaq üçün bu cütdəki qovşaqların xüsusiyyətlərini əlavə edəcəyik:

x = [(n2w_model [str (i)] + n2w_model [str (j)]) i, j üçün zip (data ['node_1'], data ['node_2'])]

Bizim Link Proqnozlaşdırma Modelimizi qurmaq

Modelimizin fəaliyyətini təsdiqləmək üçün məlumatlarımızı iki hissəyə bölməliyik - biri modeli öyrətmək üçün, digəri isə modelin fəaliyyətini sınamaq üçün:

Əvvəlcə bir logistik reqressiya modelinə uyğun olaq:

İndi test dəstində proqnozlar verəcəyik:

proqnozlar = lr.predict_proba (xtest)

Modelimizin fəaliyyətini yoxlamaq üçün AUC-ROC hesabından istifadə edəcəyik.

roc_auc_score (əvvəlcədən, proqnozlar [:, 1])

Nəticə: 0.7817

Bir logistik reqressiya modelindən istifadə edərək 0.78 bal alırıq. Daha mürəkkəb bir model istifadə edərək daha yaxşı bir nəticə qazana biləcəyimizi görək.

Erkən dayanma meyarlarını tətbiq etdiyimiz üçün təlim 208-ci iterasiyadan sonra dayandı. Ən əsası, model test dəstində təsirli bir 0.9273 AUC balını aldı. Fərqli parametrlər haqqında daha çox məlumat əldə etmək üçün sizə lightGBM sənədlərinə nəzər salmağı tövsiyə edirəm.

Son Qeydlər

Qrafiklərdə çox böyük potensial var. Bağlantı proqnozu olan çox sayda real dünya problemini həll etmək üçün bunu edə bilərik.

Bu yazıda, bir keçid proqnozlaşdırma probleminin maşın öyrənməsindən istifadə edərək necə həll oluna biləcəyini göstərdik və belə bir problemi həll edərkən yadda saxlamalı olduğumuz məhdudiyyətlər və vacib cəhətlər nədir.

Zəhmət olmasa suallarınızı verə və ya rəylərinizi aşağıdakı şərh bölməsində tərk edə bilərsiniz. Tədqiqata davam edin!

Əvvəlcə https://www.analyticsvidhya.com saytında 16 yanvar 2020-ci ildə yayımlandı.