ๆผธๅ…ฅไฝณๅขƒ

๐Ÿชช HOME CREDIT #2:EDA

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์ด๋‹ค. ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์ด ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ๋งŒํผ, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ธ์˜ ์„ค๋ช… ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ์ค‘์š”ํ•œ ๋งŒํผ,
๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋‘๋‡Œ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜์˜€๋‹ค.

๋ฐ์ดํ„ฐ ํ™•์ธ

๋ฐ์ดํ„ฐ ์„ค๋ช… ํŽ˜์ด์ง€ : https://www.kaggle.com/competitions/home-credit-default-risk/data

์ด๋ฒˆ ์‹ค์Šต์—์„œ๋Š” application.csv ๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ถ”ํ›„์— SK_ID_CURR์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ํ•ฉ์ณ๋ณผ ์˜ˆ์ •์ด๋‹ค.

TARGET์˜ ๋ถ€๋„/์ •์ƒ ๋น„์œจ์€

๋ถ€๋„ ๋น„์œจ: 8.07%
์ •์ƒ ๋น„์œจ: 91.93%

์—ญ์‹œ๋‚˜ ๋ถˆ๊ท ํ˜•์ด ์‹ฌํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๋ถ„์„ ์ œ์™ธ ๋ณ€์ˆ˜

122๊ฐœ์˜ ์ปฌ๋Ÿผ ์ค‘ 1์ฐจ์ ์œผ๋กœ ํ•„์š” ์—†๋Š” ์ปฌ๋Ÿผ๋“ค์€ ์ œ์™ธ์‹œ์ผฐ๋‹ค.

  1. ๊ฒฐ์ธก์น˜ ๋น„์œจ๋กœ ๋ณ€์ˆ˜ ๋ฒ„๋ฆฌ๊ธฐ
    ๊ฒฐ์ธก์น˜๋Š” ์ดํ›„ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๊ทธ ์ „์— ๊ฒฐ์ธก์น˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๋ณ€์ˆ˜๋“ค์€ ๋ฏธ๋ฆฌ ์ œ์™ธํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
    ์ „์ฒด ๋ฐ์ดํ„ฐ์—์„œ ๊ฒฐ์ธก ๋น„์œจ์ด 60% ์ด์ƒ์ธ ๋ณ€์ˆ˜๋“ค์„ ์ œ์™ธ์‹œ์ผฐ๋‹ค.
    ๋น„์œจ์˜ ๊ธฐ์ค€์— ๋Œ€ํ•ด์„œ๋Š” ๋ณดํ†ต 50% ์ด์ƒ์ด๋ฉด ์‹ ๋ขฐ๋„ ๋ฌธ์ œ๋กœ ์ œ์™ธ์‹œํ‚จ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ,
    ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์ž„๊ณ„๊ฐ’์„ 50%๋กœ ์žก์œผ๋ฉด ๋ณ€์ˆ˜๊ฐ€ 14๊ฐœ๊ฐ€ ๋‚ ๋ผ๊ฐ„๋‹ค.
    ๊ทธ ์ค‘ ์ค‘์š”ํ•ด ๋ณด์ด๋Š” ๋ณ€์ˆ˜๋“ค์ด ๊ฝค ํฌํ•จ๋˜์–ด ์žˆ์œผ์„œ ๊ทธ๋ƒฅ ๋‚ด ์ž„์˜๋กœ 60%๋กœ ํ–ˆ๋‹ค.
    ๋น…๋ถ„๊ธฐ ํ•„๊ธฐ ๊ณต๋ถ€ํ•  ๋•Œ๋„ ์—ฐ๊ตฌ์ž์˜ ์ฃผ๊ด€์ด ๊ฐœ์ž…๋˜๋Š” ๋ถ€๋ถ„์ด ์ „์ฒ˜๋ฆฌ๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ ๋ฌธ์ œ ์—†์ง€ ์•Š์„๊นŒ… ์ƒ๊ฐํ•œ๋‹ค.
