์ฃผ์š” ์ปจํ…์ธ ๋กœ ์ด๋™

๋Œ€๊ทœ๋ชจ์˜ ์„ธ๋ถ„ํ™”๋œ ์‹œ๊ณ„์—ด ์˜ˆ์ธก์„ ์œ„ํ•œ Facebook Prophet๊ณผ Apache Spark: Spark 3 ์—…๋ฐ์ดํŠธ

๋นŒ๋ž„ ์˜ค๋ฒ ์ด๋‹ท
Bryan Smith
๋ธŒ๋ ˆ๋„ˆ ํ•˜์ธ์ธ 
Kelly O'Malley
์ด ํฌ์ŠคํŠธ ๊ณต์œ ํ•˜๊ธฐ

Translated by HaUn Kim - Original Blog Post

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

์ด ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰๋œ ์˜ˆ์ธก ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spark 2.0์— ๋Œ€ํ•œ ์ด ์†”๋ฃจ์…˜์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ์—ฌ๊ธฐ์—์„œ ์›๋ณธ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ์ฝ์–ด๋ณด์„ธ์š”.

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ์‹œ๊ณ„์—ด ์˜ˆ์ธก์˜ ์ค‘์š”์„ฑ์„ ๋…ผ์˜ํ•˜๊ณ , ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ํ›„, ๊ฐ„๋‹จํ•œ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ Facebook Prophet์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ชจ๋ธ ๊ตฌ์ถ•์— ์ต์ˆ™ํ•ด์ง€๋ฉด, Facebook Prophet๊ณผ Spark์˜ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ชจ๋ธ์„ ํ›ˆ๋ จ์‹œํ‚ค๊ณ , ์ด์ „์—๋Š” ๊ฑฐ์˜ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์—†์—ˆ๋˜ ์„ธ๋ฐ€ํ•œ ์ˆ˜์ค€์—์„œ ๊ฐ๊ฐ์˜ ์ œํ’ˆ-๋งค์žฅ ์กฐํ•ฉ์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์˜ˆ์ธก์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํ•˜๊ณ  ์‹œ๊ธฐ ์ ์ ˆํ•œ ์˜ˆ์ธก์€ ๊ทธ ์–ด๋Š ๋•Œ๋ณด๋‹ค ์ค‘์š”ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

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

New expectations require more precise time series models and forecasting methods

์˜ค๋žซ๋™์•ˆ ERP(Enterprise Resource Planning, ์ „์‚ฌ์  ์ž์› ๊ด€๋ฆฌ) ์‹œ์Šคํ…œ๊ณผ ํƒ€์‚ฌ ์†”๋ฃจ์…˜์€ ๊ธฐ๋ณธ์ ์ธ ์‹œ๊ณ„์—ด ๋ชจ๋ธ์— ๊ธฐ๋ฐ˜ํ•œ ์ˆ˜์š” ์˜ˆ์ธก ๊ธฐ๋Šฅ์„ ์†Œ๋งค์—…์ฒด์— ์ œ๊ณตํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์ˆ ์˜ ๋ฐœ์ „๊ณผ ์—…๊ณ„์˜ ์••๋ฐ•์ด ์ปค์ง์— ๋”ฐ๋ผ ๋งŽ์€ ๋ฆฌํ…Œ์ผ๋Ÿฌ๋“ค์ด ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ์„ ํ˜• ๋ชจ๋ธ๊ณผ ์ „ํ†ต์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„˜์–ด์„œ๋Š” ์ƒˆ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋Š” Facebook์˜ Prophet๊ณผ ๊ฐ™์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์ด ๋“ฑ์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ธฐ์—…๋“ค์€ ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์„ ์‹œ๊ณ„์—ด ์˜ˆ์ธก์— ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์š” ๊ณ„์ ˆ์„ฑ ์‹œ๊ฐํ™”

