๐Ÿ–‡๏ธ

1๊ฐ• - ์ถ”์ฒœ์‹œ์Šคํ…œ์˜ ์ดํ•ด (์—ฐ๊ด€๋ถ„์„, Apriori, FP-Growth)

ย 
ย 
ย 

์ถ”์ฒœ์‹œ์Šคํ…œ์˜ ๊ฐœ์š”


1) ์ถ”์ฒœ์‹œ์Šคํ…œ์ด๋ž€? (feat. ์ •์˜, ์ค‘์š”์„ฑ, ๋ชฉํ‘œ)

์ถ”์ฒœ์‹œ์Šคํ…œ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒํ’ˆ์„ ์ œ์•ˆํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋„๊ตฌ์ด์ž ๊ธฐ์ˆ ์ด๋‹ค. ์ˆ˜์‹ญ๋งŒ ๋ฐ์ดํ„ฐ ์†์—์„œ ์ž์‹ ์—๊ฒŒ ๊ด€์‹ฌ์žˆ๋Š” ์•„์ดํ…œ์„ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด ์ง์ ‘ ์ฐพ๊ธฐ๋Š” ๊ต‰์žฅํžˆ ์–ด๋ ต๋‹ค. ๋˜ํ•œ ๊ธฐ์—… ์ž…์žฅ์—์„œ๋„ ์ถ”์ฒœ์‹œ์Šคํ…œ์„ ์ด์šฉํ•œ๋‹ค๋ฉด, ๊ทธ๋“ค์ด ์ง์ ‘ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถ”์ฒœ์„ ํ†ตํ•ด ์ œ์•ˆํ•˜๋ฏ€๋กœ ๋งค์ถœ ๋ฐ ํ”Œ๋žซํผ ์ด์šฉ ์ฆ๋Œ€์— ์œ ์˜๋ฏธํ•œ ์˜ํ–ฅ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๋ฅผ ์ •ํ•˜์—ฌ ๊ทธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒํ’ˆ์„ ์–ด๋–ป๊ฒŒ ์ถ”์ฒœํ• ์ง€์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ถ”์ฒœ์‹œ์Šคํ…œ์˜ ๋ชฉํ‘œ์ด๋‹ค. ์ด๋•Œ, ๊ธฐ์—…์€ ์‚ฌ์šฉ์ž์ธ ํƒ€๊ฒŸ ์ง‘๋‹จ์„ ๋จผ์ € ์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ „์ฒด ์‚ฌ์šฉ์ž๋ฅผ pool๋กœ ํ•  ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ์‚ฌ์—…๋ถ€๋‚˜ ๋งˆ์ผ€ํŒ…ํŒ€์˜ ์ž…์žฅ์— ๋”ฐ๋ผ ์ง‘์ค‘ํ•  ์‚ฌ์šฉ์ž pool์„ ํŠน์ •์ง€์„ ์ˆ˜๋„ ์žˆ๋‹ค.
ย 

2) ๊ธฐ์—…์—์„œ์˜ ์ถ”์ฒœ์‹œ์Šคํ…œ

  • ๋‹น๊ทผ๋งˆ์ผ“ โ€˜์ด ์ƒํ’ˆ๊ณผ ํ•จ๊ป˜ ๋ดค์–ด์š”โ€™๋ฅผ ํ†ตํ•ด ํ•œ ์ƒํ’ˆ์„ ๋ณธ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ์–ด๋–ค ์ƒํ’ˆ์„ ํ•จ๊ป˜ ๋ณด์•˜๋Š”์ง€ ๋‚˜ํƒ€๋‚ด ์ค€๋‹ค.
  • ์นด์นด์˜ค(๋ธŒ๋Ÿฐ์น˜) ํ•ด๋‹น ๊ธ€๊ณผ ์œ ์‚ฌํ•œ ๊ธ€์„ ๋ชจ๋ธ์„ ํ†ตํ•ด ๋น„๊ตํ•˜๋ฉฐ ๊ด€๋ จ๋œ ๊ธ€์„ ์ถ”์ฒœํ•ด ์ค€๋‹ค.
  • ์œ ํŠœ๋ธŒ ์Šค์ผ€์ผ์ด ํฌ๋‹ค ๋ณด๋‹ˆ ๊ต‰์žฅํžˆ ๋งŽ์€ ์˜์ƒ๋“ค์„ ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ถ”์ฒœํ•˜๋Š”๋ฐ, ํŠนํžˆ ์ตœ๊ทผ์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์˜์ƒ์ด ์ถ”์ฒœ์œผ๋กœ ์ธํ•œ ํด๋ฆญ์ˆ˜๋กœ ์ถ”์ •๋œ๋‹ค๊ณ  ํ•œ๋‹ค.
