๐ฟ ๋งค์ถ ๋ถํฌ ํ์ธ
- ๋ชจ๋ธ๋ง ์งํ ์ค, ์ข ์๋ณ์์ธ ๋งค์ถ์ ๋ถํฌ๋ฅผ ์ฒดํฌํด๋ณด์๋ค.
- ๊ฐ์ฅ ์ค์ํ ์ด ๋ณ์์ ๋ถํฌ์ ๋ฐ๋ผ ๋ชจ๋ธ ์ฑ๋ฅ์ RMSE๋ก ํ ์ง, MAE๋ก ํ ์ง๊ฐ ์ ํด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ง์ฝ ์๋๊ฐ ๋์ ๋ถํฌ๊ฐ ๊ณ ๋ฅด์ง ์๋ค๋ฉด, RMSE๋ฅผ ์จ์ผํ๊ณ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ MAE๋ฅผ ์ฐ๋ ๊ฒ์ด ๋ณด๋ค ์ง๊ด์ ์ธ ๊ฒฐ๊ณผํด์์ด ๊ฐ๋ฅํ๋ค.
โ ๊ณจ๋ชฉ์๊ถ ๋งค์ถ ๋ถํฌ
- ์๋ ๊ฐ๊น์ง ์ถ๋ ฅํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๊ณจ๋ชฉ์๊ถ์ ๋งค์ถ ๋ถํฌ๋ฅผ ํ์คํ ๊ทธ๋จ์ผ๋ก ๊ทธ๋ ค๋ณด์๋ค.
fig, ax = plt.subplots(1, 1, figsize=(18,10))
g = sns.histplot(df_gol['๋งค์ถ'], color='b', label='Skewness : {:.2f}'.format(df_gol['๋งค์ถ'].skew()), ax=ax)
g.legend(loc='best', prop={'size': 16})
g.set_xlabel("๊ณจ๋ชฉ์๊ถ ๋งค์ถ๋ถํฌ(์ด์์น์ ๊ฑฐ ์ )", fontsize = 16)
g.set_ylabel("Count", fontsize = 16)
plt.show()
# ๋ฐ์ค ํ๋
fig, ax = plt.subplots(figsize = (18,10))
g = sns.boxplot(df_gol['๋งค์ถ'], color='b', ax=ax)
g.set_xlabel("๊ณจ๋ชฉ์๊ถ ๋งค์ถ๋ถํฌ(์ด์์น์ ๊ฑฐ ์ )", fontsize = 16)
g.set_ylabel("Count", fontsize = 16)
plt.show()
- ์ฌ๊ธฐ๊น์ง ์งํํ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ์๋ฌธ์ด ๋ค์๋ค.
- ๊ทธ๋์ ์ด์์น ์ ๊ฑฐ๋ฅผ ๊ฐ๋จํ ์งํํด๋ณด๊ณ ๋ชจ๋ธ๋ง์ ์๋ํด๋ณด๊ธฐ๋ก ํ๋ค.
์ด์์น๋ฅผ ์ ๊ฑฐํ๋ฉด ๋ชจ๋ธ ์ฑ๋ฅ์ด ์ผ๋ง๋ ์ข์์ง๊น?
โ ๊ณจ๋ชฉ์๊ถ ์ด์์น ์ ๊ฑฐ(์ฌ๋ถ์์ ์ด์ฉ)
- ์ฌ๋ถ์์๋ฅผ ํ์ ํด, ์์ผ ๋ฐ๊นฅ์ผ๋ก ๋ฒ์ด๋ ๊ฐ์ ์ด์์น๋ก ํ๋จํ๊ณ ์ ๊ฑฐํ๋ ๊ฒ์ ์๋ํด๋ณด์๋ค.
outlier_ind = []
Q1 = np.percentile(df_gol['๋งค์ถ'], 25)
Q3 = np.percentile(df_gol['๋งค์ถ'], 75)
IQR = Q3 - Q1
outlier_ind = df_gol[(df_gol['๋งค์ถ'] < Q1 - 1.5*IQR) | (df_gol['๋งค์ถ'] > Q3 + 1.5*IQR)].index
upper = Q3 + 1.5*IQR
lower = Q1 - 1.5*IQR
print('upper: ', upper)
print('lower: ', lower)
- ์ด์์น ์ ๊ฑฐ ํ, ๊ณจ๋ชฉ์๊ถ ๋งค์ถ ๋ถํฌ ->> ์๋๋ ํ์คํ ๋์์ง ๊ฒ์ด ๋ณด์ธ๋ค.
- ๋ฐ์ค ํ๋ ->> ๋งค์ถ ์ต๋๊ฐ์ด ๋ง์ด ๋ฎ์์ ธ ์ด์์น๋ฅผ ๋จ์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ํ์ด ์์ ๊ฒ์ด๋ผ ํ๋จํ๋ค.
- ์ด ์ํฉ์์์ ๋ชจ๋ธ๋ง ๊ฒฐ๊ณผ๊ฐ ๋จ์ํ ๊ถ๊ธํ์ฌ ์ผ๋จ ๋ชจ๋ธ๋ง์ ์๋ํ๋ค.
๐ฟ ์ด์์น ์ ๊ฑฐ ํ, ๋ชจ๋ธ๋ง ๊ฒฐ๊ณผ
- ์ปฌ๋ผ์ 13๊ฐ(ํ์๋ณ์ ํ๊ตฌ ์ดํ) ํฌํจ
- k = 10์ผ๋ก ์ํฅ ์กฐ์
ํ๊ท RMSE: 26238.05105698613
ํ๊ท MAE: 18370.828031660763
๐ RMSE๊ฐ ๋ฐ ์ ๋๋ก ๋ฎ์์ก์ง๋ง ์์์ ๊ณ ๋ฏผํ๋๋ก, ์ ๊ฑฐ๋ ์ด์์น์ ์ํ๋ ์๊ถ์ฝ๋์ ๋งค์ถ ๊ฐ์ ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ํ์ธํ ํ์๋ฅผ ๋๊ผ๋ค.
๐ฟ ์ ๊ฑฐ๋ ์ด์์น ๋ถ์
- ์ ๊ฑฐ๋ ์ด์์น ๋ฐ์ดํฐ๋ง ๋ฝ์์ csv ํ์ผ๋ก ์ ์ฅํ๊ณ ๊ฐ๋จํ EDA์ ์๊ฐํ๋ฅผ ์งํํ๋ค.
- ์๋์ ๊ฐ์ด ์ญ์ ๋ ์๊ถ์ฝ๋ 11๊ฐ์ ๋ํ ๋งค์ถ ํ๊ท / ์ญ์ ๋ ํ์ ๊ฐ์๋ฅผ ์ ๋ฆฌํ๋ค.
# ์ฐธ๊ณ ์ฉ ์ฝ๋ ์ผ๋ถ(๊ทธ๋ฃน๋ฐ์ด ์ฌ์ฉ ์ฒดํฌ)
merged = merged.groupby('์๊ถ_์ฝ๋').agg({'๋งค์ถ': 'mean', 'count': 'max'}).reset_index()
- ์ด๋ฅผ ์๊ฐํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค
fig = go.Figure()
# count ์ต๋๊ฐ์ ์ ๊ทธ๋ํ๋ก ์ถ๊ฐ
fig.add_trace(go.Scatter(x=merged['์๊ถ_์ฝ๋'], y=merged['count'], mode='lines+markers', name='์ ๊ฑฐ๋ ์๊ถ ๊ฐ์', line=dict(color='red'), yaxis='y2'))
# ๊ทธ๋ํ ๋ ์ด์์ ์ค์
fig.update_layout(title='์๊ถ์ฝ๋๋ณ ์ญ์ ๋ ๊ฐ์',
xaxis_title='์๊ถ ์ฝ๋',
yaxis_title='๊ฐ',
height=600)
# ๊ทธ๋ํ ํ์
fig.show()
fig = go.Figure()
# ๋งค์ถ ํ๊ท ์ ๋ง๋ ๊ทธ๋ํ๋ก ์ถ๊ฐ
fig.add_trace(go.Bar(x=merged['์๊ถ_์ฝ๋'], y=merged['๋งค์ถ'], name='์ ๊ฑฐ๋ ์๊ถ์ ํ๊ท ๋งค์ถ', marker_color='blue', yaxis='y'))
# ๊ทธ๋ํ ๋ ์ด์์ ์ค์
fig.update_layout(title='์๊ถ์ฝ๋๋ณ ๋งค์ถ ํ๊ท ',
xaxis_title='์๊ถ ์ฝ๋',
yaxis_title='๊ฐ',
height=600)
# ๊ทธ๋ํ ํ์
fig.show()
๐ฟ ์ด์์น ์ ๊ฑฐ ๊ธฐ์ค ์ ํ๊ธฐ
- ๋์ ๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ด์์น ์ ๊ฑฐ์์ ๋ชจ๋ ์ญ์ ํด๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์, ์ฌ๋ถ์์๋ฅผ ๋จ์ ํ์ฉํ ์ด์์น ์ ๊ฑฐ๋ ๋ณธ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์๋ค๊ณ ํ๋จํ๋ค.
- ๋ฐ๋ผ์ ๋ค์ ํ๋ฒ ์ ์ฒด ๋งค์ถ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๊ณ , ์คํ๋ ค 0๊ณผ ๊ฐ์ด ๋๋ฌด ๋ฎ์ ๊ฐ์ ๊ฐ์ง๋ ๋งค์ถ ๋ฐ์ดํฐ์ ํ์ ์ญ์ ํ๋ ๋ฐฉํฅ์ ์ญ์ ํ๊ธฐ๋ก ํ๋ค.
- ์ด์ ๋ํ ํ๋จ ๋ฐ ๊ฒฐ๊ณผ๋ ๋ค์ ํฌ์คํ ์์ ์ ๋ฆฌํ๊ธฐ๋ก ํ๋ค.
728x90
'Projects > ๐ช Convenience Store Location Analysis' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ ๋ฐ ๋๊ธฐ์๊ฐ ์์ธก] 2์ฐจ ์ ์ฒ๋ฆฌ : ์ค๋ณต ํ ์ ๋ฆฌ (0) | 2023.11.15 |
---|---|
[Mini Project] 11. Baseline Modeling (LightGBM + K-fold CV + RandomSearch) (0) | 2023.09.26 |
[Mini Project] 9. ๋ชจ๋ธ๋ง ๋ฐ ํผ์ณ(ํ์๋ณ์) ์ ํ (0) | 2023.09.18 |
[ํ๋ก์ ํธ ์คํฐ๋] ํ๊ท ๋ฌธ์ ํ๊ฐ ์งํ (0) | 2023.09.14 |
[ํ๋ก์ ํธ ์คํฐ๋] Feature Scaling (Min-Max scaling) (0) | 2023.09.14 |