ГоловнаСтаттіМережі

Виявлення спільнот Louvain: Знаходження структури в мережах

Швидкий, двофазний жадібний алгоритм, який максимізує модульність для розкриття кластерів — від соціальних мереж до взаємодій білків.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Спільноти без визначення

Соціальна мережа, цитувальний граф або карта взаємодії білків – усі вони мають видимі кластери щільно пов’язаних вузлів із порівняно малою кількістю зв’язків між кластерами. Однак «спільнота» не має єдиного формального визначення. Метод Louvain (Blondel, Guillaume, Lambiotte та Lefebvre, 2008) обходить проблему визначення, оптимізуючи конкретний, обчислюваний бал – модульність, і дозволяючи будь-якій групі поділу, яка максимізує цей бал, «виступати» як «спільноти».

жива демонстрація · пов'язана симуляція● LIVE

Модульність: більше країв всередині, ніж передбачається випадковим чином

Модуль Q порівнює фактичну частку країв графа, які потрапляють у запропоновані спільноти, з часткою, яку б ви очікували, якщо такий самий порядок ступенів був би з'єднаний випадково:

Q = (1 / 2m) Σ_ij [ A_ij - (k_i k_j) / (2m) ] δ(c_i, c_j) A_ij = 1, якщо між вузлами i, j існує край, інакше 0 k_i = ступінь вузла i m = загальна кількість країв у графі δ(c_i,c_j) = 1, якщо i та j знаходяться в одній спільноті, інакше 0 Термін k_i*k_j / 2m є очікуваною кількістю країв між i та j за випадкового графового нульового моделі, яка зберігає ступінь кожного вузла (модель конфігурації). Q підсумовує для кожної пари вузлів, розміщених в одній спільноті, наскільки вони насправді більш (або менш) з'єднані, ніж це передбачає випадковий базовий рівень. Реальні мережі з видимою структурою спільнот зазвичай мають оцінку Q приблизно між 0,3 і 0,7; випадковий граф отримує результат близький до нуля.

Q = (1 / 2m) Σ_ij [ A_ij - (k_i k_j) / (2m) ] δ(c_i, c_j)

A_ij   = 1 if an edge connects nodes i, j, else 0
k_i    = degree of node i
m      = total number of edges in the graph
δ(c_i,c_j) = 1 if i and j are in the same community, else 0

Фаза 1: локальне переміщення

Почніть із того, що кожен вузол знаходиться у власному одиночному співтоваристві. Відвідуйте кожен вузол послідовно та розгляньте можливість переміщення його до спільноти кожного з сусідів, обчислюючи відповідну зміну Q для кожного кандидата в переміщення (яку можна обчислити за постійного часу на сусіда, використовуючи лише локальну інформацію — ключова ефективність алгоритму). Перемістіть вузол у спільноту найближчого сусіда, який дає найбільший позитивний приріст Q, або залишіть його без змін, якщо жодне переміщення не допомагає. Повторіть це для всіх вузлів у випадковому порядку до тих пір, поки жодне з переміщень не може покращити Q.

Фаза 2: агрегація, потім повторення

Зірвуйте кожну знайдену спільноту в фазі 1 і перетворіть її на єдисний супервузол. Зв’язки всередині спільності стають самозамкненим циклом на цьому супервузлі (зважений кількістю внутрішніх зв’язків); зв’язки між двома спільностями стають одним зваженим зв’язком між відповідними супервузолами. Повторіть фазу 1 на цьому значно меншому та грубішому графі — об'єднуючи спільності в більші, точно так само, як фаза 1 об’єднувала вузли в спільноти. Чергуйте обидві фази до тих пір, поки Q не припинить покращуватися. Зазвичай кожен прохід зменшує графік приблизно в десять разів, тому весь процес збігається лише за кілька проходів, навіть на мережах із десятками мільйонів зв’язків — ця швидкість є основною причиною того, що Лування стало стандартним алгоритмом виявлення спільностей у багатьох галузях.

Робоча модель розширення

Вхідні дані для моделі: 1. Розміри кімнати (м). 2. Кількість людей у кімнаті (шт.). 3. Час перебування в кімнаті (сек.). 4. Тип діяльності (наприклад, читання, розмова, ігри). 5. Рівень шуму в кімнаті (дБ). 6. Температура в кімнаті (°C). 7. Вологість у кімнаті (%RH). 8. Наявність вікон та дверей (так/ні). 9. Наявність джерел світла (наприклад, лампи, сонце) (так/ні). 10. Наявність предметів інтер'єру (наприклад, меблі, картини) (так/ні).