ย 

3) ํŒŒ๋ ˆํ† ์™€ ๋กฑํ…Œ์ผ์˜ ๋ฒ•์น™

  • ํŒŒ๋ ˆํ† ์˜ ๋ฒ•์น™ ์ƒ์œ„ 20%๊ฐ€ ์ „์ฒด์˜ 80% ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•œ๋‹ค๋Š” ๋ฒ•์น™์œผ๋กœ, ์™„๋‘์ฝฉ ์˜ˆ์‹œ๋กœ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜์˜€๋‹ค. ์ƒ์œ„ 20%์˜ ์™„๋‘์ฝฉ์—์„œ ์ „์ฒด 80%์˜ ์™„๋‘์ฝฉ์ด ๋ฐœํ™”๋˜์—ˆ๋‹ค๋Š” ๋‚ด์šฉ์˜ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์ „๊ฐœ๋˜์œผ๋ฉฐ, ํ˜„์žฌ๊นŒ์ง€๋„ ๊ธฐ์—… ๊ฒฝ์˜์— ํ•„์š”ํ•œ ๋ฒ•์น™์ด๋‹ค. ๊ธฐ์—…์—์„œ๋Š” ์ฃผ๋กœ ๋งค์ถœ์˜ 80%๋Š” 20%์˜ ํ•ต์‹ฌ ๊ณ ๊ฐ ๋ฐ ์ฃผ๋ ฅ ์ƒํ’ˆ์—์„œ ๋‚˜์˜ค๋ฏ€๋กœ ๊ทธ ํ•ต์‹ฌ ๊ณ ๊ฐ 20%๋ฅผ ์ฐพ์•„๋‚ด ๊ทธ๋“ค์—๊ฒŒ ์—ญ๋Ÿ‰์„ ์ง‘์ค‘ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ™œ์šฉ๋œ๋‹ค.
  • ๋กฑํ…Œ์ผ์˜ ๋ฒ•์น™ ํ•˜์œ„ 80%์˜ ๊ฐ€์น˜๊ฐ€ ์ƒ์œ„ 20%์˜ ๊ฐ€์น˜๋ณด๋‹ค ํฌ๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์•ž์— ๋‚˜์˜จ ํŒŒ๋ ˆํ† ์˜ ๋ฒ•์น™๊ณผ ์ •๋ฐ˜๋Œ€์ธ ๋ฒ•์น™์ด๋‹ค. ์ฆ‰, ํŒŒ๋ ˆํ† ์˜ ๋ฒ•์น™์—์„œ ์†Œ์™ธ๋œ 80%์˜ ๊ณ ๊ฐ์—๊ฒŒ์„œ๋„ ์ƒ๋‹นํ•œ ์˜์—…๊ธฐํšŒ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ตœ๊ทผ ๋ฐœ๋‹ฌํ•œ ์ธํ„ฐ๋„ท์€ ํŒŒ๋ ˆํ† ์˜ ๋ฒ•์น™์ด ์ ์šฉ๋˜๋Š” ์˜คํ”„๋ผ์ธ๊ณผ ์ƒํ™ฉ์ด ๋‹ค๋ฅด๊ธฐ์— ์ด๋Ÿฌํ•œ ๋ฒ•์น™์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํŠนํžˆ ์•„๋งˆ์กด์ด๋‚˜ ๋„ทํ”Œ๋ฆญ์Šค ๋“ฑ์—์„œ ์ž˜ ํ™œ์šฉ๋œ ๋กฑํ…Œ์ผ์˜ ๋ฒ•์น™์€, ์˜คํ”„๋ผ์ธ๋ณด๋‹ค ์˜จ๋ผ์ธ์—์„œ ์ ์šฉํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ์•„๋งˆ์กด์ด ์˜คํ”„๋ผ์ธ ์„œ์ ์—์„œ ์ž˜ ํŒ”๋ฆฌ์ง€ ์•Š๋˜ ์ฑ…์„ ์˜จ๋ผ์ธ ์ถ”์ฒœ์„ ํ†ตํ•ด ๋งŽ์ด ํŒ๋งคํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์ผ๋ก€๋กœ ๋“ค ์ˆ˜ ์žˆ๋‹ค.
