10. Louvain Algorithm ์ ์ฉ ๋ฐ ๋ก๊ทธ์ธ ๊ตฌํ
์ด๋ฒ ํ๋ ์์ฝ
์ง๋ ๋ฒ์ ์ ๋์จ ํ์ธ๋์ ์ฌ์ฉ์ผ๋ก ๋ฐ์ํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ์ ๋์ ํ๋ค
์ด์ ์๋ ์ปค๋ฎค๋ํฐ๋ฅผ ํ์งํ๊ธฐ ์ํด์ Union-Find ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ฒ์์ ํ๊ธฐ์ ์ธ ์๊ฐ์ด๋ผ๊ณ ์ฌ๊ฒผ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ค๋ณด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ค๋ณด๋ ์์์ ๋ ๋ฐ์ดํฐ ๊ฐ์ ์ด๋ป๊ฒ๋ ํ๊ณ ํ๊ณ ์ฐ๊ฒฐ์ด ๋์ด ์์๊ณ , ๊ทธ๋ฌ๋ค๋ณด๋ Union-Find๋ก ์งํฉ์ ์ฐพ์์ ๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋์ ์งํฉ์ ์์๋ ๊ฒ์ผ๋ก ์ธ์๋๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค
Modularity
๋คํธ์ํฌ ๋ด์ ์ปค๋ฎค๋ํฐ๊ฐ ์ผ๋ง๋ ๋ชจ๋ํ ๋์ด ์๋๊ฐ ๋ฅผ ์ ๋์ ์ผ๋ก ๋ํ๋ด๊ธฐ ์ํ ๊ฐ
- ์ง๋ ๋ฏธํ ๋ ์กฐ๊ต๋์ด Modularity ์๊ณ ๋ฆฌ์ฆ์ ํ๋ฒ ์์๋ณด๋ผ๊ณ ์ถ์ฒํด์ฃผ์ จ๋ค
- Modulairty๋ ์ปค๋ฎค๋ํฐ ๋ด๋ถ์ ํผ์ณ์ ธ ์๋ ๋งํฌ๋ค์ด ๋ฌด์์์ ์ธ ์ฐ๊ฒฐ๋ค๊ณผ ๋น๊ตํ์ ๋ ์ผ๋ง๋ ๋ ๊ฐํ์ง ์ ๋ํํ๋ ๊ฐ์ด๋ค
- Modularity Q๋ฅผ ๊ตฌํ๋ ์์ ์์ ๊ฐ๋ค
- ์์ฝํ์๋ฉด, ์ปค๋ฎค๋ํฐ ๋ด์ ์ผ๋ง๋ ๋ง์ ์ฐ๊ฒฐ์ฑ์ด ์๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ด๋ค
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปค๋ฎค๋ํฐ๊ฐ ์ด๋ฏธ ์ค์ ๋์ด ์์ ๋ ๊ตฌํ ์ ์๋ ๊ฐ์ด๋ค
- ๋ฌด์์์ ์ธ ์ฐ๊ฒฐ์ ์ํฉ๊ณผ ๋น๊ต๋ฅผ ํ์ ๋, ์ด ์ฐจ์ด๊ฐ ํด์๋ก ์๋์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ฐํ ์ฐ๊ฒฐ์ฑ์ ๊ฐ๋๋ค๋ ์๋ฏธ๋ก ํด์ํ ์ ์๋ค
Louvain Algorithm
๊ธฐ์กด์ Modularity ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด์ ์ ์๋ ๋์
- ๊ธฐ์กด์ Modularity ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ๋ค์ Modularity๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด์ ๋๋ฌด ๋ง์ ์๊ฐ์ด ์์๋๋ค๋ ๋ฌธ์ ๊ฐ ์์๋ค
- ์ด ๊ณ์ฐ์ ์ต์ ํํ Greedy ์๊ณ ๋ฆฌ์ฆ์ ์ธ์ํ๋ ์ปค๋ฎค๋ํฐ์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์ปค์ง๋ค๋ ๋ฌธ์ ๋ฅผ ๊ฐ๊ณ ์๋ค
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค
- ์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด์ Louvain Algorithm์ด ๊ณ ์๋์๋ค
- ์ด๋ฆ์ ๋ ผ๋ฌธ์ ์ ์๊ฐ ๋ฒจ๊ธฐ์์ Louvain ๋ํ ์ถ์ ์ด๋ผ์ ๊ทธ๋ ๊ฒ ์ง์๋ค๊ณ ํ๋ค
Method
Louvain Algorithm์ ์งํ ๊ณผ์
- Louvain Algorithm์ ๋๊ฐ์ง Phase์ ๋ฐ๋ณต ์ผ๋ก ๊ตฌ์ฑ๋๋ค
Phase 1
- ์ฒ์์๋ ๊ฐ๊ฐ์ Single Node๊ฐ ํ๋์ ์ปค๋ฎค๋ํฐ๋ผ๊ณ ์๊ฐํ๊ณ ์์ํ๋ค
- ํ๋์ Node๋ฅผ ์๋์ Community์์ ๋นผ์ด๋ด์ด ์ธ์ ํ Community์ ์ฌ๋ฐฐ์น ํ์์ ๋์ Modularity์ ๋ณํ๋ฅผ ์ธก์ ํ๋ค
- ์ธก์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก, Modularity๊ฐ ๊ฐ์ฅ ํฐ ํญ์ผ๋ก ์์นํ๋ Community์ Node๋ฅผ ๋ฐฐ์์ํจ๋ค
- Modularity๊ฐ ํฌ๊ฒ ๋ณํ๋ค๋ ๊ฒ์ ๋ค๋ฅธ Community์ ๋ฐฐ์์์ผฐ์ ๋ ๋ ๋ชจ๋์ฑ์ด ์ปค์ก๋ค๋ ์๋ฏธ์ด๋ค
- ์ด ๊ณผ์ ์ ์ด๋ ํ ๋ณํ๋ ์ผ์ด๋์ง ์์ ๋๊น์ง ์ํํ๋ค
Phase 2
- Phase 2์์๋ Phase 1์์ ์ธ์ํ ์ปค๋ฎค๋ํฐ๋ฅผ ํ๋์ Super Single Node๋ก ์๊ฐํ๋ค
- ์ด๋ Community ๋ด๋ถ Link์ Weight๋ ์๊ธฐ ํ๊ธฐ ์ํ(Self Loop)์ Link๋ก, Community๊ฐ์ ์ฐ๊ฒฐ๋์ด ์๋ Node๊ฐ์ Link Weight๋ ํฉ์ณ์ ํ๋์ Link๋ก ์์ฑํ๋ค
- ์์ ์์์์ ๋ฏผํธ์(?) ๋ ธ๋๋ค์ด ํฉ์ณ์ ธ์ ํ๋์ Super Single Node๊ฐ ๋์๊ณ , Self Loop๊ฐ ์์ฑ๋์๋ค
- ์ด๋
(11, 13)
,(13, 11)
์ด๋ ๊ฒ ์ฐ๊ฒฐ์ด ๋์ด ์๋ ๊ฒ์ ํ๋๋ก ํฉ์ณค๊ธฐ ๋๋ฌธ์ 2์ Weight๋ฅผ ๊ฐ๋๋ค
- ์ด ์๋กญ๊ฒ ๋ณํํ Network๋ ๋ค์ Phase 1์ Algorithm์ ํตํด์ ๋ณํฉํด ๋๊ฐ๋ค
- Phase 1์ ๋ง์น๋ฉด ๋ค์ Phase 2๋ก ๋์ ํ๋ค
- Phase 2 ์ดํ, Phase 1์์ ๋ ์ด์์ ๋ณํ๊ฐ ์ผ์ด๋์ง ์์ ๋ Louvain Algorithm์ ๋์์ ์ ์งํ๋ค
์ ์ฉ ๊ณผ์
Louvain Algorithm์ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์
louvain
Louvain community detection. Latest version: 1.2.0, last published: 6 years ago. Start using louvain in your project by running `npm i louvain`. There are 3 other projects in the npm registry using louvain.
www.npmjs.com
- Louvain Algorithm์ ๋น๊ต์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์๋ค
- ์ง์ ๊ตฌํํ๊ธฐ๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จ
let community = louvain.jLouvain().nodes(nodes).edges(edges);
let result = community();
/*
* ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ Key์ ํด๋น Key์ Value์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์์(Hex)์ ๋ถ์ฌํ๋ค
* Key๋ Node์ ID, Value๋ ํด๋น Node์ Community ID
*/
let colors = {};
let coloredNodes = {};
Object.keys(result).map((sourceId) => {
const communityId = result[sourceId];
if (colors[communityId] === undefined) {
colors[communityId] =
"#" + Math.floor(Math.random() * 16777215).toString(16);
}
coloredNodes[sourceId] = colors[communityId];
});
- ์์ ๊ฐ์ด ๊ตฌํ์ ํด์ ์ง์ ๋ ์ปค๋ฎค๋ํฐ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์์๊ฐ์ ๋ถ์ฌํ๋ค
- ์์์ ๋๋คํ๊ฒ ์ง์ ํด์ ๊ฒฐ๊ณผ๊ฐ ์ ์์๊ฒ ๋์ฌ ๋๋ ์๋ค
- ์ด ๋ถ๋ถ์ ๋์ค์ ๋ณด์ํ ์์
์ ์ฉ ๊ฒฐ๊ณผ
์ฐ๋ฆฌ์ ๋ฐ์ดํฐ์ Louvain Algorithm์ ์ ์ฉํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค
- ํฌ๊ธฐ๊ฐ ๋น๊ต์ ์์ ์ปค๋ฎค๋ํฐ์ ๋ํด์๋ ์ ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋,
- ํฌ๊ธฐ๊ฐ ํฐ ์ปค๋ฎค๋ํฐ์์๋ ๋ด๋ถ์ ๋ ๋ค์ ์ฌ๋ฌ๊ฐ์ ์ปค๋ฎค๋ํฐ๊ฐ ์์ฑ๋์ด ์์๋ง์ผ๋ก ์ปค๋ฎค๋ํฐ๋ฅผ ์๋ณํ๊ธฐ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค
๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
์ฌ์ฉ์๋ง๋ค ๋คํธ์ํฌ๋ฅผ ์ปค์คํ ํ๊ณ , ์ ์ฅํ ์ ์๊ฒ ํ๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค
- ํ์ง๋ง ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ๋ฉ์ธ ์๋น์ค๋ ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ ์์ฝ๋ง
- JWT ํ ํฐ์ ์ฌ์ฉํด์, ์ธ์ฆ์ ๊ตฌํํ์๋ค
- ์ด๋ ํ ํฐ ๊ฐ์ ์๋ต์ ๋ณด๋ผ ๋
Set-Cookie
๋ฅผ ํตํด์ ์ฟ ํค๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ์๋คhttpOnly
,Secure
,SameSite
์ ๊ฐ์ ์ต์ ์ ํตํด ๋ณด์์ ๊ฐํํ์๋ค- httpOnly ์์ฑ์ ์๋ฒ์์๋ง ๋ถ์ฌํ ์ ์๊ธฐ ๋๋ฌธ์, ํ๋ก ํธ์์ ์ง์ ์ฟ ํค์ ์ ์ฅํ๊ธฐ ๋ณด๋ค Set-Cookie๋ฅผ ํตํด ๋ฃ์ด์ฃผ์๋ค
- ์์ฒญ์ AT์์ด RT๋ง ๋ค์ด์๋ ๊ฒฝ์ฐ์๋ ์๋ฒ์์ ์๋ ๊ฐฑ์
ํผ๋๋ฐฑ
๋ฏธํ ์ดํ ํผ๋๋ฐฑ
- ๊ฑฐ๋ํ ์ปค๋ฎค๋ํฐ ๋ด๋ถ์์ ๋ ๋ค๋ฅธ ์ปค๋ฎค๋ํฐ๊ฐ ์์ฑ๋๋ ํ์์ ๋จ๊ณ์ ๋ ์ด์์ ์ ๊ณ ๋ คํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค
- ์ค์ ํ๊ธฐ ์ ์๋ ์ด์ ์ ์ฌ์ฉํ๋ Union-Find์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ
- ์ค์ ํด์ ์์ธํ๊ฒ ๋ณด๊ฒ ๋๋ฉด, Louvain Algorithm์ ์ ์ฉํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ํ๋ฉด ์ข์ ์ ์์ ๊ฒ ๊ฐ๋ค
- ๋๋ Switch ์ต์ ์ ํตํด์ ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด ๋๊ฒ ๋ค
- ๋จ๊ณ์ ๋ ์ด์์์ด ์๋๋๋ผ๋, ์ปค๋ฎค๋ํฐ ํ์ฑ์ ์ ๋์๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ๋ฅผ ์๊ฐํํ๋ ๋ค๋ฅธ ๋ ์ด์์ ์ ์ฐพ์๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค
- ์กฐ๊ต๋๋ ์ด ๋ถ๋ถ์ ๋ํด์ ํจ๊ป ๊ณ ๋ฏผ์ ํด์ฃผ์๊ธฐ๋ก ํ์ จ๋ค
- ์ ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ณ๊ฒฝ๋๋ฉด ๊ณ์ํด์ ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์, ์ด๊ฑธ ์๋ฒ์์ ํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌํ์ ํ ์์ ์ด๋ค
- ์๋ฒ์์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ ค์ ๊ฒฐ๊ณผ๋ฅผ ํ๋ก ํธ๋ก ๋ณด๋ด์ฃผ๋ ๋ฐฉํฅ์ผ๋ก
Reference
[๋คํธ์ํฌ์ด๋ก ] Network Modularity (๋คํธ์ํฌ์ ๋ชจ๋์ฑ)
๋คํธ์ํฌ๋ฅผ ๋ฐ๋ผ๋ณด๋ฉด, ๋คํธ์ํฌ ์์์๋ ๋ผ๋ฆฌ๋ผ๋ฆฌ ๋ญ์ณ์๋ ์ปค๋ฎค๋ํฐ๊ฐ ๋ณด์ด๊ณค ํ๋ค. ๋ค์ ๋คํธ์ํฌ๋ฅผ ์๋ก ๋ค์ด๋ณด์. ๋คํธ์ํฌ์ง๋ง, ์์ชฝ ์๋์ชฝ ์ผ์ชฝ์ผ๋ก ๋ผ๋ฆฌ๋ผ๋ฆฌ ๋ชจ์ฌ์๋ 3๊ฐ์ ์์ ์ปค
mons1220.tistory.com
[๋คํธ์ํฌ์ด๋ก ] Louvain algorithm for community detection
network๋ก๋ถํฐ community๋ฅผ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ผ๋ก Girvan-Newman algorithm์ Link community๋ฅผ ์๊ฐํ ์ ์ด ์์๋ค. ์ค๋์ ๊ทธ 3ํ์ผ๋ก Louvain algorithm์ ์๊ฐํ๋ ค๊ณ ํ๋ค. Louvain algorithm์ด ์ฒ์ ์๊ฐ๋ ๋ ผ๋ฌธ์ Fast unfo
mons1220.tistory.com
4. Community Structure in Networks
Network Community [์์ฑ์ : ๊นํ์ฑ]
velog.io
louvain
Louvain community detection. Latest version: 1.2.0, last published: 6 years ago. Start using louvain in your project by running `npm i louvain`. There are 3 other projects in the npm registry using louvain.
www.npmjs.com
react-cookie
Universal cookies for React. Latest version: 7.1.4, last published: 2 months ago. Start using react-cookie in your project by running `npm i react-cookie`. There are 641 other projects in the npm registry using react-cookie.
www.npmjs.com
Set a cookie to HttpOnly via Javascript
I have a cookie that is NOT HttpOnly Can I set this cookie to HttpOnly via JavaScript?
stackoverflow.com