header-img
Info :
๋ฐ€๋„
denseยน
์žฅ๋ž˜ํฌ๋ง : ๋‹จ์œ„ ๋ถ€ํ”ผ ๋‹น ์งˆ๋Ÿ‰์ด ๋ณด๋‹ค ๋นฝ๋นฝํ•œ ์‚ฌ๋žŒ ๋˜๊ธฐ

 

 

์ด์ „ ํฌ์ŠคํŠธ ์š”์•ฝ

 

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” A์‚ฌ์˜ ์ธ์‚ฌ ํšจ์œจํ™”๋ฅผ ์œ„ํ•ด ๊ธ‰์—ฌ ์ฒด๊ณ„ ๊ด€๋ จํ•œ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„ ๋‚ด๊ณ  ์ผ์ฐจ์ ์ธ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๋ชจ์•„์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๊ณตํ•ด ์คฌ๋‹ค. null ๊ฐ’, ์ค‘๋ณต ๊ฐ’, outlier(์ •์ƒ ์ˆ˜์น˜๋ฅผ ๋„˜์–ด์„  ๋ฐ์ดํ„ฐ)๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌํ•ด ์คฌ์œผ๋ฉฐ numeric(์ˆซ์žํ˜•)๊ณผ catergorical(๋ฒ”์ฃผํ˜•) ๋ณ€์ˆ˜์˜ ๋ณ€๋ณ„๋ ฅ์„ ์œ„ํ•ด ๊ฐ ๋ณ€์ˆ˜์˜ ํ˜•ํƒœ๋ฅผ ์ฒดํฌ ํ›„ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ด ์คฌ๋‹ค.

 

์ด๋Ÿฐ ์ „์ฒ˜๋ฆฌ์™€ ๋ฐ์ดํ„ฐ ์ฒดํฌ ๊ณผ์ •์€ ์‹œ๊ฐ„์„ ๋“ค์—ฌ ๊นŠ๊ฒŒ ์ง„ํ–‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค. ์ข‹์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ธํ’‹ํ•ด์•ผ ์ข‹์€ ์•„์›ƒํ’‹์ด ๋‚˜์˜จ๋‹ค. ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๊ฐ€๊ณตํ•ด์ฃผ๋Š” y = f(x)๋ผ๋Š” ๋ฐฉ์ •์‹์—์„œ f๋ผ๋Š” ์‹๊ณผ x๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋ชจ๋‘ ์˜ณ์•„์•ผ๋งŒ ์˜ฌ๋ฐ”๋ฅธ y๊ฐ’์„ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋“ฏ์ด.

 

์ด๋ฒˆ ์Šคํ…์—๋Š” ๊ธฐ์กด ์ „์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด 'ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์ค€์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ ๊ฒ€'ํ•˜๊ณ  '๋ชจ๋ธ๋ง์ด ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ ๋ณ€์ˆ˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ฒŒ ๊ฐ€๊ณต/ ์„ ๋ณ„ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ'ํ•˜๋Š” Data Readiness Check์™€ Feature Engineering ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

Data Readiness Check

 

์„œ๋ก ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, Data Readiness Check๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ์˜ ์ˆ˜์ค€์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ ๊ฒ€ํ•˜๋Š” ํŒŒํŠธ๋‹ค. ์ด ๊ณผ์ •์—์„œ, ์šฐ๋ฆฌ๋Š” Target label๊ณผ Target Ratio๋ฅผ ์ ๊ฒ€ํ•ด ์ฃผ๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ† ๋Œ€๋กœ ๋ถ„์„ ๋ฐฉํ–ฅ์„ฑ์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ๊ฒƒ์ด๋‹ค. 

 

 

์ด ๊ณผ์ •์€ ์—ฌ๋Ÿฌ ๊ด€์ ์—์„œ ์œ ์˜๋ฏธํ•˜๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์˜ํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์ง€๊ธˆ ์ง„ํ–‰ ๋‹จ๊ณ„์—์„œ Target label์ด ๋‚˜์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ปค๋จธ์Šค์‚ฌ์—์„œ ์ฒซ ๊ตฌ๋งคํ•œ ๊ณ ๊ฐ์˜ ์žฌ๊ตฌ๋งค ๋น„์œจ์„ ์ธก์ •ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ๋Š” ์ฒซ ๊ตฌ๋งค ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋งŒ ๋‚˜์™€ ์žˆ๊ณ  ์žฌ๊ตฌ๋งค ๋ฐ์ดํ„ฐ๋Š” ์•„์ง ๋‚˜์™€ ์žˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘๋ถ€ํ„ฐ ์งš๊ณ  ๊ฐ€์•ผ ํ•œ๋‹ค.

 

 