ย 

4) ์ถ”์ฒœ์‹œ์Šคํ…œ์˜ ์—ญ์‚ฌ

notion image
  • 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) ๊ทœ์น™ํ‰๊ฐ€์ง€ํ‘œ

  1. ์ง€์ง€๋„ support
    1. A ์ƒํ’ˆ์„ ๊ตฌ๋งคํ–ˆ์„ ๋•Œ, ์ด๊ฒƒ์ด B ์ƒํ’ˆ์˜ ๊ตฌ๋งค๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์กฐ๊ฑด์ ˆ A์— ๋”ฐ๋ผ B๊ฐ€ ์ด์–ด์ง€๋Š” ํ˜„์ƒ์„ ์˜๋ฏธํ•œ๋‹ค.
      For the rule A โ†’ B, support(A) = P(A)
  1. ์‹ ๋ขฐ๋„ confidence
    1. A ์ƒํ’ˆ์„ ๊ตฌ๋งคํ–ˆ์„ ๋•Œ, ์ด๊ฒƒ์ด B ์ƒํ’ˆ์˜ ๊ตฌ๋งค๋กœ ์ด์–ด์ง€๋Š” ํ™•๋ฅ  ์ง€ํ‘œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
โ†ช ๋ณดํ†ต ์œ„์˜ ๋‘ ๊ฐ€์ง€, ์ง€์ง€๋„์™€ ์‹ ๋ขฐ๋„๋ฅผ ๊ทœ์น™ํ‰๊ฐ€์ง€ํ‘œ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
  1. ํ–ฅ์ƒ๋„ lift
    1. ๋‘ ์‚ฌ๊ฑด์ด ๋™์‹œ์— ์–ผ๋งˆ๋‚˜ ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๊ด€ํ•œ ๋น„์œจ์— ๋”ฐ๋ฅธ ๋…๋ฆฝ์„ฑ์„ ์ธก์ •ํ•˜๋Š” ์ง€ํ‘œ์ด๋‹ค.
ย 

3) ๊ทœ์น™ ์ƒ์„ฑ

์ˆœ์—ด๊ณผ ์กฐํ•ฉ์œผ๋กœ ์ „์ฒด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทœ์น™ํ‰๊ฐ€์ง€ํ‘œ์ธ ์ง€์ง€๋„, ์‹ ๋ขฐ๋„, ํ–ฅ์ƒ๋„๊ฐ€ ๋†’์€ ๊ทœ์น™๋“ค์„ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.
ย 

4) ์—ฐ๊ด€๋ถ„์„์˜ ๋ฌธ์ œ์ 

ย 
notion image
์•„์ดํ…œ์˜ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ๊ทœ์น™์˜ ์ˆ˜๊ฐ€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค. ์•„์ดํ…œ์ด 100๊ฐœ๋งŒ ๋˜๋”๋ผ๋„ ๊ทœ์น™์˜ ์ˆ˜๊ฐ€ (1.26*10^30)๊ฐœ๋กœ, ์•ฝ 1๊ฒฝ ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์•„์ดํ…œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์€ ๋ถ„์•ผ์—์„œ๋Š” ํ™œ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
ย 

Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜

ย 
1) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…
  • item set์˜ ์ฆ๊ฐ€๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•
  • โ€œ๋นˆ๋ฒˆํ•˜์ง€ ์•Š์€ item set์€ ํ•˜์œ„ item set ๋˜ํ•œ ๋นˆ๋ฒˆํ•˜์ง€ ์•Š๋‹คโ€๋ผ๋Š” ์•„์ด๋””์–ด์—์„œ ์ถœ๋ฐœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