def drop_null_cols(df, threshold=0.6):
    """
    ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ ๊ฒฐ์ธก์น˜ ๋น„์œจ์ด threshold ์ด์ƒ์ธ ๋ณ€์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ํ•จ์ˆ˜
    """
    null_percent = df.isnull().mean()
    drop_cols = list(null_percent[null_percent >= threshold].index)
    df = df.drop(drop_cols, axis=1)
    print(f"Dropped {len(drop_cols)} columns: {', '.join(drop_cols)}")
    return df

# Dropped 6 columns: OWN_CAR_AGE, YEARS_BUILD_AVG, COMMONAREA_AVG, FLOORSMIN_AVG, LIVINGAPARTMENTS_AVG, NONLIVINGAPARTMENTS_AVG
  1. ์ค‘๋ณต๋˜๋Š” ์ง‘๊ณ„ ๋ณ€์ˆ˜ ์ œ๊ฑฐ
    ๋™์ผํ•œ ์ด๋ฆ„์— _AVG, _MEDI, _MODE ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด๋“ค ์ค‘ AVG ๋ณ€์ˆ˜๋“ค๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.
    ์ด๋•Œ _MODE ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ์ด ์žˆ๋Š”๋ฐ, ์ค‘์•™๊ฐ’์„ ์˜๋ฏธํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํƒ€์ž…์„ ์˜๋ฏธํ•˜๋Š” _MODE ๋ณ€์ˆ˜๋“ค์ด ์žˆ์–ด์„œ ์ด ๋ณ€์ˆ˜๋“ค์€ ์ œ์™ธํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
# ์ค‘๋ณต ์ •๋ณด ์ œ๊ฑฐ (์ œ๊ฑฐํ•˜๋ฉด ์•ˆ๋˜๋Š” MODE (์ค‘์•™๊ฐ’ ์•„๋‹Œ๊ฑฐ))
get_base = lambda sfx: [c.replace(sfx, '') for c in df.columns if c.endswith(sfx)]

mode = get_base('_MODE')
medi = get_base('_MEDI')
avg  = get_base('_AVG')

intersection = list(set(mode) & set(medi) & set(avg))
difference = list(set(mode) - set(medi) - set(avg))

mode_medi_cols = [col for col in df.columns if '_MODE' in col or '_MEDI' in col]
mode_medi_cols = [col for col in mode_medi_cols if col not in difference]
df.drop(columns=mode_medi_cols, inplace=True, errors='ignore')

# ์ œ๊ฑฐ ์ œ์™ธ ๋ณ€์ˆ˜:['EMERGENCYSTATE', 'TOTALAREA', 'FONDKAPREMONT', 'WALLSMATERIAL', 'HOUSETYPE']

์ดˆ๊ธฐ์— 122๊ฐœ์—์„œ 34๊ฐœ๋ฅผ ์ œ์™ธํ•œ 88๊ฐœ์˜ ์ปฌ๋Ÿผ์„ ๊ฐ€์ง€๊ณ  ๋ณธ๊ฒฉ์ ์ธ ์ „์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.

1์ฐจ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ

๋ฐ์ดํ„ฐ๋“ค๊ณผ ๋ณ€์ˆ˜ ์„ค๋ช…์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ๋”ฐ๋กœ ํŠน๋ณ„ํžˆ ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•  ๋ณ€์ˆ˜๋“ค์€ ์—†์„๊นŒ ๊ณ ๋ฏผํ•ด๋ดค๋‹ค.

๊ทธ ๊ฒฐ๊ณผ _DAYS ๋ณ€์ˆ˜์™€ FLAG_DOCUMENT ๋ณ€์ˆ˜๋Š” ๋‚˜์ค‘์— ๋ถ„์„์— ๋” ์šฉ์ดํ•˜๊ฒŒ ๋ฏธ๋ฆฌ ๋ณ„๋„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ํŒ๋‹จ์„ ํ–ˆ๋‹ค.

  1. _DAYS ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜
    ์ด ๋ฐ์ดํ„ฐ์…‹์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ ์งœ ๊ด€๋ จ ๋ฐ์ดํ„ฐ์ด๋‹ค.
    DAYS_BIRTH, DAYS_REGISTRATION, DAYS_EMPLOYED ๋“ฑ DAYS_๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์ด๋‹ค.
    “time only relative to the application” ์ด๋ผ๊ณ  ์„ค๋ช…๋˜์–ด ์žˆ๊ณ , ๋ฐ์ดํ„ฐ๋“ค์€ ๋Œ€์ฒด๋กœ ์Œ์ˆ˜ ํ˜•ํƒœ์ด๋‹ค.