๊ฐœ๋ณ„ ๋งค์žฅ ๋ฐ ์ œํ’ˆ์— ๋Œ€ํ•œ ์„ธ๋ถ„ํ™”๋œ ์ˆ˜์š” ์˜ˆ์ธก์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ Facebook Prophet์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด Kaggle์—์„œ ๊ณต๊ฐœ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ํ™œ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” 10๊ฐœ ๋งค์žฅ์˜ 50๊ฐœ ๊ฐœ๋ณ„ ํ’ˆ๋ชฉ์— ๋Œ€ํ•œ 5๋…„๊ฐ„์˜ ์ผ์ผ ํŒ๋งค ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Sample Kaggle retail data used to demonstrate the combined fine-grained demand forecasting capabilities of Facebook Prophet and Apache Spark

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

ย 

ํ‰์ผ์„ ๊ธฐ์ค€์œผ๋กœ ํ•  ๋•Œ, ์ผ์š”์ผ(์ฃผ์ค‘ 0)์— ๋งค์ถœ์ด ์ •์ ์„ ์ฐ๊ณ  ์›”์š”์ผ(์ฃผ์ค‘ 1)์— ๊ธ‰๊ฒฉํ•˜๊ฒŒ ํ•˜๋ฝํ•œ ํ›„, ๋‚˜๋จธ์ง€ ์ฃผ ๋™์•ˆ ๊พธ์ค€ํžˆ ํšŒ๋ณตํ•˜๋Š” ๊ฒฝํ–ฅ์„ ๋ณด์ž…๋‹ˆ๋‹ค.

Demonstrating the difficulty of accounting for seasonal patterns with traditional time series forecasting methods

Facebook Prophet์—์„œ ๊ฐ„๋‹จํ•œ ์‹œ๊ณ„์—ด ์˜ˆ์ธก ๋ชจ๋ธ ์‹œ์ž‘ํ•˜๊ธฐ

์œ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ฐ์ดํ„ฐ๋Š” ์—ฐ๊ฐ„ ๋ฐ ์ฃผ๊ฐ„์˜ ๊ณ„์ ˆ๋ณ„ ํŒจํ„ด๊ณผ ํ•จ๊ป˜ ๋งค์ถœ์˜ ๋šœ๋ ทํ•œ ์ „๋…„ ๋Œ€๋น„ ์ƒ์Šน ์ถ”์„ธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ์˜ ์ค‘์ฒฉ๋œ ํŒจํ„ด์€ ๋ฐ”๋กœ Facebook Prophet์ด ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Facebook Prophet์€ scikit-learn API๋ฅผ ๋”ฐ๋ฅด๋ฏ€๋กœ, scikit-learn ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๋ถ„์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ตํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์— ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ์—ด์ด ๋‚ ์งœ, ๋‘ ๋ฒˆ์งธ ์—ด์ด ์˜ˆ์ธกํ•  ๊ฐ’(์ด ๊ฒฝ์šฐ ๋งค์ถœ)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋‘ ์—ด๋กœ ์ด๋ฃจ์–ด์ง„ Pandas ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋˜๋ฉด, ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค:

import pandas as pd
from fbprophet import Prophet
 
# instantiate the model and set parameters
model = Prophet(
    interval_width=0.95,
    growth='linear',
    daily_seasonality=False,
    weekly_seasonality=True,
    yearly_seasonality=True,
    seasonality_mode='multiplicative'
)
 
# fit the model to historical data
model.fit(history_pd)

์ด์ œ ๋ฐ์ดํ„ฐ์— ๋ชจ๋ธ์„ ์ ์šฉํ–ˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 90์ผ ์˜ˆ์ธก์„ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

# define a dataset including both historical dates & 90-days beyond the last available date, using Prophet's built-in make_future_dataframe method
future_pd = model.make_future_dataframe(
    periods=90, 
    freq='d', 
    include_history=True
)
 
# predict over the dataset
forecast_pd = model.predict(future_pd)