์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์—์„œ Target Ratio ์ž์ฒด๋Š” ์ ์ง€๋งŒ ์ˆ˜์ง‘ ๋ฐ์ดํ„ฐ ์ˆ˜๋Ÿ‰ ์ž์ฒด๋Š” ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ธˆ 'ํฌ๊ธฐํ•˜๊ณ ' ์ผ๋ถ€ ์ง‘๋‹จ์œผ๋กœ ํ•„ํ„ฐ๋ฅผ ๊ฑธ์–ด์„œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ค„์ด๋˜ Target Ratio๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ฃผ ํƒ€๊ฒŸ์ธต์ด 30~40๋Œ€๋ผ๋ฉด 20๋Œ€๋Š” ๋ฐ์ดํ„ฐ์—์„œ ๋นผ๋ฒ„๋ฆฌ๊ณ  ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๋˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ผ๋ถ€๋ถ„์—๋งŒ ์ง€๋‚˜์น˜๊ฒŒ ๋ชฐ๋ ค ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ถ„์„์ด ๋ฌด์˜๋ฏธํ•˜๋‹ค. Data Readiness Check๋Š” ํƒ€๊ฒŸ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ๋” ๊ฒ€์ˆ˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋กœ ํ•˜์—ฌ๊ธˆ ์ด๋Ÿฐ ๋…ผ๋ฆฌ์ƒ์˜ ํ—ˆ์ ์„ ๋ณด๊ฐ•ํ•˜๊ฒŒ ํ•ด ์ค€๋‹ค.

 

 

๋ณธ๊ฒฉ์ ์œผ๋กœ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์ง„ํ–‰ํ•ด ๋ณด์ž. ์ผ๋‹จ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ณด๋ฉด,

 

 

df.head()

 

 

 

 

์—ฌ๋Ÿฌ ์ง€ํ‘œ๋“ค์ด ๋‚˜์˜จ๋‹ค. ์ด ์ค‘์— ํƒ€๊ฒŸ ์ง€ํ‘œ๊ฐ€ ๋˜๋Š” WAGE๋ฅผ ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๋ณด์ž.

 

 

import seaborn as sns
display(pd.DataFrame(df['WAGE'].describe()))
sns.distplot(df['WAGE']);

 

 

describe() ๋กœ ๊ธฐ์ดˆ์ ์ธ ๋ณ€์ˆ˜์˜ ๊ธฐ์ˆ  ํ†ต๊ณ„ ์ž๋ฃŒ๋ฅผ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๋‹ค. distplot ๊ทธ๋ž˜ํ”„์™€ ํ•จ๊ป˜ ํ‘œ๋ฅผ ํ•œ๋ฒˆ ๋‚˜์—ดํ•˜๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

 

ํฌ๊ฒŒ ๋ญ‰์ณ ์žˆ๋Š” ๋ถ€๋ถ„ ์—†์ด ์—ฐ์† ๋ณ€์ˆ˜์Šค๋Ÿฌ์šด ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด์   ๊ฐ ๋ณ€์ˆ˜์™€ WAGE ์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์กฐ๊ธˆ ํŒŒ์•…ํ•ด๋ณผ ์‹œ๊ฐ„์ด๋‹ค. groupby๋กœ OCCUPATION์˜ ๊ฐ ๊ฐ’๋ณ„ WAGE์˜ ํ‰๊ท ์„ ๋‚ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ ๊ฐœ ์ž…๋ ฅํ•ด๋ณด๋ฉด์„œ ๊ด€๊ณ„๋ฅผ ์ฐพ์•„ ๋ณธ๋‹ค.

 

 

eda_df1 = df.groupby('OCCUPATION')['WAGE'].agg(WAGE_mean =('mean')).reset_index()
eda_df1

 

 

 

