์ด ํ์ด์ง์์๋ ํ์ต๋ ์์ธก ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์์ธก์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์์ธก์ ๋ง๋ค๋ ค๋ฉด ์ ๋ ฅ ์์ค์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ ์ถ๋ ฅ ์์น๋ฅผ ์ง์ ํ์ฌ ์์ธก ๋ชจ๋ธ์ ์ง์ ์ผ๊ด ์์ธก ์์ฒญ์ ์ํํฉ๋๋ค.
AutoML์ ํตํ ์์ธก์ ์๋ํฌ์ธํธ ๋ฐฐํฌ๋ ์จ๋ผ์ธ ์์ธก๊ณผ ํธํ๋์ง ์์ต๋๋ค. ์์ธก ๋ชจ๋ธ์์ ์จ๋ผ์ธ ์์ธก์ ์์ฒญํ๋ ค๋ฉด ์์ธก์ ์ํ ํ ์ด๋ธ ํ์ ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ์ธ์.
์ค๋ช (ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ด๋ผ๊ณ ๋ ํจ)์ด ํฌํจ๋ ์์ธก์ ์์ฒญํ์ฌ ๋ชจ๋ธ์ด ์์ธก์ ์ด๋ป๊ฒ ๋์ฐฉํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋ก์ปฌ ํน์ฑ ์ค์๋ ๊ฐ์ ๊ฐ ํน์ฑ์ด ์์ธก ๊ฒฐ๊ณผ์ ์ผ๋ง๋ ๊ธฐ์ฌํ๋์ง ๋ํ๋ ๋๋ค. ๊ฐ๋ ๊ฐ์๋ ์์ธก์ฉ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฐธ์กฐํ์ธ์.
์์ํ๊ธฐ ์ ์
์์ธก์ ๋ง๋ค๋ ค๋ฉด ๋จผ์ ์์ธก ๋ชจ๋ธ์ ํ์ต์์ผ์ผ ํฉ๋๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ
์ผ๊ด ์์ธก ์์ฒญ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ ๋ชจ๋ธ์ด ์์ธก์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ ๋๋ค. ๋ค์ ๋ ๊ฐ์ง ํ์ ์ค ํ๋๋ก ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- Cloud Storage์ CSV ๊ฐ์ฒด
- BigQuery ํ ์ด๋ธ
๋ชจ๋ธ ํ์ต์ ์ฌ์ฉํ ํ์๊ณผ ๋์ผํ ํ์์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ฅผ ๋ค์ด BigQuery์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ์ต์์ผฐ์ผ๋ฉด BigQuery ํ ์ด๋ธ์ ์ผ๊ด ์์ธก์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. Vertex AI๋ ๋ชจ๋ CSV ์ ๋ ฅ ํ๋๋ฅผ ๋ฌธ์์ด๋ก ์ทจ๊ธํ๋ฏ๋ก ํ์ต ๋ฐ์ดํฐ์ ์ ๋ ฅ ๋ฐ์ดํฐ ํ์์ ํผํฉํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์์ค์๋ ๋ชจ๋ธ ํ์ต์ ์ฌ์ฉ๋ ๋ชจ๋ ์ด์ ์ด๋ค ์์๋๋ก๋ ํฌํจํ๋ ํ ์ด๋ธ ํ์ ๋ฐ์ดํฐ๊ฐ ์์ด์ผ ํฉ๋๋ค. ํ์ต ๋ฐ์ดํฐ์ ์๊ฑฐ๋, ํ์ต ๋ฐ์ดํฐ์๋ ์์ง๋ง ํ์ต์ ์ฌ์ฉํ ์ ์๋ ์ด์ ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ถ๊ฐ ์ด์ ์ถ๋ ฅ์ ํฌํจ๋์ง๋ง ์์ธก ๊ฒฐ๊ณผ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ ๋ ฅ ๋ฐ์ดํฐ ์๊ตฌ์ฌํญ
์์ธก ๋ชจ๋ธ์ ์ ๋ ฅ์ ๋ค์ ์๊ตฌ์ฌํญ์ ์ค์ํด์ผ ํฉ๋๋ค.
- ์๊ฐ ์ด์ ๋ชจ๋ ๊ฐ์ด ์๊ณ ์ ํจํด์ผ ํฉ๋๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ ๋ฐ ํ์ต ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ ๋น๋๋ ์ผ์นํด์ผ ํฉ๋๋ค. ์๊ณ์ด์ ๋๋ฝ๋ ํ์ด ์๋ ๊ฒฝ์ฐ ์ ์ ํ ๋๋ฉ์ธ ์ง์์ ๋ฐ๋ผ ์๋์ผ๋ก ํ์ ์ฝ์ ํด์ผ ํฉ๋๋ค.
- ํ์์คํฌํ๊ฐ ์ค๋ณต๋ ์๊ณ์ด์ ์์ธก์์ ์ญ์ ๋ฉ๋๋ค. ์ด๋ฌํ ์๊ณ์ด์ ํฌํจํ๋ ค๋ฉด ์ค๋ณต ํ์์คํฌํ๋ฅผ ์ญ์ ํ์ธ์.
- ์์ธกํ ๊ฐ ์๊ณ์ด์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ์ฅ ์ ํํ ์์ธก์ ์ป์ผ๋ ค๋ฉด ๋ฐ์ดํฐ ์์ด ๋ชจ๋ธ ํ์ต ์ค์ ์ค์ ๋ ์ปจํ ์คํธ ์๋์ฐ์ ๋์ผํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ปจํ ์คํธ ์๋์ฐ๊ฐ 14์ผ์ธ ๊ฒฝ์ฐ ์ต์ 14์ผ ์ด์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ ์ ๊ฒ ์ ๊ณตํ๋ฉด Vertex AI์์ ๊ฐ์ด ๋น์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ํจ๋ฉํฉ๋๋ค.
- ์์ธก์ ๋์ ์ด์ null ๊ฐ์ด ์๋ ์๊ณ์ด์ ์ฒซ ๋ฒ์งธ ํ(์๊ฐ์)์์ ์์ํฉ๋๋ค. null ๊ฐ์ ์๊ณ์ด ๋ด์์ ์ฐ์์ ์ด์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๊ฒ ์ด์ ์๊ฐ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒฝ์ฐ ๋จ์ผ ์๊ณ์ด์
1
,2
,null
,3
,4
,null
,null
๊ณผ ๊ฐ์ด ์ ๋ ฌํ ์ ์์ต๋๋ค. CSV ํ์ผ์ ๊ฒฝ์ฐ Vertex AI๊ฐ ๋น ๋ฌธ์์ด์ null๋ก ์ทจ๊ธํ๋ฉฐ BigQuery์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก null ๊ฐ์ด ์ง์๋ฉ๋๋ค.
BigQuery ํ ์ด๋ธ
BigQuery ํ ์ด๋ธ์ ์ ๋ ฅ์ผ๋ก ์ ํํ๋ ๊ฒฝ์ฐ ๋ค์์ ํ์ธํด์ผ ํฉ๋๋ค.
- BigQuery ๋ฐ์ดํฐ ์์ค ํ ์ด๋ธ์ 100GB๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค.
- ํ
์ด๋ธ์ด ๋ค๋ฅธ ํ๋ก์ ํธ์ ์์ผ๋ฉด ํด๋น ํ๋ก์ ํธ์ Vertex AI ์๋น์ค ๊ณ์ ์
BigQuery Data Editor
์ญํ ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค.
CSV ํ์ผ
Cloud Storage์์ ์ ๋ ฅ์ผ๋ก CSV ๊ฐ์ฒด๋ฅผ ์ ํํ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ํ์ธํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ค๋ ์ด ์ด๋ฆ์ด ์๋ ํค๋ ํ์ผ๋ก ์์ํด์ผ ํฉ๋๋ค.
- ๊ฐ ๋ฐ์ดํฐ ์์ค ๊ฐ์ฒด๋ 10GB๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค. ์ฌ๋ฌ ํ์ผ์ ํฌํจํ ์๋ ์์ง๋ง ์ต๋ ์ฉ๋์ 100GB๋ก ์ ํ๋ฉ๋๋ค.
- Cloud Storage ๋ฒํท์ด ๋ค๋ฅธ ํ๋ก์ ํธ์ ์์ผ๋ฉด ํด๋น ํ๋ก์ ํธ์ Vertex AI ์๋น์ค ๊ณ์ ์
Storage Object Creator
์ญํ ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. - ๋ชจ๋ ๋ฌธ์์ด์ ํฐ๋ฐ์ดํ(")๋ก ๋ฌถ์ด์ผ ํฉ๋๋ค.
์ถ๋ ฅ ํ์
์ผ๊ด ์์ธก ์์ฒญ์ ์ถ๋ ฅ ํ์์ ์ ๋ ฅ์ ์ฌ์ฉํ ํ์๊ณผ ๋์ผํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด BigQuery ํ ์ด๋ธ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ Cloud Storage์ CSV ๊ฐ์ฒด๋ก ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์์ต๋๋ค.
๋ชจ๋ธ์ ์ผ๊ด ์์ธก ์์ฒญ ๋ณด๋ด๊ธฐ
์ผ๊ด ์์ธก ์์ฒญ์ ์ํํ๋ ค๋ฉด Google Cloud ์ฝ์ ๋๋ Vertex AI API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ ๋ ฅ ๋ฐ์ดํฐ ์์ค๋ Cloud Storage ๋ฒํท์ด๋ BigQuery ํ ์ด๋ธ์ ์ ์ฅ๋ CSV ๊ฐ์ฒด์ผ ์ ์์ต๋๋ค. ์ ๋ ฅ์ผ๋ก ์ ์ถํ๋ ๋ฐ์ดํฐ ์์ ๋ฐ๋ผ ์ผ๊ด ์์ธก ํ์คํฌ๊ฐ ์๋ฃ๋๋ ๋ฐ ๋ค์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
Google Cloud ์ฝ์
Google Cloud ์ฝ์์ ์ฌ์ฉํ์ฌ ์ผ๊ด ์์ธก์ ์์ฒญํฉ๋๋ค.
- Google Cloud ์ฝ์์ Vertex AI ์น์ ์์ ์ผ๊ด ์์ธก ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ์ ์ผ๊ด ์์ธก ์ฐฝ์ ์ฝ๋๋ค.
- ์ผ๊ด ์์ธก ์ ์์์ ๋ค์ ๋จ๊ณ๋ฅผ ์๋ฃํฉ๋๋ค.
- ์ผ๊ด ์์ธก์ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- ๋ชจ๋ธ ์ด๋ฆ์ ์ด ์ผ๊ด ์์ธก์ ์ฌ์ฉํ ๋ชจ๋ธ์ ์ด๋ฆ์ ์ ํํฉ๋๋ค.
- ๋ฒ์ ์์ ๋ชจ๋ธ ๋ฒ์ ์ ์ ํํฉ๋๋ค.
- ์์ค ์ ํ์์ ์์ค ์
๋ ฅ ๋ฐ์ดํฐ๊ฐ Cloud Storage์ CSV ํ์ผ์ธ์ง ๋๋ BigQuery์ ํ
์ด๋ธ์ธ์ง ์ฌ๋ถ๋ฅผ ์ ํํฉ๋๋ค.
- CSV ํ์ผ์ ๊ฒฝ์ฐ CSV ์ ๋ ฅ ํ์ผ์ด ์๋ Cloud Storage ์์น๋ฅผ ์ง์ ํฉ๋๋ค.
- BigQuery ํ ์ด๋ธ์ ๊ฒฝ์ฐ ํ ์ด๋ธ์ด ์๋ ํ๋ก์ ํธ ID, BigQuery ๋ฐ์ดํฐ ์ธํธ ID, BigQuery ํ ์ด๋ธ ๋๋ ๋ทฐ ID๋ฅผ ์ง์ ํฉ๋๋ค.
- ์ผ๊ด ์์ธก ์ถ๋ ฅ์ CSV ๋๋ BigQuery๋ฅผ ์ ํํฉ๋๋ค.
- CSV์ ๊ฒฝ์ฐ Vertex AI์์ ์ถ๋ ฅ์ ์ ์ฅํ๋ Cloud Storage ๋ฒํท์ ์ง์ ํฉ๋๋ค.
- BigQuery์ ๊ฒฝ์ฐ ํ๋ก์ ํธ ID ๋๋ ๊ธฐ์กด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
- ํ๋ก์ ํธ ID๋ฅผ ์ง์ ํ๋ ค๋ฉด Google Cloud ํ๋ก์ ํธ ID ํ๋์ ํ๋ก์ ํธ ID๋ฅผ ์ ๋ ฅํฉ๋๋ค. Vertex AI์์ ์๋ก์ด ์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์๋์ผ๋ก ๋ง๋ญ๋๋ค.
- ๊ธฐ์กด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ง์ ํ๋ ค๋ฉด Google Cloud ํ๋ก์ ํธ ID ํ๋์ BigQuery ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํฉ๋๋ค(์:
bq://projectid.datasetid
).
- ์ ํ์ฌํญ. ์ถ๋ ฅ ๋์์ด Cloud Storage์ BigQuery ๋๋ JSONL์ด๋ฉด ์์ธก ์ธ์ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฌ์ฉ ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ด ๋ชจ๋ธ์ ํน์ฑ ๊ธฐ์ฌ ๋ถ์ ์ฌ์ฉ ์ค์ ์ ์ ํํฉ๋๋ค. Cloud Storage์ CSV์๋ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ด ์ง์๋์ง ์์ต๋๋ค. ์์ธํ ์์๋ณด๊ธฐ
- ์ ํ์ฌํญ: ์ผ๊ด ์์ธก์ ์ํ ๋ชจ๋ธ ๋ชจ๋ํฐ๋ง ๋ถ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ผ๊ด ์์ธก ์์
์ ํธํฅ ๊ฐ์ง ๊ตฌ์ฑ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ ์๊ฑด์ ์ฐธ์กฐํ์ธ์.
- ์ด ์ผ๊ด ์์ธก์ ๋ชจ๋ธ ๋ชจ๋ํฐ๋ง ์ฌ์ฉ ์ค์ ์ ํด๋ฆญํ์ฌ ์ผ๊ฑฐ๋ ๋๋๋ค.
- ํ์ต ๋ฐ์ดํฐ ์์ค๋ฅผ ์ ํํฉ๋๋ค. ์ ํํ ํ์ต ๋ฐ์ดํฐ ์์ค์ ๋ฐ์ดํฐ ๊ฒฝ๋ก ๋๋ ์์น๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ์๋ฆผ ๊ธฐ์ค ์๋์์ ์๋ฆผ์ ํธ๋ฆฌ๊ฑฐํ ์๊ณ๊ฐ์ ์ง์ ํฉ๋๋ค.
- ์๋ฆผ ์ด๋ฉ์ผ์ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ์๋ฆผ ๊ธฐ์ค์ ์ด๊ณผํ๋ฉด ์๋ฆผ์ ๋ฐ์ ์ด๋ฉ์ผ ์ฃผ์ ํ๋ ์ด์์ ์ผํ๋ก ๊ตฌ๋ถํ์ฌ ์ ๋ ฅํฉ๋๋ค.
- ์ ํ์ฌํญ: ์๋ฆผ ์ฑ๋์ ๊ฒฝ์ฐ ๋ชจ๋ธ์ด ์๋ฆผ ๊ธฐ์ค์ ์ด๊ณผํ๋ฉด ์๋ฆผ์ ๋ฐ์ Cloud Monitoring ์ฑ๋์ ์ถ๊ฐํฉ๋๋ค. ๊ธฐ์กด Cloud Monitoring ์ฑ๋์ ์ ํํ๊ฑฐ๋ ์๋ฆผ ์ฑ๋ ๊ด๋ฆฌ๋ฅผ ํด๋ฆญํ์ฌ ์ ์ฑ๋์ ๋ง๋ค ์ ์์ต๋๋ค. ์ฝ์์์๋ PagerDuty, Slack, Pub/Sub ์๋ฆผ ์ฑ๋์ ์ง์ํฉ๋๋ค.
- ๋ง๋ค๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
API : BigQuery
REST
batchPredictionJobs.create ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ผ๊ด ์์ธก์ ์์ฒญํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- LOCATION_ID: ๋ชจ๋ธ์ด ์ ์ฅ๋๊ณ ์ผ๊ด ์์ธก ์์
์ด ์คํ๋๋ ๋ฆฌ์ ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด
us-central1
์ ๋๋ค. - PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- BATCH_JOB_NAME: ์ผ๊ด ์์ ์ ํ์ ์ด๋ฆ์ ๋๋ค.
- MODEL_ID: ์์ธก์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ๋ชจ๋ธ์ ID์ ๋๋ค.
-
INPUT_URI: BigQuery ๋ฐ์ดํฐ ์์ค์ ๋ํ ์ฐธ์กฐ์
๋๋ค. ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ผ ์์์ ์์ฑํ์ธ์.
bq://bqprojectId.bqDatasetId.bqTableId
-
OUTPUT_URI: ์์ธก์ด ๊ธฐ๋ก๋๋ BigQuery ๋์์ ๋ํ ์ฐธ์กฐ์
๋๋ค. ํ๋ก์ ํธ ID๋ฅผ ์ง์ ํ๊ณ ์ ํ์ ์ผ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ ์ธํธ ID๋ฅผ ์ง์ ํฉ๋๋ค. ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ ํธ ID๋ง ์ง์ ํ๋ฉด Vertex AI์์ ์๋์ผ๋ก ์ ์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ง๋ญ๋๋ค. ๋ค์ ํ์์ ์ฌ์ฉํฉ๋๋ค.bq://bqprojectId.bqDatasetId
bq://bqprojectId
- GENERATE_EXPLANATION: ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ธก์ฉ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฐธ์กฐํ์ธ์.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": "OUTPUT_URI" } }, "generate_explanation": GENERATE_EXPLANATION }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "bigquery", "bigquerySource": { "inputUri": "INPUT_URI" } }, "outputConfig": { "predictionsFormat": "bigquery", "bigqueryDestination": { "outputUri": bq://12345 } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 }, "manualBatchTuningParameters": { "batchSize": 4 }, "outputInfo": { "bigqueryOutputDataset": "bq://12345.reg_model_2020_10_02_06_04 } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
Java
์ด ์ํ์ ์ฌ์ฉํด ๋ณด๊ธฐ ์ ์ Vertex AI ๋น ๋ฅธ ์์: ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ Java ์ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI Java API ์ฐธ๊ณ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Vertex AI์ ์ธ์ฆํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ธ์ฆ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ์ํ์์ INSTANCES_FORMAT ๋ฐ PREDICTIONS_FORMAT์ `bigquery`๋ก ๋ฐ๊ฟ๋๋ค. ๋ค๋ฅธ ์๋ฆฌํ์์๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ์ด ์น์ ์ `REST & CMD LINE` ํญ์ ์ฐธ์กฐํ์ธ์.Vertex AI SDK for Python
Vertex AI SDK for Python์ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ Vertex AI SDK for Python ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI SDK for Python API ์ฐธ์กฐ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
API : Cloud Storage
REST
batchPredictionJobs.create ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ผ๊ด ์์ธก์ ์์ฒญํฉ๋๋ค.
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ค์์ ๋ฐ๊ฟ๋๋ค.
- LOCATION_ID: ๋ชจ๋ธ์ด ์ ์ฅ๋๊ณ ์ผ๊ด ์์ธก ์์
์ด ์คํ๋๋ ๋ฆฌ์ ์
๋๋ค. ์๋ฅผ ๋ค๋ฉด
us-central1
์ ๋๋ค. - PROJECT_ID: ํ๋ก์ ํธ ID์ ๋๋ค.
- BATCH_JOB_NAME: ์ผ๊ด ์์ ์ ํ์ ์ด๋ฆ์ ๋๋ค.
- MODEL_ID: ์์ธก์ ์ํํ๋ ๋ฐ ์ฌ์ฉํ ๋ชจ๋ธ์ ID์ ๋๋ค.
-
URI: ํ์ต ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ Cloud Storage ๋ฒํท์ ๊ฒฝ๋ก(URI)์
๋๋ค.
๋ ๊ฐ ์ด์ ์์ ์ ์์ต๋๋ค. ๊ฐ URI์ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
gs://bucketName/pathToFileName
-
OUTPUT_URI_PREFIX: ์์ธก์ด ๊ธฐ๋ก๋๋ Cloud Storage ๋์์ ๊ฒฝ๋ก์
๋๋ค. Vertex AI์์ ์ด ๊ฒฝ๋ก์ ํ์์คํฌํ๊ฐ ์ ์ฉ๋ ํ์ ๋๋ ํฐ๋ฆฌ์ ์ผ๊ด ์์ธก์ ๊ธฐ๋กํฉ๋๋ค. ์ด ๊ฐ์ ๋ค์ ํ์์ ๋ฌธ์์ด์ ์ค์ ํฉ๋๋ค.
gs://bucketName/pathToOutputDirectory
- GENERATE_EXPLANATION: ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค. ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฌ์ฉ ์ค์ ํ๋ ค๋ฉด true๋ก ์ค์ ํฉ๋๋ค. ์ด ์ต์ ์ ์ถ๋ ฅ ๋์์ด JSONL์ธ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. Cloud Storage์ CSV์์๋ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ด ์ง์๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์์ธก์ฉ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฐธ์กฐํ์ธ์.
HTTP ๋ฉ์๋ ๋ฐ URL:
POST https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs
JSON ์์ฒญ ๋ณธ๋ฌธ:
{ "displayName": "BATCH_JOB_NAME", "model": "projects/PROJECT_ID/locations/LOCATION_ID/models/MODEL_ID", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ URI1,... ] }, }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "generate_explanation": GENERATE_EXPLANATION }
์์ฒญ์ ๋ณด๋ด๋ ค๋ฉด ๋ค์ ์ต์ ์ค ํ๋๋ฅผ ์ ํํฉ๋๋ค.
curl
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs"
PowerShell
์์ฒญ ๋ณธ๋ฌธ์ request.json
ํ์ผ์ ์ ์ฅํ๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs" | Select-Object -Expand Content
๋ค์๊ณผ ๋น์ทํ JSON ์๋ต์ด ํ์๋ฉ๋๋ค.
{ "name": "projects/PROJECT_ID/locations/LOCATION_ID/batchPredictionJobs/67890", "displayName": "batch_job_1 202005291958", "model": "projects/12345/locations/us-central1/models/5678", "state": "JOB_STATE_PENDING", "inputConfig": { "instancesFormat": "csv", "gcsSource": { "uris": [ "gs://bp_bucket/reg_mode_test" ] } }, "outputConfig": { "predictionsFormat": "csv", "gcsDestination": { "outputUriPrefix": "OUTPUT_URI_PREFIX" } }, "dedicatedResources": { "machineSpec": { "machineType": "n1-standard-32", "acceleratorCount": "0" }, "startingReplicaCount": 2, "maxReplicaCount": 6 } "outputInfo": { "gcsOutputDataset": "OUTPUT_URI_PREFIX/prediction-batch_job_1 202005291958-2020-09-30T02:58:44.341643Z" } "state": "JOB_STATE_PENDING", "createTime": "2020-09-30T02:58:44.341643Z", "updateTime": "2020-09-30T02:58:44.341643Z", }
Vertex AI SDK for Python
Vertex AI SDK for Python์ ์ค์นํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ Vertex AI SDK for Python ์ค์น๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ธํ ๋ด์ฉ์ Vertex AI SDK for Python API ์ฐธ์กฐ ๋ฌธ์๋ฅผ ํ์ธํ์ธ์.
์ผ๊ด ์์ธก ๊ฒฐ๊ณผ ๊ฒ์
Vertex AI๋ ์ผ๊ด ์์ธก ์ถ๋ ฅ์ ์ง์ ๋ ๋์(BigQuery ๋๋ Cloud Storage)์ผ๋ก ์ ์กํฉ๋๋ค.
ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ํ Cloud Storage ์ถ๋ ฅ์ ํ์ฌ ์ง์๋์ง ์์ต๋๋ค.
BigQuery
์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ
BigQuery๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ผ๊ด ์์ธก์ ์ถ๋ ฅ์ ์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ์ ์ ์ฅ๋ฉ๋๋ค. Vertex AI์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๊ณตํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ธํธ ์ด๋ฆ(BQ_DATASET_NAME)์ ์ด์ ์ ์ ๊ณตํ ์ด๋ฆ์ ๋๋ค. ์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ๊ณตํ์ง ์์ ๊ฒฝ์ฐ Vertex AI๊ฐ ์๋์ผ๋ก ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ ์ด๋ฆ(BQ_DATASET_NAME)์ ์ฐพ์ ์ ์์ต๋๋ค.
- Google Cloud ์ฝ์์์ Vertex AI ์ผ๊ด ์์ธก ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
- ์์ฑํ ์์ธก์ ์ ํํฉ๋๋ค.
-
์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ๋ ๋ด๋ณด๋ด๊ธฐ ์์น์ ์ง์ ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์ธํธ ์ด๋ฆ์
prediction_MODEL_NAME_TIMESTAMP
ํ์์ ๋๋ค.
์ถ๋ ฅ ํ ์ด๋ธ
์ถ๋ ฅ ๋ฐ์ดํฐ ์ธํธ์๋ ๋ค์ ์ธ ๊ฐ์ง ์ถ๋ ฅ ํ ์ด๋ธ ์ค ํ๋ ์ด์์ด ํฌํจ๋ฉ๋๋ค.
-
์์ธก ํ
์ด๋ธ
์ด ํ ์ด๋ธ์๋ ์์ธก์ด ์์ฒญ๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ์ ๋ํ ํ์ด ํฌํจ๋ฉ๋๋ค(์ฆ, TARGET_COLUMN_NAME = null). ์๋ฅผ ๋ค์ด ํ๊ฒ ์ด์ ๋ํ null ํญ๋ชฉ 14๊ฐ(์: ๋ค์ 14์ผ ๋์์ ํ๋งค)๊ฐ ์ ๋ ฅ์ ํฌํจ๋ ๊ฒฝ์ฐ ์์ธก ์์ฒญ์ ๊ฐ ๋ ์ง์ ํ๋งค ๋ฒํธ์ธ 14๊ฐ ํ์ ๋ฐํํฉ๋๋ค. ์์ธก ์์ฒญ์ด ๋ชจ๋ธ ์์ธก ๋ฒ์๋ฅผ ์ด๊ณผํ๋ฉด Vertex AI๋ ์์ธก ๋ฒ์๊น์ง์ ์์ธก๋ง ๋ฐํํฉ๋๋ค.
-
์ค๋ฅ ๊ฒ์ฆ ํ
์ด๋ธ
์ด ํ ์ด๋ธ์๋ ์ผ๊ด ์์ธก ์ ์ ๋ฐ์ํ๋ ์ง๊ณ ๋จ๊ณ ์ค์ ๋ฐ์ํ๋ ์ค์ํ์ง ์์ ์ค๋ฅ์ ๋ํ ํ์ด ํฌํจ๋ฉ๋๋ค. ์ค์ํ์ง ์์ ๊ฐ ์ค๋ฅ๋ Vertex AI๊ฐ ์์ธก์ ๋ฐํํ ์ ์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํ์ ํด๋นํฉ๋๋ค.
-
์ค๋ฅ ํ
์ด๋ธ
์ด ํ ์ด๋ธ์๋ ์ผ๊ด ์์ธก ์ค์ ๋ฐ์ํ๋ ์ค์ํ์ง ์์ ์ค๋ฅ์ ๋ํ ํ์ด ํฌํจ๋ฉ๋๋ค. ์ค์ํ์ง ์์ ๊ฐ ์ค๋ฅ๋ Vertex AI๊ฐ ์์ธก์ ๋ฐํํ ์ ์๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ํ์ ํด๋นํฉ๋๋ค.
์์ธก ํ ์ด๋ธ
ํ
์ด๋ธ์ ์ด๋ฆ(BQ_PREDICTIONS_TABLE_NAME)์ ์ผ๊ด ์์ธก ์์
์ด ์์๋ ํ์์คํฌํ์ ํจ๊ป 'predictions_'์ ์ถ๊ฐํ์ฌ ํ์ฑ๋ฉ๋๋ค. predictions_TIMESTAMP
์์ธก ํ ์ด๋ธ์ ๊ฒ์ํ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
-
์ฝ์์์ BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
BigQuery๋ก ์ด๋ -
๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
SELECT * FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
Vertex AI๋ predicted_TARGET_COLUMN_NAME.value
์ด์ ์์ธก์ ์ ์ฅํฉ๋๋ค.
Temporal Fusion Transformer(TFT)๋ก ๋ชจ๋ธ์ ํ์ต์ํจ ๊ฒฝ์ฐ predicted_TARGET_COLUMN_NAME.tft_feature_importance
์ด์์ TFT ํด์ ๊ฐ๋ฅ์ฑ ์ถ๋ ฅ์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ์ด์ ์ถ๊ฐ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ถํ ๋ฉ๋๋ค.
context_columns
: ์ปจํ ์คํธ ์๋์ฐ ๊ฐ์ด TFT ์ฅ๋จ๊ธฐ ๋ฉ๋ชจ๋ฆฌ(LSTM) ์ธ์ฝ๋ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋ ์์ธก ํน์ฑ์ ๋๋ค.context_weights
: ์์ธก ์ธ์คํด์ค์ ๊ฐcontext_columns
์ ์ฐ๊ฒฐ๋ ํน์ฑ ์ค์๋ ๊ฐ์ค์น์ ๋๋ค.horizon_columns
: ์์ธก ๋ฒ์ ๊ฐ์ด TFT ์ฅ๋จ๊ธฐ ๋ฉ๋ชจ๋ฆฌ(LSTM) ๋์ฝ๋ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉ๋๋ ์์ธก ํน์ฑ์ ๋๋ค.horizon_weights
: ์์ธก ์ธ์คํด์ค์ ๊ฐhorizon_columns
์ ์ฐ๊ฒฐ๋ ํน์ฑ ์ค์๋ ๊ฐ์ค์น์ ๋๋ค.attribute_columns
: ์๋ถ๋ณ์ธ ์์ธก ํน์ฑ์ ๋๋ค.attribute_weights
: ๊ฐattribute_columns
์ ์ฐ๊ฒฐ๋ ๊ฐ์ค์น์ ๋๋ค.
๋ชจ๋ธ์ด ๋ถ์์ ์์ค์ ์ต์ ํ๋๊ณ ๋ถ์์ ์งํฉ์ ์ค์๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉด predicted_TARGET_COLUMN_NAME.value
๊ฐ ์ค์๊ฐ์ ์์ธก ๊ฐ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด predicted_TARGET_COLUMN_NAME.value
๊ฐ ์งํฉ์์ ๋ถ์์๊ฐ ๊ฐ์ฅ ๋ฎ์ ์์ธก ๊ฐ์
๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ์์ ์งํฉ์ด [0.1, 0.5, 0.9]
๋ฉด value
๊ฐ 0.5
๋ถ์์์ ์์ธก์
๋๋ค.
๋ถ์์ ์งํฉ์ด [0.1, 0.9]
๋ฉด value
๊ฐ 0.1
๋ถ์์์ ์์ธก์
๋๋ค.
๋ํ Vertex AI๋ ๋ค์ ์ด์ ๋ถ์์ ๊ฐ ๋ฐ ์์ธก์ ์ ์ฅํฉ๋๋ค.
-
predicted_TARGET_COLUMN_NAME.quantile_values
: ๋ชจ๋ธ ํ์ต ์ค์ ์ค์ ๋ ๋ถ์์์ ๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด0.1
,0.5
,0.9
์ผ ์ ์์ต๋๋ค. -
predicted_TARGET_COLUMN_NAME.quantile_predictions
: ๋ถ์์ ๊ฐ์ ์ฐ๊ฒฐ๋ ์์ธก ๊ฐ์ ๋๋ค.
๋ชจ๋ธ์์ ํ๋ฅ ์ ์ถ๋ก ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ predicted_TARGET_COLUMN_NAME.value
์๋ ์ต์ ํ ๋ชฉํ์ ์ต์ํ ๋๊ตฌ๊ฐ ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ต์ ํ ๋ชฉํ๊ฐ minimize-rmse
๋ฉด predicted_TARGET_COLUMN_NAME.value
์๋ ํ๊ท ๊ฐ์ด ํฌํจ๋ฉ๋๋ค. minimize-mae
๋ฉด predicted_TARGET_COLUMN_NAME.value
์ ์ค์๊ฐ์ด ํฌํจ๋ฉ๋๋ค.
๋ชจ๋ธ์์ ๋ถ์์๋ก ํ๋ฅ ์ ์ถ๋ก ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Vertex AI๋ ๋ค์ ์ด์ ๋ถ์์ ๊ฐ๊ณผ ์์ธก์ ์ ์ฅํฉ๋๋ค.
-
predicted_TARGET_COLUMN_NAME.quantile_values
: ๋ชจ๋ธ ํ์ต ์ค์ ์ค์ ๋ ๋ถ์์์ ๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด0.1
,0.5
,0.9
์ผ ์ ์์ต๋๋ค. -
predicted_TARGET_COLUMN_NAME.quantile_predictions
: ๋ถ์์ ๊ฐ์ ์ฐ๊ฒฐ๋ ์์ธก ๊ฐ์ ๋๋ค.
ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฌ์ฉ ์ค์ ํ ๊ฒฝ์ฐ ์์ธก ํ ์ด๋ธ์์๋ ๊ธฐ์ฌ ๋ถ์์ ์ฐพ์ ์ ์์ต๋๋ค. ํน์ฑ BQ_FEATURE_NAME์ ๊ธฐ์ฌ ๋ถ์์ ์ก์ธ์คํ๋ ค๋ฉด ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
SELECT explanation.attributions[OFFSET(0)].featureAttributions.BQ_FEATURE_NAME FROM BQ_DATASET_NAME.BQ_PREDICTIONS_TABLE_NAME
์์ธํ ๋ด์ฉ์ ์์ธก์ฉ ํน์ฑ ๊ธฐ์ฌ ๋ถ์์ ์ฐธ์กฐํ์ธ์.
์ค๋ฅ ๊ฒ์ฆ ํ ์ด๋ธ
ํ
์ด๋ธ์ ์ด๋ฆ(BQ_ERRORS_VALIDATION_TABLE_NAME)์ ์ผ๊ด ์์ธก ์์
์ด ์์๋ ํ์์คํฌํ์ ํจ๊ป 'errors_validation'์ ์ถ๊ฐํ์ฌ ํ์ฑ๋ฉ๋๋ค. errors_validation_TIMESTAMP
-
์ฝ์์์ BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
BigQuery๋ก ์ด๋ -
๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_VALIDATION_TABLE_NAME
- errors_TARGET_COLUMN_NAME
์ค๋ฅ ํ ์ด๋ธ
ํ
์ด๋ธ์ ์ด๋ฆ(BQ_ERRORS_TABLE_NAME)์ ์ผ๊ด ์์ธก ์์
์ด ์์๋ ํ์์คํฌํ(errors_TIMESTAMP
)์ ํจ๊ป 'errors_'๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฑ๋ฉ๋๋ค.
-
์ฝ์์์ BigQuery ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
BigQuery๋ก ์ด๋ -
๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํฉ๋๋ค.
SELECT * FROM BQ_DATASET_NAME.BQ_ERRORS_TABLE_NAME
- error_TARGET_COLUMN_NAME.code
- errors_TARGET_COLUMN_NAME.message
Cloud Storage
Cloud Storage๋ฅผ ์ถ๋ ฅ ๋์์ผ๋ก ์ง์ ํ๋ฉด ์ผ๊ด ์์ธก ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ ์ง์ ํ ๋ฒํท์ ์ ํด๋์ CSV ๊ฐ์ฒด๋ก ๋ฐํ๋ฉ๋๋ค. ํด๋ ์ด๋ฆ์ ๋ชจ๋ธ ์ด๋ฆ ์์ 'prediction_'๊ณผ ์ผ๊ด ์์ธก ์์ ์ด ์์๋ ์์ ์ ํ์์คํฌํ๋ฅผ ์ถ๊ฐํด ์ง์ ํด์ผ ํฉ๋๋ค. ๋ชจ๋ธ์ ์ผ๊ด ์์ธก ํญ์์ Cloud Storage ํด๋ ์ด๋ฆ์ ํ์ธํ ์ ์์ต๋๋ค.
Cloud Storage ํด๋์๋ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ์์ต๋๋ค.-
์์ธก ๊ฐ์ฒด
์์ธก ๊ฐ์ฒด์ ์ด๋ฆ์ 'predictions_1.csv', 'predictions_2.csv' ๋ฑ์ผ๋ก ์ง์ ๋ฉ๋๋ค. ์ด๋ฌํ ์์ธก ํ์ผ์๋ ์ด ์ด๋ฆ์ด ์ง์ ๋ ํค๋ ํ๊ณผ ๋ฐํ๋ ๋ชจ๋ ์์ธก์ ๋ํ ํ๋์ ํ์ด ํฌํจ๋ฉ๋๋ค. ์์ธก ๊ฐ ์๋ ์์ธก ์ ๋ ฅ ๋ฐ ์์ธก ๋ฒ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์๋ฅผ ๋ค์ด ํ๊ฒ ์ด์ ๋ํ null ํญ๋ชฉ 14๊ฐ(์: ๋ค์ 14์ผ ๋์์ ํ๋งค)๊ฐ ์ ๋ ฅ์ ํฌํจ๋ ๊ฒฝ์ฐ ์์ธก ์์ฒญ์ ๊ฐ ๋ ์ง์ ํ๋งค ๋ฒํธ์ธ 14๊ฐ ํ์ ๋ฐํํฉ๋๋ค. ์์ธก ์์ฒญ์ด ๋ชจ๋ธ ์์ธก ๋ฒ์๋ฅผ ์ด๊ณผํ๋ฉด Vertex AI๋ ์์ธก ๋ฒ์๊น์ง์ ์์ธก๋ง ๋ฐํํฉ๋๋ค.
์์ธก ๊ฐ์ ์ด๋ฆ์ด `predicted_TARGET_COLUMN_NAME`์ธ ์ด์ ๋ฐํ๋ฉ๋๋ค. ๋ถ์์ ์์ธก์ ๊ฒฝ์ฐ ์ถ๋ ฅ ์ด์๋ JSON ํ์์ ๋ถ์์ ์์ธก ๋ฐ ๋ถ์์ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค.
-
์ค๋ฅ ๊ฐ์ฒด
์ค๋ฅ ๊ฐ์ฒด์ ์ด๋ฆ์ `errors_1.csv`, `errors_2.csv` ๋ฑ์ผ๋ก ์ง์ ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ํค๋ ํ๊ณผ Vertex AI๊ฐ ์์ธก์ ๋ฐํํ์ง ๋ชปํ๋ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ชจ๋ ํ์ ๋ํ ํ๋์ ํ์ด ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด null ๋นํ์ฉ ํน์ฑ์ด null์ธ ๊ฒฝ์ฐ์ ๋๋ค
์ฐธ๊ณ : ๊ฒฐ๊ณผ๊ฐ ํฌ๋ฉด ์ฌ๋ฌ ๊ฐ์ฒด๋ก ๋ถํ ๋ฉ๋๋ค.
BigQuery์ ํน์ฑ ๊ธฐ์ฌ ๋ถ์ ์ฟผ๋ฆฌ ์ํ
์์ 1: ๋จ์ผ ์์ธก์ ๋ํ ๊ธฐ์ฌ ๋ถ์ ๊ฒฐ์
๋ค์ ์ง๋ฌธ์ ์๊ฐํด ๋ด ์๋ค.
11์ 24์ผ ํน์ ๋งค์ฅ์ ์ ํ ๊ด๊ณ ์์ธก ๋งค์ถ์ด ์ผ๋ง๋ ์ฆ๊ฐํ๋๊ฐ?
ํด๋น ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SELECT * EXCEPT(explanation, predicted_sales), ROUND(predicted_sales.value, 2) AS predicted_sales, ROUND( explanation.attributions[OFFSET(0)].featureAttributions.advertisement, 2 ) AS attribution_advertisement FROM `project.dataset.predictions` WHERE product = 'product_0' AND store = 'store_0' AND date = '2019-11-24'
์์ 2: ์ ์ญ ํน์ฑ ์ค์๋ ๊ฒฐ์
๋ค์ ์ง๋ฌธ์ ์๊ฐํด ๋ด ์๋ค.
๊ฐ ๊ธฐ๋ฅ์ ์ ๋ฐ์ ์ธ ์์ ํ๋งค๋์ ์ผ๋ง๋ ๊ธฐ์ฌํ๋๊ฐ?
๋ก์ปฌ ํน์ฑ ์ค์๋ ๊ธฐ์ฌ ๋ถ์์ ์ง๊ณํ์ฌ ์ ์ญ ํน์ฑ ์ค์๋๋ฅผ ์๋์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค. ํด๋น ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
WITH
/*
* Aggregate from (id, date) level attributions to global feature importance.
*/
attributions_aggregated AS (
SELECT
SUM(ABS(attributions.featureAttributions.date)) AS date,
SUM(ABS(attributions.featureAttributions.advertisement)) AS advertisement,
SUM(ABS(attributions.featureAttributions.holiday)) AS holiday,
SUM(ABS(attributions.featureAttributions.sales)) AS sales,
SUM(ABS(attributions.featureAttributions.store)) AS store,
SUM(ABS(attributions.featureAttributions.product)) AS product,
FROM
project.dataset.predictions,
UNNEST(explanation.attributions) AS attributions
),
/*
* Calculate the normalization constant for global feature importance.
*/
attributions_aggregated_with_total AS (
SELECT
*,
date + advertisement + holiday + sales + store + product AS total
FROM
attributions_aggregated
)
/*
* Calculate the normalized global feature importance.
*/
SELECT
ROUND(date / total, 2) AS date,
ROUND(advertisement / total, 2) AS advertisement,
ROUND(holiday / total, 2) AS holiday,
ROUND(sales / total, 2) AS sales,
ROUND(store / total, 2) AS store,
ROUND(product / total, 2) AS product,
FROM
attributions_aggregated_with_total
BigQuery์ ์ผ๊ด ์์ธก ์ถ๋ ฅ ์์
์ฃผ๋ฅ ํ๋งค์ ์์ ๋ฐ์ดํฐ ์ธํธ์์ 'Ida Grove' ๋์์๋ 4๊ฐ์ ๋งค์ฅ('Ida Grove Food Pride', 'Discount Liquors of Ida Grove', 'Casey's General Store #3757', 'Brew Ida Grove')์ด ์์ต๋๋ค. store_name
์ series identifier
์ด๋ฉฐ 4๊ฐ์ ๋งค์ฅ ์ค 3๊ฐ๋ ๋์ ์ด sale_dollars
์ ๋ํ ์์ธก์ ์์ฒญํฉ๋๋ค. 'Discount Liquors of Ida Grove'์ ๋ํ ์์ธก์ด ์์ฒญ๋์ง ์์์ผ๋ฏ๋ก ๊ฒ์ฆ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ค์์ ์์ธก์ ์ฌ์ฉ๋๋ ์ ๋ ฅ ๋ฐ์ดํฐ ์ธํธ์์ ์ถ์ถํ ๊ฒ์ ๋๋ค.

๋ค์์ ์์ธก ๊ฒฐ๊ณผ์์ ์ถ์ถํ ๊ฒ์ ๋๋ค.

๋ค์์ ๊ฒ์ฆ ์ค๋ฅ์์ ์ถ์ถํ ๊ฒ์ ๋๋ค.

๋ถ์์ ์์ค ์ต์ ํ ๋ชจ๋ธ์ ์ผ๊ด ์์ธก ์ถ๋ ฅ ์์
๋ค์์ ๋ถ์์ ์์ค์ ์ต์ ํ๋ ๋ชจ๋ธ์ ์ผ๊ด ์์ธก ์ถ๋ ฅ์ ๋ณด์ฌ์ฃผ๋ ์์์ ๋๋ค. ์ด ์๋๋ฆฌ์ค์์ ์์ธก ๋ชจ๋ธ์ ๊ฐ ๋งค์ฅ์ ๋ค์ 14์ผ ๋์์ ํ๋งค๋ฅผ ์์ธกํ์ต๋๋ค.

๋ถ์์ ๊ฐ์ predicted_Sales.quantile_values
์ด์ ์ ๊ณต๋ฉ๋๋ค. ์ด ์์์์๋ ๋ชจ๋ธ์ด 0.1
, 0.5
, 0.9
๋ถ์ ์์์ ๊ฐ์ ์์ธกํ์ต๋๋ค.
์์ธก ๊ฐ์ predicted_Sales.quantile_predictions
์ด์ ์ ๊ณต๋ฉ๋๋ค.
predicted_Sales.quantile_values
์ด์ ๋ถ์์ ๊ฐ์ ๋งคํ๋๋ ํ๋งค ๊ฐ์ ๋ฐฐ์ด์
๋๋ค. ์ฒซ ๋ฒ์งธ ํ์์ ํ๋งค ๊ฐ์ด 4484.04
๋ณด๋ค ์์ ํ๋ฅ ์ 10%์
๋๋ค. ํ๋งค ๊ฐ์ด 5615.64
๋ณด๋ค ์์ ํ๋ฅ ์ 50%์
๋๋ค. ํ๋งค ๊ฐ์ด 6853.29
๋ณด๋ค ์์ ํ๋ฅ ์ 90%์
๋๋ค. ์ฒซ ๋ฒ์งธ ํ์ ์์ธก์ ๋จ์ผ ๊ฐ์ผ๋ก ํ์๋๋ฉฐ 5615.64
์
๋๋ค.