notion image
2) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์›๋ฆฌ
  1. k๊ฐœ์˜ item์„ ๊ฐ€์ง€๊ณ  ๋‹จ์ผํ•ญ๋ชฉ์ง‘๋‹จ ์ƒ์„ฑ(one-item frequent set)
  1. ๋‹จ์ผํ•ญ๋ชฉ์ง‘๋‹จ์—์„œ ์ตœ์†Œ ์ง€์ง€๋„(support) ์ด์ƒ์˜ ํ•ญ๋ชฉ๋งŒ ์„ ํƒ
  1. 2์—์„œ ์„ ํƒ๋œ ํ•ญ๋ชฉ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ 2๊ฐœํ•ญ๋ชฉ์ง‘๋‹จ ์ƒ์„ฑ
  1. 2๊ฐœํ•ญ๋ชฉ์ง‘๋‹จ์—์„œ ์ตœ์†Œ ์ง€์ง€๋„ ํ˜น์€ ์‹ ๋ขฐ๋„ ์ด์ƒ์˜ ํ•ญ๋ชฉ๋งŒ ์„ ํƒ
  1. ์œ„์˜ ๊ณผ์ •์„ k๊ฐœ์˜ k-item frequent set์„ ์ƒ์„ฑํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
ย 
3) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฐ์ดํ„ฐ
  • Implicit Feedback dataset ์‚ฌ์šฉ(ex. ์ƒํ’ˆ์„ ๊ตฌ๋งค ํ›„ ๊ณ ๊ฐ์ด ๋งŒ์กฑํ–ˆ๋Š”์ง€, ๋งŒ์กฑํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ”ผ๋“œ๋ฐฑ์ด ์—†๋Š” ๋ฐ์ดํ„ฐ)
notion image
โฌ‡๏ธ Sparse Matrix(ํฌ์†Œ ํ–‰๋ ฌ)๋กœ ๋ณ€ํ˜•
notion image
ย 
4) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ์ •
  1. 5๊ฐœ์˜ item์„ ์ด์šฉํ•ด ๋‹จ์ผํ•ญ๋ชฉ์ง‘๋‹จ ์ƒ์„ฑ(one-item frequent set) ์ƒ์„ฑ
โžœ ์šฐ์œ , ์–‘์ƒ์ถ”, ๊ธฐ์ €๊ท€, ๋งฅ์ฃผ, ์ฅฌ์Šค
  1. ๋‹จ์ผํ•ญ๋ชฉ์ง‘๋‹จ์—์„œ ์ตœ์†Œ ์ง€์ง€๋„(support) ์ด์ƒ์ธ ํ•ญ๋ชฉ๋งŒ ์„ ํƒ(ex. ์ตœ์†Œ์ง€์ง€๋„๋ฅผ 0.5๋กœ ๊ฐ€์ •)
โžœ P(์šฐ์œ ) = 0.5 / P(์–‘์ƒ์ถ”) = 0.75 / P(๊ธฐ์ €๊ท€) = 0.75 / P(์ฅฌ์Šค) = 0.25(0.5 ๋ฏธ๋งŒ์ด๋ผ ์‚ญ์ œ) / P(๋งฅ์ฃผ) = 0.75
  1. 2๋ฒˆ์—์„œ ์„ ํƒ๋œ ํ•ญ๋ชฉ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ 2๊ฐœํ•ญ๋ชฉ์ง‘๋‹จ ์ƒ์„ฑ
โžœ {์šฐ์œ , ์–‘์ƒ์ถ”}, {์šฐ์œ , ๊ธฐ์ €๊ท€}, {์šฐ์œ , ๋งฅ์ฃผ}, {์–‘์ƒ์ถ”, ๊ธฐ์ €๊ท€}, {์–‘์ƒ์ถ”, ๋งฅ์ฃผ}, {๊ธฐ์ €๊ท€, ๋งฅ์ฃผ}
  1. 2๊ฐœํ•ญ๋ชฉ์ง‘๋‹จ์—์„œ ์ตœ์†Œ ์ง€์ง€๋„ ์ด์ƒ์ธ ํ•ญ๋ชฉ๋งŒ์„ ์„ ํƒ(ex. ์ตœ์†Œ์ง€์ง€๋„๋ฅผ 0.5๋กœ ๊ฐ€์ •)