๋๋‚ฌ์Šต๋‹ˆ๋‹ค! ์ด์ œ Facebook Prophet ๋ชจ๋ธ์— ๋‚ด์žฅ๋œ .plot ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ์™€ ์˜ˆ์ธก ๋ฐ์ดํ„ฐ์˜ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ณ , ๋ฏธ๋ž˜์— ๋Œ€ํ•œ ์˜ˆ์ธก๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰๋œ ์ฃผ๊ฐ„ ๋ฐ ๊ณ„์ ˆ๋ณ„ ์ˆ˜์š” ํŒจํ„ด์ด ์˜ˆ์ธก ๊ฒฐ๊ณผ์— ๋ฐ˜์˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

predict_fig = model.plot(forecast_pd, xlabel='date', ylabel='sales')
display(fig)

Comparing the actual demand to the time-series forecast generated by Facebook Prophet leveraging Apache Spark

์ด ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•์€ ๋‹ค์†Œ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Bartosz Mikulski๊ฐ€ ์ด์— ๋Œ€ํ•ด ์ƒ์„ธํ•œ ๋ถ„์„์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ํ™•์ธํ•ด๋ณด์‹œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ๊ฒ€์€์ƒ‰ ์ ์€ ์‹ค์ œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ณ , ์ง„ํ•œ ํŒŒ๋ž€์ƒ‰ ์„ ์€ ์˜ˆ์ธก ๊ฐ’์„, ์—ฐํ•œ ํŒŒ๋ž€์ƒ‰ ๋ ๋Š” 95% ๋ถˆํ™•์‹ค์„ฑ ๊ตฌ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ˆ˜๋ฐฑ ๊ฐœ์˜ ์‹œ๊ณ„์—ด ์˜ˆ์ธก ๋ชจ๋ธ์„ Facebook Prophet ๋ฐ Spark์™€ ๋ณ‘ํ–‰ํ•˜์—ฌ ํ•™์Šตํ•˜๊ธฐ

์ด์ œ ๋‹จ์ผ ๋ชจ๋ธ ๊ตฌ์ถ• ๋ฐฉ๋ฒ•์„ ์‹œ์—ฐํ–ˆ์œผ๋‹ˆ, Spark์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด ์ž‘์—…์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋Œ€ํ•œ ๋‹จ์ผ ์˜ˆ์ธก์ด ์•„๋‹ˆ๋ผ, ๊ฐ ์ œํ’ˆ-๋งค์žฅ ์กฐํ•ฉ์— ๋Œ€ํ•ด ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋ชจ๋ธ๊ณผ ์˜ˆ์ธก์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

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

Spark ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•

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

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

Spark์—์„œ ๋ถ„์‚ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ DataFrame์ž…๋‹ˆ๋‹ค. Spark ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋ฉด, ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์˜ ์ž‘์—…์ž๋“ค์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ„์‚ฐ๋˜์–ด, ์ด๋“ค์ด ๋ฐ์ดํ„ฐ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ์œผ๋กœ์จ, ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ „์ฒด ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋ฉ๋‹ˆ๋‹ค.

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

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

store_item_history
    .groupBy('store', 'item')
    . . .

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

Pandas์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜๊ธฐ

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋งค์žฅ๊ณผ ์ œํ’ˆ๋ณ„๋กœ ์ ์ ˆํžˆ ๊ทธ๋ฃนํ™”ํ•œ ๋’ค, ์ด์ œ ๊ฐ ๊ทธ๋ฃน๋งˆ๋‹ค ๊ฐœ๋ณ„ ๋ชจ๋ธ์„ ํ•™์Šต์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ๊ฐ ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน์— ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Pandas ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์•„๋ž˜์˜ ๊ฐ„๋žตํ™”๋œ ์ฝ”๋“œ ์˜ˆ์‹œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ํ•จ์ˆ˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ Spark์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ์ž…๋ ฅ๊ณผ ๋ฐ˜ํ™˜๋  ํŒ๋‹ค์Šค ๊ฐ์ฒด์˜ ์œ ํ˜•, ์ฆ‰ Python ์œ ํ˜• ํžŒํŠธ๋ฅผ ์ง€์ •ํ•จ์œผ๋กœ์จ ํ•จ์ˆ˜ ์„ ์–ธ์„ ์ƒ๋‹นํžˆ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

