본문 바로가기

Data Analysis/Kaggle

[Kaggle] Personal Loan 데이터 분석 3 (EDA / 시각화 / 리뷰)

728x90

이전 내용은 아래 글에서 확인 하실 수 있습니다.

[Data Analysis/Kaggle] - [Kaggle] Personal Loan 데이터 분석 1 (데이터 확인 / 질문하기)

 

[Kaggle] Personal Loan 데이터 분석 1 (데이터 확인 / 질문하기)

Personal Loan 데이터 분석 Personal Loan 데이터는 고객을 더 늘리고자 하는 가상의 은행 데이터입니다. 이 회사의 경영진은 부채를 가진 고객을 개인 대출 고객으로 전환하는 방법을 모색하려고 합

sks8410.tistory.com

[Data Analysis/Kaggle] - [Kaggle] Personal Loan 데이터 분석 2 (데이터 전처리)

 

[Kaggle] Personal Loan 데이터 분석 2 (데이터 전처리)

이전 내용은 아래 글에서 확인 하실 수 있습니다. [Data Analysis/Kaggle] - [Kaggle] Personal Loan 데이터 분석 1 (데이터 확인 / 질문하기) [Kaggle] Personal Loan 데이터 분석 1 (데이터 확인 / 질문하기) Pe..

sks8410.tistory.com

4. EDA & Visualization

4-1 수입과 대출 사이의 관계 확인

bank_1_loan_income = bank_1.groupby("personal loan")["income"].agg(["mean", "count"])
bank_1_loan_income = bank_1_loan_income.rename(columns = {"mean" : "income mean", "count" : "number of people"})

bank_1_loan_income

대출을 받는 사람의 수입이 대출을 받지 않는 사람보다 약 2배 이상 높다는 것을 알 수 있다.

 4-2 월 평균 신용카드 사용액과 대출 사이 관계 확인

bank_1_loan_ccavg = bank_1.groupby("personal loan")["ccavg"].agg(["mean", "count"])
bank_1_loan_ccavg = bank_1_loan_ccavg.rename(columns = {"mean" : "ccavg mean", "count" : "number of people"})

bank_1_loan_ccavg

4-3 가족 인원수와 대출 사이 관계 확인

bank_1_family_loan = bank_1.groupby("family")["personal loan"].agg(["mean", "count"])
bank_1_family_loan = bank_1_family_loan.rename(columns = {"mean" : "personal loan mean", "count" : "number of people"})

bank_1_family_loan

 

 

# 가족 인원수와 대출 사이 관계 시각화

layout = {
    "title" : {
        "text" : "<b>가족 인원수와 대출 사이 관계</b>",
        },
    "xaxis" : {
        "showticklabels" : True,
        "dtick" : 1,
        "title" : "가족 인원수"},
    "yaxis" : {
        "title" : "대출"}
}

bank_1_family_loan["personal loan mean"].iplot(kind = "bar", layout = layout)

가족 인원이 3명일때 가장 대출을 많이 받은 것을 알 수 있습니다.

가족 인원이 증가할 수록 대출을 많이 받는 경향이 있지만 정비례하지는 않다는 것을 알 수 있습니다.

4-4 변수의 분포 확인 하기

# 연속형 변수 분포 확인

f, ax = plt.subplots(2, 3, figsize = (17, 9))

sns.distplot(bank_1["age"], ax = ax[0,0])
sns.distplot(bank_1["experience"], ax = ax[0,1])
sns.distplot(bank_1["income"], ax = ax[0,2])
sns.distplot(bank_1["family"], ax = ax[1,0])
sns.distplot(bank_1["ccavg"], ax = ax[1,1])
# sns.distplot(bank_1["mortgage"], ax = ax[1,2])
sns.distplot(bank_1["mortgage"][bank_1["mortgage"] != 0], ax = ax[1,2]) # 값이 0 인 데이터 빼고 그리기

plt.show()

income, ccavg, mortgage 컬럼의 경우, 왼쪽 (낮은쪽)에 많이 분포가 되어 있다는 것을 알 수 있습니다.

 

 

# age, experience, income 컬럼의 변수에 대해 자세히 그래프 그리기
# 평균, 25%, 50%, 75% 구간은 선을 그어주기

def drawline(plt, col):
    mean = bank_1.describe().loc["mean", col]
    m25 = bank_1.describe().loc["25%", col]
    m50 = bank_1.describe().loc["50%", col]
    m75 = bank_1.describe().loc["75%", col]
    
    plt.axvline(mean, color = "red")
    plt.axvline(m25, color = "blue")
    plt.axvline(m50, color = "navy")
    plt.axvline(m75, color = "purple")
    plt.legend({"Mean" : mean, "25%" : m25, "50%" : m50, "75%" : m75})

f, ax = plt.subplots(3, 1, figsize = (12, 13))

pp = sns.distplot(bank_1["age"], ax = ax[0], bins = 10, color = "orange")
drawline(pp, "age")
pp = sns.distplot(bank_1["experience"], ax = ax[1], bins = 10, color = "orange")
drawline(pp, "experience")
pp = sns.distplot(bank_1["income"], ax = ax[2], bins = 10, color = "orange")
drawline(pp, "income")