โžœ {์šฐ์œ , ์–‘์ƒ์ถ”} = 0.25 / {์šฐ์œ , ๊ธฐ์ €๊ท€} = 0.5 / {์šฐ์œ , ๋งฅ์ฃผ} = 0.25 / {์–‘์ƒ์ถ”, ๊ธฐ์ €๊ท€} = 0.5 / {์–‘์ƒ์ถ”, ๋งฅ์ฃผ} = 0.75 / {๊ธฐ์ €๊ท€, ๋งฅ์ฃผ} = 0.5
  1. 1~4๋ฒˆ์˜ ๊ณผ์ •์„ k๊ฐœ์˜ k-item frequent set์„ ์ƒ์„ฑํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
ย 
5) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ์ • ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„
notion image
  • ์œ„ ์˜ˆ์‹œ๋Š” ์ง€์ง€๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉฐ ์ตœ์†Œ์ง€์ง€๋„ 0.5 ์ด์ƒ์ธ item๋“ค๋งŒ ์„ ํƒ
  • Confidence์™€ Lift๋ฅผ ๊ธฐ์ค€์œผ๋กœ๋„ ๊ฐ€๋Šฅ
ย 
6) Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์žฅ์ ๊ณผ ๋‹จ์ 
์žฅ์ 
  • ์›๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์˜๋ฏธ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•จ
  • ์œ ์˜๋ฏธํ•œ ์—ฐ๊ด€์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ตฌ๋งค ํŒจํ„ด์„ ์ฐพ์•„์คŒ
๋‹จ์ 
  • ๋ฐ์ดํ„ฐ๊ฐ€ ํด ๊ฒฝ์šฐ ์†๋„๊ฐ€ ๋А๋ฆฌ๊ณ  ์—ฐ์‚ฐ๋Ÿ‰์ด ๋งŽ์Œ
  • ์‹ค์ œ ์ ์šฉ์„ ํ•ด๋ณด๋ฉด ๋งŽ์€ ์—ฐ๊ด€ ์ƒํ’ˆ๋“ค์ด ์ œ์‹œ๋จ
ย 

FP-Growth ์•Œ๊ณ ๋ฆฌ์ฆ˜

ย 
1) FP-Growth ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…
  • Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์†๋„ ์ธก๋ฉด์—์„œ์˜ ๋‹จ์ ์„ ๊ฐœ์„ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์„ฑ๋Šฅ์€ ๋น„์Šทํ•˜์ง€๋งŒ FP Tree ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•ด ์†๋„๊ฐ€ ์กฐ๊ธˆ ๋นจ๋ผ์กŒ์Œ
  • frequent itemsets๋ฅผ ์ฐพ๋Š”๊ฒƒ์—๋Š” ์ข‹์ง€๋งŒ ์•„์ดํ…œ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ์„ ์ฐพ๊ธฐ ์–ด๋ ค์›€
ย 
2) FP-Growth ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์›๋ฆฌ
  1. ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์—ฌ, ๊ฐ ์•„์ดํ…œ๋งˆ๋‹ค์˜ ์ง€์ง€๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ์†Œ ์ง€์ง€๋„ ์ด์ƒ์˜ ์•„์ดํ…œ๋งŒ ์„ ํƒ(์•ž์„  Apriori ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋™์ผํ•œ ๋‹จ๊ณ„)
  1. ๋ชจ๋“  ๊ฑฐ๋ž˜์—์„œ ๋นˆ๋„๊ฐ€ ๋†’์€ ์•„์ดํ…œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์„œ๋ฅผ ์ •๋ ฌ
  1. ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฑฐ๋ž˜๋ฅผ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ tree๋ฅผ ํ˜•์„ฑ
  1. ์ƒˆ๋กœ์šด ์•„์ดํ…œ์ด ๋‚˜์˜ฌ ๊ฒฝ์šฐ ๋ถ€๋ชจ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ์กด์˜ ๋…ธ๋“œ์—์„œ ํ™•์žฅ
  1. 1~4๋ฒˆ์„ ๋ชจ๋“  ๊ฑฐ๋ž˜์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๊ณ  FP Tree๋ฅผ ๋งŒ๋“ค๊ณ  ์ตœ์†Œ ์ง€์ง€๋„ ์ด์ƒ์˜ ํŒจํ„ด๋งŒ์„ ์ถ”์ถœ