์ง€๊ธˆ๊นŒ์ง€ ํŒŒ์•…ํ•œ ์ •๋ณด๊ฐ’์œผ๋กœ ๋ณด๋ฉด, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋กœ ๋ถ„์„์„ ์ง„ํ–‰ํ•ด๋„ ๋ฌธ์ œ ์—†์–ด ๋ณด์ธ๋‹ค. ๋ถ„ํฌ๊ฐ€ ๊ฝค ๋„“๊ฒŒ ํผ์ ธ ์žˆ๊ณ , ์œ ์˜๋ฏธํ•œ ๋ณ€์ˆ˜๋„ ๋ช‡ ๋ฝ‘์•˜์œผ๋‹ˆ๊นŒ. ๋‹ค๋งŒ ์‚ด์ง ๊ฑฑ์ •๋˜๋Š” ์ ์€ ๊ฐ’์ด 534๊ฐœ๋ฐ–์— ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ ์ž๋ฃŒ๋ฅผ ๋” ์ˆ˜์ง‘ํ•  ํ•„์š”๋Š” ์žˆ๋‹ค.

 

 

 

 

 

Feature Engineering: ๊ฐœ์š”

 

์•ž์„œ ์ •์˜ํ•œ ๋Œ€๋กœ Feature Engineering์€  '๋ชจ๋ธ๋ง์ด ์ข‹์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐ ๋ณ€์ˆ˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ฒŒ ๊ฐ€๊ณต/ ์„ ๋ณ„ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ'ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์ฆ‰, ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๋ฉ”์ธ์ด ๋˜๋Š” ๋ถ€๋ถ„์€ ์–ผ๋งˆ๋‚˜ ๋‚ ์นด๋กœ์šด Feature, ์ฆ‰ ํƒ€๊ฒŸ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜๋А๋ƒ๋‹ค. ๊ทธ๋Ÿผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ด Feature๋ฅผ ๋‹ค๋“ฌ์–ด์ค„ ์ˆ˜ ์žˆ์„๊นŒ? ์ด๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

 

 

* Classification(๋ถ„๋ฅ˜) : bin(ํ†ต)์œผ๋กœ ๊ตฌ๋ถ„ ํ›„ Target ๋ณ€์ˆ˜์™€์˜ ๊ด€๊ณ„ ํŒŒ์•…
* Regression(ํšŒ๊ท€) : Target ๋ณ€์ˆ˜์™€์˜ correlation์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ bin(ํ†ต)์œผ๋กœ ๊ตฌ๋ถ„ ํ›„ Target ๋ณ€์ˆ˜์™€์˜ ๊ด€๊ณ„ ํŒŒ์•…

 

 

์ด์ค‘ Classification, ๋ถ„๋ฅ˜ ๋ฐฉ์‹์€ OCCUPATION๊ณผ WAGE ๊ฐ’์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๊ฐ’ ๋ณ„(bin)๋กœ ํ‘œ๋กœ ์ •๋ฆฌํ–ˆ๋˜ ๊ทธ ๋ฐฉ์‹์ด๋‹ค. OCCUPATION์ด ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์ด๊ณ  WAGE์ด ์—ฐ์†ํ˜• ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ๊ฒŒ ๋ถ„์„ํ•ด๋ณผ ์ˆ˜ ์—†์—ˆ๋‹ค. ์•„๋ž˜์„œ๋Š” ์—ฐ์†ํ˜• ๋ณ€์ˆ˜์™€ ์—ฐ์†ํ˜• ๋ณ€์ˆ˜์™€์˜ ๋น„๊ต๋ฅผ Regression, ํšŒ๊ท€ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ๋‹ค.

 

 

 

 

 

Feature Engineering: Numerical features

 

 

Numerical feature๋ถ€ํ„ฐ ๋‹ค๋ค„ ๋ณธ๋‹ค. ์šฐ์„  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ ,

 

!pip install optbinning
# ํŒจํ‚ค์ง€ ์„ค์น˜

 

 