Your Alt Text

์ฆ‰, ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘์ผ์„ (0) ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ์ผ์ž๋ฅผ ์—ญ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์ˆ˜์ง‘์ผ 30์ผ ์ „์— ์ง์žฅ์„ ๊ตฌํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ณ ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋Š” -30 ์ธ๊ฑฐ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์ง•์€ ํ–ฅํ›„ ๋ฐ์ดํ„ฐ ํ•ด์„์ด๋‚˜ ํŒŒ์ƒ๋ณ€์ˆ˜ ์ƒ์„ฑ ์‹œ ๋ถˆํŽธํ•จ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ์— ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์–‘์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์˜€๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์ „์— ์ฃผ์˜ํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค.
DAYS_EMPLOYED์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋Œ€์ฒด๋กœ ๋‹ค ์Œ์ˆ˜์ด์ง€๋งŒ ๊ฐ„ํ˜น 365243 ๊ฐ’์ด ์ฐํ˜€์žˆ๋‹ค.
์ด๋Š” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ์ž๊ฐ€ ๋ฌด์ง์ธ ๊ณ ๊ฐ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์–‘์ˆ˜๊ฐ’์„ ๋Œ€์ž…ํ•ด๋‘” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๊ฐ’์€ ๋‹ค 0์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์˜€๋‹ค.(๊ทผ๋ฌด ์ผ์ˆ˜๊ฐ€ ์—†์Œ) ๊ทธ๋ฆฌ๊ณ  ๋ฌด์ง ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ณ„๋„์˜ ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜๋„ ์ƒ์„ฑํ•ด์คฌ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

Your Alt Text

  1. FLAG_DOCUMENT ์ฒ˜๋ฆฌ
    ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ฉด FLAG_DOCUMENT ๊ฐ€ 2๋ถ€ํ„ฐ 21๊นŒ์ง€ ์žˆ๋Š”๋ฐ(0:๋ฏธ์ œ์ถœ, 1:์ œ์ถœ), ์ € ๋ฌธ์„œ๋“ค์ด ์–ด๋–ค ๋‚ด์šฉ์ธ์ง€๋Š” ์•Œ ์ˆ˜๊ฐ€ ์—†๋‹ค.
    ๊ทธ๋ ‡๊ธฐ์— ์ € ๋ฌธ์„œ๋“ค์„ ๋‹ค ๊ฐ€์ง€๊ณ  ๋ถ„์„ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ๊ฐœ๋ณ„ ๋ฌธ์„œ ์ œ์ถœ ํŒจํ„ด๋“ค์„ ๋จผ์ € ํŒŒ์•…ํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

Your Alt Text

๋ฌธ์„œ 3์˜ ๊ฒฝ์šฐ ๊ณ ๊ฐ์˜ 70%์ด์ƒ์ด ์ œ์ถœํ•œ๊ฑธ๋กœ ๋ณด์•„ ๋‚˜๋ฆ„์˜ ํ•„์ˆ˜์„œ๋ฅ˜? ์ธ๋“ฏํ•˜๋‹ค.

์šฐ์„  ๊ฐ ๊ณ ๊ฐ์ด ์ œ์ถœํ•œ ๋ฌธ์„œ์˜ ์ดํ•ฉ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์คฌ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•„์ˆ˜ ์„œ๋ฅ˜๋กœ ๋ณด์ด๋Š” 3๋ฒˆ ๋ฌธ์„œ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋˜ ๋ฌธ์„œ๋ฅผ ์ œ์™ธํ•œ ๊ณ ๊ฐ์ด ์žˆ๋‹ค๋ฉด ํ”Œ๋ž˜๊ทธ ๋ณ€์ˆ˜๋กœ ๋˜ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
๋˜ํ•œ ์ œ์ถœ ๋นˆ๋„๊ฐ€ ๋„ˆ๋ฌด ๋‚ฎ์€ ์„œ๋ฅ˜์˜ ๊ฒฝ์šฐ๋Š” ์˜คํžˆ๋ ค ๋„์›€์ด ์•ˆ ๋  ๊ฒƒ ๊ฐ™์•„ ์ œ๊ฑฐํ•ด ์ฃผ์—ˆ๋‹ค.

๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ถ„๋ฅ˜

๋‹ค์Œ์€ ๋ฒ”์ฃผํ˜•, ์ˆ˜์น˜ํ˜•์œผ๋กœ ์ปฌ๋Ÿผ์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค.
select_dtypes์œผ๋กœ ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
๋ฐ์ดํ„ฐ ์ค‘์—๋Š” ๊ฐ’์€ ์ˆซ์ž์ด์ง€๋งŒ ์‚ฌ์‹ค์ƒ ์˜๋ฏธ๋Š” ๋ฒ”์ฃผํ˜•์ธ ๋ณ€์ˆ˜๋“ค๋„ ์žˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด FLAG ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋“ค์ด๋‹ค.
๋”ฐ๋ผ์„œ ์ด ๋ณ€์ˆ˜๋“ค์€ ๋ณ„๋„๋กœ ๋ฒ”์ฃผํ˜• ์ปฌ๋Ÿผ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๋ณ€์ˆ˜๋ช… ํ•˜๋‚˜ํ•˜๋‚˜ ์ฝ์œผ๋ฉด์„œ ๋ถ„๋ฅ˜ํ•ด๋„ ๋˜์ง€๋งŒ, ๋” ๋งŽ์€ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ค„์•ผํ•  ๋•Œ๋ฅผ ๋Œ€๋น„ํ•ด ์•ฝ๊ฐ„์˜ ํŽธ๋ฒ•(?)์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ๊ฐ’์ด ํŠน์ • ๊ฐœ์ˆ˜ ์ดํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ”์ฃผํ˜•์œผ๋กœ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

# ๋ฒ”์ฃผํ˜•, ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜ ๋ถ„๋ฅ˜ 
num_cols = df.select_dtypes(include=np.number).columns.tolist()
num_cols.remove('TARGET')

potential_cat_cols = []

# ๊ธฐ์ค€ ์„ค์ •: ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ ์œ ๊ฐ’์ด threshold ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ
threshold = 4

for col in num_cols:
    if df[col].nunique() <= threshold:
        potential_cat_cols.append(col)

num_cols = [c for c in num_cols if c not in potential_cat_cols]
cat_cols = df.select_dtypes(exclude=np.number).columns.tolist() + potential_cat_cols

print(f"์ƒˆ๋กญ๊ฒŒ ๋ถ„๋ฅ˜๋œ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜: {potential_cat_cols}")

# ์ƒˆ๋กญ๊ฒŒ ๋ถ„๋ฅ˜๋œ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜: ['FLAG_MOBIL', 'FLAG_EMP_PHONE', 'FLAG_WORK_PHONE', 'FLAG_CONT_MOBILE', 'FLAG_PHONE', 'FLAG_EMAIL', 'REGION_RATING_CLIENT', 'REGION_RATING_CLIENT_W_CITY', 'REG_REGION_NOT_LIVE_REGION', 'REG_REGION_NOT_WORK_REGION', 'LIVE_REGION_NOT_WORK_REGION', 'REG_CITY_NOT_LIVE_CITY', 'REG_CITY_NOT_WORK_CITY', 'LIVE_CITY_NOT_WORK_CITY', 'FLAG_DOCUMENT_3', 'FLAG_DOCUMENT_5', 'FLAG_DOCUMENT_6', 'FLAG_DOCUMENT_8', 'FLAG_DOCUMENT_9', 'FLAG_DOCUMENT_11', 'FLAG_DOCUMENT_13', 'FLAG_DOCUMENT_14', 'FLAG_DOCUMENT_15', 'FLAG_DOCUMENT_16', 'FLAG_DOCUMENT_18', 'DAYS_EMPLOYED_ANOM', 'DOCUMENT_3_AND_OTHERS'] 

๊ทธ ๊ฒฐ๊ณผ ์ด 46๊ฐœ์˜ ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜์™€ 35๊ฐœ์˜ ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜๋กœ ๋ถ„๋ฅ˜ํ•˜์˜€๋‹ค.

๋ณ€์ˆ˜ ์š”์•ฝํ‘œ

