์ด๋ฒ ํฌ์คํ
์์๋ ์นดํ
๊ณ ๋ฆฌ (๋ฒ์ฃผํ) ์๋ฃ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ ์ค ํ๋์ธ Mean Target Encoding์ ๋ํด ์๊ฐํ๊ณ ์ ํ๋ค.
์ฌ์ค ๋๋ ๋ฒ์ฃผํ ๋ณ์ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋ผ๋ฒจ์ธ์ฝ๋ฉ๊ณผ ์ ํซ ์ธ์ฝ๋ฉ๋ง ์๋ ์ค ์์๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ฒ ์ฑ๋ฌด๋ถ์ดํ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ๋ ๋ด๊ฐ ํ๋ ์ ์ฐจ๋ค์ด ์ฌ์ค์ Mean Target Encoding์ด์๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ๋๋ ์๋ฐ์ ์์๋ค.
์๋ฌดํผ ๋ณธ๋ก ์ผ๋ก ๋ค์ด๊ฐ์.
๋ฒ์ฃผํ ๋ณ์๊ฐ ๋ฌด์์ธ์ง๋, ์ด์ ์ ๋ด๊ฐ ์์ฑํ์๋ ๊ธ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
https://iamnotwhale.tistory.com/5
[EDA] ๋ฐ์ดํฐ ์ข
๋ฅ๋ณ ์๊ฐํ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ์ ์ข
๋ฅ ๋ฐ์ดํฐ๋ ํฌ๊ฒ ๋ฒ์ฃผํ, ์์นํ ๋ ๊ฐ์ง ๋ถ๋ฅ๋ก ๋๋ ์ ์๋ค. ๋ฒ์ฃผํ ๋ฐ์ดํฐ๋ ๋ฒ์ฃผ/์นดํ
๊ณ ๋ฆฌ๋ฅผ ๊ตฌ๋ถํ๋ ๊ฐ๊ฐ์ ์ด๋ฆ์ ๊ฐ๋ ๋ฐ์ดํฐ ์ข
๋ฅ๋ค. ex) ์ฑ๋ณ - ์ฌ์ฑ, ๋จ์ฑ / ํ๋ ฅ - ์ด์กธ,
iamnotwhale.tistory.com
๊ฐ๋จํ ๋งํ์๋ฉด, ๋ฒ์ฃผํ ๋ณ์๋ ๋ฒ์ฃผ/์นดํ
๊ณ ๋ฆฌ๋ก ๋๋ ์ ์๋ ๋ฐ์ดํฐ๋ค์ด๋ค.
์๋ฅผ ๋ค์ด ์ฑ๋ณ์ด๋ผ๋ ๋ฐ์ดํฐ๋ ์ฌ์ฑ ๋๋ ๋จ์ฑ์ผ๋ก ๋ถ๋ฅ๋ ์ ์์ผ๋ฏ๋ก ๋ฒ์ฃผํ ๋ณ์๋ค.
๋ฒ์ฃผํ ๋ณ์์ ํ์ ๋ถ๋ฅ๋ก ๋ช
๋ชฉํ (์ฌ์ฑ, ๋จ์ฑ), ์์ํ (1๋ฑ, 2๋ฑ, 3๋ฑ...) ์ ๋ถ๋ฅํ ์ ์์ง๋ง ์ด ๊ธ์์๋ ๋ชฐ๋ผ๋ ๋๋ค.
๋ฒ์ฃผํ ๋ณ์๋ ๋๊ฐ ํ๋ค์ค ๋ฐ์ดํฐํ๋ ์์์ object ํํ๋ก ์ฃผ์ด์ง๋ค. ์ด๋ฅผ ๊ทธ๋๋ก ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํฌ์
ํ ์ ์๋ค. ์๋ํ๋ฉด ์ปดํจํฐ๋ ์ฌ์ฑ/๋จ์ฑ์ด ๋ฌด์์ธ์ง ๊ตฌ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค๋ก์ง ์ซ์ ํํ๋ก ์ฃผ์ด์ก์ ๋๋ง ํด์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ซ์ (int, float) ํํ๋ก ๋ณํํด์ผ ํ๋ฉฐ, ์ด์ ์ฌ์ฉ๋๋ ๊ฒ์ด ์ธ์ฝ๋ฉ์ด๋ค.
๋ฒ์ฃผํ ๋ณ์์ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์ ์๋ ์ ์์ง๋ง, ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ Label Encoding, One-Hot Encoding์ผ ๊ฒ์ด๋ค.
Label Encoding์ ๋จ์ํ๊ฒ ์ฌ๋ฌ ์นดํ
๊ณ ๋ฆฌ์ ๋ฒํธ๋ฅผ ๋งค๊ธด๋ค. ์ด ๋ฒํธ๋ ๋ฌด์์ด ๋ ๋ซ๊ณ ๋ณ๋ก์ด๊ณ ์ด๋ฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์๋๋ค. ๊ทธ๋ฅ 1๋ฒ ๊ทธ๋ฃน, 2๋ฒ ๊ทธ๋ฃน ์ด๋ฐ ๋๋์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํ์ง๋ง ์ด๋ ํธ๋ฆฌ๋ฅผ ์ ์ธํ ์ผ๋ฐ์ ์ธ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์์ ์ข์ ์ฑ๋ฅ์ ๋ด๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์์ฃผ ์ฌ์ฉํ์ง ์๋๋ค.
One-Hot Encoding์ ํ๋์ ์นผ๋ผ๋ง Hot, ๋๋จธ์ง๋ Coldํ๋ค๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ค.
๋ฌด์จ ๋ป์ธ์ง ๋ฐ๋ก ๊ฐ์ด ์ ์ฌ ์๋ ์์ด ๋ค์ ์ ๋ฆฌํ์๋ฉด, ๋ฒ์ฃผํ ๋ณ์ ๊ฐ๋ค์ ๊ฐ๊ฐ ์๋ก์ด ์ปฌ๋ผ์ผ๋ก ์์ฑํ๊ณ , ์ด ์ปฌ๋ผ์ ํด๋นํ๋ ์์ฑ์ ๊ฐ์ง ๋ 1, ์๋ ๊ฑด ์ ๋ถ 0์ผ๋ก ํ์ํ๋ ๊ฒ์ด๋ค.
ํ๋ก ์ค๋ช
ํ๊ฒ ๋ค.
ID
Color
0
Pink
1
Yellow
2
Pink
3
Blue
์ด๋ฐ ๋ฐ์ดํฐ๊ฐ ์์ ๋, Color ์นผ๋ผ์ ์ ํซ ์ธ์ฝ๋ฉ์ ์ ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ดํฐํ๋ ์์ด ๋ณํ๋๋ค.
ID
Color_Pink
Color_Yellow
Color_Blue
0
1
0
0
1
0
1
0
2
1
0
0
3
0
0
1
Color์ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์ด์ ๊ฐ๊ฐ ์์ฑํ์ฌ ์ ๋ณด๋ฅผ ๋ํ๋ผ ์ ์๋ค.
์ ํซ ์ธ์ฝ๋ฉ์ ๋ผ๋ฒจ์ธ์ฝ๋ฉ์ ๋นํด ์ฑ๋ฅ์ ๋์ง๋ง, ๋ฒ์ฃผํ ๋ณ์ ๊ฐ์ด ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ ์ฐจ์์ด ์ง๋์น๊ฒ ์ปค์ ธ ์ฑ๋ฅ์ด ๋ฎ์์ง ์ ์๋ค.
๊ทธ๋ผ Mean Target Encoding์ ์ด๋จ ๋ ์ฌ์ฉํ๋๊ฐ?
์์์ ์๊ฐํ ๋ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋จ์ํ ๋ถ๋ฅ์๋ง ์ฌ์ฉํ๊ณ , Target๊ณผ์ ๊ด๊ณ๋ฅผ ๊ฐ์กฐํ ์ ์๋ค.
์ ํซ ์ธ์ฝ๋ฉ์ ๊ฒฝ์ฐ ๊ฐ์ด ๋ง์์ง๋ฉด ์ฐจ์์ด ์ง๋์น๊ฒ ์ปค์ง๋ ๋ฌธ์ ๋ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด Mean Target Encoding์ ์ด์ฉํ๋ค.
๊ฐ๋จํ๊ฒ ์๊ฐํ์๋ฉด ํด๋น ์นผ๋ผ์ ๊ฐ์ ๋ผ๋ฒจ์ ๊ฐ๊ณ ์๋ ๋ฐ์ดํฐ๋ค์ Target ๊ฐ์ ํ๊ท ์ผ๋ก ์ธ์ฝ๋ฉํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์ฌ๋ฆด ์๋ ์๊ฒ ์ง๋ง, ์ฑ๋ฌด๋ถ์ดํ ๋ฐ์ดํฐ ์ค์๋ Loan Title์ด๋ผ๋ ์นผ๋ผ์ด ์๊ณ ,
ํด๋น ์นผ๋ผ์ ๋ผ๋ฒจ์ ๊ต์ฅํ ๋ค์ํ๋ค.
'Credit card refinancing', 'Debt consolidation',
'Credit card refinance', 'Credit Card Consolidation',
'Debt Consolidation', 'Home improvement', 'Consolidation', 'Other',
'relief', 'debt consolidation loan', 'Major purchase', 'Loan',
'credit card refinance', 'Medical', 'Pool', 'Vacation',
'CC consolidation', 'Medical expenses', 'Moving and relocation',
'payoff', 'Personal Loan', 'debt consolidation', 'Debt Loan',
'House', 'consolidation loan', 'consolidate', 'Credit payoff',
'Bathroom', 'Green loan', 'Debt Payoff', 'Consolidate', 'Business',
'Lending Club', 'Refinance', 'Home Improvement',
๋๋ฌด ๋ง์์ ๊ทธ๋ฅ ์ด์ ๋๋ง ๊ฐ๊ณ ์๋ค.
์ด๋ฌํ ๋ผ๋ฒจ๋ค์ ๋ฐ๋ผ์ target (์ด ์ฑ๋ฌด๋ถ์ดํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ loan status) ๊ฐ์ ๋น์จ, ์ฆ ํ๊ท ์ ๊ตฌํ๊ณ ์ ํ๋ค.
(ํ๊ท ์ ๊ฐ์ ํฉ/๊ฐ์ ๊ฐ์์ธ๋ฐ, target์ด 0, 1๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ํ๊ท ์ด ๋ฐ์ดํฐ์์ 1์ ๋น์จ๊ณผ ๊ฐ์์ง๋ค)
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
df = pd.read_csv("train_loan.csv")
# Target๊ณผ ๋ณ์๋ง ๋ถ๋ฌ์ค๊ธฐ
data = df[['Loan Title', 'Loan Status']]
# Mean Target Encoding
ratio = pd.DataFrame(data.groupby('Loan Title').mean()).reset_index()
# ์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ ์๊ฐํ
ratio.sort_values(by = 'Loan Status').plot.bar()
plt.show()
ratio๋ผ๋ ๋ฐ์ดํฐํ๋ ์ ์นผ๋ผ์์ Loan Title ์นผ๋ผ์ ๊ธฐ์ค์ผ๋ก groupby ๋ฉ์๋๋ก ๋ฌถ๊ณ , mean() method๋ฅผ ์ด์ฉํ์ฌ Mean Target Encoding์ ์งํํ์๋ค.
์๊ฐํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.
๊ธ์๊ฐ ๋ง์์ ์ข... ์ ์์๊ฒ ๋๊ธด ํ๋๋ฐ ๊ฒฝํฅ๋ง ๋ณด๋ฉด ๋๋ค.
์ธ์ฝ๋ฉ ๊ฒฐ๊ณผ๋ก ํด๋ฌ์คํฐ๋ง์ ์งํํ๊ฑฐ๋ ๊ทธ๋๋ก ์ด์ฉํ๋ฉด ๋๋ค.
๋๋ ํด๋ฌ์คํฐ๋ง๊น์ง ์งํํ๋ค.
from sklearn.cluster import KMeans
inertia = []
for i in range(1, 11):
kmeans_plus = KMeans(n_clusters = i, init = 'k-means++')
kmeans_plus.fit(ratio)
inertia.append(kmeans_plus.inertia_)
plt.plot(range(1,11), inertia, marker = 'o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
elbow method๋ก, ํด๋ฌ์คํฐ ๊ฐ์๋ 3๊ฐ๋ก ์ ํ์๋ค.
๊ธฐ์กด์ ์๊ณ ์๋ ์ธ์ฝ๋ฉ๊ณผ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ Target ๋ณ์์์ ๊ด๊ณ๊น์ง ์ธ์ฝ๋ฉ ๊ณผ์ ์์ ๋ํ๋ด๊ณ ์ ํ๋ค๋ ์ ์ด๋ค.