seaborn ํŒจํ‚ค์ง€์˜ heatmap plot์œผ๋กœ x์™€ y๊ฐ€ ๊ฐ๊ฐ ๋งŒ๋‚˜๋Š” ์ง€์ ์—์„œ ์ƒ๊ด€๊ณ„์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ผ ์žˆ๋Š”์ง€ ์‹œ๊ฐํ™”๋œ ํ˜•ํƒœ๋กœ ํŒŒ์•…ํ•ด ๋ณด๊ฒ ๋‹ค. 

# โ–ถ heatmap plot
 
import seaborn as sns
import matplotlib.pyplot as plt
 
# โ–ถ ๋ชจ๋“  ์กฐํ•ฉ, ์ƒ๊ด€๊ณ„์ˆ˜ ํ‘œํ˜„
df_pair = df[numerical_list]
mask = np.triu(np.ones_like(df_pair.corr(), dtype=np.bool))
sns.heatmap(df_pair.corr(), vmin = -1, vmax = +1, annot = True, cmap = 'coolwarm', mask = mask);
plt.gcf().set_size_inches(10, 5)

 

 

corr ๋Š” ์ฝ”๋Ÿด๋ ˆ์ด์…˜์ด๋‹ค. ์ƒ๊ด€ ๊ณ„์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋Š” ๊ฐ’์ด๊ณ  ์—ฐ์ด์–ด ๋‚˜์˜ค๋Š” ๊ฒƒ๋“ค์€ ์‹œ๊ฐํ™” ์˜ต์…˜๋“ค์ด๋‹ค. 

vmin/ vmax๋Š” ๋ฒ„ํ‹ฐ์ปฌ ๋ ˆ์ธ์ง€๋ฅผ ์ •ํ•ด ์ฃผ๋Š” ๊ฐ’์ด๋‹ค. ์ƒ๊ด€๊ณ„์ˆ˜์˜ ๋ ˆ์ธ์ง€๋ฅผ -1๋ถ€ํ„ฐ 1๊นŒ์ง€ ์„ค์ •ํ•˜๋Š” ๊ฒƒ.

annot์€ annotation true๋กœ ์‹ค์ œ ์ƒ๊ด€๊ณ„์ˆ˜์— ๋Œ€ํ•œ ์ˆซ์ž๋ฅผ ๊ทธ๋ž˜ํ”„ ์œ„์— ์“ธ ๊ฑฐ๋ƒ ๋ง ๊ฑฐ๋ƒ” ๋œป์ด๋‹ค. ์“ฐ๋Š” ๊ฒŒ ๋” ์ง๊ด€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ํ‘œ์‹œํ–ˆ๋‹ค.

mask = mask๋Š” ์ค‘๋ณต ๊ฐ’์„ ๊ทธ๋ž˜ํ”„์—์„œ ์ œ๊ฑฐํ•˜๋Š” ์‹์ด๋‹ค. ๋งŒ์•ฝ์— ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋™์ผํ•œ ๊ฐ’์ด ๋ฐ์นผ์ฝ”๋งˆ๋‹ˆ์ฒ˜๋Ÿผ ๊ธฐ์ž…๋œ๋‹ค.

 

 

 

 