๋จผ์ € ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜๋“ค.

Your Alt Text

๊ทธ๋ฆฌ๊ณ  ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜๋“ค.

Your Alt Text

๊ฒฐ์ธก์น˜

์ด์ œ ์ •๋ง ์ค‘์š”ํ•œ ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ.

๋ฒ”์ฃผํ˜•

๋ฒ”์ฃผํ˜•์˜ ๊ฒฝ์šฐ ๊ฒฐ์ธก๊ฐ’ ์ž์ฒด๋„ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.
์ฆ‰, “๊ณ ๊ฐ์ด ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜๋‹ค” ๋ผ๋Š”๊ฒŒ ์ •๋ณด๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ฒฐ์ธก๊ฐ’์„ ‘Unknown’ ๋ฌธ์ž์—ด๋กœ ์ฑ„์› ๋‹ค.

์ˆ˜์น˜ํ˜•

๋‹ค์Œ์€ ์ˆ˜์น˜ํ˜•์ธ๋ฐ ์ด๊ฒŒ ์ข€ ๊ณ ๋ฏผ์ด ๋˜์—ˆ๋‹ค.

์šฐ์„  ๋ณ€์ˆ˜์˜ ํŠน์ง•์ƒ ๋Œ€ํ‘œ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณ€์ˆ˜๋“ค์ด ์žˆ์—ˆ๋‹ค. AMT_REQ_CREDIT_BUREAU ์™€ SOCIAL_CIRCLE ๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ณ€์ˆ˜๋“ค์ด๋‹ค.
‘์‹ ์šฉ ์กฐํšŒ ํšŸ์ˆ˜’ ์™€ ‘์ฃผ๋ณ€์ธ ์—ฐ์ฒด ํšŸ์ˆ˜’ ๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” 0์œผ๋กœ , ์ฆ‰ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋กœ ๋ด๋„ ๋˜์ง€ ์•Š์„๊นŒ? ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.
๋‚ด ์ƒ๊ฐ์ด ํƒ€๋‹นํ•œ์ง€ ์ ๊ฒ€ํ•˜๊ธฐ ์œ„ํ•ด 0์ธ๊ฒฝ์šฐ์˜ ๋ถ€๋„ ๋น„์œจ๊ณผ Null์ธ ๊ฒฝ์šฐ์˜ ๋ถ€๋„ ๋น„์œจ์„ ๋น„๊ตํ•ด๋ดค๋‹ค.

๊ทธ ๊ฒฐ๊ณผ ํ‰๊ท ์ ์œผ๋กœ 4% ์ •๋„์˜ ๋น„์œจ์ฐจ์ด๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค.

์‚ฌ์‹ค 4% ์ฐจ์ด๊ฐ€ ์œ ์˜๋ฏธํ•œ ์ฐจ์ด์ธ์ง€๋Š” ๋‚ด๊ฐ€ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ค์›Œ์„œ ์žฌ๋ฏธ๋‹ˆํ•œํ…Œ ๋ฌผ์–ด๋ดค๋‹ค.

๊ธˆ์œต ๋ฐ์ดํ„ฐ(์‹ ์šฉ์นด๋“œ, ๋Œ€์ถœ ๋“ฑ)์—์„œ ์ „์ฒด ๋ถ€๋„์œจ์€ ๋ณดํ†ต 5~10% ๋‚ด์™ธ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ 4% ํฌ์ธํŠธ์˜ ์ฐจ์ด๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋งค์šฐ ํฐ ๋น„์ค‘์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค.
0์ธ ๊ทธ๋ฃน: ์‹ค์ œ๋กœ ์กฐํšŒ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋‚˜ ํšŸ์ˆ˜๊ฐ€ 0์ด๊ฑฐ๋‚˜, ์‹œ์Šคํ…œ์— ๊ธฐ๋ก๋œ “์ •์ƒ์  ๋ฌด์‹ค์ ” ์ƒํƒœ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
Null์ธ ๊ทธ๋ฃน: ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์ด ์•„๋‹ˆ๋ผ, “์ •๋ณด๊ฐ€ ์—†์Œ(Unknown)” ์ž์ฒด์— ํŠน์ •ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ: ์‹ ์šฉ ๊ฑฐ๋ž˜ ์ด๋ ฅ์ด ์•„์˜ˆ ์—†๋Š” ์‹ ๊ทœ ๊ณ ๊ฐ์ด๊ฑฐ๋‚˜, ํŠน์ • ๊ฒฝ๋กœ๋กœ ์œ ์ž…๋˜์–ด ์ •๋ณด ์ˆ˜์ง‘์ด ์•ˆ ๋œ ๊ณ ๊ฐ๊ตฐ)

