Project/부실가계 분류모델

부실가계 분류모델 - 데이터 전처리(데이터 encoding)

patrck_jjh 2021. 6. 3. 16:35

 

2021.04.26 - [Project/가계 부채 분석] - 부실가계 탐지 모형 데이터 전처리- 파생변수 추가(DSR, DTA, HDRI, 부실가계)

 

부실가계 탐지 모형 데이터 전처리- 파생변수 추가(DSR, DTA, HDRI, 부실가계)

가계금융복지조사 데이터?  2020 년도 가계금융복지조사 데이터는 통계청(가계자산조사), 금융감독원(가계신용조사), 한국은행(가구패널조사)에서 만든 가계 금융과 관련된 종합적인 데이터다.

patrickstar-jjh.tistory.com

 

 

이전에 했던 데이터 전처리에 이어서 이번에는 학습하고자 하는 변수 추출 및 범주형 데이터들을 인코딩하고자 한다.

 

 

# 데이터 reload
data = pd.read_csv('./data/2020가계부채/label_2020.csv', engine='python', encoding='cp949')
data.columns

 

데이터를 불러와 data에 저장하였다. 이전 글에서 생성한 파생변수들을 포함하여 총 159개의 feature들을 포함한다.

 

 

# feature slicing

# 담보대출 용도 및 출처
df_1 = data[['담보대출_대출용도_거주주택 구입','담보대출_대출용도_거주주택이외 부동산 구입'
             ,'담보대출_대출용도_전(월)세 보증금 마련','담보대출_대출용도_사업자금 마련','담보대출_대출용도_생활비 마련'
             ,'담보대출_대출기관_은행(2010년은 농수협 중앙회 제외)','담보대출_대출기관_저축은행'
             ,'담보대출_대출기관_비은행금융기관(2010년은 농수협중앙회 포함)']]

# 신용대출 용도 및 출처
df_2 = data[['신용대출_대출용도_거주주택 구입','신용대출_대출용도_거주주택이외 부동산 구입','신용대출_대출용도_전(월)세 보증금 마련'
             ,'신용대출_대출용도_사업자금 마련','신용대출_대출용도_생활비 마련','신용대출_대출기관_은행(2010년은 농수협 중앙회 제외)'
             ,'신용대출_대출기관_저축은행','신용대출_대출기관_비은행금융기관(2010년은 농수협중앙회 포함)']]


# 인구통계적 피처 연속형
df_3 = data[['자산','부채','순자산액','가구원수', '가구주 만나이']]


# 인구통계적 피처 범주형
df_4 = data[['가구주 성별','가구주교육정도 통합별','가구주 혼인상태','가구주 은퇴여부'
             ,'입주형태','수도권여부','가구주 직업(대분류)','가구주 종사상지위'
             ,'부실가계']]

#df_3=data['부실가계']

df = pd.concat([df_1,df_2,df_3,df_4],axis=1)
df.info()

 

df_1 <- 담보대출의 용도 및 출처

df_2 <- 신용대출의 용도 및 출처

df_3 <- 인구통계 특징(연속형)

df_4 <- 인구통계 특징(범주형)

다음과 같은 기준으로 변수들을 뽑아내고 각 dataframe들을 concat으로 병합하였다.

 

 

 그 결과 총 28개의 설명변수 그리고 1개의 종속변수("부실가계")가 df에 저장되었다.

 

# 담보대출, 신용대출 요소들 binary 인코딩

tt = df.iloc[:,:-14]

for i in tt.columns:
    for j in range(len(tt)):
        if df[i][j]==0:
            df[i][j]=0
        else:
            df[i][j]=1

 tt에는 처음 ~ 뒤에서부터 14번째까지의 변수를 넣어주었다. 즉 처음부터 15번째 변수를 넣음으로써 담보대출과 신용대출의 용도와 출처와 관련된 변수만 추출하였고 각 변수의 값이 0이라면 0으로 어떤 값을 가진다면 1로 인코딩해주었다.

 

 

 

# 가구주 종사상지위 인코딩(상용근로자=1, or 0)
for i in range(len(df['가구주 종사상지위'])):
    if df['가구주 종사상지위'][i]=='상용근로자':
        df['가구주 종사상지위'][i]=1
    else:
        df['가구주 종사상지위'][i]=0


# 가구주직업 인코딩(단순노무 종사자=1, or 0)
for i in range(len(df['가구주 직업(대분류)'])):
    if df['가구주 직업(대분류)'][i]=='단순노무 종사자':
        df['가구주 직업(대분류)'][i]=1
    else:
        df['가구주 직업(대분류)'][i]=0
        
# 입주형태 인코딩(자기집 =1 , or 0)
for i in range(len(df['입주형태'])):
    if df['입주형태'][i]=='자기집':
        df['입주형태'][i]=1
    else:
        df['입주형태'][i]=0
        
# 가구주 혼인상태 인코딩(배우자있음 =1 , or 0)
for i in range(len(df['가구주 혼인상태'])):
    if df['가구주 혼인상태'][i]=='배우자있음':
        df['가구주 혼인상태'][i]=1
    else:
        df['가구주 혼인상태'][i]=0
        
# 가구주교육정도 통합별 인코딩(대학졸업 이상 =1 , or 0)
for i in range(len(df['가구주교육정도 통합별'])):
    if df['가구주교육정도 통합별'][i]=='대학졸업 이상':
        df['가구주교육정도 통합별'][i]=1
    else:
        df['가구주교육정도 통합별'][i]=0

 각 특징(feature)별로 기준을 잡아서 1혹은 0값을 할당하였다. 가구주 직업, 가구주 종사상 지위, 입주형태, 가구주 혼인상태, 가구주교육정도는 3가지 이상의 범주값들을 가지므로 선행연구를 참고하여 특정 기준을 잡아서 1혹은 0의 값으로 인코딩하는 코드를 작성하여 적용하였다.

 

 

# 나머지 binary 범주형 데이터 인코딩

from sklearn.preprocessing import LabelEncoder

for i in df.columns:
    for j in range(len(df)):
        if type(df[i][j]) == str:
            items = df[i].unique()
            encoder = LabelEncoder()
            encoder.fit(items)
            df[i] = encoder.transform(data[i])

 수도권 여부, 가구주 성별 여부는 각각 (수도권,비수도권), (남성,여성)으로 binary category이므로 skearn의 LabelEncoder모듈을 적용하여 1과 0의 값으로 일괄적으로 인코딩 해주었다. 코드는 데이터 타입이 str일 경우에 encoder를 적용하므로 float64나 int64인 데이터들은 그대로 두고 한글로 적혀있는 범주형 데이터를 1과 0으로 인코딩 해줌을 의미한다.

 

 

 

 

df

# EDA final 데이터 저장
df_fin=df
df_fin.to_csv("../data/2020가계부채/data_fin.csv")

 최종적으로 인코딩된 데이터이다. 그리고 csv로 저장해주었다.

 

 

 

<Git>

https://github.com/dudungE/house_debt_classification_model/blob/master/%EB%B6%80%EC%8B%A4%EA%B0%80%EA%B3%842020_%EC%A0%84%EC%B2%98%EB%A6%AC%2CEDA.ipynb