์ค๊ณ ์ฐจ ์์ธก ์น ์ดํ๋ฆฌ์ผ์ด์ ํ๋ก์ ํธ
- ๊ธฐ๊ฐ | 2021. 08 ~ 2021. 09
- ๋ด๋น ํํธ | ๊ฐ์ธํ๋ก์ ํธ
- ํ๋ซํผ | Python, Colab, FLASK
- ์น ์ฃผ์ | https://usedcar-haebing25.koyeb.app/
์ํ๋ ์คํ์ ์ค๊ณ ์ฐจ ์ ์ ๊ฐ๊ฒฉ์ ์์ธกํ๊ณ , ๊ฒฐ๊ณผ์ ๊ด๋ จ๋ ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ๋์๋ณด๋๋ก ์ถ๋ ฅํ ์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์/๋ฐฐํฌํ๊ณ ์ ๊ณํํจ
- ์น ์คํฌ๋ํ์ ํตํด ์ค๊ณ ์ฐจ ๋ฐ์ดํฐ ํ๋ณด
- ์ค๊ณ ์ฐจ ๊ฐ๊ฒฉ ์์ธก ML ๋ชจ๋ธ ๊ตฌํ ๋ฐ ์ฑ๋ฅ ํ์ธ
- FLASK๋ฅผ ์ฌ์ฉํ์ฌ ๋์๋ณด๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ
- ๋ณด๋ฐฐ๋๋ฆผ Link ์์ ์น์คํฌ๋ํ์ ํตํด ๋ฐ์ดํฐ ํ๋ณด(์ฝ๋ : ๊นํ๋ธ ๋ด webscrapping.py)
- ๋ฐ์ดํฐ Preprocessing ๋ฐ EDA ๊ด๋ จ ์ฝ๋ ๊นํ๋ธ colabํ์ผ๋ก ์ ๋ก๋
1. Data Shape : 1541 rows, 24 columns
2. ์น์คํฌ๋ํ์ ํตํด ์์งํ Features
- ์ด๋ฆ : ์ค๊ณ ์ฐจ ๋ชจ๋ธ๋ช
- ๊ฐ๊ฒฉ : ์ค๊ณ ์ฐจ ๋งค๋ฌผ ๊ฐ๊ฒฉ
- ์ฐ์ : ๊ฐ์์๋ก ์ ์ฒ๋ฆฌ ํ ํ๊ธฐ
- ์ฃผํ๊ฑฐ๋ฆฌ : km ๋จ์
- ์ฐ๋ฃ : ๋์ ค, ๊ฐ์๋ฆฐ, LPG, ํ์ด๋ธ๋ฆฌ๋
- ๋ฐฐ๊ธฐ๋ : ์ค๋ฆฐ๋์ ์ด ์ฉ๋ / cc๋จ์
- ์์ : ์ค๊ณ ์ฐจ ์์
- ์์งํ์ : ์ค๊ณ ์ฐจ์ ์์ง ์ฌ์ ์์ธ
- ์ฐ๋น : km/โ ๋จ์
- ๊ตฌ๋๋ฐฉ์ : 4WD(4๋ฅ๊ตฌ๋), ์ ๋ฅ, ํ๋ฅ, AWD(์ ๋ฅ๊ตฌ๋)
- ์ค๋ : kg ๋จ์
- ์ต๋ํ ํฌ : ์๊ฐ์ ์ผ๋ก ๋ผ ์ ์๋ ํ / kg.m ๋จ์
- ๋ณดํ์ด๋ ฅ๋ฑ๋ก : ๋ณดํ์ด๋ ฅ๋ฑ๋ก ์ฌ๋ถ(๋ฑ๋ก/๋ฏธ๋ฑ๋ก)
- ์์ ์๋ณ๊ฒฝ : ์ค๊ณ ์ฐจ ์์ ์ ๋ณ๊ฒฝ ํ์
- ์ ์ : ์ค๊ณ ์ฐจ ์ ์ฒด ์์ค, ํ์ ํ์
- ์นจ์์ ์ : ์นจ์๋ก ์ธํ ์ค๊ณ ์ฐจ ์ ์ฒด ์์ค, ํ์ ํ์
- ์นจ์๋ถ์ : ์นจ์๋ก ์ธํ ์ค๊ณ ์ฐจ ์ผ๋ถ ์์ค, ํ์ ํ์
- ๋๋ : ์ค๊ณ ์ฐจ ๋๋ ํ์
- ๋ด์ฐจํผํด(ํ์) : ์ค๊ณ ์ฐจ ํผํด ํ์
- ๋ด์ฐจํผํด(๊ฐ๊ฒฉ) : ์ค๊ณ ์ฐจ ํผํด ๊ฐ๊ฒฉ ์ด์ก
- ํ์ฐจ๊ฐํด(ํ์) : ํ์ฐจ ๊ฐํด ํ์
- ํ์ฐจ๊ฐํด(๊ฐ๊ฒฉ) : ํ์ฐจ ๊ฐํด ๊ฐ๊ฒฉ ์ด์ก
- ์ ์กฐ์ฌ : ํ๋/๊ธฐ์/์๋ณด๋ /์ ๋ค์์ค/์์ฉ/๋ฅด๋
ธ์ผ์ฑ
- ๋ง๋ ฅ : ๋ด์ฐ ๊ธฐ๊ด ์ผ๋ฅ ๋จ์
- ๋ณด์ฆ์ฌ๋ถ : ๋ณด์ฆ์ฌ๋ถ(๋ณด์ฆ/๋ฏธ๋ณด์ฆ)
- ๋ณด์ฆ๊ธฐ๊ฐ : ๋ณด์ฆ๊ธฐ๊ฐ ๊ฐ์ ๋จ์
- ๋ณด์ฆ๊ฑฐ๋ฆฌ : ๋ณด์ฆ๊ฑฐ๋ฆฌ km ๋จ์
- Feature ์ ๊ฑฐ
- ์นจ์์ ์, ์นจ์์ ์, ๋๋์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ value๊ฐ 0 : Feature ์ญ์
- ์ด์์น ์ ๊ฑฐ
- ์ ํํ๊ท๋ถ์์์ ๊ฐ๊ฒฉ, ์ฐ์, ์ฃผํ๊ฑฐ๋ฆฌ ๋ณ์์ ์ด์์น๊ฐ MAE๋ฅผ ๋์ด๋ ๊ฒ์ผ๋ก ํ์ธํจ: ์์ ์ธ ๋ณ์์ ๋ํ ์ด์์น๋ฅผ IQR(Inter Quantile Range)๋ฐฉ์์ผ๋ก ์ ๊ฑฐ
์ด์์น ์ ๊ฑฐ ํ ์ธ ๋ณ์์ ๋ํ Boxplot
- ๊ฐ๊ฒฉ์ ๋ํ Distplot
์ฐ์ธก์ผ๋ก ๊ธด ๊ผฌ๋ฆฌ๋ฅผ ๊ฐ์ง ๊ฐ๊ฒฉ ๋ถํฌ
- ์ฐ์ํ ๋ณ์ ๊ฐ ์๊ด๊ด๊ณ
- ๊ฐ๊ฒฉ๊ณผ ์๊ด๊ด๊ณ๊ฐ ๋์ ๋ณ์๋ ์ฐ์, ์ฃผํ๊ฑฐ๋ฆฌ๊ฐ ์์ ์๊ด๊ด๊ณ, ์ค๋๊ณผ ๋ง๋ ฅ์ด ์์ ์๊ด๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์
- ์ฐ์๊ณผ ์ฃผํ๊ฑฐ๋ฆฌ, ๋ฐฐ๊ธฐ๋๊ณผ ๋ง๋ ฅ ๋ฑ์ด ๋์ ์๊ด์ฑ์ ์ง๋๊ณ ์์. ๋ค์ค๊ณต์ ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ง๋ง, ํน์ฑ์ํธ์์ฉ ๋ฌธ์ ๋ฅผ ์ ํด๊ฒฐํ ์ ์๋ ํธ๋ฆฌ ๋ชจ๋ธ์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํน์ฑ์ํธ์์ฉ์ ๋ํด์๋ ๊ณ ๋ คํ์ง ์๊ธฐ๋ก ํจ
- ๋ฒ์ฃผํ ๋ณ์ ๊ฐ ์๊ด๊ด๊ณ
- ๊ฐ๊ฒฉ๊ณผ ๋ฒ์ฃผํ ๋ณ์๊ฐ์ ๊ด๊ณ์์๋ ํ์ด๋ธ๋ฆฌ๋ ์ฐ๋ฃ, ์ ๋ฅ ๊ตฌ๋๋ฐฉ์, ์ ๋ค์์ค ์ ์กฐ์ฌ, ๋ณด์ฆ ๊ฐ๋ฅ, ๋ณดํ์ด๋ ฅ ๋ฑ๋ก์ด ๋์ ๊ฐ๊ฒฉ์ ํ์ฑํ๋ ๋ฐ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ผ๋ก ํ์ธ๋จ
- ์ค๊ณ ์ฐจ ์ด๋ฆ, ์์งํ์, ์์์ ๊ฒฝ์ฐ ๋์ cardinality๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆด ๊ฒ์ผ๋ก ํ๋จํ๋ฉฐ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋ ฅ๋ฐ๊ธฐ๋ ํ๋ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ํ์ฉ ๋ณ์์์ ์ญ์ ํ๊ธฐ๋ก ํจ
1์ฐจ ๋ชจ๋ธ ์ค ๊ฐ์ฅ ์ข์ ์ฑ๋ฅ์ ๋ณด์ธ LightGBM์ ์ต์ข ๋ชจ๋ธ๋ก ์ ํ
- ๊ธฐ์ค๋ชจ๋ธ(ํ๋ จ ๋ฐ์ดํฐ ๊ฐ๊ฒฉ ํ๊ท ) MAE : 8390594
- Linear Regression MAE : 3924783
- LightGBM Regressior MAE : 3102346
์ฌ์ฉ์ ์ ๋ ฅํ๋ฉด์์ ๋ฐ์ ๋ฐ์ดํฐ ์๋ฅผ ์ค์ฌ์ผํ ํ์์ฑ์ด ์์ผ๋ฏ๋ก sklearn์ Select K-Best์ ์ฌ์ฉํ์ฌ ์ฃผ์ ๋ณ์๋ฅผ 11๊ฐ๋ง ์ถ์ถ
- Select K-Best : Feature Selection์ ์ผ์ข ์ผ๋ก Target ๋ณ์์์ ์๊ด๊ด๊ณ๋ฅผ ๊ณ์ฐํ์ฌ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ํ๋จ๋๋ ๋ณ์๋ฅผ K๊ฐ ์ฐ์ถํ๋ ๋ฐฉ์
- ์ ํ๋ ์ต์ข ๋ณ์ : ์ฐ์, ์ฃผํ๊ฑฐ๋ฆฌ, ์ฐ๋ฃ, ๋ฐฐ๊ธฐ๋, ๋ง๋ ฅ, ์ต๋ํ ํฌ, ์ ์กฐ์ฌ, ๋ณด์ฆ์ฌ๋ถ, ๋ณดํ์ด๋ ฅ๋ฑ๋ก, ๊ตฌ๋๋ฐฉ์, ์ฐ๋น
์ต์ข ๋ชจ๋ธ์ธ LightGBM์ ์ฌ์ฉํ์ฌ ์ต์ ํ๋ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์๋ผ ์์
- lightGBM : Gradient Boosting ๋ชจ๋ธ ์ค ์ฐ์ฐ ์๋๊ฐ ๋นจ๋ผ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌํ๊ธฐ ํธ๋ฆฌํจ
- Gradient Boosting : ์์๋ธ ์๊ณ ๋ฆฌ์ฆ์ ์ผ์ข ์ผ๋ก, Gradient(์์ฐจ)๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๋ชจํ์ ์ฝ์ ์ ๋ณด์ํ๋ ์๋ก์ด ๋ชจํ์ ์์ฐจ์ ์ผ๋ก ์ ํฉํ ๋ค, ์ด๋ค์ ์ ํ๊ฒฐํฉํ์ฌ ์ป์ด์ง ๋ชจํ์ ์์ฑํ๋ ์ง๋ํ์ต ์๊ณ ๋ฆฌ์ฆ
- RandomizedsearchCV : ์ต์ ํ๋ ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์ฐพ๋ ๋ฉ์๋
ํ๋ จ๋ฐ์ดํฐ MAE: 4902909 / R2 Score : 0.56 ๊ฒ์ฆ๋ฐ์ดํฐ MAE: 5567629 / R2 Score : 0.42 ํ ์คํธ๋ฐ์ดํฐ MAE: 4893349 / R2 Score : 0.64
- ๋ฐ์ดํฐ๋์ ๋ถ์กฑ๊ณผ 11๊ฐ์ ๋ณ์๋ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋ง์ด ๋จ์ด์ง. ์ถํ ๋ฐ์ดํฐ ์ถ๊ฐ ํ๋ณด์ ์ต์ ํ ๊ณผ์ ์ ํตํด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ฌ๋ฆด ์์
- ์์ธก๊ฐ๊ฒฉ๊ณผ ์ค์ ๊ฐ๊ฒฉ์ ์ฐจ
- Feature Importance : ๊ฐ๊ฐ ํน์ฑ์ ๋ชจ๋ ํธ๋ฆฌ์ ๋ํด ํ๊ท ๋ถ์๋๊ฐ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์
- Permutation Importance : ๊ด์ฌ์๋ ํน์ฑ์๋ง ๋ฌด์์๋ก ๋ ธ์ด์ฆ๋ฅผ ์ฃผ๊ณ ์์ธก์ ํ์์ ๋ ์ฑ๋ฅ ํ๊ฐ์งํ๊ฐ ์ผ๋ง๋ ๊ฐ์ํ๋ ์ง ์ธก์ ํ๋ ๋ฐฉ์
- ๋ ๋ฐฉ์์ ํตํด ์ฐ์, ์ฃผํ๊ฑฐ๋ฆฌ, ๋ง๋ ฅ, ๋ฐฐ๊ธฐ๋, ์ฐ๋น, ์ต๋ํ ํฌ ์ ๋๊ฐ ๋ชจ๋ธ ์์ธก์ ์ฃผ์ ๋ณ์๋ก ์์ฉํ๋ ๊ฒ์ ํ์ธ
- ๋ฐ์ดํฐ๋์ ๋ถ์กฑ๊ณผ 11๊ฐ์ ๋ณ์๋ง์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ธ์ ์ฑ๋ฅ์ด ๋ง์ด ๋จ์ด์ง. ์ถํ ๋ฐ์ดํฐ ์ถ๊ฐ ํ๋ณด์ ์ต์ ํ ๊ณผ์ ์ ํตํด ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ฌ๋ฆด ์์
- SHAP
- ํ ์คํธ 10๋ฒ ์ธ๋ฑ์ค ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์ฃผํ๊ฑฐ๋ฆฌ, ๋ฐฐ๊ธฐ๋, ๋ณดํ์ด๋ ฅ๋ฑ๋ก์ฌ๋ถ๊ฐ ๊ฐ๊ฒฉ์ ๋์ด๋ ์์ธ์ด๋ฉฐ, ์ฐ์, ์ต๋ํ ํฌ, ๋ง๋ ฅ, ์ฐ๋ฃ๊ฐ ๊ฐ๊ฒฉ ๋ฎ์ถ๋ ์์ธ์ผ๋ก ์์ฉํจ์ ์ ์ ์์
- Framework | FLASK
- DB | SQLITE3, POSTGRE(Elephant SQL)
- Web Hosting | Koyeb
- ์ฌ์ฉ์ ์ ๋ ฅํ๋ฉด : ์ฌ์ฉ์ ์ ๋ ฅ๋ฐ์ดํฐ์ ๋ชจ๋ธ ์์ธก ๊ฒฐ๊ณผ๋ Input Table DB์ ์ ์ฅ๋จ
- ๋์๋ณด๋ : ๋ชจ๋ธ์ ํตํด ์์ธกํ ๊ฐ๊ฒฉ๊ณผ ๊ด๋ จ ๋ถ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์
- ์ง์ ์น์คํฌ๋ํ์ผ๋ก ์์งํ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๋ชจ๋ธ๋งํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ฐฐํฌํ๋ ํ๋ก์ ํธ๋ฅผ ์ํํจ์ผ๋ก์จ, ML ์์ง๋์ด๋ง์ ๋ํ ์ดํด๋ฅผ ํ์ธต ๋ ํค์ธ ์ ์์์
- ๋ฐ์ดํฐ๋์ ๋ถ์กฑ๊ณผ ๋ชจ๋ธ ํ์ดํผํ๋ผ๋ฏธํฐ ์ต์ ํ ๋ฌธ์ , ๋ณ์ ์ ํ์ ๋ฌธ์ ๋ก ์ข์ ์ฑ๋ฅ์ ๋ชจ๋ธ์ ๋ง๋ค์ง ๋ชปํ๋๋ฐ, ์ฐจํ ์์ ์ ํตํด R2 Score 80% ์ด์์ ๋ชจ๋ธ์ ๊ตฌํํ์ฌ ๊ต์ฒดํ ์์ ์