ํ‘œ๋ฅผ ๋ณด์ž. 0.2 ์ด์ƒ์ด๋ฉด ๋ณดํ†ต ์–ด๋А ์ •๋„ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณธ๋‹ค. ์ด๋ฅผ ๋„˜๊ธด ๊ฐ’์ด ๋‘ ๊ฐœ, ์‚ด์ง ๋œ ๋„๋‹ฌํ•œ ๊ฐ’ ํ•˜๋‚˜๊ฐ€ ๋ณด์ธ๋‹ค. ๋นจ๊ฐ›๊ฒŒ ๋“ค์–ด๊ฐ„ ๋ถ€๋ถ„์„ ๋ณด๋ฉด AGE์™€ EXPERIENCE์˜ ๊ด€๊ณ„๋‹ค. ๋‚˜์ด๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๊ฒฝ๋ ฅ์ด ๋งŽ๋ƒ” ๊ฒƒ์ธ๋ฐ ์ถ”๊ฐ€์ ์ธ ํ•ด์„์„ ์š”ํ•˜์ง€ ์•Š๋Š” ๋‹จ์ˆœํ•œ ์ •๋ณด๊ฐ’์ด๋‹ค. ์กฐ๊ธˆ ๋” ๋ณผ๋งŒํ•œ ์ •๋ณด๋Š” AGE์™€ WAGE ๊ฐ’์ด๋‹ค. ๋‚˜์ด์— ๋”ฐ๋ผ ๊ฒฝ๋ ฅ์ด ๋งŽ๋‹ค๋ฉด ๋‚˜์ด์™€ ์—ฐ๋ด‰๋„ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ์œ ์˜๋ฏธํ•œ ๊ฐ’์— ๋„๋‹ฌํ•˜์ง„ ๋ชป ํ–ˆ๋‹ค. ์–ด๋ฆฌ๊ณ  ์‹ค๋ ฅ ์ข‹์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ๋ˆ์„ ๋ฐ›๊ณ  ์žˆ๋‹จ ์‚ฌ์‹ค์˜ ์ฆ์ฏค ๋˜๊ฒ ๋‹ค. ๋‹ค์Œ์€ EDUCATION๊ณผ WAGE์˜ ๊ด€๊ณ„. ์ด๊ฑด ํ™•์‹คํžˆ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์–ด ๋ณด์ธ๋‹ค. ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๋ณผ๊นŒ.

 

 

# โ–ถ scatter plot(Followers & Followers_gained)
sns.scatterplot(data = df, x='EDUCATION', y='WAGE');

 

 

 

 

scatter plot, ์‚ฐ์ ๋„ ํ˜•์‹์œผ๋กœ EDUCATION๊ณผ WAGE์˜ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ ค ๋ดค๋‹ค. EDUCATION์ด ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์ „์ฒด ๊ฐ’์ด ์šฐ์ƒํ–ฅํ•˜๊ณ  ์žˆ๋Š” ์ ์ด ๋ณด์ธ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ๋ถ„์„์— ์œ ์˜๋ฏธํ•œ ๋ณ€์ˆ˜๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. quantile๋กœ ํ‘œ๋กœ๋„ ๋ด ๋ณด์ž.

 

 

 

 

๊ฐ’์ด ์ ํ•‘ํ•˜๋Š” ๊ตฌ๊ฐ„์ด ๋ช‡ ์žˆ๋‹ค. 3๊ฐœ ์ •๋„์˜ ๊ตฌ๊ฐ„์œผ๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์›๋ณธ์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐ์ดํ„ฐ ๋งˆํŠธ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๊ตฌ๊ฐ„ํ™”ํ•ด ๋ณด์ž.

 

 

# โ–ถ Binning
df_mart = df.copy()
val = 'EDUCATION'

quantile  = df_mart[val].quantile(q=list(np.arange(0.05,1,0.05)), interpolation = 'nearest')
# quantile

# โ–ถ ๊ทธ๋ฃน ์ดˆ๊ธฐํ™”
df_mart['grp'] = 0

# โ–ถ 40%, 75% ๊ธฐ์ค€์œผ๋กœ ์ด 3๊ฐœ ๊ตฌ๊ฐ„ํ™” ์ง„ํ–‰
for i in  range(len(df_mart[val])) :
  if df_mart.loc[i, val] <= quantile.iloc[7] : # 40%
    df_mart.loc[i, 'grp'] = 1
  elif df_mart.loc[i, val] <= quantile.iloc[14] : # 75%
    df_mart.loc[i, 'grp'] = 2
  else : df_mart.loc[i, 'grp'] = 3

 

 

์„ธ ๊ทธ๋ฃน์˜ ๋น„์œจ์„ ๋ณด์ž.

 

# ๊ทธ๋ฃน ๋น„์œจ

display(df_mart['grp'].value_counts())
display(df_mart['grp'].value_counts(normalize=True))

 

 

 

 

# ์—ฐ๋ด‰ ํ‰๊ท ๊ฐ’

pd.options.display.float_format = '{:.5f}'.format
df_mart.groupby('grp')['WAGE'].mean()

 

 

 

 

