- โณ ํ๋ก์ ํธ ๋ชฉํ
- ๐ ํ๋ก์ ํธ ๋ด์ฉ
- ๐ธ ํ์ต์ ์ฌ์ฉ๋ Clone
- ๐ก ๊ฒฐ๋ก ๋ฐ ๋๋์
๋ณธ ํ๋ก์ ํธ์ ์ฃผ์ ๋ชฉํ๋ ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ ํ์ฉํ ๋์ ์์ค์ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ฐพ์ Cloneํ์ฌ ํ์ตํ๊ณ , ํ์ตํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ฃผ์ ์ข ๋ชฉ์ ๋ฏธ๋ ๊ฐ๊ฒฉ์ ์์ธกํ๋ ๋ชจ๋ธ์ ์ง์ ๊ตฌํํด๋ณด๋ ๊ฒ์ ๋๋ค.
- ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ:
yf.download: Yahoo Finance์์ ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ฌ๊ธฐ์๋ '005930.KS' (์ผ์ฑ์ ์์ ์ฃผ์ ์ฝ๋)์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ
2018๋
11์ 1์ผ๋ถํฐ 2023๋
11์ 1์ผ๊น์ง ๋ค์ด๋ก๋ํฉ๋๋ค.
- ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์:
samsung_stock.head(): ๋ฐ์ดํฐํ๋ ์์ ์ฒ์ ๋ช ํ์ ์ถ๋ ฅํ์ฌ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ดํด๋ด
๋๋ค.
samsung_stock.dtypes: ๊ฐ ์ปฌ๋ผ์ ๋ฐ์ดํฐ ํ์
์ ์ถ๋ ฅํฉ๋๋ค.
samsung_stock.describe(): ์์นํ ์ปฌ๋ผ๋ค์ ๋ํ ์์ฝ ํต๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ ํ๊ท , ํ์คํธ์ฐจ, ์ต์๊ฐ, ์ต๋๊ฐ ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
- ์ข ๊ฐ ๋ฐ์ดํฐ ์๊ฐํ:
plt.figure: ์๊ฐํ์ ํฌ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
plt.plot: ์ผ์ฑ์ ์์ ์ข
๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทธ๋ํ๋ก ๊ทธ๋ฆฝ๋๋ค.
plt.title, plt.xlabel, plt.ylabel: ๊ทธ๋ํ์ ์ ๋ชฉ๊ณผ x, y์ถ์ ๋ ์ด๋ธ์ ์ค์ ํฉ๋๋ค.
plt.show(): ์ค์ ํ ๊ทธ๋ํ๋ฅผ ํ๋ฉด์ ํ์ํฉ๋๋ค.
- ํน์ฑ ์์ง๋์ด๋ง:
์๋ก์ด ํน์ฑ High-Low์ Open-Close๋ฅผ ์์ฑํฉ๋๋ค.
์ด๋ ๊ฐ๊ฐ ํ๋ฃจ ์ค ์ฃผ๊ฐ์ ์ต๊ณ ๊ฐ์ ์ต์ ๊ฐ ๊ฐ์ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ ์๊ฐ์ ์ข
๊ฐ ๊ฐ์ ์ฐจ์ด๋ฅผ ๋ํ๋
๋๋ค.
์ด๋ฌํ ํน์ฑ๋ค์ ์ฃผ๊ฐ์ ์ผ์ผ ๋ณ๋์ฑ์ ์ธก์ ํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํ์ํ ํน์ฑ ์ ํ:
๋ชจ๋ธ์ ์ฌ์ฉํ ํน์ฑ์ ์ ์ ํฉ๋๋ค.
์ฌ๊ธฐ์๋ 'Open', 'High', 'Low', 'Close', 'Volume', 'High-Low', 'Open-Close' ๋ฑ์ด ์ ํ๋ฉ๋๋ค.
- ํ๊ฒ ๋ณ์ ์ค์ :
ํ๊ฒ ๋ณ์๋ก์ ๋ค์ ๋ ์ ์ข
๊ฐ(Close)๋ฅผ ์์ธกํ๊ธฐ ์ํด Target ์ปฌ๋ผ์ ์์ฑํฉ๋๋ค.
shift(-1) ํจ์๋ ๊ฐ ํ์ Close ๊ฐ์ ํ ์นธ์ฉ ์๋ก ์ด๋์์ผ ๋ค์ ๋ ์ ์ข
๊ฐ๋ฅผ ๋ํ๋ด๋๋ก ํฉ๋๋ค.
- ๊ฒฐ์ธก์น ์ ๊ฑฐ:
dropna() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ธก์น๊ฐ ์๋ ํ์ ์ ๊ฑฐํฉ๋๋ค.
์ด๋ ๋ฐ์ดํฐ์ ์ ํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ์ํ ๋จ๊ณ์
๋๋ค.
- ํน์ฑ๊ณผ ํ๊ฒ ๋ถ๋ฆฌ:
๋ฐ์ดํฐ๋ฅผ ํน์ฑ(X)๊ณผ ํ๊ฒ(y)์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ถํ :
train_test_split ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ๋ จ ์ธํธ์ ํ
์คํธ ์ธํธ๋ก ๋๋๋๋ค.
์ฌ๊ธฐ์๋ ๋ฐ์ดํฐ์ 20%๋ฅผ ํ
์คํธ ์ธํธ๋ก ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทํ:
StandardScaler๋ฅผ ์ฌ์ฉํ์ฌ ํน์ฑ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํฉ๋๋ค.
ํ๋ จ ๋ฐ์ดํฐ์๋ fit_transform์, ํ
์คํธ ๋ฐ์ดํฐ์๋ transform์ ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ๋ชจ๋ธ์ด ํ
์คํธ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์์ง ๋ชปํ๊ฒ ํ๊ธฐ ์ํจ์
๋๋ค.
XGBoost ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ฃผ์ ๊ฐ๊ฒฉ์ ์์ธกํ๊ณ , ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํ ์์ธก ๊ฒฐ๊ณผ์ RMSE (Root Mean Squared Error) ๊ฐ์ ๊ณ์ฐํฉ๋๋ค. ๋ํ, ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ์ ๋น๊ต๋ฅผ ์ํ ์๊ฐํ๋ ํฌํจ๋์ด ์์ต๋๋ค.
- ๋ฐ์ดํฐ์ ์ค๋น:
์์ธก ๋ชจ๋ธ์ ์ฌ์ฉํ ํน์ฑ(features)๊ณผ ํ๊ฒ ๋ณ์(target)๋ฅผ ์ ์ํฉ๋๋ค.
X๋ ๋ชจ๋ธ์ ์
๋ ฅ ํน์ฑ, y๋ ์์ธกํ๋ ค๋ ํ๊ฒ ๋ณ์(์ฌ๊ธฐ์๋ 'Close' ์ข
๊ฐ)์
๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทํ:
StandardScaler๋ฅผ ์ฌ์ฉํ์ฌ ํน์ฑ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํฉ๋๋ค.
- ์๊ณ์ด ๊ต์ฐจ ๊ฒ์ฆ ์ค์ :
TimeSeriesSplit์ ์ฌ์ฉํ์ฌ ์๊ณ์ด ๋ฐ์ดํฐ์ ๊ต์ฐจ ๊ฒ์ฆ์ ์ค์ ํฉ๋๋ค.
์๊ณ์ด ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ์์ฐจ์ ์ธ ์ ๋ณด๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์
์ผ๋ฐ์ ์ธ ๊ต์ฐจ ๊ฒ์ฆ ๋ฐฉ๋ฒ ๋์ ์๊ณ์ด์ ํนํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
- ํ๋ จ ๋ฐ ๊ฒ์ฆ ์ธํธ ์ค๋น:
๊ต์ฐจ ๊ฒ์ฆ์์ ์์ฑ๋ ๊ฐ fold์ ํ๋ จ ๋ฐ ๊ฒ์ฆ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ง์ง๋ง fold๋ฅผ ํ๋ จ ๋ฐ ๊ฒ์ฆ ์ธํธ๋ก ์ฌ์ฉํฉ๋๋ค.
- ๋ชจ๋ธ ์ ์ ๋ฐ ํ๋ จ:
XGBRegressor๋ฅผ ์ฌ์ฉํ์ฌ XGBoost ํ๊ท ๋ชจ๋ธ์ ์ ์ํ๊ณ ํ๋ จํฉ๋๋ค.
์ฌ๊ธฐ์๋ 100๊ฐ์ ์ถ์ ๊ธฐ์ ์ต๋ ๊น์ด 3, ํ์ต๋ฅ 0.1์ ์ฌ์ฉํฉ๋๋ค.
- ๋ชจ๋ธ ์์ธก ๋ฐ ํ๊ฐ:
๊ฐ๋ฐ(๊ฒ์ฆ) ์ธํธ์์์ ์์ธก ๊ฐ์ ๊ตฌํ๊ณ , ์ค์ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ํ๊ท ์ ๊ณฑ๊ทผ ์ค์ฐจ(RMSE)๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- ํ ์คํธ ๋ฐ์ดํฐ ์ค๋น ๋ฐ ์์ธก:
๋ฐ์ดํฐ์ ๋ง์ง๋ง 20%๋ฅผ ํ
์คํธ ๋ฐ์ดํฐ๋ก ๊ฐ์ ํ๊ณ , ์ด์ ๋ํ ์์ธก์ ์ํํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์๊ฐํ:
ํ๋ จ, ๊ฒ์ฆ, ํ
์คํธ ์ธํธ ๋ฐ ๋ชจ๋ธ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํฉ๋๋ค.
- ์ฑ๋ฅ ์งํ ์ถ๋ ฅ:
![image](https://private-user-images.githubusercontent.com/117016295/285938897-3c7c8618-0fc1-492e-9bf0-f8ada5e2c68b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjEyMjkwODAsIm5iZiI6MTcyMTIyODc4MCwicGF0aCI6Ii8xMTcwMTYyOTUvMjg1OTM4ODk3LTNjN2M4NjE4LTBmYzEtNDkyZS05YmYwLWY4YWRhNWUyYzY4Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcxN1QxNTA2MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMzVhZTk1ZjJmNTIwOGY2NmQwYWY0MzQ4ZmE2NDQ3ZTM3MTllYWQxMzZmYzE2MmZmOGM0OGZkMDgwY2Y4ZDlkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.kYyd7MCpNy8DpJuEXIZ7J_pilb6_75KhQfgXd82tOjU)
๊ฐ๋ฐ(๊ฒ์ฆ) ์ธํธ์ ๋ํ ๋ชจ๋ธ์ RMSE๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ฃผ์ ๊ฐ๊ฒฉ ์์ธก์ ์ํ ์ ํ์ ์ธ ๋จธ์ ๋ฌ๋ ์ํฌํ๋ก์ฐ๋ฅผ ๋ฐ๋ฅด๋ฉฐ,
์๊ณ์ด ๋ฐ์ดํฐ์ ํน์ฑ์ ๊ณ ๋ คํ ๊ต์ฐจ ๊ฒ์ฆ ๋ฐฉ์์ ์ฑํํฉ๋๋ค.
์ค์ ์ฃผ๊ฐ์ ์์ธก ์ฃผ๊ฐ ์ฌ์ด์ ์ค์ฐจ๋ฅผ ๊ณ์ฐํ๊ณ , ์ด ์ค์ฐจ์ ํ๊ท ๊ณผ ํ์ค ํธ์ฐจ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ๋ํ, ์ค์ฐจ์ ๋ถํฌ์ ์๊ฐ์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ์๊ฐํํ์ฌ, ๋ชจ๋ธ์ ์์ธก์ด ์ด๋ ์ ๋ ์ผ๊ด๋๊ฒ ๋ฒ์ด๋๋์ง, ๋๋ ํน์ ํจํด์ด ์๋์ง๋ฅผ ๋ถ์ํฉ๋๋ค.
- ์์ธก ๊ฒฐ๊ณผ์ ์ค์ ๋ฐ์ดํฐ ๋น๊ต:
comparison_df ๋ฐ์ดํฐํ๋ ์์ ์์ฑํ์ฌ ์ค์ ๊ฐ(y_test)๊ณผ ์์ธก ๊ฐ(test_predictions)์ ๋น๊ตํฉ๋๋ค.
์ค์ฐจ๋ ์ค์ ๊ฐ๊ณผ ์์ธก ๊ฐ์ ์ฐจ์ด(Actual - Predicted)๋ก ๊ณ์ฐ๋ฉ๋๋ค.
- ์ค์ฐจ ๋ถ์:
์ค์ฐจ์ ํ๊ท (error_mean)๊ณผ ํ์คํธ์ฐจ(error_std)๋ฅผ ๊ณ์ฐํ์ฌ
๋ชจ๋ธ์ ์์ธก ์ค์ฐจ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๊ท ์ค์ฐจ๋ ๋ชจ๋ธ์ด ์ผ๋ง๋ ์ ํํ๊ฒ ์์ธกํ๋์ง, ํ์คํธ์ฐจ๋ ์์ธก์ ์ผ๊ด์ฑ์ ๋ํ๋
๋๋ค.
- ์ค์ฐจ์ ๋ถํฌ ์๊ฐํ:
sns.histplot์ ์ฌ์ฉํ์ฌ ์ค์ฐจ์ ๋ถํฌ๋ฅผ ํ์คํ ๊ทธ๋จ์ผ๋ก ์๊ฐํํฉ๋๋ค.
KDE(Kernel Density Estimate)๋ ์ค์ฐจ์ ๋ฐ๋ ์ถ์ ์น๋ฅผ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
์๊ฐ์ ๋ฐ๋ฅธ ์ค์ฐจ๋ฅผ ์๊ฐํํฉ๋๋ค.
- ์ธ์ฌ์ดํธ ๋์ถ:
์ค์ฐจ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋ํ ์ถ๊ฐ์ ์ธ ์ธ์ฌ์ดํธ๋ฅผ ๋์ถํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ค์ฐจ๊ฐ ํน์ ๊ธฐ๊ฐ์ ์ง์ค๋์ด ์๋์ง, ์ผ์ ํ ํจํด์ ๋ณด์ด๋์ง ๋ถ์ํ ์ ์์ต๋๋ค.
![ExpectedPrice](https://private-user-images.githubusercontent.com/117016295/286854942-970f69f4-97b2-4ef5-ad83-9bea2247b342.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjEyMjkwODAsIm5iZiI6MTcyMTIyODc4MCwicGF0aCI6Ii8xMTcwMTYyOTUvMjg2ODU0OTQyLTk3MGY2OWY0LTk3YjItNGVmNS1hZDgzLTliZWEyMjQ3YjM0Mi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcxN1QxNTA2MjBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iMDVlZDEzMjJhZmNiNWJiYzlkMmM4M2E2ZGIyMjYzMmRhZDJkMGM1YTg1MzRjNmUwYWU5ZmJiMDk4ZDI0MGM3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.M0iP99ASKGaEa3vv7RRzIjhMl9pu-yH1fCMhFYilMy0)
- ๋ฐ์ดํฐ์ ์ค๋น:
์ฃผ์์ ์ฌ๋ฌ ํน์ฑ๋ค(Open, High, Low, Close, Volume)์ ํฌํจํ๋ ๋ฐ์ดํฐ์
์ ์ค๋นํ๊ณ , ์ข
๊ฐ(Close)๋ฅผ ์์ธก ๋ชฉํ(target)๋ก ์ค์ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทํ:
StandardScaler๋ฅผ ์ฌ์ฉํด ํน์ฑ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํํ์ฌ, ๊ฐ ํน์ฑ์ด ๋์ผํ ์ค์ผ์ผ์ ๊ฐ๋๋ก ๋ณํํฉ๋๋ค.
์ด๋ ๋ชจ๋ธ์ ํ์ต ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ํ์์ ์ธ ๋จ๊ณ์
๋๋ค.
- ๋ชจ๋ธ ์ ์ ๋ฐ ํ๋ จ:
XGBRegressor๋ก XGBoost ํ๊ท ๋ชจ๋ธ์ ์ ์ํ๊ณ , ์ ๊ทํ๋ ๋ฐ์ดํฐ๋ก ๋ชจ๋ธ์ ํ๋ จ์ํต๋๋ค.
์ด ๊ณผ์ ์ ๋ฐ์ดํฐ์์ ํจํด์ ํ์ตํ์ฌ ๋ฏธ๋์ ์ข
๊ฐ๋ฅผ ์์ธกํ ์ ์๊ฒ ํฉ๋๋ค.
- ๋ฏธ๋ ์์ธก์ ์ํ ๋ฐ์ดํฐ ์์ฑ:
๋ง์ง๋ง ์๋ ค์ง ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ฌ ๋ค์ ๋ ์ ํน์ฑ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ๊ธฐ์๋ 1์ผ์น ๋ฐ์ดํฐ๋ง ์์ธกํฉ๋๋ค.
- ๋ฏธ๋ ๋ฐ์ดํฐ์ ๋ํ ์ฃผ๊ฐ ์์ธก:
ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํด ์์ฑ๋ ๋ฏธ๋ ๋ฐ์ดํฐ์ ์ฃผ๊ฐ๋ฅผ ์์ธกํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์๊ฐํ:
matplotlib ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํฉ๋๋ค. ๊ณผ๊ฑฐ ์ฃผ๊ฐ์ ์์ธก๋ ๋ค์ ๋ ์ ์ฃผ๊ฐ๋ฅผ ๋์ผํ ๊ทธ๋ํ์ ํ์ํฉ๋๋ค.
๊ณผ๊ฑฐ ์ฃผ๊ฐ๋ ํ๋์ ์ ์ผ๋ก, ์์ธก๋ ์ฃผ๊ฐ๋ ๋นจ๊ฐ์ ์ ์ ์ผ๋ก ๋ํ๋ด์ด ๋๋ ท์ด ๊ตฌ๋ถํฉ๋๋ค.
x์ถ์ ๋ฒ์๋ฅผ xlim์ ์ฌ์ฉํด ํน์ ๊ธฐ๊ฐ์ผ๋ก ์ ํํฉ๋๋ค, ์ฌ๊ธฐ์๋ 2023๋
10์ 1์ผ๋ถํฐ 11์ 1์ผ๊น์ง์
๋๋ค.
Clone-NGYB-XGBoost
๋ NGYB๋์StockPricePrediction_v1c_xgboost.ipynb
์ฝ๋๋ฅผ ํด๋ก ํ์์ต๋๋ค.- ๋ฐ์ดํฐ ๋ก๋ ๊ณผ์ ๊ณผ ์ ์ฒ๋ฆฌ ๊ณผ์ ์ ์ผ๋ถ ์์ ํ์ฌ
์ผ์ฑ์ ์
์ ์ฃผ๊ฐ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ต๋๋ค. - Repository ์ถ์ฒ - https://github.com/NGYB/Stocks