Модель розширення: Модель розширення враховує всі вхідні дані та генерує прогноз кількості людей у кімнаті на певний час. Прогноз базується на наступних факторах: 1. Розмір кімнати: Чим більша кімната, тим більше людей може там перебувати. 2. Кількість людей у кімнаті: Чим більше людей вже знаходиться в кімнаті, тим менше людей зможе прийти. 3. Час перебування в кімнаті: Чим довше люди перебувають у кімнаті, тим більше людей може прийти. 4. Тип діяльності: Деякі види діяльності потребують більшого простору та можуть залучати більше людей. 5. Рівень шуму в кімнаті: Чим вищий рівень шуму, тим менше людей зможе перебувати у кімнаті. 6. Температура в кімнаті: Чим вища температура, тим більше людей може перебувати у кімнаті. 7. Вологість у кімнаті: Чим вища вологість, тим менше людей може перебувати у кімнаті. 8. Наявність вікон та дверей: Чим більше вікон та дверей, тим легше людям виходити з кімнати. 9. Наявність джерел світла: Чим більше джерел світла, тим більше людей може перебувати у кімнаті. 10. Наявність предметів інтер'єру: Чим більше предметів інтер'єру, тим менше простору залишається для людей.

Обмеження моделі: Модель розширення має певні обмеження. Вона не враховує всі фактори, які можуть впливати на кількість людей у кімнаті, такі як погода, святкування та інші події. Крім того, модель може бути неточною, якщо вхідні дані є неточними або неповними.

pass 1:  120,000 nodes  →  local moving  →  4,800 communities
pass 2:    4,800 nodes  →  local moving  →    310 communities
pass 3:      310 nodes  →  local moving  →     18 communities
pass 4:       18 nodes  →  local moving  →     18 communities   (Q stable, stop)

Обмеження роздільної здатності

Максимізація модуляльності має відому структурну упередженість, яка називається межею роздільної здатності: у достатньо великій мережі дві справді окремі невеликі спільноти можуть отримати вищий бал Q при об'єднанні в одну, ніж якщо їх тримають окремо, просто тому що випадковий термін baseline k_i*k_j/2m зменшується зі зростанням всієї мережі, роблячи майже будь-яке злиття статистично значущим. Як правило, спільноти, які значно менші за √ (2m), ризикують бути поглинуті сусідньою мережею незалежно від їхньої внутрішньої щільності. Це не помилка в алгоритмі Louvain – це впливає на будь-який алгоритм, який максимізує глобальну модуляльність – але це реальна причина обережно ставитися до дрібнозернистих підспільнот, виявлених у великій мережі.

Frequently asked questions

Що саме вимірює модульність?

Модульність Q порівнює фактичну частку ребер, що потрапляють у спільноти, з часткою, яку б було, якби ребра переробили випадково, зберігаючи ступінь кожного вузла. Q близький до 0 означає, що структура спільнот не краща за випадковість; Q, який наближається до 1 (рідко досягається на практиці), означає, що ребра переважно зосереджені всередині спільнот. Реальні мережі з сильною структурою спільнот зазвичай отримують оцінки Q між приблизно 0,3 і 0,7.

Чому Луавену потрібно дві чергові фази замість однієї?

Перша фаза (локальне переміщення) лише шукає невеликі покращення на рівні вузла, що само по собі застрягло б у виявленні лише невеликих спільнот. Друга фаза (агрегування) об'єднує кожен виявлений спільноту в один супервузол, тому наступний раунд локального переміщення працює на одному рівні вище і може об'єднувати спільноти у більші. Чергування двох фаз дозволяє алгоритму побудувати повну ієрархію від окремих вузлів до невеликої кількості верхніх рівнів спільнот.

Який ліміт роздільної здатності та чому це важливо?

Максимізація модульності має відомий ухил: у великій мережі спільноти, менші за приблизно квадратний корінь з загальної кількості ребер, можуть не реєструватися як окремі спільноти, навіть якщо вони явно відрізняються, тому що їх об'єднання з сусідом збільшує глобальну модульність більше, ніж утримування їх разом. Це означає, що Луавен (і будь-який метод максимізації модульності) може непомітно об'єднувати невеликі реальні спільноти у великих графах — обмеження, яке варто знати перед тим, як довіряти деталізованій структурі у великій мережі.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Community Detection (Louvain) і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Community Detection (Louvain)

Що ви знайшли?

Додати кроки відтворення (опційно)