ย
ย
ย
์ถ์ฒ์์คํ ์ ๊ฐ์
1) ์ถ์ฒ์์คํ ์ด๋? (feat. ์ ์, ์ค์์ฑ, ๋ชฉํ)
์ถ์ฒ์์คํ
์ ์ฌ์ฉ์์๊ฒ ์ํ์ ์ ์ํ๋ ์ํํธ์จ์ด ๋๊ตฌ์ด์ ๊ธฐ์ ์ด๋ค. ์์ญ๋ง ๋ฐ์ดํฐ ์์์ ์์ ์๊ฒ ๊ด์ฌ์๋ ์์ดํ
์ ์๋ง์ ์ฌ์ฉ์๋ค์ด ์ง์ ์ฐพ๊ธฐ๋ ๊ต์ฅํ ์ด๋ ต๋ค. ๋ํ ๊ธฐ์
์
์ฅ์์๋ ์ถ์ฒ์์คํ
์ ์ด์ฉํ๋ค๋ฉด, ๊ทธ๋ค์ด ์ง์ ์ฌ์ฉ์์๊ฒ ์ถ์ฒ์ ํตํด ์ ์ํ๋ฏ๋ก ๋งค์ถ ๋ฐ ํ๋ซํผ ์ด์ฉ ์ฆ๋์ ์ ์๋ฏธํ ์ํฅ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์๋ฅผ ์ ํ์ฌ ๊ทธ ์ฌ์ฉ์์๊ฒ ์ํ์ ์ด๋ป๊ฒ ์ถ์ฒํ ์ง์ ๋ํด ์ดํดํ๋ ๊ฒ์ด ์ถ์ฒ์์คํ
์ ๋ชฉํ์ด๋ค. ์ด๋, ๊ธฐ์
์ ์ฌ์ฉ์์ธ ํ๊ฒ ์ง๋จ์ ๋จผ์ ์ ํ๊ฒ ๋๋๋ฐ, ์ ์ฒด ์ฌ์ฉ์๋ฅผ pool๋ก ํ ์๋ ์์ผ๋ ์ฌ์
๋ถ๋ ๋ง์ผํ
ํ์ ์
์ฅ์ ๋ฐ๋ผ ์ง์คํ ์ฌ์ฉ์ pool์ ํน์ ์ง์ ์๋ ์๋ค.
ย
2) ๊ธฐ์ ์์์ ์ถ์ฒ์์คํ
- ๋น๊ทผ๋ง์ผ โ์ด ์ํ๊ณผ ํจ๊ป ๋ดค์ด์โ๋ฅผ ํตํด ํ ์ํ์ ๋ณธ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ด ์ด๋ค ์ํ์ ํจ๊ป ๋ณด์๋์ง ๋ํ๋ด ์ค๋ค.
- ์นด์นด์ค(๋ธ๋ฐ์น) ํด๋น ๊ธ๊ณผ ์ ์ฌํ ๊ธ์ ๋ชจ๋ธ์ ํตํด ๋น๊ตํ๋ฉฐ ๊ด๋ จ๋ ๊ธ์ ์ถ์ฒํด ์ค๋ค.
- ์ ํ๋ธ ์ค์ผ์ผ์ด ํฌ๋ค ๋ณด๋ ๊ต์ฅํ ๋ง์ ์์๋ค์ ๋ฅ๋ฌ๋ ๋ชจ๋ธ์ ํตํด ์ถ์ฒํ๋๋ฐ, ํนํ ์ต๊ทผ์๋ ๋๋ถ๋ถ์ ์์์ด ์ถ์ฒ์ผ๋ก ์ธํ ํด๋ฆญ์๋ก ์ถ์ ๋๋ค๊ณ ํ๋ค.
ย
3) ํ๋ ํ ์ ๋กฑํ ์ผ์ ๋ฒ์น
- ํ๋ ํ ์ ๋ฒ์น ์์ 20%๊ฐ ์ ์ฒด์ 80% ๊ฐ์น๋ฅผ ์ฐฝ์ถํ๋ค๋ ๋ฒ์น์ผ๋ก, ์๋์ฝฉ ์์๋ก๋ถํฐ ์ถ๋ฐํ์๋ค. ์์ 20%์ ์๋์ฝฉ์์ ์ ์ฒด 80%์ ์๋์ฝฉ์ด ๋ฐํ๋์๋ค๋ ๋ด์ฉ์ ์์๋ฅผ ํตํด ์ ๊ฐ๋์ผ๋ฉฐ, ํ์ฌ๊น์ง๋ ๊ธฐ์ ๊ฒฝ์์ ํ์ํ ๋ฒ์น์ด๋ค. ๊ธฐ์ ์์๋ ์ฃผ๋ก ๋งค์ถ์ 80%๋ 20%์ ํต์ฌ ๊ณ ๊ฐ ๋ฐ ์ฃผ๋ ฅ ์ํ์์ ๋์ค๋ฏ๋ก ๊ทธ ํต์ฌ ๊ณ ๊ฐ 20%๋ฅผ ์ฐพ์๋ด ๊ทธ๋ค์๊ฒ ์ญ๋์ ์ง์คํ ํ์๊ฐ ์๋ค๋ ์๋ฏธ๋ก ํ์ฉ๋๋ค.
- ๋กฑํ ์ผ์ ๋ฒ์น ํ์ 80%์ ๊ฐ์น๊ฐ ์์ 20%์ ๊ฐ์น๋ณด๋ค ํฌ๋ค๋ ์๋ฏธ๋ก, ์์ ๋์จ ํ๋ ํ ์ ๋ฒ์น๊ณผ ์ ๋ฐ๋์ธ ๋ฒ์น์ด๋ค. ์ฆ, ํ๋ ํ ์ ๋ฒ์น์์ ์์ธ๋ 80%์ ๊ณ ๊ฐ์๊ฒ์๋ ์๋นํ ์์ ๊ธฐํ๊ฐ ์กด์ฌํ๋ค๋ ์๋ฏธ์ด๋ค. ์ต๊ทผ ๋ฐ๋ฌํ ์ธํฐ๋ท์ ํ๋ ํ ์ ๋ฒ์น์ด ์ ์ฉ๋๋ ์คํ๋ผ์ธ๊ณผ ์ํฉ์ด ๋ค๋ฅด๊ธฐ์ ์ด๋ฌํ ๋ฒ์น์ด ์ ์ฉ๋ ์ ์์๋ค. ํนํ ์๋ง์กด์ด๋ ๋ทํ๋ฆญ์ค ๋ฑ์์ ์ ํ์ฉ๋ ๋กฑํ ์ผ์ ๋ฒ์น์, ์คํ๋ผ์ธ๋ณด๋ค ์จ๋ผ์ธ์์ ์ ์ฉํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์๋ง์กด์ด ์คํ๋ผ์ธ ์์ ์์ ์ ํ๋ฆฌ์ง ์๋ ์ฑ ์ ์จ๋ผ์ธ ์ถ์ฒ์ ํตํด ๋ง์ด ํ๋งคํ๊ฒ ๋์๋ค๋ ๊ฒ์ ์ผ๋ก๋ก ๋ค ์ ์๋ค.
ย
4) ์ถ์ฒ์์คํ ์ ์ญ์ฌ
- 2005 ~ 2010๋
๊ณผ๊ฑฐ์๋ Apriori ์ฐ๊ด์ํ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ถ๋ฐํ์๋ค. Apriori ์ฐ๊ด์ํ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ์ ์๋น์๊ฐ ๊ฐ์ด ๊ตฌ๋งคํ๋ ์ํ์ ์ถ์ฒํ๋ ๋ฐฉ์์ผ๋ก, ์ด๋ฅผ ํตํด ์ฌ๋๋ค์ด ์ถ์ฒ์์คํ
์ ๋ง์ผํ
์์ ์ด๋ป๊ฒ ์ ์ฉํ ์ง์ ๋ํด์ ๊ณ ๋ฏผํ๋ ๊ณ๊ธฐ๊ฐ ๋์๋ค๊ณ ํ๋ค.
- 2010 ~ 2015๋ 2006 ~ 2009๋ ์ ๋ทํ๋ฆญ์ค์์ ์ด๋ค ์์ผ๋ก ์ปจํ ์ธ ๋ฅผ ์ถ์ฒํ ์ ์์์ง ์ด์ ๋ํ ๋ชจ๋ธ์ ๊ฐ๋ฐํ๋ ๋ํ๊ฐ ์ด๋ ธ๋๋ฐ, ์ด๋ ์ฐ์น์์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋ก SVD๋ฅผ ํ์ฉํ๋ ํ์ ํํฐ๋ง ๋ชจ๋ธ์ด๋ค.
- 2013 ~ 2017๋
2013๋
๋ถํฐ ๋ง์ ์ฌ๋๋ค์ด ๋ฐ์ดํฐ์ ์ค์์ฑ์ ์ธ์ํ๊ธฐ ์์ํ๊ณ , DataBase์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ๊ฐ ์ ์ ๋น
๋ฐ์ดํฐ๋ก ๋ณํํด ๊ฐ๋ค. ์ด์ ์ ์๋ ๋ชจ๋ธ๋ค๋ก๋ ๋น
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ ๊ธฐ์ ์ด๋ฐ ๋น
๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ๋ค๋ฃฐ์ง์ ๋ํ ์ฐ๊ตฌ๊ฐ ํ๋ฐํ๊ฒ ์งํ๋์์ผ๋ฉฐ, ์ด๋ ๋์จ ๊ฒ์ด Spark๋ฅผ ์ด์ฉํ ๋น
๋ฐ์ดํฐ ๋ชจ๋ธ์ด๋ค.
- 2015 ~ 2017๋
ํ์ฌ๋ ๋ฅ๋ฌ๋์ ๋ฐ๋ฌ์ ํ์
์ด ํ์
ํํฐ๋ง์ ๋ฅ๋ฌ๋์ผ๋ก ์ด๋ป๊ฒ ์ํํ ์ง, ๋๊ท๋ชจ์ ๋ฐ์ดํฐ ์์์ ์ด๋ป๊ฒ ๋ฅ๋ฌ๋์ ์ ํ์ฉํด์ ์ถ์ฒํ ์ง์ ๋ํ ์ฐ๊ตฌ๊ฐ ํ๋ฐํ ์งํ๋๊ณ ์๋ค.
- 2017๋ ~
2017๋
์ดํ๋ก๋ ๊ฐํํ์ต์ด๋ Factorization Machine๊ณผ ๊ฐ์ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ, Hierarchical RNN ๋ฑ์ผ๋ก ์ด๊ฐ์ธํ ์ถ์ฒ์์คํ
์ ๋ํ ์ฐ๊ตฌ๊ฐ ์งํ๋๊ณ ์๋ค.
ย
ย
์ฐ๊ด๋ถ์ (Association Analysis)
1) ์ฐ๊ด๋ถ์์ด๋? (feat. ์ ์, ์์)
๋ฃฐ๊ธฐ๋ฐ์ ๋ชจ๋ธ๋ก์, ์ํ๊ณผ ์ํ ์ฌ์ด์ ์ด๋ ํ ์ฐ๊ด์ด ์๋์ง๋ฅผ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ฌ๊ธฐ์์ ์๋ฏธํ๋ โ์ฐ๊ดโ์ ๋ ๊ฐ์ง์ธ๋ฐ, ์ฒซ ๋ฒ์งธ๋ ์ผ๋ง๋(frequent) ๊ฐ์ด ๊ตฌ๋งค๋๋๋๋ ๊ฒ์ผ๋ก ๋จ์ํ๊ฒ ๊ฐ์ด ๊ตฌ๋งคํ๋๊ฐ์ ์ฌ๋ถ๋ฅผ ์ค์ ์ผ๋ก ๋ณธ๋ค. ๋ ๋ฒ์งธ๋ A ์์ดํ
์ ๊ตฌ๋งคํ๋ ์ฌ๋์ด B ์์ดํ
์ ๊ฐ์ด ๊ตฌ๋งคํ๋๋์ ์ฌ๋ถ๋ก, A ์์ดํ
๊ตฌ๋งค ์กฐ๊ฑด์ ๋ฐ๋ผ B ์์ดํ
์ ๊ตฌ๋งคํ๋๋ ์๋๋๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก ์ ํ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๊ด๋ถ์์ ์ฅ๋ฐ๊ตฌ๋ ๋ถ์์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์๋งํธ์ ๋งฅ์ฃผ์ ๊ธฐ์ ๊ท ์ฌ๋ก๊ฐ ๊ฐ์ฅ ์ ๋ช
ํ๋ค. ์๋งํธ์์ ๊ตฌ๋งคํ ์ฌ๋๋ค์ ์์์ฆ์ ํต๊ณ๋ด์ด๋ณธ ๊ฒฐ๊ณผ, ๋งฅ์ฃผ๋ฅผ ๊ตฌ๋งคํ์ ๋ ๊ธฐ์ ๊ท๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒฝํฅ์ด ํฌ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๊ณ ๋งฅ์ฃผ ์์ ๊ธฐ์ ๊ท๋ฅผ ๊ฐ์ด ์ง์ดํจ์ผ๋ก์จ ๋งค์ถ์ ์์น์ ๋๋ชจํ์๋ค. ์ด๋ ๊ฒ ๊ด๋ จ์ด ์์ด ๋ณด์ด๋ ๋ ๋ฌผ๊ฑด์ ์ ๊ทผ ํธ์์ฑ์ ๋์ฌ ์ฌ๋๋ค์ด ์ค์ง์ ์ผ๋ก ๊ตฌ๋งค๋ฅผ ์ด์ด์ ํ ์ ์๋๋ก ๋์๋ค.
ย
2) ๊ท์นํ๊ฐ์งํ
- ์ง์ง๋ support
A ์ํ์ ๊ตฌ๋งคํ์ ๋, ์ด๊ฒ์ด B ์ํ์ ๊ตฌ๋งค๋ก ์ด์ด์ง๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์กฐ๊ฑด์ A์ ๋ฐ๋ผ B๊ฐ ์ด์ด์ง๋ ํ์์ ์๋ฏธํ๋ค.
For the rule A โ B, support(A) = P(A)
- ์ ๋ขฐ๋ confidence
A ์ํ์ ๊ตฌ๋งคํ์ ๋, ์ด๊ฒ์ด B ์ํ์ ๊ตฌ๋งค๋ก ์ด์ด์ง๋ ํ๋ฅ ์งํ๋ฅผ ์๋ฏธํ๋ค.
โช ๋ณดํต ์์ ๋ ๊ฐ์ง, ์ง์ง๋์ ์ ๋ขฐ๋๋ฅผ ๊ท์นํ๊ฐ์งํ๋ก ์์ฃผ ์ฌ์ฉํ๋ค.
- ํฅ์๋ lift
๋ ์ฌ๊ฑด์ด ๋์์ ์ผ๋ง๋ ๋ฐ์ํ๋์ง์ ๊ดํ ๋น์จ์ ๋ฐ๋ฅธ ๋
๋ฆฝ์ฑ์ ์ธก์ ํ๋ ์งํ์ด๋ค.
ย
3) ๊ท์น ์์ฑ
์์ด๊ณผ ์กฐํฉ์ผ๋ก ์ ์ฒด ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๊ฒ์ฒ๋ผ, ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ํ์ฌ ๊ท์นํ๊ฐ์งํ์ธ ์ง์ง๋, ์ ๋ขฐ๋, ํฅ์๋๊ฐ ๋์ ๊ท์น๋ค์ ์ฐพ์๋ด๋ ๋ฐฉ์์ด๋ค.
ย
4) ์ฐ๊ด๋ถ์์ ๋ฌธ์ ์
ย
์์ดํ
์ ์ฆ๊ฐ์ ๋ฐ๋ผ ๊ท์น์ ์๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ๋ค. ์์ดํ
์ด 100๊ฐ๋ง ๋๋๋ผ๋ ๊ท์น์ ์๊ฐ (1.26*10^30)๊ฐ๋ก, ์ฝ 1๊ฒฝ ๊ฐ๊น์ด ๊ฒฝ์ฐ์ ์๊ฐ ๋์จ๋ค. ๊ทธ๋ ๊ธฐ์ ์์ดํ
์ ์๊ฐ ๋ง์ ๋ถ์ผ์์๋ ํ์ฉ์ฑ์ด ๋จ์ด์ง๋ค.
ย
Apriori ์๊ณ ๋ฆฌ์ฆ
ย
1) Apriori ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋
- item set์ ์ฆ๊ฐ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ
- โ๋น๋ฒํ์ง ์์ item set์ ํ์ item set ๋ํ ๋น๋ฒํ์ง ์๋คโ๋ผ๋ ์์ด๋์ด์์ ์ถ๋ฐํ ์๊ณ ๋ฆฌ์ฆ
2) Apriori ์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ
- k๊ฐ์ item์ ๊ฐ์ง๊ณ ๋จ์ผํญ๋ชฉ์ง๋จ ์์ฑ(one-item frequent set)
- ๋จ์ผํญ๋ชฉ์ง๋จ์์ ์ต์ ์ง์ง๋(support) ์ด์์ ํญ๋ชฉ๋ง ์ ํ
- 2์์ ์ ํ๋ ํญ๋ชฉ๋ง์ ๋์์ผ๋ก 2๊ฐํญ๋ชฉ์ง๋จ ์์ฑ
- 2๊ฐํญ๋ชฉ์ง๋จ์์ ์ต์ ์ง์ง๋ ํน์ ์ ๋ขฐ๋ ์ด์์ ํญ๋ชฉ๋ง ์ ํ
- ์์ ๊ณผ์ ์ k๊ฐ์ k-item frequent set์ ์์ฑํ ๋๊น์ง ๋ฐ๋ณต
ย
3) Apriori ์๊ณ ๋ฆฌ์ฆ ๋ฐ์ดํฐ
- Implicit Feedback dataset ์ฌ์ฉ(ex. ์ํ์ ๊ตฌ๋งค ํ ๊ณ ๊ฐ์ด ๋ง์กฑํ๋์ง, ๋ง์กฑํ์ง ์์๋์ง ํผ๋๋ฐฑ์ด ์๋ ๋ฐ์ดํฐ)
โฌ๏ธ Sparse Matrix(ํฌ์ ํ๋ ฌ)๋ก ๋ณํ
ย
4) Apriori ์๊ณ ๋ฆฌ์ฆ ๊ณผ์
- 5๊ฐ์ item์ ์ด์ฉํด ๋จ์ผํญ๋ชฉ์ง๋จ ์์ฑ(one-item frequent set) ์์ฑ
โ ์ฐ์ , ์์์ถ, ๊ธฐ์ ๊ท, ๋งฅ์ฃผ, ์ฅฌ์ค
- ๋จ์ผํญ๋ชฉ์ง๋จ์์ ์ต์ ์ง์ง๋(support) ์ด์์ธ ํญ๋ชฉ๋ง ์ ํ(ex. ์ต์์ง์ง๋๋ฅผ 0.5๋ก ๊ฐ์ )
โ P(์ฐ์ ) = 0.5 / P(์์์ถ) = 0.75 / P(๊ธฐ์ ๊ท) = 0.75 / P(์ฅฌ์ค) = 0.25(0.5 ๋ฏธ๋ง์ด๋ผ ์ญ์ ) / P(๋งฅ์ฃผ) = 0.75
- 2๋ฒ์์ ์ ํ๋ ํญ๋ชฉ๋ง์ ๋์์ผ๋ก 2๊ฐํญ๋ชฉ์ง๋จ ์์ฑ
โ {์ฐ์ , ์์์ถ}, {์ฐ์ , ๊ธฐ์ ๊ท}, {์ฐ์ , ๋งฅ์ฃผ}, {์์์ถ, ๊ธฐ์ ๊ท}, {์์์ถ, ๋งฅ์ฃผ}, {๊ธฐ์ ๊ท, ๋งฅ์ฃผ}
- 2๊ฐํญ๋ชฉ์ง๋จ์์ ์ต์ ์ง์ง๋ ์ด์์ธ ํญ๋ชฉ๋ง์ ์ ํ(ex. ์ต์์ง์ง๋๋ฅผ 0.5๋ก ๊ฐ์ )
โ {์ฐ์ , ์์์ถ} = 0.25 / {์ฐ์ , ๊ธฐ์ ๊ท} = 0.5 / {์ฐ์ , ๋งฅ์ฃผ} = 0.25 / {์์์ถ, ๊ธฐ์ ๊ท} = 0.5 / {์์์ถ, ๋งฅ์ฃผ} = 0.75 / {๊ธฐ์ ๊ท, ๋งฅ์ฃผ} = 0.5
- 1~4๋ฒ์ ๊ณผ์ ์ k๊ฐ์ k-item frequent set์ ์์ฑํ ๋๊น์ง ๋ฐ๋ณต
ย
5) Apriori ์๊ณ ๋ฆฌ์ฆ ๊ณผ์ ๊ทธ๋ํ ํํ
- ์ ์์๋ ์ง์ง๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์งํํ๋ฉฐ ์ต์์ง์ง๋ 0.5 ์ด์์ธ item๋ค๋ง ์ ํ
- Confidence์ Lift๋ฅผ ๊ธฐ์ค์ผ๋ก๋ ๊ฐ๋ฅ
ย
6) Apriori ์๊ณ ๋ฆฌ์ฆ์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- ์๋ฆฌ๊ฐ ๊ฐ๋จํ์ฌ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ดํดํ๊ณ ์๋ฏธ ํ์ ์ด ๊ฐ๋ฅํจ
- ์ ์๋ฏธํ ์ฐ๊ด์ฑ์ ๊ฐ์ง๋ ๊ตฌ๋งค ํจํด์ ์ฐพ์์ค
๋จ์
- ๋ฐ์ดํฐ๊ฐ ํด ๊ฒฝ์ฐ ์๋๊ฐ ๋๋ฆฌ๊ณ ์ฐ์ฐ๋์ด ๋ง์
- ์ค์ ์ ์ฉ์ ํด๋ณด๋ฉด ๋ง์ ์ฐ๊ด ์ํ๋ค์ด ์ ์๋จ
ย
FP-Growth ์๊ณ ๋ฆฌ์ฆ
ย
1) FP-Growth ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋
- Apriori ์๊ณ ๋ฆฌ์ฆ์ ์๋ ์ธก๋ฉด์์์ ๋จ์ ์ ๊ฐ์ ํ ์๊ณ ๋ฆฌ์ฆ
- Apriori ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ฑ๋ฅ์ ๋น์ทํ์ง๋ง FP Tree ๊ตฌ์กฐ๋ฅผ ์ด์ฉํด ์๋๊ฐ ์กฐ๊ธ ๋นจ๋ผ์ก์
- frequent itemsets๋ฅผ ์ฐพ๋๊ฒ์๋ ์ข์ง๋ง ์์ดํ ๊ฐ์ ์ฐ๊ด์ฑ์ ์ฐพ๊ธฐ ์ด๋ ค์
ย
2) FP-Growth ์๊ณ ๋ฆฌ์ฆ ์๋ฆฌ
- ๋ชจ๋ ๊ฑฐ๋๋ฅผ ํ์ธํ์ฌ, ๊ฐ ์์ดํ ๋ง๋ค์ ์ง์ง๋๋ฅผ ๊ณ์ฐํ๊ณ ์ต์ ์ง์ง๋ ์ด์์ ์์ดํ ๋ง ์ ํ(์์ Apriori ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋์ผํ ๋จ๊ณ)
- ๋ชจ๋ ๊ฑฐ๋์์ ๋น๋๊ฐ ๋์ ์์ดํ ์์๋๋ก ์์๋ฅผ ์ ๋ ฌ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ค์ฌ์ผ๋ก ๊ฑฐ๋๋ฅผ ์์ ๋ ธ๋๋ก ์ถ๊ฐํ๋ฉด์ tree๋ฅผ ํ์ฑ
- ์๋ก์ด ์์ดํ ์ด ๋์ฌ ๊ฒฝ์ฐ ๋ถ๋ชจ๋ ธ๋๋ถํฐ ์์ํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ๋ ธ๋์์ ํ์ฅ
- 1~4๋ฒ์ ๋ชจ๋ ๊ฑฐ๋์ ๋ํด ๋ฐ๋ณตํ๊ณ FP Tree๋ฅผ ๋ง๋ค๊ณ ์ต์ ์ง์ง๋ ์ด์์ ํจํด๋ง์ ์ถ์ถ
ย
3) FP-Growth ์๊ณ ๋ฆฌ์ฆ ๊ณผ์
- ๋ชจ๋ ๊ฑฐ๋๋ฅผ ํ์ธํ์ฌ, ๊ฐ ์์ดํ ๋ง๋ค์ ์ง์ง๋๋ฅผ ๊ณ์ฐํ๊ณ ์ต์ ์ง์ง๋ ์ด์์ ์์ดํ ๋ง ์ ํ(์์ ๊ฐ์ด ์ต์์ง์ง๋๋ 0.5๋ก ๊ฐ์ )
โ P(์ฐ์ ) = 0.5 / P(์์์ถ) = 0.75 / P(๊ธฐ์ ๊ท) = 0.75 / P(์ฅฌ์ค) = 0.25 / P(๋งฅ์ฃผ) = 0.75
- ๋ชจ๋ ๊ฑฐ๋์์ ๋น๋๊ฐ ๋์ ์์ดํ ์์๋๋ก ์์๋ฅผ ์ ๋ ฌ
โฌ๏ธ
- ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ค์ฌ์ผ๋ก ๊ฑฐ๋๋ฅผ ์์ ๋ ธ๋๋ก ์ถ๊ฐํ๋ฉด์ tree๋ฅผ ํ์ฑ
โ ๊ฑฐ๋๋ฒํธ 0๋ฒ์ tree
- ์๋ก์ด ์์ดํ ์ด ๋์ฌ ๊ฒฝ์ฐ ๋ถ๋ชจ๋ ธ๋๋ถํฐ ์์ํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ธฐ์กด์ ๋ ธ๋์์ ํ์ฅ
โ ๊ฑฐ๋๋ฒํธ 1๋ฒ์ tree(์๋ก์ด ์์ดํ
์ ๊ฒฝ์ฐ)
โ ๊ฑฐ๋๋ฒํธ 2๋ฒ์ tree(๊ธฐ์กด์ ๋
ธ๋์์ ํ์ฅ๋ ๊ฒฝ์ฐ)
โ ๊ฑฐ๋๋ฒํธ 3๋ฒ์ tree(๊ธฐ์กด์ ๋
ธ๋์์ ํ์ฅ๋ ๊ฒฝ์ฐ)
- ์ง์ง๋๊ฐ ๋ฎ์ ์์๋ถํฐ ์์ํด ์กฐ๊ฑด๋ถ ํจํด ์์ฑ
โ ์ฐ์ ์ ๊ฒฝ์ฐ, {์์์ถ, ๊ธฐ์ ๊ท, ๋งฅ์ฃผ} : 2 / {๊ธฐ์ ๊ท} : 1
- ๋ชจ๋ ์์ดํ ์ ๋ํด ์ ๊ณผ์ ๋ฐ๋ณต
ย
4) FP-Growth ์๊ณ ๋ฆฌ์ฆ์ ์ฅ์ ๊ณผ ๋จ์
์ฅ์
- Apriori ์๊ณ ๋ฆฌ์ฆ ๋ณด๋ค ๋น ๋ฅด๊ณ 2๋ฒ์ ํ์์ผ๋ก ๊ฐ๋ฅ
- ํ๋ณด itemsets์ ์์ฑํ ํ์ ์์
๋จ์
- ๋์ฉ๋์ ๋ฐ์ดํฐ์ ์์ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ์ด ํจ์จ์ ์ด์ง ์์
- Apriori ์๊ณ ๋ฆฌ์ฆ์ ๋นํด ์ค๊ณ๊ฐ ์ด๋ ค์
- FP Tree๊ฐ ๋ชจ๋ ๋ง๋ค์ด์ง ํ ์ง์ง๋ ๊ณ์ฐ์ ํ ์ ์์
ย
Apriori, FP-Growth ์ฝ๋ ๊ตฌํ
pip install mlxtend --upgrade
๊ตฌ๊ธ ์ฝ๋ฉ์์ ์ฝ๋๊ตฌํ์ ์งํํ์๋๋ฐ mlxtend๋ฅผ์
๊ทธ๋ ์ด๋ ํ์ง ์์์๋ FP-Growth๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ import๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๋ฐ๋ผ์ ๋จผ์ mlxtend๋ฅผ ์
๊ทธ๋ ์ด๋ํ๋ค.
ย
import numpy as np import pandas as pd from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns import fpgrowth
๋ฐ์ดํฐ ํ๋ ์์ ๋ง๋ค์ด ์ฃผ๊ธฐ ์ํด numpy์ pandas๋ฅผ importํด์ค๋ค.
apriori์ fpgorwth ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ TFํ๋ ฌ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ transactionEncoder๋ฅผ ์ฌ์ฉํ๋ค.
apriori์๊ณ ๋ฆฌ์ฆ๊ณผ fpgorwth์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ด ๋ ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ importํ๋ค.
ย
ย
data = np.array([ ["์ฐ์ ","๊ธฐ์ ๊ท","์ฅฌ์ค"], ["์์์ถ","๊ธฐ์ ๊ท","๋งฅ์ฃผ"], ["์ฐ์ ","์์์ถ","๊ธฐ์ ๊ท","๋งฅ์ฃผ"], ["์์์ถ","๋งฅ์ฃผ"] ])
์์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด numpy๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ์ด ํ๋ ฌ์ ์์ฑํ๋ค.
ย
te = TransactionEncoder() te_arr = te.fit(data).transform(data) df = pd.DataFrame(te_arr, columns = te.columns_)
TransactionEncoder๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์์ฑํ data๋ฅผ TFํ๋ ฌ๋ก ๋ณํํด ์ค๋ค. ๊ทธ ์ดํ ํ๋ค์ค์ dataframe์ ์ฌ์ฉํ์ฌ TF๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ํ๋ ์์ ์์ฑํ๋ค.
ย
ย
%%time apriori(df, min_support=0.5, use_colnames=True)
aprioriํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ง๋๊ฐ 0.5.๋ฅผ ๋๋ ๋ฐ์ดํฐ์
์ ์ถ๋ ฅํ๋ค.
ย
%%time fpgrowth.fpgrowth(df, min_support = 0.5, use_colnames=True)
fpgrowthํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ง๋๊ฐ 0.5๋ฅผ ๋๋ ๋ฐ์ดํฐ์
์ ์ถ๋ ฅํ๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์ฐจ์ด๋ก ๋ฐ์ดํฐ์
์ ์์์๋ ์ฐจ์ด๊ฐ ์์ง๋ง ๋์ผํ ๊ฒฐ๊ณผ๋ผ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์์ ์๊ฐ์ ๋ณด๋ฉด apriori์ ๊ฒฝ์ฐ 7.69ms, fpgrowth์ ๊ฒฝ์ฐ 5.15ms๋ก fpgrowth๊ฐ ๋ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์ ์ ์๋ค.