๐Ÿ•ฐ๏ธ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ถ„์„: Prophet ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ ๐Ÿš€

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ•ฐ๏ธ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ถ„์„: Prophet ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ ๐Ÿš€

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋งˆ๋ฒ•์‚ฌ๋“ค! ๐Ÿง™โ€โ™‚๏ธโœจ ์˜ค๋Š˜์€ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ์„ธ๊ณ„๋กœ ์—ฌ๋Ÿฌ๋ถ„์„ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ธ Prophet ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ๋งˆ์น˜ ํฌ๋ฆฌ์Šคํƒˆ ๋ณผ์„ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ๋ฏธ๋ž˜๋ฅผ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๊ฑฐ์ฃ ! ๐Ÿ”ฎ

์—ฌ๋Ÿฌ๋ถ„, ํ˜น์‹œ ํƒ€๋กœ์นด๋“œ๋กœ ๋ฏธ๋ž˜๋ฅผ ์ ์น˜๋Š” ๊ฒƒ์„ ๋ณธ ์  ์žˆ๋‚˜์š”? ์šฐ๋ฆฌ๊ฐ€ ํ•  ์‹œ๊ณ„์—ด ๋ถ„์„๋„ ๋น„์Šทํ•ด์š”. ๋‹ค๋งŒ, ์นด๋“œ ๋Œ€์‹  ๋ฐ์ดํ„ฐ๋ฅผ, ์ง๊ด€ ๋Œ€์‹  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด์ฃ . ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ •ํ™•ํ•˜๋‹ต๋‹ˆ๋‹ค! ๐Ÿ˜‰

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ž€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ๋งค์ผ์˜ ์ฃผ์‹ ๊ฐ€๊ฒฉ, ์›”๋ณ„ ํŒ๋งค๋Ÿ‰, ์—ฐ๋„๋ณ„ ์ธ๊ตฌ ์ฆ๊ฐ€์œจ ๋“ฑ์ด ์žˆ์ฃ . ์ด๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๋ฉด ๋ฏธ๋ž˜์˜ ํŠธ๋ Œ๋“œ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์–ด์š”.