๊ทธ๋ ‡๋‹จ๋‹ค. ๊ทธ๋ž˜์„œ ์ •๋ณด ์—ฌ๋ถ€ ์ž์ฒด๋ฅผ ํŒ๋‹จํ•˜๋Š” IS_NULL ๋ณ€์ˆ˜๋ฅผ ๊ฐ๊ฐ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด ์ค€ ํ›„ ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ๊ฒฐ์ธก๊ฐ’์€ 0์œผ๋กœ ๋Œ€์ฒดํ•˜์˜€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์™ธ์˜ ์ˆ˜์น˜ํ˜• ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ ํ‰๊ท ๊ฐ’, ์ตœ๋นˆ๊ฐ’, ์ค‘์•™๊ฐ’ ๋“ฑ ์ค‘์—์„œ ๊ณ ๋ฏผ์„ ํ•ด๋ดค๋‹ค.

๊ฒฐ์ธก๊ฐ’ ๋น„์œจ์ด 40%๊ฐ€ ๋„˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ๋ถ„ํฌ๋ฅผ ๊ทธ๋ ค๋ดค๋‹ค.

Your Alt Text

EXT_SOURCE1๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋ชจ๋‘ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ๋ถ„ํฌ๋ฅผ ๋ ๊ณ  ์žˆ๋‹ค.
ํ‰๊ท ๊ฐ’์œผ๋กœ ๊ฐ’์„ ๋Œ€์ฒดํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์™œ๊ณก์ด ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ค‘์•™๊ฐ’์œผ๋กœ ๊ฒฐ์ธก๊ฐ’์„ ๋Œ€์ฒดํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด ๊ฒฝ์šฐ์—๋Š” datetime ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์ง€๋งŒ, ๋งŒ์•ฝ ๋‚ ์งœ์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ์ˆ˜์น˜ํ˜•์œผ๋กœ ๋‹ค๋ฃจ๋˜ ๊ฒฐ์ธก๊ฐ’์€ Bfill์ด๋‚˜ Ffill๋กœ ํ•ด์•ผํ•˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

ํŒŒ์ƒ๋ณ€์ˆ˜

๊ทธ ๋‹ค์Œ์€ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํŒŒ์ƒ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.
์ด ๋ถ€๋ถ„์€ ๋‹ค๋ฅธ ์‚ฌ๋ก€์™€ ์žฌ๋ฏธ๋‹ˆ์˜ ๋„์›€์„ ์ข€ ๋ฐ›์•˜๋‹ค.

#8. ํŒŒ์ƒ๋ณ€์ˆ˜ ์ƒ์„ฑ
df['AGE'] = df['DAYS_BIRTH'] / 365
df['YEARS_EMPLOYED'] = df['DAYS_EMPLOYED'] / 365
df['REGISTRATION_BIRTH_RELA'] = df['DAYS_REGISTRATION'] / df['DAYS_BIRTH']
df['ID_PUBLISH_BIRTH_RELA'] = df['DAYS_ID_PUBLISH'] / df['DAYS_BIRTH']

# (1) ์†Œ๋“ ๋ฐ ๋Œ€์ถœ ๊ด€๋ จ ๋น„์œจ
df['INCOME_CREDIT_PERC'] = df['AMT_INCOME_TOTAL'] / df['AMT_CREDIT']
df['INCOME_PER_PERSON'] = df['AMT_INCOME_TOTAL'] / df['CNT_FAM_MEMBERS']
df['ANNUITY_INCOME_PERC'] = df['AMT_ANNUITY'] / df['AMT_INCOME_TOTAL']
df['PAYMENT_RATE'] = df['AMT_ANNUITY'] / df['AMT_CREDIT']
df['LTV'] = df['AMT_CREDIT'] / df['AMT_GOODS_PRICE']