plt.show()

 

 

# violin plot 으로 범주형 변수 확인

fig = make_subplots(rows = 1, cols = 3)

fig.add_trace(
    go.Violin(
        x = bank_1["personal loan"],
        y = bank_1["income"]       
    ),
    row = 1, col = 1,    
)

fig.add_trace(
    go.Violin(
        x = bank_1["personal loan"],
        y = bank_1["age"]       
    ),
    row = 1, col = 2,    
)

fig.add_trace(
    go.Violin(
        x = bank_1["personal loan"],
        y = bank_1["experience"]       
    ),
    row = 1, col = 3,    
)

fig.update_traces(
    box_visible = True, # 박스 표시
    meanline_visible = True, # 중간선 표시
    points = False, # 아웃라이어 표시      
    showlegend = False # 범례 표시
)

fig.update_xaxes(title_text = "personal loan", row = 1, col = 1)
fig.update_xaxes(title_text = "personal loan", row = 1, col = 2)
fig.update_xaxes(title_text = "personal loan", row = 1, col = 3)

fig.update_yaxes(title_text = "income", row = 1, col = 1)
fig.update_yaxes(title_text = "age", row = 1, col = 2)
fig.update_yaxes(title_text = "experience", row = 1, col = 3)

fig.show()

소득이 많은 사람이 소득이 적은 사람보다 대출을 더 많이 많았다는 것을 알 수 있고, 나이와 사회경험은 대출과 연관성이 없다는 것을 알 수 있습니다.

4-5 변수간 상관관계 확인하기

bank_1.corr = bank_1.corr().round(2)

### 히트맵으로 변수간 상관관계 확인

import plotly.figure_factory as ff

fig = ff.create_annotated_heatmap(x = bank_1.corr.index.tolist(),
                                  y = bank_1.corr.columns.tolist(),
                                  z = bank_1.corr.values,
                                  showscale = True)

fig.update_layout(
    title = dict(
        text = "<b>변수간 상관관계 Heat Map</b>",        
        y = 0.9,
        font_size = 20
    ),
    
    xaxis = dict(
        side = "bottom" # x 축 위치 조정
    )
)

fig.show()

age 와 experience 는 서로 강한 상관관계(0.99)를 가지고 있습니다.
income, ccavg, personal loan 은 중간 정도의 상관관계(0.65, 0.5)를 가지고 있습니다.
personal loan 에 영향을 미치는 변수는 income, ccavg, cd account 있습니다.

4-6 구간화 해서 그래프 그리기

# 신용카드 월 평균 이용금액 구간화

bank_2 = bank_1[["ccavg", "creditcard", "personal loan"]]
bank_2["ccavg_bin"] = pd.cut(bank_2["ccavg"], bins = [0, 2, 4, 6, 100], labels = ["0-2", "3-4", "5-6", "7+"])

bank_2.head()

 

 

# 구간별 신용카드 유무와 신용카드 월평균 사용액 집계

df_2 = bank_2.groupby(["ccavg_bin", "creditcard"])["ccavg"].sum().reset_index()
df_2

 

 

f, ax = plt.subplots(1, 2, figsize = (16, 6))

# 구간별 신용카드 유무와 신용카드 월 평균 사용액 시각화

sns.barplot(data = df_2, x = "ccavg_bin", y = "ccavg", hue = "creditcard", ax = ax[0])
ax[0].set(xlabel = "CC avg bins", ylabel = "Count of customers")

# 수입과 신용카드 월 평균 사용액 시각화

sns.scatterplot(data = bank_1, x = "income", y = "ccavg", hue = "personal loan", ax = ax[1], alpha = 0.6)

이 은행의 고객은 신용카드를 사용하지 않는 고객이 사용하는 고객보다 훨씬 많으며, 소득이 많고 월 평균 신용카드 사용액이 많을수록 대출을 받는다는 것을 알 수 있습니다.

5. Review

- Personal Loan 데이터는
   -> 총 데이터 수 70,000  
   -> 결측치는 없다.

- 고객의 나이는 23세부터 67세까지 있으며 평균 나이는 45.3세이다.  

 

- 고객의 평균 수입은 73,774.2$이며, 최고수입은 224,000$로 평균의 약 3배이다.

- 수입/월평균신용카드사용량/가족인원수와 대출 사이의 관계는?  
   -> 대출 받은 사람의 수입이 대출 받지 않은 사람보다 약 2배 정도 높다  
   -> 대출받은 사람이 받지 않은 사람보다 월 평균 신용카드 사용액이 2배 가량 높다  
   -> 가족 인원수가 많을 수록 대출 금액이 올라가나 정비례 하지는 않는다  

 

- 월 평균 사용 금액을 구간화 해서 특징을 볼 수 있을까?

   -> 이 은행의 고객은 신용카드를 사용하지 않는 고객이 사용하는 고객보다 훨씬 많으며,

       소득이 많고 월 평균 신용카드 사용액이 많을수록 대출을 받는다.

728x90