0.38์ด๋ผ๋Š” ์ƒ๊ด€๊ณ„์ˆ˜๋กœ๋Š” ์–ผ๋งˆ๋‚˜ ์˜ค๋ฅด๋Š”์ง€ ๊ฐ์ด ์•ˆ ์™”๋˜ ๋ถ€๋ถ„๋„ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ๋ฝ‘์•„ ๋ณด๋ฉด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿผ, ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ 0.18์ •๋„์˜€๋˜ AGE์™€ WAGE์˜ ๊ด€๊ณ„๋„ ๊ถ๊ธˆํ•ด์ง„๋‹ค. ํ•œ ๋ฒˆ๋งŒ ๋” ํ•ด๋ณด์ž.

 

 
# โ–ถ scatter plot(Followers & Followers_gained)
sns.scatterplot(data = df, x='AGE', y='WAGE');

 

 

 

 

 

# โ–ถ Binning
df_mart = df.copy()
val = 'AGE'

quantile  = df_mart[val].quantile(q=list(np.arange(0.05,1,0.05)), interpolation = 'nearest')
# quantile

# โ–ถ ๊ทธ๋ฃน ์ดˆ๊ธฐํ™”
df_mart['grp'] = 0

# โ–ถ 40%, 75% ๊ธฐ์ค€์œผ๋กœ ์ด 3๊ฐœ ๊ตฌ๊ฐ„ํ™” ์ง„ํ–‰
for i in  range(len(df_mart[val])) :
  if df_mart.loc[i, val] <= quantile.iloc[3] : # 40%
    df_mart.loc[i, 'grp'] = 1
  elif df_mart.loc[i, val] <= quantile.iloc[14] : # 75%
    df_mart.loc[i, 'grp'] = 2
  else : df_mart.loc[i, 'grp'] = 3

 

 

# โ–ถ bin๋ณ„ ๋น„์ค‘ ๋น„๊ต
display(df_mart['grp'].value_counts())
display(df_mart['grp'].value_counts(normalize=True))

 

 

 

 

# โ–ถ bin๋ณ„ Target ๋ณ€์ˆ˜์™€์˜ ๊ด€๊ณ„
pd.options.display.float_format = '{:.5f}'.format
df_mart.groupby('grp')['WAGE'].mean()

 

 

 

 

์œ ์˜๋ฏธํ•œ ๊ด€๊ณ„๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„๋‚ด๊ฑฐ๋‚˜ ์˜๋ฏธ๊ฐ€ ์—†๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฑธ๋Ÿฌ ์ฃผ๋Š” ์ž‘์—…์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ํ€„๋ฆฌํ‹ฐ๋ฅผ ๋ณด๊ฐ•ํ•˜๊ฑฐ๋‚˜ ๋ถ„์„ ๋ฐฉํ–ฅ์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

Feature Engineering: Catergorical features

 

Catergorical feature๋„ (Numerical feature๋งŒํผ ๋ณผ๋ฅจ์ด ํฌ์ง„ ์•Š์ง€๋งŒ) ๊ทธ๋ž˜ํ”„, ํ‘œ ๋“ฑ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ถ„์„ ๋ชฉ์ ๋ณด๋‹ค๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฐ์†ํ˜• ๋ณ€์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด ๋” ํฌ๋‹ค.

 

 

df[categorical_list].head()

 

 

 

 

meta

 

 

 

 

import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(['dark_background'])

# โ–ถ target ๊ธฐ์ค€(hue,์ƒ‰์ƒ)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ Plot
sns.catplot(x="SECTOR", kind="count",palette="pastel", edgecolor=".6",data=df);
# plt.xticks(rotation=-20)
plt.gcf().set_size_inches(25, 3)

# โ–ถ sample col eda
eda_df = df.groupby('SECTOR')['WAGE'].agg(mean =('mean')).reset_index()
display(eda_df)

 

 

 

 

*ํ•ด๋‹น ํฌ์ŠคํŠธ๋Š” ํŒจ์ŠคํŠธ์บ ํผ์Šค์˜ ๋ฐ”์ดํŠธ ๋””๊ทธ๋ฆฌ EXPORT ๊ฐ•์˜์—์„œ ์ œ๊ณต๋˜๋Š” ๋ฐ์ดํ„ฐ์…‹ ๋ฐ ์ž๋ฃŒ๋กœ ์ž‘์„ฑ๋๋‹ค.

๋”๋ณด๊ธฐ
TOOLS/Python