목차
1. 데이터 설명 및 보기
1-1. 데이터 불러오기
•
변수 정보
1.
Bankrupt? : 파산 여부 (0 : N, 1 : Y)
2.
ROA(C) : 이자 부여 전, 감가상각 전의 수익률
3.
ROA(A) : 이자 부여 전, 세후 수익률
4.
ROA(B) : 이자 부여 전, 세후 + 감가상각 후의 수익률
5.
Operating Gross Margin : 영업총이익 (총이익/순매출) - OGM
6.
Realized Sales Gross Margin : 실현된 매출총이익 (실현된 총이익/순매출) - RGM
7.
Operating Profit Rate : 영업이익률 (영업이익/순매출) - OPR
8.
Pre-tax net Interest Rate : 세전 순이자율 (세전이익/순매출)
9.
After-tax net Interest Rate : 세후 순이자율 (순이익/순매출)
10.
Tax rate : 유효세율
11.
Net Value Per Share : 주당 순자산가치 ((자산-부채)/발행주식 수) - BPS
•
감가상각 : 고정자산에 투자한 금액을 유효기간 내에 회수하는 것. (가치감소 현상을 반영)
•
유효세율 : 세금을 차감하기 전 순이익. 즉, 세전소득에서 세금이 차지하는 비율.
•
순매출 : 총매출 - (은행이자, 운영비용 등의 합)
•
영업수익(매출) - 매출원가 = 매출총이익
•
매출총이익 - 관리비 = 영업이익
•
영업이익 - 영업외비용 = 세전이익
•
세전이익 - 법인세비용(세금) = 순이익
•
주당 순자산가치(BPS) - 기업이 활동을 중단한 뒤 그 자산을 모든 주주들에게 나눠줄 경우 1주당 얼마씩 배분되는가를 나타내는 것으로, BPS가 높을수록 수익성 및 재무건전성이 높아 투자가치가 높은 기업이라 할 수 있음.
import pandas as pd
import matplotlib as mpl
import matplotlib.pylab as plt
import seaborn as sns
import numpy as np
file_path = 'Bankruptcy/bank.csv'
b_data = pd.read_csv(file_path)
b_data
Python
복사
1-2. 데이터 백업
b_data_copy_backup = b_data.copy()
b_data.to_csv('Bankruptcy/bank.csv')
file_path = 'Bankruptcy/bank.csv'
b_data_csv_backup = pd.read_csv(file_path)
b_data_csv_backup.drop(['Unnamed: 0'], axis = 1, inplace = True)
b_data_csv_backup
Python
복사
b_data.info()
Python
복사
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6819 entries, 0 to 6818
Data columns (total 11 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Bankrupt? 6819 non-null int64
1 ROA(C) 6819 non-null float64
2 ROA(A) 6819 non-null float64
3 ROA(B) 6819 non-null float64
4 Operating Gross Margin 6819 non-null float64
5 Realized Sales Gross Margin 6819 non-null float64
6 Operating Profit Rate 6819 non-null float64
7 Pre-tax net Interest Rate 6819 non-null float64
8 After-tax net Interest Rate 6819 non-null float64
9 Tax rate 6819 non-null float64
10 Net Value Per Share 6819 non-null float64
dtypes: float64(10), int64(1)
memory usage: 586.1 KB
Plain Text
복사
b_data.describe()
Python
복사
2. 데이터 기초 분석 및 탐색
2-1. 데이터 재구조화
b_data1 = b_data.rename({'Bankrupt?':'Bankrupt', ' ROA(C)':'ROA(C)', ' ROA(A)':'ROA(A)', ' ROA(B)':'ROA(B)', ' Operating Gross Margin':'OGM', ' Realized Sales Gross Margin':'RGM', ' Operating Profit Rate':'OPR', ' Pre-tax net Interest Rate':'Pre_tax_IR', ' After-tax net Interest Rate':'After_tax_IR', ' Tax rate':'Tax_rate', ' Net Value Per Share':'BPS'}, axis = 'columns')
b_data1
Python
복사
앞에 막 공백이 있고 그래서 모두 수정해주었다.
3. 데이터 클린징
3-1. 결측치 확인
import missingno as msno
b_data1.isnull().sum()
Python
복사
Bankrupt 0
ROA(C) 0
ROA(A) 0
ROA(B) 0
OGM 0
RGM 0
OPR 0
Pre_tax_IR 0
After_tax_IR 0
Tax_rate 0
BPS 0
dtype: int64
Plain Text
복사
결측치 없음
3-2. 이상치 확인
figure, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2)
figure.set_size_inches(15, 25) # 각 표의 사이즈 정하기
sns.boxplot(x = "ROA(C)", data = b_data1, ax=ax1)
sns.boxplot(x = "ROA(A)", data = b_data1, ax=ax2)
sns.boxplot(x = "ROA(B)", data = b_data1, ax=ax3)
sns.boxplot(x = "OGM", data = b_data1, ax=ax4)
sns.boxplot(x = "RGM", data = b_data1, ax=ax5)
sns.boxplot(x = "OPR", data = b_data1, ax=ax6)
sns.boxplot(x = "Pre_tax_IR", data = b_data1, ax=ax7)
sns.boxplot(x = "After_tax_IR", data = b_data1, ax=ax8)
sns.boxplot(x = "Tax_rate", data = b_data1, ax=ax9)
sns.boxplot(x = "BPS", data = b_data1, ax=ax10)
Python
복사
b_data2 = b_data1[(b_data1["OGM"]>0.4) & (b_data1["OGM"]<0.8) & (b_data1["RGM"]>0.4) & (b_data1["RGM"]<0.8) & (b_data1["OPR"]>0.8) & (b_data1["Pre_tax_IR"]>0.6) & (b_data1["Pre_tax_IR"]<1.0) & (b_data1["After_tax_IR"]>0.7) & (b_data1["After_tax_IR"]<1.0) & (b_data1["BPS"]>0.0) & (b_data1["BPS"]<0.8)]
b_data2
Python
복사
9개의 인스턴스가 삭제되었다.
figure, ((ax1, ax2), (ax3, ax4), (ax5, ax6), (ax7, ax8), (ax9, ax10)) = plt.subplots(nrows=5, ncols=2)
figure.set_size_inches(15, 25) # 각 표의 사이즈 정하기
sns.boxplot(x = "ROA(C)", data = b_data2, ax=ax1)
sns.boxplot(x = "ROA(A)", data = b_data2, ax=ax2)
sns.boxplot(x = "ROA(B)", data = b_data2, ax=ax3)
sns.boxplot(x = "OGM", data = b_data2, ax=ax4)
sns.boxplot(x = "RGM", data = b_data2, ax=ax5)
sns.boxplot(x = "OPR", data = b_data2, ax=ax6)
sns.boxplot(x = "Pre_tax_IR", data = b_data2, ax=ax7)
sns.boxplot(x = "After_tax_IR", data = b_data2, ax=ax8)
sns.boxplot(x = "Tax_rate", data = b_data2, ax=ax9)
sns.boxplot(x = "BPS", data = b_data2, ax=ax10)
Python
복사
4. 데이터 시각화
4-1. countplot
sns.countplot('Bankrupt', data=b_data2)
Python
복사
파산한 기업은 파산하지 않은 기업에 비해 매우 적다.
4-2. catplot
sns.catplot(x = "Bankrupt", y = "ROA(C)", data=b_data2, ax=ax1)
sns.catplot(x = "Bankrupt", y = "ROA(A)", data=b_data2, ax=ax2)
sns.catplot(x = "Bankrupt", y = "ROA(B)", data=b_data2, ax=ax3)
Python
복사
파산한 기업은 ROA(수익률)가 모든 면에서 다른 기업에 비해 낮았다.
sns.catplot(x = "Bankrupt", y = "OGM", data=b_data2)
sns.catplot(x = "Bankrupt", y = "RGM", data=b_data2)
sns.catplot(x = "Bankrupt", y = "OPR", data=b_data2)
Python
복사
파산한 기업은 영업총이익(총이익/순매출), 실현된 매출총이익(실현된 총이익/순매출)이 파산하지 않은 기업에 비해 낮았다. 이는 총이익이 적거나 순매출이 큰 경우에 해당한다.
영업이익률(영업이익/순매출)은 두 케이스 모두 비슷했다. 따라서 파산한 기업은 그렇지 않은 기업과 순매출 자체는 비슷하지만 총이익이 적은 것이므로 중간에 생기는 관리비(세금, 판매관리비 등)에서 많은 손실이 생긴다는 것을 알 수 있다.
sns.catplot(x = "Bankrupt", y = "Pre_tax_IR", data=b_data2)
sns.catplot(x = "Bankrupt", y = "After_tax_IR", data=b_data2)
Python
복사
세전 순이자율과 세후 순이자율은 두 케이스 모두 비슷하다. → 이자는 파산에 직접적인 영향을 주지 못함
sns.catplot(x = "Bankrupt", y = "Tax_rate", data=b_data2)
sns.catplot(x = "Bankrupt", y = "BPS", data=b_data2)
Python
복사
파산한 기업의 유효세율은 매우 낮았다. 세금이 낮으면 유효세율이 낮아지고 세율이 낮으면 그만큼 순이익이 많다는 소리인데 왜 파산했는지 모르겠다.
→ 소득별 세율로 인해 저런 결과가 나온게 아닐까? 소득이 많은 기업일수록 정부에서 높은 비율의 과세를 할 것이고 때문에 파산하지 않은 기업이 더 높은 세율을 가지고 있는 것인듯.
BPS는 파산한 기업이 그렇지 않은 기업에 비해 현저히 낮았다. 주식러의 입장에서 보기에도 BPS가 낮은 주식은 결국 상장폐지 → 파산
당연함.
5. 상관분석
corrMatt = b_data2[['Bankrupt', 'ROA(C)', 'ROA(A)', 'ROA(B)', 'OGM', 'RGM', 'OPR', 'Pre_tax_IR', 'After_tax_IR', 'Tax_rate', 'BPS']]
corrMatt = corrMatt.corr()
corrMatt
Python
복사
mask=np.zeros_like(corrMatt, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
figure, ax = plt.subplots()
figure.set_size_inches(16, 8)
sns.heatmap(corrMatt, mask=mask, vmin=-1, vmax=1, square=True, annot=True)
Python
복사
•
ROA는 모든 경우에서 강한 상관관계를 가진다.
•
실현된 매출총이익(RGM)과 영업총이익(OGM)은 매우 강한 양의 상관관계를 가진다.
•
순이자율은 영업이익률과 강한 상관관계를 가진다.
•
주당 순자산가치(BPS)는 수익률(ROA)과 뚜렷한 상관관계를 가진다.