def forecast_store_item(history_pd: pd.DataFrame) -> pd.DataFrame: 
    
    # instantiate the model, configure the parameters
    model = Prophet(
        interval_width=0.95,
        growth='linear',
        daily_seasonality=False,
        weekly_seasonality=True,
        yearly_seasonality=True,
        seasonality_mode='multiplicative'
    )
    
    # fit the model
    model.fit(history_pd)
    
    # configure predictions
    future_pd = model.make_future_dataframe(
        periods=90, 
        freq='d',
        include_history=True
    )
    
    # make predictions
    results_pd = model.predict(future_pd)
    
    # . . .
    
    # return predictions
    return results_pd

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

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

from pyspark.sql.functions import current_date
 
results = (
    store_item_history
        .groupBy('store', 'item')
          .applyInPandas(forecast_store_item, schema=result_schema)
        .withColumn('training_date', current_date())
    )

๋„ฅ์ŠคํŠธ ์Šคํ…

์ด์ œ ๋งค์žฅ-์ œํ’ˆ ์กฐํ•ฉ๋ณ„ ์˜ˆ์ธก์„ ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„๊ฐ€๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ์ œํ’ˆ์— ๋Œ€ํ•œ ๋งž์ถค ์˜ˆ์ธก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฐจํŠธ์—์„œ๋Š” 10๊ฐœ ๋งค์žฅ์˜ 1๋ฒˆ ์ œํ’ˆ์— ๋Œ€ํ•œ ์˜ˆ์ƒ ์ˆ˜์š”๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋‚˜ํƒ€๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค์‹œํ”ผ, ์ˆ˜์š” ์˜ˆ์ธก์€ ๋งค์žฅ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์€ ๋ชจ๋“  ๋งค์žฅ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Sample time series visualization generated via a SQL query

์ƒˆ๋กœ์šด ํŒ๋งค ๋ฐ์ดํ„ฐ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด, ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ์˜ˆ์ธก์„ ํšจ์œจ์ ์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ์กด ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์— ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ๋ถ„์„๊ฐ€๋“ค์ด ์ƒํ™ฉ ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค์˜ ๊ธฐ๋Œ€์น˜๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ธŒ๋ฆญ์Šค ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ์˜ˆ์ธก์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ˆ˜์š” ์˜ˆ์ธก์„ ์œ„ํ•œ ์†”๋ฃจ์…˜ ์•ก์…€๋Ÿฌ๋ ˆ์ดํ„ฐ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

Spark 2.0์„ ์œ„ํ•ด ์ œ์ž‘๋œ ์ด ๋…ธํŠธ๋ถ์˜ ์ด์ „ ๋ฒ„์ „์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด, ์ด ๋งํฌ๋ฅผ ํด๋ฆญํ•ด ์ฃผ์„ธ์š”.

Databricks ๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

๊ด€๋ จ ํฌ์ŠคํŠธ

๋Œ€๊ทœ๋ชจ์˜ ์„ธ๋ถ„ํ™”๋œ ์‹œ๊ณ„์—ด ์˜ˆ์ธก์„ ์œ„ํ•œ Facebook Prophet๊ณผ Apache Spark: Spark 3 ์—…๋ฐ์ดํŠธ

Translated by HaUn Kim - Original Blog Post ์‹œ๊ณ„์—ด ์˜ˆ์ธก์˜ ๋ฐœ์ „ ๋•๋ถ„์— ๋ฆฌํ…Œ์ผ๋Ÿฌ๋“ค์€ ๋”์šฑ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์š” ์˜ˆ์ธก์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค...
๋ชจ๋“  ํ”Œ๋žซํผ ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ ๋ณด๊ธฐ