ย 
3) FP-Growth ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ์ •
  1. ๋ชจ๋“  ๊ฑฐ๋ž˜๋ฅผ ํ™•์ธํ•˜์—ฌ, ๊ฐ ์•„์ดํ…œ๋งˆ๋‹ค์˜ ์ง€์ง€๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์ตœ์†Œ ์ง€์ง€๋„ ์ด์ƒ์˜ ์•„์ดํ…œ๋งŒ ์„ ํƒ(์œ„์™€ ๊ฐ™์ด ์ตœ์†Œ์ง€์ง€๋„๋Š” 0.5๋กœ ๊ฐ€์ •)
โžœ P(์šฐ์œ ) = 0.5 / P(์–‘์ƒ์ถ”) = 0.75 / P(๊ธฐ์ €๊ท€) = 0.75 / P(์ฅฌ์Šค) = 0.25 / P(๋งฅ์ฃผ) = 0.75
  1. ๋ชจ๋“  ๊ฑฐ๋ž˜์—์„œ ๋นˆ๋„๊ฐ€ ๋†’์€ ์•„์ดํ…œ ์ˆœ์„œ๋Œ€๋กœ ์ˆœ์„œ๋ฅผ ์ •๋ ฌ
notion image
โฌ‡๏ธ
notion image
  1. ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฑฐ๋ž˜๋ฅผ ์ž์‹ ๋…ธ๋“œ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ tree๋ฅผ ํ˜•์„ฑ
โžœ ๊ฑฐ๋ž˜๋ฒˆํ˜ธ 0๋ฒˆ์˜ tree
notion image
  1. ์ƒˆ๋กœ์šด ์•„์ดํ…œ์ด ๋‚˜์˜ฌ ๊ฒฝ์šฐ ๋ถ€๋ชจ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ์กด์˜ ๋…ธ๋“œ์—์„œ ํ™•์žฅ
โžœ ๊ฑฐ๋ž˜๋ฒˆํ˜ธ 1๋ฒˆ์˜ tree(์ƒˆ๋กœ์šด ์•„์ดํ…œ์˜ ๊ฒฝ์šฐ)
notion image
โžœ ๊ฑฐ๋ž˜๋ฒˆํ˜ธ 2๋ฒˆ์˜ tree(๊ธฐ์กด์˜ ๋…ธ๋“œ์—์„œ ํ™•์žฅ๋œ ๊ฒฝ์šฐ)
notion image
โžœ ๊ฑฐ๋ž˜๋ฒˆํ˜ธ 3๋ฒˆ์˜ tree(๊ธฐ์กด์˜ ๋…ธ๋“œ์—์„œ ํ™•์žฅ๋œ ๊ฒฝ์šฐ)
notion image
  1. ์ง€์ง€๋„๊ฐ€ ๋‚ฎ์€ ์ˆœ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์กฐ๊ฑด๋ถ€ ํŒจํ„ด ์ƒ์„ฑ
โžœ ์šฐ์œ ์˜ ๊ฒฝ์šฐ, {์–‘์ƒ์ถ”, ๊ธฐ์ €๊ท€, ๋งฅ์ฃผ} : 2 / {๊ธฐ์ €๊ท€} : 1
notion image
  1. ๋ชจ๋“  ์•„์ดํ…œ์— ๋Œ€ํ•ด ์œ„ ๊ณผ์ • ๋ฐ˜๋ณต
notion image
ย 
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๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•œ๋‹ค.
notion image
ย 
ย 
%%time apriori(df, min_support=0.5, use_colnames=True)
aprioriํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ง€๋„๊ฐ€ 0.5.๋ฅผ ๋„˜๋Š” ๋ฐ์ดํ„ฐ์…‹์„ ์ถœ๋ ฅํ•œ๋‹ค.
notion image
ย 
%%time fpgrowth.fpgrowth(df, min_support = 0.5, use_colnames=True)
fpgrowthํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ง€๋„๊ฐ€ 0.5๋ฅผ ๋„˜๋Š” ๋ฐ์ดํ„ฐ์…‹์„ ์ถœ๋ ฅํ•œ๋‹ค.
notion image
์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฐจ์ด๋กœ ๋ฐ์ดํ„ฐ์…‹์˜ ์ˆœ์„œ์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์ง€๋งŒ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์†Œ์š” ์‹œ๊ฐ„์„ ๋ณด๋ฉด apriori์˜ ๊ฒฝ์šฐ 7.69ms, fpgrowth์˜ ๊ฒฝ์šฐ 5.15ms๋กœ fpgrowth๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.