๊ทธ๋Ÿฐ๋ฐ ๋ง์ด์ฃ , ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋ถ„์„์ด ์™œ ์ค‘์š”ํ• ๊นŒ์š”? ๐Ÿค” ์Œ... ์žฌ๋Šฅ๋„ท(https://www.jaenung.net)์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณผ๊นŒ์š”? ์žฌ๋Šฅ๋„ท์€ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•˜๋Š” ํ”Œ๋žซํผ์ธ๋ฐ, ๋งŒ์•ฝ ์žฌ๋Šฅ๋„ท์—์„œ ํŠน์ • ์žฌ๋Šฅ์˜ ์ˆ˜์š”๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ๊ฒƒ ๊ฐ™์€ ์žฌ๋Šฅ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ค€๋น„ํ•˜๊ณ , ๊ฐ์†Œํ•  ๊ฒƒ ๊ฐ™์€ ์žฌ๋Šฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋Œ€์ฑ…์„ ์„ธ์šธ ์ˆ˜ ์žˆ๊ฒ ์ฃ . ์ด์ฒ˜๋Ÿผ ์‹œ๊ณ„์—ด ๋ถ„์„์€ ๋น„์ฆˆ๋‹ˆ์Šค ์ „๋žต์„ ์„ธ์šฐ๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ Prophet์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ๊นŒ์š”? Prophet์€ Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๋ณต์žกํ•œ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ๋ณต์žกํ•œ ๋ ˆ์‹œํ”ผ๋ฅผ ๊ฐ„๋‹จํ•œ steps๋กœ ์ •๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”! ๐Ÿณ

๐Ÿ’ก Prophet์˜ ์ฃผ์š” ํŠน์ง•:

  • ๊ฐ•๋ ฅํ•œ ์˜ˆ์ธก ๋Šฅ๋ ฅ
  • ๊ณ„์ ˆ์„ฑ, ํœด์ผ ํšจ๊ณผ ๋“ฑ์„ ์ž๋™์œผ๋กœ ๊ณ ๋ ค
  • ์ด์ƒ์น˜์— ๊ฐ•ํ•จ
  • ๋ˆ„๋ฝ๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ์ง๊ด€์ ์ด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค

์ด์ œ ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์—ฌํ–‰์„ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ์š”? ์•ˆ์ „๋ฒจํŠธ๋ฅผ ๋งค์„ธ์š”. ์šฐ๋ฆฌ๋Š” Python์˜ ์„ธ๊ณ„๋กœ ๋น ์ ธ๋“ค ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿโœจ

๐Ÿ› ๏ธ Prophet ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ์„ค์ •

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ์ง€ํŒก์ด... ์•„๋‹ˆ, Prophet์„ ์„ค์น˜ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค! ๐Ÿง™โ€โ™‚๏ธ ๋จผ์ €, ์šฐ๋ฆฌ๋Š” Python ํ™˜๊ฒฝ์ด ์ค€๋น„๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ• ๊ฒŒ์š”. ์•„์ง Python์„ ์„ค์น˜ํ•˜์ง€ ์•Š์œผ์…จ๋‹ค๋ฉด, Python ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์‹ค ์ˆ˜ ์žˆ์–ด์š”.

Prophet์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•ด์š”. ๊ทธ์ € pip๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!

pip install prophet

๋งŒ์•ฝ ์„ค์น˜ ์ค‘์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ์ผ ์ˆ˜ ์žˆ์–ด์š”:

  • Python ๋ฒ„์ „์ด ๋„ˆ๋ฌด ๋‚ฎ๊ฑฐ๋‚˜ ๋†’์€ ๊ฒฝ์šฐ
  • ํ•„์š”ํ•œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
  • ์šด์˜ ์ฒด์ œ์™€์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ

์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์€ ๋Œ€๋ถ€๋ถ„ Python ํ™˜๊ฒฝ์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜, ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์น˜ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ๋ฅผ ํ•  ๋•Œ ์žฌ๋ฃŒ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ์ถ”๊ฐ€๋กœ ๊ตฌ๋งคํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๐Ÿ›’

Prophet์ด ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์น˜๋˜์—ˆ๋‹ค๋ฉด, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ๋„๊ตฌ๊ฐ€ ์ค€๋น„๋œ ๊ฑฐ์˜ˆ์š”! ๐ŸŽ‰

๐ŸŒŸ Pro Tip: ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„์š”. ๊ฐ€์ƒ ํ™˜๊ฒฝ์€ ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ๊ฐ ์š”๋ฆฌ๋ณ„๋กœ ๋‹ค๋ฅธ ์ฃผ๋ฐฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ํŒจํ‚ค์ง€ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ฃ !

๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”:


# ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ
python -m venv prophet_env

# ๊ฐ€์ƒ ํ™˜๊ฒฝ ํ™œ์„ฑํ™” (Windows)
prophet_env\Scripts\activate

# ๊ฐ€์ƒ ํ™˜๊ฒฝ ํ™œ์„ฑํ™” (macOS/Linux)
source prophet_env/bin/activate
  

๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ํ™œ์„ฑํ™”๋˜๋ฉด, ์ด์ œ ๊ทธ ํ™˜๊ฒฝ ์•ˆ์—์„œ Prophet์„ ์„ค์น˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ์ฃผ๋ฐฉ... ์•„๋‹ˆ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ค€๋น„๋˜์—ˆ์–ด์š”! ๐Ÿณ๐Ÿ‘จโ€๐Ÿณ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€์•„๋ณผ๊นŒ์š”?

Prophet ์„ค์น˜ ๊ณผ์ • Python ์„ค์น˜ โ†’ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ โ†’ Prophet ์„ค์น˜ โ†’ ๋งˆ๋ฒ• ์‹œ์ž‘! โœจ

์ด ๊ทธ๋ฆผ์ฒ˜๋Ÿผ, Prophet ์„ค์น˜๋Š” ๋งˆ๋ฒ•์˜ ์‹œ์ž‘์ ์ด์—์š”. ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฏธ๋ž˜๋ฅผ ๋“ค์—ฌ๋‹ค๋ณผ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ต๋‹ˆ๋‹ค! ๐Ÿ”ฎ

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  Prophet์„ ์‚ฌ์šฉํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ์žฌ๋Šฅ๋„ท์—์„œ ํŠน์ • ์žฌ๋Šฅ์˜ ์ˆ˜์š” ๋ณ€ํ™”๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”? ํฅ๋ฏธ์ง„์ง„ํ•œ ์—ฌ์ •์ด ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์–ด์š”! ๐Ÿš€

๐Ÿ“Š ๋ฐ์ดํ„ฐ ์ค€๋น„์™€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ๋„๊ตฌ์ธ Prophet์ด ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ, ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€์•„๋ณผ ์‹œ๊ฐ„์ด์—์š”! ๐ŸŽญ ์šฐ๋ฆฌ๋Š” ์žฌ๋Šฅ๋„ท์˜ ๊ฐ€์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฑฐ์˜ˆ์š”. ์ด ๋ฐ์ดํ„ฐ๋Š” "Python ํŠœํ„ฐ๋ง" ์„œ๋น„์Šค์˜ ์ผ์ผ ์š”์ฒญ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ž๋‹ˆ๋‹ค.

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์ด์—์š”. Prophet์€ ํŠน์ •ํ•œ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์š”๊ตฌํ•˜๋Š”๋ฐ, ๋ฐ”๋กœ 'ds'์™€ 'y' ๋‘ ๊ฐœ์˜ ์—ด์ด ํ•„์š”ํ•ด์š”.

  • 'ds': ๋‚ ์งœ/์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด
  • 'y': ์˜ˆ์ธกํ•˜๊ณ ์ž ํ•˜๋Š” ์ธก์ •๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๊ฐ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”? Python์˜ pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฑฐ์˜ˆ์š”.


import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# ์‹œ์ž‘ ๋‚ ์งœ ์„ค์ •
start_date = datetime(2022, 1, 1)

# 365์ผ ๋™์•ˆ์˜ ๋‚ ์งœ ์ƒ์„ฑ
dates = [start_date + timedelta(days=i) for i in range(365)]

# ๊ฐ€์ƒ์˜ 'Python ํŠœํ„ฐ๋ง' ์š”์ฒญ ์ˆ˜ ์ƒ์„ฑ (ํŠธ๋ Œ๋“œ, ๊ณ„์ ˆ์„ฑ, ๋…ธ์ด์ฆˆ ํฌํ•จ)
y = []
for i in range(365):
    trend = i * 0.1  # ์ฆ๊ฐ€ ํŠธ๋ Œ๋“œ
    seasonality = 15 * np.sin(2 * np.pi * i / 7)  # ์ฃผ๊ฐ„ ๊ณ„์ ˆ์„ฑ
    noise = np.random.normal(0, 5)  # ๋žœ๋ค ๋…ธ์ด์ฆˆ
    value = max(0, trend + seasonality + noise)  # ์Œ์ˆ˜ ๊ฐ’ ๋ฐฉ์ง€
    y.append(int(value))

# DataFrame ์ƒ์„ฑ
df = pd.DataFrame({'ds': dates, 'y': y})

# ๋ฐ์ดํ„ฐ ํ™•์ธ
print(df.head())
  

์šฐ์™€! ์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ด ๋ฐ์ดํ„ฐ๋Š” ์ •๋ง ํŠน๋ณ„ํ•ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฌ๋ฃŒ๋ฅผ ์กฐํ•ฉํ•ด ๋ง›์žˆ๋Š” ์š”๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๋„ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด ํ˜„์‹ค์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์š”. ๐Ÿฒ

๐Ÿง  ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…:

  • ํŠธ๋ Œ๋“œ(Trend): ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ ์  ์ฆ๊ฐ€ํ•˜๋Š” ์ถ”์„ธ๋ฅผ ๋‚˜ํƒ€๋‚ด์š”. ์ด๋Š” Python ํŠœํ„ฐ๋ง์˜ ์ธ๊ธฐ๊ฐ€ ์ ์  ๋†’์•„์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ด์š”.
  • ๊ณ„์ ˆ์„ฑ(Seasonality): ์ผ์ฃผ์ผ์„ ์ฃผ๊ธฐ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด์„ ๋‚˜ํƒ€๋‚ด์š”. ์ฃผ๋ง์—๋Š” ์š”์ฒญ์ด ์ค„๊ณ , ํ‰์ผ์—๋Š” ๋Š˜์–ด๋‚˜๋Š” ์‹์ด์ฃ .
  • ๋…ธ์ด์ฆˆ(Noise): ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋žœ๋คํ•œ ๋ณ€๋™์„ ์ถ”๊ฐ€ํ–ˆ์–ด์š”. ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ด๋Ÿฐ ๋ถˆ๊ทœ์น™์„ฑ์„ ํฌํ•จํ•˜๊ฑฐ๋“ ์š”.

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋งˆ์น˜ ์‹ค์ œ ์žฌ๋Šฅ๋„ท์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„์Šทํ•ด์š”. Python ํŠœํ„ฐ๋ง ์„œ๋น„์Šค์˜ ์ˆ˜์š”๊ฐ€ ์ „๋ฐ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์ฃผ๊ฐ„ ๋‹จ์œ„๋กœ ๋ณ€๋™์ด ์žˆ๊ณ , ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋ณ€ํ™”๋„ ์žˆ๋‹ค๋Š” ๊ฑธ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์–ด์š”.

์ด์ œ ์šฐ๋ฆฌ๋Š” Prophet์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ์–ด์š”. 'ds' ์—ด์—๋Š” ๋‚ ์งœ๊ฐ€, 'y' ์—ด์—๋Š” Python ํŠœํ„ฐ๋ง ์š”์ฒญ ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ์ฃ .

๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ ์š”์†Œ ์‹œ๊ฐํ™” ์‹œ๊ฐ„ ์š”์ฒญ ์ˆ˜ ํŠธ๋ Œ๋“œ ๊ณ„์ ˆ์„ฑ ๋…ธ์ด์ฆˆ

์ด ๊ทธ๋ž˜ํ”„๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์–ด์š”. ๋นจ๊ฐ„ ์„ ์€ ์ฆ๊ฐ€ํ•˜๋Š” ํŠธ๋ Œ๋“œ๋ฅผ, ํŒŒ๋ž€ ๊ณก์„ ์€ ๊ณ„์ ˆ์„ฑ์„, ์ดˆ๋ก ์ ๋“ค์€ ๋…ธ์ด์ฆˆ๋ฅผ ๋‚˜ํƒ€๋‚ด์š”. ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์ด ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋ณตํ•ฉ์ ์œผ๋กœ ์ž‘์šฉํ•œ ๊ฒฐ๊ณผ๋ž๋‹ˆ๋‹ค.

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ์žฌ๋ฃŒ... ์•„๋‹ˆ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜์—ˆ์–ด์š”! ๐Ÿฅ˜ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  Prophet ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ , ๋ฏธ๋ž˜์˜ Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๋ฅผ ์˜ˆ์ธกํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ํฅ๋ฏธ์ง„์ง„ํ•˜์ง€ ์•Š๋‚˜์š”? ๐Ÿš€

์žฌ๋Šฅ๋„ท์—์„œ ์ด๋Ÿฐ ๋ถ„์„์„ ํ•œ๋‹ค๋ฉด, ์–ด๋–ค ์žฌ๋Šฅ์ด ์•ž์œผ๋กœ ๋” ์ธ๊ธฐ๋ฅผ ์–ป์„์ง€, ์–ด๋–ค ์‹œ๊ธฐ์— ํŠน์ • ์žฌ๋Šฅ์˜ ์ˆ˜์š”๊ฐ€ ๋Š˜์–ด๋‚ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ . ์ด๋Š” ํ”Œ๋žซํผ ์šด์˜๊ณผ ๋งˆ์ผ€ํŒ… ์ „๋žต ์ˆ˜๋ฆฝ์— ํฐ ๋„์›€์ด ๋  ๊ฑฐ์˜ˆ์š”.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” Prophet ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ  ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณผ ๊ฑฐ์˜ˆ์š”. ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์˜ ๋งˆ๋ฒ•์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค! ๐Ÿง™โ€โ™‚๏ธโœจ

๐Ÿ”ฎ Prophet ๋ชจ๋ธ ํ•™์Šต ๋ฐ ์˜ˆ์ธก

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ๋งˆ๋ฒ• ์ง€ํŒก์ด์ธ Prophet์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ณผ ์‹œ๊ฐ„์ด์—์š”! ๐Ÿง™โ€โ™‚๏ธ ์šฐ๋ฆฌ๋Š” ์•ž์„œ ์ค€๋น„ํ•œ "Python ํŠœํ„ฐ๋ง" ์„œ๋น„์Šค์˜ ์ผ์ผ ์š”์ฒญ ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฑฐ์˜ˆ์š”. ์ด ๋ฐ์ดํ„ฐ๋กœ Prophet ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ , ๋ฏธ๋ž˜์˜ ์ˆ˜์š”๋ฅผ ์˜ˆ์ธกํ•ด๋ณผ ๊ฑฐ๋ž๋‹ˆ๋‹ค.

Prophet ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์€ ๋†€๋ž๋„๋ก ๊ฐ„๋‹จํ•ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ ๋ ˆ์‹œํ”ผ๋ฅผ ๋”ฐ๋ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ๋‹ต๋‹ˆ๋‹ค! ๐Ÿณ

๋จผ์ €, ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ import ํ•ด๋ณผ๊นŒ์š”?


from prophet import Prophet
import matplotlib.pyplot as plt
plt.style.use('seaborn')
  

์ด์ œ Prophet ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ณ  ํ•™์Šต์‹œ์ผœ ๋ณผ๊ฒŒ์š”:


# Prophet ๋ชจ๋ธ ์ƒ์„ฑ
model = Prophet()

# ๋ชจ๋ธ ํ•™์Šต
model.fit(df)
  

์™€์šฐ! ๐ŸŽ‰ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ชจ๋ธ์ด ํ•™์Šต๋˜์—ˆ์–ด์š”. Prophet์ด ์ž๋™์œผ๋กœ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ์˜ ํŠธ๋ Œ๋“œ, ๊ณ„์ ˆ์„ฑ, ํœด์ผ ํšจ๊ณผ ๋“ฑ์„ ํŒŒ์•…ํ–ˆ๋‹ต๋‹ˆ๋‹ค. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ์žฌ๋ฃŒ์˜ ๋ง›์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด์—์š”!

์ด์ œ ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ธกํ•ด๋ณผ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ํ–ฅํ›„ 30์ผ ๋™์•ˆ์˜ Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๋ฅผ ์˜ˆ์ธกํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”.


# ๋ฏธ๋ž˜ ๋‚ ์งœ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ƒ์„ฑ
future_dates = model.make_future_dataframe(periods=30)

# ์˜ˆ์ธก ์ˆ˜ํ–‰
forecast = model.predict(future_dates)

# ์˜ˆ์ธก ๊ฒฐ๊ณผ ํ™•์ธ
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
  

์—ฌ๊ธฐ์„œ 'yhat'์€ ์˜ˆ์ธก๊ฐ’์„, 'yhat_lower'์™€ 'yhat_upper'๋Š” ์˜ˆ์ธก์˜ ๋ถˆํ™•์‹ค์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜ํ•œ๊ฐ’๊ณผ ์ƒํ•œ๊ฐ’์„ ์˜๋ฏธํ•ด์š”.

๐Ÿ’ก Prophet์˜ ์žฅ์ :

  • ์ž๋™์œผ๋กœ ๊ฒฐ์ธก์น˜๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค˜์š”.
  • ์ด์ƒ์น˜(outlier)์— ๊ฐ•ํ•ด์š”.
  • ๋ณต์žกํ•œ ๊ณ„์ ˆ์„ฑ์„ ์ž๋™์œผ๋กœ ์žก์•„๋‚ด์š”.
  • ํœด์ผ ํšจ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด์ œ ์šฐ๋ฆฌ์˜ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•ด๋ณผ๊นŒ์š”? Prophet์€ ์ด๋ฅผ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ด์š”.


# ์˜ˆ์ธก ๊ฒฐ๊ณผ ์‹œ๊ฐํ™”
fig1 = model.plot(forecast)
plt.title('Python ํŠœํ„ฐ๋ง ์ˆ˜์š” ์˜ˆ์ธก')
plt.xlabel('๋‚ ์งœ')
plt.ylabel('์ผ์ผ ์š”์ฒญ ์ˆ˜')
plt.show()

# ๊ตฌ์„ฑ ์š”์†Œ ๋ถ„ํ•ด ์‹œ๊ฐํ™”
fig2 = model.plot_components(forecast)
plt.show()
  

์™€! ์ •๋ง ๋ฉ‹์ง„ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‚˜์™”์–ด์š”! ๐ŸŒˆ ์ฒซ ๋ฒˆ์งธ ๊ทธ๋ž˜ํ”„๋Š” ์ „์ฒด์ ์ธ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ๋‘ ๋ฒˆ์งธ ๊ทธ๋ž˜ํ”„๋Š” ํŠธ๋ Œ๋“œ, ์ฃผ๊ฐ„ ๊ณ„์ ˆ์„ฑ, ์—ฐ๊ฐ„ ๊ณ„์ ˆ์„ฑ ๋“ฑ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ถ„ํ•ดํ•ด์„œ ๋ณด์—ฌ์ค˜์š”.

Prophet ์˜ˆ์ธก ๊ฒฐ๊ณผ ์‹œ๊ฐํ™” ์‹œ๊ฐ„ ์š”์ฒญ ์ˆ˜ ์˜ˆ์ธก๊ฐ’ ์‹ ๋ขฐ ๊ตฌ๊ฐ„ ํ˜„์žฌ

์ด ๊ทธ๋ž˜ํ”„๋Š” Prophet์˜ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ๊ฒƒ์ด์—์š”. ํŒŒ๋ž€ ์„ ์€ ์˜ˆ์ธก๊ฐ’์„, ๋นจ๊ฐ„ ์ ์„ ์€ ์‹ ๋ขฐ ๊ตฌ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด์š”. ์ดˆ๋ก ์ ์„ ์€ ํ˜„์žฌ ์‹œ์ ์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ• ์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!

์ด๋Ÿฐ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋Š” ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ ์ •๋ง ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ธก๋œ๋‹ค๋ฉด, ๊ด€๋ จ ํŠœํ„ฐ๋“ค์—๊ฒŒ ๋ฏธ๋ฆฌ ์•Œ๋ ค ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋งž์ถคํ˜• ์ถ”์ฒœ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ .

ํ•˜์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”, ์˜ˆ์ธก์€ ํ•ญ์ƒ ๋ถˆํ™•์‹ค์„ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด์š”. ๋งˆ์น˜ ๋‚ ์”จ ์˜ˆ๋ณด์ฒ˜๋Ÿผ ๋ง์ด์ฃ ! ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ํ•ญ์ƒ ์˜ˆ์ธก ๊ฒฐ๊ณผ๋ฅผ ์ฃผ์˜ ๊นŠ๊ฒŒ ํ•ด์„ํ•˜๊ณ , ํ•„์š”ํ•˜๋‹ค๋ฉด ๋‹ค๋ฅธ ์ •๋ณด๋“ค๊ณผ ํ•จ๊ป˜ ์ข…ํ•ฉ์ ์œผ๋กœ ํŒ๋‹จํ•ด์•ผ ํ•ด์š”.

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” ์šฐ๋ฆฌ์˜ ๋ชจ๋ธ์„ ๋”์šฑ ์ •๊ตํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. Prophet์˜ ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์กฐ์ •ํ•˜๊ณ , ํœด์ผ ํšจ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ ๋” ๊นŠ์ด ์žˆ๋Š” ๋ถ„์„์„ ํ•ด๋ณผ ๊ฑฐ๋ž๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ ๊ณผํ•™ ์—ฌํ–‰์€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค! ๐Ÿš€โœจ

๐Ÿ› ๏ธ Prophet ๋ชจ๋ธ ํŠœ๋‹ ๋ฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ Prophet ๋ชจ๋ธ์„ ๋”์šฑ ์ •๊ตํ•˜๊ฒŒ ๋‹ค๋“ฌ์–ด๋ณผ ์‹œ๊ฐ„์ด์—์š”! ๐Ÿ”ง ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ์š”๋ฆฌ์˜ ๋ง›์„ ๋”์šฑ ํ’๋ถ€ํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์–‘๋…์„ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๋„ ๋ชจ๋ธ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”.

Prophet์€ ๋‹ค์–‘ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋ชจ๋ธ์„ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ๋” ์ •ํ™•ํ•˜๊ณ  ์œ ์šฉํ•œ ์˜ˆ์ธก์„ ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!

1. ์„ฑ์žฅ๋ฅ  ์กฐ์ •

Prophet์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ์ง€์Šคํ‹ฑ ์„ฑ์žฅ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์š”. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ Python ํŠœํ„ฐ๋ง ์„œ๋น„์Šค์˜ ์ตœ๋Œ€ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์š”์ฒญ ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด๋ฅผ ๋ชจ๋ธ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.


# ์ตœ๋Œ€ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ์š”์ฒญ ์ˆ˜๋ฅผ 500์œผ๋กœ ๊ฐ€์ •
df['cap'] = 500
model = Prophet(growth='logistic')
model.fit(df)

# ๋ฏธ๋ž˜ ๋ฐ์ดํ„ฐ์—๋„ cap ๊ฐ’ ์„ค์ •
future_dates = model.make_future_dataframe(periods=30)
future_dates['cap'] = 500

forecast = model.predict(future_dates)
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ˆ์ธก์ด ํ˜„์‹ค์ ์ธ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด์„œ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ๋ƒ„๋น„์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์š”๋ฆฌ์˜ ์–‘์„ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ฃ ! ๐Ÿฒ

2. ํœด์ผ ํšจ๊ณผ ์ถ”๊ฐ€

Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๋Š” ํœด์ผ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋ณ€ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฉํ•™ ๊ธฐ๊ฐ„์—๋Š” ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ . Prophet์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ํœด์ผ ํšจ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ๋ชจ๋ธ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์š”.


from prophet.holidays import USFederalHolidays

# ํœด์ผ ํšจ๊ณผ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋ธ ์ƒ์„ฑ
model = Prophet(holidays=USFederalHolidays())
model.fit(df)

# ์˜ˆ์ธก ์ˆ˜ํ–‰
forecast = model.predict(future_dates)

# ํœด์ผ ํšจ๊ณผ ์‹œ๊ฐํ™”
fig = model.plot_components(forecast)
plt.show()
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฏธ๊ตญ์˜ ์—ฐ๋ฐฉ ๊ณตํœด์ผ์ด Python ํŠœํ„ฐ๋ง ์ˆ˜์š”์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ชจ๋ธ์ด ์ž๋™์œผ๋กœ ํ•™์Šตํ•ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ํŠน๋ณ„ํ•œ ๋‚ ์—๋Š” ํŠน๋ณ„ํ•œ ์žฌ๋ฃŒ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ๐ŸŽ‰

3. ์ถ”๊ฐ€ ๊ณ„์ ˆ์„ฑ ๊ณ ๋ ค

๊ธฐ๋ณธ์ ์œผ๋กœ Prophet์€ ์—ฐ๊ฐ„, ์ฃผ๊ฐ„ ๊ณ„์ ˆ์„ฑ์„ ๊ณ ๋ คํ•˜์ง€๋งŒ, ํ•„์š”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฃผ๊ธฐ์˜ ๊ณ„์ ˆ์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์š”.


# ์›”๊ฐ„ ๊ณ„์ ˆ์„ฑ ์ถ”๊ฐ€
model = Prophet(weekly_seasonality=True, yearly_seasonality=True)
model.add_seasonality(name='monthly', period=30.5, fourier_order=5)
model.fit(df)

forecast = model.predict(future_dates)
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›”๋ณ„๋กœ ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด๋„ ๋ชจ๋ธ์ด ์žก์•„๋‚ผ ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งค์›” ์ดˆ์— Python ํŠœํ„ฐ๋ง ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค๋ฉด ์ด๋Ÿฐ ํŒจํ„ด์„ ๋ชจ๋ธ์ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

4. ๋ณ€ํ™”์ (Changepoints) ์กฐ์ •

Prophet์€ ์ž๋™์œผ๋กœ ํŠธ๋ Œ๋“œ์˜ ๋ณ€ํ™”์ ์„ ์ฐพ์•„๋‚ด์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์ด๋ฅผ ์กฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.


# ๋ณ€ํ™”์ ์˜ ์œ ์—ฐ์„ฑ ์กฐ์ •
model = Prophet(changepoint_prior_scale=0.05)
model.fit(df)

# ํŠน์ • ๋‚ ์งœ๋ฅผ ๋ณ€ํ™”์ ์œผ๋กœ ์ถ”๊ฐ€
model = Prophet(changepoints=['2022-03-01', '2022-06-01', '2022-09-01'])
model.fit(df)
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋ธ์ด ํŠธ๋ Œ๋“œ์˜ ๋ณ€ํ™”๋ฅผ ๋” ์ •ํ™•ํ•˜๊ฒŒ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ๋ถˆ์˜ ์„ธ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ๐Ÿ”ฅ

๐ŸŒŸ Pro Tip: ๋ชจ๋ธ ํŠœ๋‹์€ ์‹คํ—˜๊ณผ ๋ฐ˜๋ณต์ด ํ•„์š”ํ•œ ๊ณผ์ •์ด์—์š”. ๋‹ค์–‘ํ•œ ์„ค์ •์„ ์‹œ๋„ํ•ด๋ณด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ์ตœ์ ์˜ ๋ชจ๋ธ์„ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด์š”!

5. ๊ต์ฐจ ๊ฒ€์ฆ

๋งˆ์ง€๋ง‰์œผ๋กœ, ์šฐ๋ฆฌ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๊ฐ๊ด€์ ์œผ๋กœ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๊ต์ฐจ ๊ฒ€์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.


from prophet.diagnostics import cross_validation, performance_metrics

# ๊ต์ฐจ ๊ฒ€์ฆ ์ˆ˜ํ–‰
df_cv = cross_validation(model, initial='300 days', period='30 days', horizon='30 days')

# ์„ฑ๋Šฅ ์ง€ํ‘œ ๊ณ„์‚ฐ
df_p = performance_metrics(df_cv)
print(df_p)
  

์ด๋ฅผ ํ†ตํ•ด ์šฐ๋ฆฌ ๋ชจ๋ธ์˜ ์˜ˆ์ธก ์ •ํ™•๋„๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ์š”๋ฆฌ ๋Œ€ํšŒ์—์„œ ์‹ฌ์‚ฌ์œ„์›๋“ค์ด ์š”๋ฆฌ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ ! ๐Ÿ‘จโ€๐Ÿณ๐Ÿ‘ฉโ€๐Ÿณ

Prophet ๋ชจ๋ธ ํŠœ๋‹ ๊ณผ์ • ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ์ • ํœด์ผ ํšจ๊ณผ ์ถ”๊ฐ€ ๊ณ„์ ˆ์„ฑ ๊ณ ๋ ค ๊ต์ฐจ ๊ฒ€์ฆ

์ด ๊ทธ๋ฆผ์€ Prophet ๋ชจ๋ธ ํŠœ๋‹์˜ ์ฃผ์š” ๋‹จ๊ณ„๋ฅผ ๋ณด์—ฌ์ค˜์š”. ๊ฐ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์šฐ๋ฆฌ์˜ ๋ชจ๋ธ์€ ์ ์  ๋” ์ •๊ตํ•ด์ง€๊ณ  ์ •ํ™•ํ•ด์ง„๋‹ต๋‹ˆ๋‹ค!

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” Prophet์˜ ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์„ ์‚ดํŽด๋ดค์–ด์š”. ์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•˜๋ฉด, ์žฌ๋Šฅ๋„ท์˜ Python ํŠœํ„ฐ๋ง ์ˆ˜์š” ์˜ˆ์ธก์„ ๋”์šฑ ์ •ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐฉํ•™ ๊ธฐ๊ฐ„์˜ ์ˆ˜์š” ์ฆ๊ฐ€, ์›”๋ณ„ ํŠธ๋ Œ๋“œ ๋ณ€ํ™”, ํŠน์ • ์ด๋ฒคํŠธ๋กœ ์ธํ•œ ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™” ๋“ฑ์„ ๋ชจ๋ธ์— ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

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

Prophet์„ ๋งˆ์Šคํ„ฐํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์น˜ ์š”๋ฆฌ์˜ ๋Œ€๊ฐ€๊ฐ€ ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ๊ธฐ๋ณธ ๋ ˆ์‹œํ”ผ๋ฅผ ์ตํžˆ๊ณ , ๋‹ค์–‘ํ•œ ์žฌ๋ฃŒ์™€ ๊ธฐ์ˆ ์„ ์ตํžˆ๋ฉด์„œ ์ ์  ๋” ๋ง›์žˆ๋Š” ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, Prophet์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ตํžˆ๊ณ  ํ™œ์šฉํ•˜๋ฉด์„œ ์ ์  ๋” ์ •ํ™•ํ•˜๊ณ  ์œ ์šฉํ•œ ์˜ˆ์ธก์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฑฐ์˜ˆ์š”. ๐Ÿฝ๏ธ๐Ÿ‘จโ€๐Ÿณ

์ž, ์ด์ œ ์šฐ๋ฆฌ๋Š” Prophet์˜ ์ง„์ •ํ•œ ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ๋˜์—ˆ์–ด์š”! ๐Ÿง™โ€โ™‚๏ธโœจ ์ด ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ์žฌ๋Šฅ๋„ท์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ฏธ๋ž˜๋ฅผ ์˜ˆ์ธกํ•ด๋ณด์„ธ์š”. ๋ฐ์ดํ„ฐ์˜ ๋ฐ”๋‹ค์—์„œ ์ˆจ๊ฒจ์ง„ ๋ณด๋ฌผ์„ ์ฐพ๋Š” ์—ฌ์ •์„ ์ฆ๊ธฐ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค! ๐Ÿš€๐ŸŒŠ