데이터 전처리와 시각화
Last updated
Last updated
전처리와 EDA_13기 조상연
투빅스 1주차 과제 - 조상연
DACON 3회 아파트 경매가격 예측 모델링 대회 데이터 기반
A. 아래를 포함한 전처리 및 EDA 과정을 진행
결측값이 있는 모든 열을 없애주세요
모든 연속형 변수 간의 상관관계를 Heatmap을 통해 확인
모든 연속형 변수의 분포를 Histogram으로 확인
Target 변수와 관련 있거나, 유의미한 Insight를 얻을 수 있는 시각화를 5개 이상 해주세요 (subplot활용)
B. 1-4에서 도출된 시각화 + 번뜩이는 Insight를 바탕으로 유의미한 Feature를 10개 이상 생성해 주세요
In [2]:
In [2]:
In [3]:
In [4]:
In [5]:
In [7]:
In [316]:
In [ ]:
범주형 데이터 분석을 위해 먼저 dtype이 object인걸로 추린 후 describe를 통해 전체적인 특징을 파악해본다. unique를 통해 범주가 몇개인지 파악하고 top과 freq를 통해 최빈값이 어느정도 비율을 차지하는지 알 수 있다.
In [104]:
위 분석을 통해 unique가 적절하게 적고, freq가 고루 있는 데이터를 선정해보면
Auction_class Bid_class addr_do addr_si Apartment_usage Share_auction_YorN
정도로 볼 수 있다.
4.1 Hammer_price에서의 아웃라이어 + Hammer_price_log Feature 생성¶
Hammer_price 분포에 심하게 영향을 끼치는 이상치를 탐지하고 이를 제거한 후, 더 개선하기 위한 Feature를 생성한다.
In [142]:
위 그래프에서 볼 수 있듯 40억 이상, 150억 이상에서 하나씩 이상치가 존재해, 분포가 좌로 매우 치우친 모습을 보인다. 이상치를 제거하여 그래프를 그려보고 나아가 로그를 통해 더 정규분포에 가깝게 변환해본다.
In [9]:
위 시각화처럼 Hammer Price에 로그변환을 취했을 때 좀 더 정규분포에 가까운 모습을 보인다.
그래서 다음과 같이 Hammer_Price_log란 새로운 Feature를 생성하였다.
In [10]:
4.2 Total_appraisal_price 와 Hammer_price에 대한 시각화 및 인사이트 + 낙찰가율(Hammer Price Ratio), 낙찰가율-지역 Feature 생성¶
상관관계 히트맵을 통해 Total_building_auction_area 와 Hammer_price의 매우 높은 상관성(1.0)을 확인할 수 있었다. 실제 경매에서도 많이 사용되는 낙찰가율을 도입하고 이를 지역구별 평균 낙찰가율로 환산하여 낙찰가율이 높은 지역과 낮은 지역에 대한 Feature 또한 생성하였다.
In [143]:
감정가의 로그 변환 Feature 생성
In [26]:
In [25]:
확실히 log 변환 후 감정과와 낙찰가 간의 선형 관계가 뚜렷하게 보이는 것을 확인할 수 있다. 실제 경매에서도 감정가 대비 90% 미만으로 낙찰 받아야 성공적이며 그 이상일 경우에는 감정가보다 높은 집값 상승에 대한 기대가 있다는 뜻이라고 한다. 그러므로 낙찰가율을 구하고 어떤 지역이 감정가 대비 높은 집값 상승이 기대되고 있는지를 시각화를 통해 알아내어 새로운 Feature를 위한 힌트를 얻고자 한다.
낙찰가율 HPR (Hammer Price Ratio) Feature 생성
In [27]:
In [241]:
확실히 평균 낙찰가는 강남, 서초, 용산, 송파가 압도적으로 강세였다. 하지만 감정가 대비 낙찰가율로 봤을 때는 조금 다른 결과가 나왔다. 바로 서울의 '성동구','송파구','양천구' 그리고 부산의 '금정구','수영구','연제구'에서 1.0이 넘는 낙찰가율이 나왔고 이는 이 6개구의 미래 집값 상승에 대한 기대가 크며 경매에서의 경쟁이 치열했음을 알 수 있다. 이러한 사실을 바탕으로 High_price_si와 High_HPR_si란 Bool값을 가진 Feature를 만들었다.
In [39]:
또한 강서구와 중구가 서울과 부산에 동시에 있지만 특히 중구가 서로 평균 낙찰가율과 평균 낙찰가에서 상당한 차이를 보여 이 둘을 구분해야할 필요가 있다. 이는 강서구와 중구에 각각 부산일 경우 뒤에 'b'를 붙이는 것으로 전처리를 하였다. 코드는 아래와 같다.
In [45]:
그런 후 낮은 낙찰가율을 보이는 서울 종로구, 중구와 부산 영도구 동래구에 대해
Low_HPR_si란 Bool값을 가진 Feature 생성
In [144]:
In [ ]:
4.3 Total_building_auction_area 와 Hammer_price에 대한 시각화 및 인사이트 + 평당 가격(PPP) Feature 생성 및 검증¶
상관관계 히트맵을 통해 Total_building_auction_area 와 Hammer_price의 매우 높은 상관성(0.8)을 확인할 수 있었다. 이를 통해 그 둘의 관계를 나타내고, 아웃라이어에 대한 힌트를 얻고자 한다.
In [319]:
Out[319]:
위에서 본 아웃라이어 중 하나인 가장 낙찰가가 높은 데이터는 평수를 봤을 때 약 1290평 규모로 매우 큰 평수임을 알 수 있다. 즉 아웃라이어처럼 보인 것도 평수를 고려하면 아웃라이어가 아니였다. 이를 통해 평당 가격 라는 개념을 도입할 필요성을 알 수 있다.
먼저 Total_building_auction_area도 분포가 고르지 못해 로그 변환을 취하였다.
In [60]:
In [66]:
In [72]:
낙찰과와 경매면적 간의 선형관계가 뚜렷하지만 그럼에도 가격의 기준을 Target Value인 낙찰가로 할 순 없기에 높은 상관관계를 보인 감정가를 기준으로 하여 평당 가격 Feature를 생성하였다. 여기서 평당 가격는 3.3 m^2 단위별 감정가 가격으로 하였다. Feature 이름은 PPP = Price per Pyeong 으로 하였다.
In [300]:
In [301]:
Out[301]:
평당 가격은 평균 1400만원에 최고 7000만원까지 올라간다. 특히 75% 구간까지 2000만원을 못넘는 것으로 보아 높은 평당 가격의 분포가 Sparse 함을 알 수 있다.
In [302]:
지역구별 평균 평당 가격을 Bar로, 평균 감정가를 Line으로 나타낸 그래프다. 평균 감정가와는 다르게 보인 평당 가격만의 가장 큰 특징은 해운대구에 있다. 다른 구는 감정가 순서(Line)와 평당 가격(Bar)도 비슷하게 흘러간 반면 해운대구는 평균 낙찰가에선 서울의 동대문구와 비슷한 위치였다면 평당 가격에선 서울의 노원구와 비슷한 수준을 보인다. 즉 해운대구는 평당 가격이 서울보다 거의 낮음에도 높은 평수의 집이 많아 낙찰가 자체가 올라갔다는 분석이 가능하다.
지역별 특성을 더 직관적으로 파악하기 위해 위도 경도 데이터를 이용한 지도 시작화를 진행하였습니다.
다만 자바스크립트 기반으로 지도 API가 구현되어 일부 환경에선 지도가 보이지 않아 스크린샷으로 아래에 첨부하였습니다.
In [303]:
Out[303]:
In [304]:
Out[304]:
In [305]:
Out[305]:
In [306]:
In [ ]:
4.4 Current_floor 와 Hammer_price에 대한 시각화 및 인사이트 + 층 분류 (Current_floor_type) Feature 생성 및 검증¶
같은 아파트 내에서도 중요한 것은 바로 층이다. 부동산에서 주로 5층을 기준으로 저층부 / 중층부, 10층을 기준으로 중층부 / 고층부를 나눈다. (전체 20층 기준)
현재 층과 낙찰가의 상관 관계를 보고 층분류 Feature를 생성한 후에 각 층분류별 평균 낙찰가를 살펴본다.
In [223]:
In [187]:
Out[187]:
In [193]:
In [226]:
Out[226]:
In [227]:
4.5 Hammer_price의 시계열 특징 시각화 및 인사이트 + 시계열 관련 Feature 생성 및 검증¶
시간순이 있는 데이터이기에 날짜별 추이나 Seasonality 에 대한 체크는 필요하다.
만 2년만큼의 데이터라 월별 데이터에 대한 추이가 파악 가능하며, 좀 더 용이한 분석을 위해 시작 경매월, 최종 경매월, 최종경매년월 Feature를 생성하였다.
In [266]:
2016년 4월부터 2018년 3월까지의 평균 낙찰가 (Line) 및 경매 건수 (bar) 추이
In [268]:
대체적으로 7~8월, 2~3월에 높은 평균 낙찰가가 형성되는 흐름을 알 수 있다. 경매 공급과의 관계를 알기 위해 바 그래프로 전체 경매 건수를 표시하였고 초록색으로 고낙찰가 지역을 따로 표시하였다. 2017년 8월, 2018년 2월에 공급 자체가 줄어 높은 평균 낙찰가를 형성했다고 볼 수 있으며, 특히 전년도 대비 감소한 경매건수로 더 치열했을 것이라 예상할 수 있다. 하지만 2017년 12월의 매우 낮은 평균 낙찰가를 단순히 공급이 늘은 것으로 셞명하긴 힘들다.
추가적으로 요일 Feature를 추가하여 요일별 평균 낙찰가를 살펴보았다.
In [271]:
In [294]:
In [295]:
위 그래프를 통해 서울은 금요일에 아예 경매를 진행하지 않으며, 월,화,수,목 순으로 낙찰가가 증가하는 모습을 보인다. 이는 강남, 서초 지역 경매가 월요일에 열리지 않는다는 점이 주요하게 작용한 것으로 보인다.
In [297]:
분석 과정에서 총 13개의 Feature를 생성하였고, 그 항목은 아래와 같습니다.
'Hammer_price_log', 'Total_appraisal_price_log', 'HPR', 'High_price_si', 'Low_HPR_si', 'High_HPR_si', 'Total_building_auction_area_log', 'PPP', 'Final_auction_month', 'First_auction_month', 'Final_auction_year_month', 'Current_floor_type', 'Final_auction_weekday'
Column Name
DataType
Description
Auction_key
int64
경매 아파트 고유 키값
Auction_class
object
경매구분 강제경매 : 법원에 소송을 제기하여 판결을 얻은 후 집행권원에 따라 경매를 진행 임의경매 : 등기부등본 담보권(저당권, 가압류등)으로 경매를 진행
Bid_class
object
입찰구분(일반/개별/일괄)
Claim_price
int64
경매 신청인의 청구 금액
Appraisal_company
object
감정사
Appraisal_date
datetime64[ns]
감정일자
Auction_count
int64
총경매횟수
Auction_miscarriage_count
int64
총유찰횟수
Total_land_gross_area
float64
총토지전체면적(㎡)
Total_land_real_area
float64
총토지실면적(㎡)
Total_land_auction_area
float64
총토지경매면적(㎡)
Total_building_area
float64
총건물면적(㎡)
Total_building_auction_area
float64
총건물경매면적(㎡)
Total_appraisal_price
int64
총감정가
Minimum_sales_price
int64
최저매각가격, 입찰 시 입찰인이 최저로 제시해야만 하는 금액
First_auction_date
datetime64[ns]
최초경매일
Final_auction_date
datetime64[ns]
최종경매일
Final_result
object
최종결과
Creditor
object
채권자, 경매 신청인
addr_do
object
주소_시도
addr_si
object
주소_시군구
addr_dong
object
주소_읍면동
addr_li
object
주소_리
addr_san
object
주소_산번지 여부(Y/N)
addr_bunji1
float64
주소_번지1
addr_bunji2
float64
주소_번지2
addr_etc
object
주소_기타주소
Apartment_usage
object
건물(토지)의 대표 용도
Preserve_regist_date
object
보존등기일, 건물을 신축하고 처음으로 등기
Total_floor
int64
총층수
Current_floor
int64
현재층수
Specific
object
기타_특이사항
Share_auction_YorN
object
지분경매 여부(Y/N), 하나의 부동산이 전체가 아닌 일부만 경매가 진행 (하나의 부동산의 공유자가 지분으로 소유권을 가지고 있을 때 그중 일부 지분만 경매가 진행)
road_name
object
도로명주소_도로명
road_bunji1
float64
도로명주소_번지1
road_bunji2
float64
도로명주소_번지2
Close_date
object
종국일자
Close_result
object
종국결과, 낙찰과 배당의 차이 : 경매 진행은 ①경매진행(낙찰) ▷ ②낙찰허가결정 ▷ ③대금납부 ▷ ④배당 후 종결 로 이뤄집니다. 낙찰자가 최고가로 입찰(①)해서 낙찰허가(②)를 받으면 대금납부기한 낙찰금을 입금(③)합니다. 법원은 납부된 낙찰금을 가지고 채권자에게 순위에 의한 배당(④)을 해주고 경매는 종결됩니다.
point.y
float64
위도
point.x
float64
경도
Hammer_price
int64
낙찰가
count
unique
top
freq
Analysis
Auction_class
1933
2
임의
1439
2가지 범주지만, 임의가 거의 대다수
Bid_class
1933
3
일반
1796
3가지이며 일반이 약 90%를 차지
Appraisal_company
1933
238
부경감정
33
238개의 감정사로 매우 많이 분포
Final_result
1933
1
낙찰
1933
모두 낙찰된 것으로 없어도 될 데이터
Creditor
1933
448
Private
483
채권자, 매우 다양
addr_do
1933
2
서울
1242
서울과 부산으로 나뉘어지며 약 3대2의 비율
addr_si
1933
39
노원구
129
39개의 구로, 서울과 부산에 중복으로 있는 중구와 강서구를 고려하면 총 41개의 unique한 구가 존재
addr_dong
1933
285
상계동
52
285개 동으로 구성
addr_li
23
9
모전리
10
리가 존재하는 경우에만
addr_san
1933
2
N
1912
산, 거의 없다.
addr_etc
1933
1929
1층 101호
3
상세 주소
Apartment_usage
1933
2
아파트
1656
아파트와 주상복합으로 나뉘어짐
Preserve_regist_date
1933
1256
1111-11-11 00:00:00
43
보존등기일, 원래라면 datetime64이지만 1111-11-11 같은 잘못된 타입으로 변환에 실패
Specific
64
55
1차감정: 220,000,000
5
상세 정보, 주변 정보나 1차 감정가가 있다. 대부분 빈값
Share_auction_YorN
1933
2
N
1854
지분 경매 여부, 79개가 Y
road_name
1933
1038
마포대로
33
도로명, 없는 경우도 존재하기에 이 경우 동 단위 구분이 더 나을듯
Close_date
1933
389
2016-09-08 00:00:00
37
종국 일자, Preserve_regist_date와 같은 특징
Close_result
1933
2
배당
1921
대부분 배당, 12개의 데이터에 대해 낙찰
addr_do
addr_si
Total_building_auction_area
Hammer_price
1521
서울
관악구
4255.07
15151000000
1515
서울
강남구
301.47
4863000000
1602
서울
서초구
196.80
3729990000
1212
서울
강북구
1203.76
3721000000
1153
서울
강남구
244.66
3663000000
1531
서울
강남구
210.10
3651999999
1876
서울
강남구
243.36
3515000000
1179
서울
강남구
145.05
3404900000
1755
서울
강남구
244.04
3351000000
1327
서울
강남구
244.22
3241200000
서울지역 낙찰가 상위 100개
상위 100개 중 아웃라이어 처럼 보이는 건물의 평당 가격을 살펴보면 평균 정도에 머무르는 걸 확인할 수 있었다. 즉 평수가 클 뿐 평당 가격(PPP)은 주변 시세와 비슷하다는 해석이 가능하다.
서울지역 하위 100개
마찬가지로 강남지역에서도 낙찰가 하위 100개가 보이는데 PPP를 보면 2000에서 3000만원 수준으로 단지 평수가 작을 뿐 높은 PPP를 보인다. 이를 통해 평당 가격이 지역별 특성을 반영하며 좀 더 지역별 명확한 분류를 할 수 있도록 해준다.