상장폐지 예측2(전처리)_Data Analysis/Analaze Delisting Stock

in #kr6 years ago (edited)

지난 포스팅에서 상장폐지 예측에 필요한 데이터를 수집해 보았는데요. 오늘은 수집한 데이터를 분석하기전 수행한 전처리 과정을 소개해보겠습니다.

전처리 과정을 소개하기 앞서 제가 이번 분석에서 사용한 분석 툴을 잠깐 소개드리겠습니다. 제가 사용한 툴은 Rapid Miner인데요. 프로그래밍을 하지 않더라도 drag and drop방식으로 이루어지는 아주 쉬운 툴입니다. 개인이 쓰는데는 무료이므로 혹시나 RapidMiner를 이용하시는 분들은 다음 카페를 이용하여 알아보시면 좋을 것 같습니다ㅎㅎ.

1차 전처리

1차 전처리 과정에서는 결측치로 이루어진 행과 자발적 상장폐지에 해당하는 행을 제거하였습니다.

결측치 행 제거


위의 표를 보시면 값이 모두 비어있는 행을 확인하실 수 있습니다. 일반적으로 데이터에서 비어있는 칸을 결측치라 하는데요, 결측치는 값을 평균값이나 혹은 다른값으로 대체하여 사용하기도 하지만 모든 값이 이렇게 비어있다면 제거해주는 것이 좋습니다. 따라서 상장폐지, 상장중 데이터에서 모든 변수가 결측치인 행에 관해 제거해주었습니다.

자발적 상장폐지 제거

지난 포스팅에도 말씀드렸지만, 상장폐지에는 우리가 생각하는 종목이외에도 다양한 상장폐지 종목들이 포함됩니다.

위와 같은 종목(SPAC,Reits,상장펀드-ETF,ETN,공경매펀드)들은 자발적 상장폐지 종목으로써 사실상, 제가 분석하는 상장폐지와는 다른 의미를 가지고 있었습니다. 따라서 자발적 상장폐지 종목들은 제거해주었습니다.

1차 전처리 후 데이터변화

2차 전처리

2차 전처리에서는 이상치와 결측치 처리를 진행하였습니다.

이상치

이상치(outlier)는 기존의 데이터와 성질이 다른 데이터를 말합니다. 이상치는 후에 분석을 하거나 예측모델을 생성하는데 왜곡시킬수 있으므로 제거를 해줍니다. 먼저 이상치를 제거하기 전에 COF(Class outlier factor)알고리즘을 사용하여 이상치를 탐색하였습니다. COF알고리즘은 간략히 말씀드리면 특정 데이터와 가장 가까운 데이터들을 묶어 하나의 집단으로 지정하고 집단내 데이터들 사이에 떨어진 정도를 계산합니다. 그후 다른 집단의 떨어진 정도와 비교하여 이상치를 탐지하는 방법입니다. COF알고리즘은 군집들 사이에 존재하는 이상치들을 탐지할 수 있다는 장점이 있습니다.

위의 그림은 COF알고리즘을 이용한 이상치 탐지 결과입니다. 이상치로 탐지된 데이터를 하늘색으로 지정하였는데, 보시는 바와 같이 이상치10개의 값이 모두 상장폐지인 것을 알 수 있습니다. 사실 상장폐지 예측은 일반적인 분류문제와 다르게 다수의 정상종목들 중에 비정상종목들을 찾는 비정상탐지문제입니다. 이러한 문제에서는 소수의 비정상데이터들이 위와 같이 이상치로 탐지되는 경우가 많습니다. 따라서 이상치는 제거하지 않고 분석을 진행하였습니다.

결측치

결측치를 제거하기 앞서 각 변수별 결측치 비율을 확인해보았습니다.

위의 표를 보시면 총자본이익률(ROA)자본금증감을 제외한 나머지 변수들은 결측치 비율이 10퍼센트 안밖인 것을 확인 할 수 있습니다. 따라서 이 결측치가 비율이 50%가 넘어가는 두 변수를 처리하였는데, 총자본 이익률(ROA)은 매출액 순이익률(ROS)로 대체 가능하며, 자본금 증감은 매출액증가율로 대체 가능하여 변수를 제거 해주었습니다.
추가로, 이 과정에서 활동성지표(매출채권회전율,비유동자산회전율,자기자본회전율,총자본회전율)이 상대적으로 너무 많아서 결측치가 가장 적은 자기자본회전율을 제외한 활동성 지표들은 제거해주었습니다.
남은 결측치에 관해서는 이웃한 데이터의 값을 활용하는 K-nn을 이용하여 결측치를 채워 주었습니다.

표준화

전처리 중 분석 툴인 레피드 마이너에서 특정 자릿수 이하의 숫자를 읽어오지 못하는 문제가 발생하기도 하였습니다.

따라서 임의로 각 변수에 100과 10만을 곱하여 데이터를 읽어온 뒤 Z-정규화를 통해 모든 데이터를 표준화시켜 주었습니다.

최종데이터


최종적으로 위와같은 변수를 사용하게 되었습니다.

오늘은 전처리 과정을 포스팅해보았습니다ㅎㅎ. 다음은 모델을 만들고 예측을 진행해보도록 할게요!

Sort:  

@seohj, thank you for supporting @steemitboard as a witness.

Here is a small present to show our gratitude
Click on the badge to view your Board of Honor.

Once again, thanks for your support!

Do not miss the last post from @steemitboard:

Saint Nicholas challenge for good boys and girls

Coin Marketplace

STEEM 0.18
TRX 0.17
JST 0.032
BTC 63626.54
ETH 2727.44
USDT 1.00
SBD 2.56