# (2) ์‹œ๊ฐ„/๊ณ ์šฉ ๊ด€๋ จ ๋น„์œจ
df['WORKING_LIFE_PERC'] = df['DAYS_EMPLOYED'] / df['DAYS_BIRTH']
df['ID_TO_BIRTH_PERC'] = df['DAYS_ID_PUBLISH'] / df['DAYS_BIRTH']

# (3) ์™ธ๋ถ€ ์†Œ์Šค ํ†ตํ•ฉ (NaN ์ œ์™ธ ์—ฐ์‚ฐ)
df['EXT_SOURCES_MEAN'] = df[['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3']].mean(axis=1)
df['EXT_SOURCES_NANPROD'] = df[['EXT_SOURCE_1', 'EXT_SOURCE_2', 'EXT_SOURCE_3']].apply(lambda x: np.nanprod(x), axis=1)

๋งˆ์ง€๋ง‰์œผ๋กœ ‘AMT_INCOME_TOTAL’, ‘AMT_CREDIT’, ‘AMT_ANNUITY’, ‘AMT_GOODS_PRICE’ ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•ด์„œ๋Š” ๋กœ๊ทธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์˜€๋‹ค.
ํ•ด๋‹น ๋ณ€์ˆ˜๋“ค์€ ์•„๋ฌด๋ž˜๋„ ์ด์ƒ์น˜ ์ž์ฒด๊ฐ€ ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ–๊ธฐ ๋ณด๋‹ค๋Š” ์˜คํžˆ๋ ค ์™œ๊ณก์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ € ๋ณ€์ˆ˜๋“ค ๋ง๊ณ ๋„ ์ถ”ํ›„์— ๋˜ ๋กœ๊ทธ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋ณ€์ˆ˜๋ฅผ ์ฐพ๊ฒŒ๋˜๋ฉด ์ถ”๊ฐ€๋กœ ๊ธฐ์ž…ํ•˜๊ฒ ๋‹ค.


์ตœ์ข…์ ์œผ๋กœ ๋ฒ”์ฃผํ˜• 49๊ฐœ, ์ˆ˜์น˜ํ˜• 50๊ฐœ์˜ ๋ณ€์ˆ˜๋กœ ์ตœ์ข… ๋ฐ์ดํ„ฐ์…‹์„ ํ™•์ •ํ•˜์˜€๋‹ค.

์‹œ๊ฐํ™”

์ „์ฒด ๋ณ€์ˆ˜๋Š” ์•„๋‹ˆ๊ณ  ์œ ์‚ฌํ•œ ๋ณ€์ˆ˜ ํ˜น์€ ํŒŒ์ƒ๋ณ€์ˆ˜๋“ค์€ ์‹œ๊ฐํ™”์—์„œ ์ œ์™ธ์‹œ์ผฐ๋‹ค.

๋ฒ”์ฃผํ˜•์˜ ๊ฒฝ์šฐ,

Your Alt Text

FLAG_MOBIL, FLAG_CONT_MOBIL ์˜ ๊ฒฝ์šฐ ๋ถ€๋„/์ •์ƒ ๊ทธ๋ฃน๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์—†์–ด๋ณด์—ฌ์„œ ์ดํ›„ ๋ถ„์„์—์„œ ์ œ์™ธํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋‹ค์Œ์€ ์ˆ˜์น˜ํ˜•

Your Alt Text

์กฐ๊ธˆ ์˜์™ธ์˜€๋˜๊ฑด, ๊ทผ์†์ผ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์ •์ƒ ๊ทธ๋ฃน๊ตฐ์ด ๊ฝค ๋งŽ๋‹ค๋Š” ์ ์ด๋‹ค.


์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ชจ๋ธ๋ง์— ์‚ฌ์šฉํ•  ์ตœ์ข… ๋ฐ์ดํ„ฐ ์…‹์€ ์ถ”๋ ค์กŒ๋‹ค.
๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ OptBinning์„ ํ†ตํ•ด ๋ชจ๋ธ๋ง ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

์‹ค์Šต ์ฝ”๋“œ :
EDA.ipynb
์‹œ๊ฐํ™”.ipynb