close_btn
조회 수 1591 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files

투빅스 다중회귀분석 과제 - 부동산 경매 데이터

11th_Soomin Kang

2019년 1월 18일

과제 출처 (아래의 url에서 더 자세한 내용 확인하실 수 있습니다.)

(https://dacon.io/cpt3)


사용할 데이터 설명

data1.JPG
data2.JPG

최종 task

연구가설 : 독립변수들은 낙찰가에 영향을 미친다.

변수설명
종속변수낙찰가 (Hammer_price)
독립변수

나머지 변수들


0. 데이터 불러오기 + 데이터 확인하기

library(dplyr)
library(data.table)
#언어가 깨지지 않도록 encoding설정하여 불러온다
data_original <- read.csv("Auction_master_train_en.csv",encoding = "UTF-8",stringsAsFactors = F)

#데이터 확인하기 (여전히 깨지는 문제는 엑셀파일에서 부터 깨져서 넘 맘이 아프다..!)
data_original <- data_original[,-(33:41)] #쓸데없이 생긴 열 지우기

#전체 데이터 확인
#head(data_original)

(사진을 클릭하면 크게 볼 수 있습니다.)

data3.JPGdata4.JPGdata5.JPGdata6.JPG

colnames(data_original) #열이름 나열하기
##  [1] "Auction_key"                 "Auction_class"              
##  [3] "Bid_class"                   "Claim_price"                
##  [5] "Appraisal_date"              "Auction_count"              
##  [7] "Appraisal_company"           "Auction_miscarriage_count"  
##  [9] "Total_land_gross_area"       "Total_land_real_area"       
## [11] "Total_land_auction_area"     "Total_building_area"        
## [13] "Total_building_auction_area" "Total_appraisal_price"      
## [15] "Minimum_sales_price"         "First_auction_date"         
## [17] "Final_auction_date"          "Final_result"               
## [19] "Creditor"                    "addr_etc"                   
## [21] "Apartment_usage"             "Preserve_regist_date"       
## [23] "Total_floor"                 "Current_floor"              
## [25] "Share_auction_YorN"          "Specific"                   
## [27] "Close_date"                  "Close_result"               
## [29] "point.y"                     "point.x"                    
## [31] "addr_en"                     "Hammer_price"
#데이터 자료구조 확인하기
str(data_original)
## 'data.frame':    1900 obs. of  32 variables:
##  $ Auction_key                : int  2687 2577 2197 2642 1958 2238 1923 2527 2259 2666 ...
##  $ Auction_class              : chr  "random" "random" "random" "random" ...
##  $ Bid_class                  : chr  "individual" "general" "individual" "general" ...
##  $ Claim_price                : num  1.77e+09 1.53e+08 1.13e+07 1.84e+08 4.59e+07 ...
##  $ Appraisal_date             : chr  "2017-07-26 0:00" "2016-09-12 0:00" "2016-11-22 0:00" "2016-12-13 0:00" ...
##  $ Auction_count              : int  2 2 3 2 2 2 3 2 2 2 ...
##  $ Appraisal_company          : chr  "?<U+0095>명감정" "?<U+00AC>감??1" "?<U+009C>림감정" "?<U+00A0>라감정" ...
##  $ Auction_miscarriage_count  : num  1 42478 2 1 1 ...
##  $ Total_land_gross_area      : num  12592 18.8 149683.1 24405 774 ...
##  $ Total_land_real_area       : num  37.4 18.8 71 33 45.2 ...
##  $ Total_land_auction_area    : num  37.4 118.4 71 33 45.2 ...
##  $ Total_building_area        : num  181.8 118.4 49.9 84.9 85 ...
##  $ Total_building_auction_area: num  1.82e+02 1.07e+09 4.99e+01 8.49e+01 8.50e+01 ...
##  $ Total_appraisal_price      : num  8.36e+08 8.58e+08 1.19e+08 2.88e+08 1.70e+08 ...
##  $ Minimum_sales_price        : chr  "668800000" "2016-12-29 0:00" "76160000" "230720000" ...
##  $ First_auction_date         : chr  "2018-02-13 0:00" "2017-02-02 0:00" "2017-07-28 0:00" "2017-07-20 0:00" ...
##  $ Final_auction_date         : chr  "2018-03-20 0:00" "successful bid" "2017-10-13 0:00" "2017-11-02 0:00" ...
##  $ Final_result               : chr  "successful bid" "Company or Group" "successful bid" "successful bid" ...
##  $ Creditor                   : chr  "Company or Group" "?<U+00B4>운?<U+0080>?<U+0090>산?<U+0084>브?<U+0094>제?<U+0088>스 103 building. 51 floor. 5103 no." "Company or Group" "Company or Group" ...
##  $ addr_etc                   : chr  "?<U+00B4>운?<U+0080>?<U+0091>소?<U+0094><ec>? 5 floor. 101-502 no." "Apartment" "백양그린 206 building. 14 floor. 1403 no." "?<U+0080>?<U+00B0>청<ea><U+00B5>?109 building. 11 floor. 1102 no." ...
##  $ Apartment_usage            : chr  "Apartment & stores" "2011-12-16 0:00" "Apartment" "Apartment" ...
##  $ Preserve_regist_date       : chr  "2009-07-14 0:00" "70" "1992-07-31 0:00" "2001-07-13 0:00" ...
##  $ Total_floor                : chr  "45" "51" "15" "20" ...
##  $ Current_floor              : chr  "5" "N" "14" "11" ...
##  $ Share_auction_YorN         : chr  "N" "" "N" "N" ...
##  $ Specific                   : chr  "" "2017-03-30 0:00" "" "" ...
##  $ Close_date                 : chr  "2018-06-14 0:00" "dividend" "2017-12-13 0:00" "2017-12-27 0:00" ...
##  $ Close_result               : chr  "dividend" "35.1566334" "dividend" "dividend" ...
##  $ point.y                    : chr  "35.1627175" "129.1450681" "35.1846011" "35.1541796" ...
##  $ point.x                    : chr  "129.1370479" "Jangsan-ro  Haeundae-gu  Busan" "128.9967645" "129.0890814" ...
##  $ addr_en                    : chr  "Jangsan-ro  Haeundae-gu  Busan" "971889999" "Mora-ro 219beon-gil  Sasang-gu  Busan" "Motgol-ro  Nam-gu  Busan" ...
##  $ Hammer_price               : chr  "760000000" "" "93399999" "256899000" ...

1.파생변수 만들기

#본 분석에 사용할 데이터 따로 저장
data <- data_original
#1. 더미변수(AC.dummy) 만들기 (Auction-class중에 강제경매와 임의경매간에 낙찰가의 유의성을 검증하기 위해 - 임의경매(random):준거집단)
data$AC.dummy[data$Auction_class=="random"] <- 0
data$AC.dummy[data$Auction_class=="forced"] <- 1
data$AC.dummy <- as.factor(data$AC.dummy)
#데이터 확인
#head(data$AC.dummy)

data7.JPG

#2. 경매기간 날짜(factor형)형을 integer형으로 변형
#str(data) #파생 변수 만들기 전에 구조 보기
data$Final_auction_date_ed <- data$Final_auction_date
#이미 경매에 성공한 항목들은 0으로 초기화 하기
data$Final_auction_date_ed[data$Final_auction_date_ed == "successful bid"] <- "0000-00-00 0:00"

#초기화 형태를 보면 알 수 있다 시피 이 경매 날짜의 형태가 "xxxx-xx-xx xx:xx"로 나타나는 것을 알 수 있다.
str(data$Final_auction_date_ed)
##  chr [1:1900] "2018-03-20 0:00" "0000-00-00 0:00" "2017-10-13 0:00" ...
#또한 형태가 char이어서 나중에 형변환도 해야겠다.
#head(data$Final_auction_date_ed)
data8.JPG

2번째 파생변수 목표

xxxx-xx-xx xx:xx" 의 하나의 레코드를 xxxx(년) / xx(월) / xx(일)로 나누어서 총 일수를 구하기
final의 총 일수와 first의 총 일수를 빼서 경매가 되기까지의 기간을 알아보기
최종 경매기간 = data$duration
#xxxx(년) / xx(월) / xx(일)의 형태로 만들기 위한 전처리 과정
fuc_new_col_for_duration <- function(x){
  #데이터 불러오기
  n <- nrow(data)
  df <- data.table()
  
  #경매시작일 / 종료일의 열만 뽑아서 저장하기
  splited_data <- data.frame(x)
  splited_data$id <- 1:n #primary key
  
  #xxxx(년) / xx(월) /xx(일)과 xx:xx을 따로 저장하기
  for (i in 1:n){
  name_index <- as.character(splited_data[i, 2])
  item_index <- as.character(splited_data[i, 1])
  
  item_index_split_temp <- data.frame(strsplit(item_index, split = ' '))
  mart_temp <- data.frame(cbind(name_index, item_index_split_temp))
  names(mart_temp) <- c("name", "item")
  df <- rbind(df, mart_temp)
  }
  
  #쓸데없는 0:00은 떼어버리기 (xxxx(년) / xx(월) /xx(일)만 남기기)
  df_wto <- df[-c(which(df$item == "0:00"))]
  df_wto$item <- as.character(df_wto$item) 

  #한 레코드에 'xxxx-xx-xx'형태로 같이 있는 상태에서 xxxx(년) / xx(월) /xx(일)로 각각 떼어내기
  df_splited <- data.table()
  
  for (i in 1:n){
  name_index <- as.character(df_wto[i, 1])
  item_index <- as.character(df_wto[i, 2])
  
  item_index_split_temp <- data.frame(strsplit(item_index, split = '-'))
  mart_temp <- data.frame(cbind(name_index, item_index_split_temp))
  names(mart_temp) <- c("name", "item")
  df_splited <- rbind(df_splited, mart_temp)
  }
  
  #떼어넨 값들을 총 일수로 계산하기
  #계산을 위해서 형변환하기
  df_splited$item <- as.character(df_splited$item)
  df_splited$item <- as.integer(df_splited$item)
  #xxxx/xx/xx로 나뉘어져 있는 행을 일수로 계산해 하나의 행으로 나타낼 수 있도록 df_3만들기
  df_final <- data.table()

  for(i in 1:1900){
    for(j in 1){
      yeah <- (df_splited$item[df_splited$name==i][j]-1)*365
        j <- j+1
      month <- (df_splited$item[df_splited$name==i][j]-1)*30
        j <- j+1
      day <- df_splited$item[df_splited$name==i][j]
    
      total <- yeah+month+day
    }
  df_final <- rbind(df_final,total)
  }
  return(df_final)
}

#fuc_new_col_for_duration 함수를 이용해서 총 일자 구하기
#경매시작일 총 일자
final_first_duration <- fuc_new_col_for_duration(data$First_auction_date)
#경매종료일 총 일자

final_final_duration <- fuc_new_col_for_duration(data$Final_auction_date_ed)

#경매종료일에 sucessful bid 초기화시키기
final_final_duration$x[final_final_duration$x == -395] <- 0
#경매시작일도 그때 sucessfully bid되었으면 계산하지 않아도 되기 때문에 초기화 시키기
final_first_duration$x[final_final_duration$x == 0] <- 0

#경매 기간 : 경매종료일 - 경매시작일
data$duration <- final_final_duration$x - final_first_duration$x

(https://rfriend.tistory.com/238) #참고자료

#head(data$duration)

data9.JPG

#3.총감정가 - 경매 신청인의 청구 금액
data$diff_price <- data$Total_appraisal_price - data$Claim_price
#head(data$diff_price)

data10.JPG

2.Feature selection

  • 먼저 char형태인 경우나 형태가 무작위인 경우(int였다가 char이었다가 등)파악 후 제거하기
  • 회귀분석은 기본 가정이 독립변수가 연속척도여야 하기 때문에 char인 변수를 모두 제거하겠다 + na값이 있는 변수 지우기
#str(data)
#삭제한 변수 목록("auction_class","Appraisal_date","Appraisal_company","Minimum_sales_price","First_auction_date","Final_auction_date","addr_etc","Preserve_regist_date","Specific","Close_date","point.y","point.x","addr_en","Final_auction_date_ed","apartment usage","share_auction_YorN","close_result","current floor")
variable <- data[- c(2,5,7,15,16,17,19,20,21,22,24,25,26,27,28,29,30,31,34)] 

#쓸만한 char data 좀 더 dummy화 시키기
#table(is.na(variable$Bid_class))

#table(Bid_class) 입찰구분 일반 = 준거집단
variable$Bid_class[variable$Bid_class=="bundle"] <- 0
variable$Bid_class[variable$Bid_class=="general"] <- 1
variable$Bid_class[variable$Bid_class=="individual"] <- 2
variable$Bid_class <- as.factor(variable$Bid_class)

#table(Final_result) 최종결과 company or group = 준거집단
variable$Final_result[variable$Final_result=="Company or Group"] <- 0
variable$Final_result[variable$Final_result=="private"] <- 1
variable$Final_result[variable$Final_result=="successful bid"] <- 2
variable$Final_result <- as.factor(variable$Final_result)

#층수 int화 하기
variable$Total_floor <- as.integer(variable$Total_floor)

#종속변수 최종 낙찰가 / 처음에 successful bid된 것은 claim price 가지고 와서 NA메꾸기
variable$Hammer_price <- as.integer(variable$Hammer_price)
variable$Hammer_price[which(is.na(variable$Hammer_price))] <- data$Claim_price[which(is.na(variable$Hammer_price))]
#regression에서 쓸 데이터 확인
#head(variable)

data11.JPGdata12.JPG

3.본격적 회귀분석 해보기

3-1. 회귀분석 결과 해석하기

#종속변수 : Hammer_price
#독립변수 : 나머지 변수들
#연구가설 : Hammer_price를 제외한 변수들이 Hammer_price에 영향을 미칠 것이다.

regression <- lm(Hammer_price ~ ., data=variable)
summary(regression)
## 
## Call:
## lm(formula = Hammer_price ~ ., data = variable)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -8.713e+09 -6.648e+07  5.677e+05  6.992e+07  1.269e+10 
## 
## Coefficients: (1 not defined because of singularities)
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 -4.279e+08  2.200e+08  -1.945   0.0519 .  
## Auction_key                 -4.986e+04  2.340e+04  -2.131   0.0333 *  
## Bid_class1                   5.112e+08  2.062e+08   2.479   0.0133 *  
## Bid_class2                   5.282e+08  2.165e+08   2.440   0.0148 *  
## Claim_price                  4.140e-01  1.204e-02  34.384   <2e-16 ***
## Auction_count                1.704e+07  1.745e+07   0.976   0.3290    
## Auction_miscarriage_count   -3.169e+02  4.819e+02  -0.658   0.5109    
## Total_land_gross_area        1.528e+02  1.693e+02   0.902   0.3669    
## Total_land_real_area         1.585e+03  1.164e+06   0.001   0.9989    
## Total_land_auction_area      1.250e+06  1.076e+06   1.163   0.2451    
## Total_building_area         -1.323e+06  6.153e+05  -2.150   0.0317 *  
## Total_building_auction_area -3.849e-02  7.515e-02  -0.512   0.6086    
## Total_appraisal_price        5.273e-01  5.316e-02   9.920   <2e-16 ***
## Final_result1               -9.214e+07  7.043e+07  -1.308   0.1909    
## Final_result2               -2.984e+06  6.344e+07  -0.047   0.9625    
## Total_floor                  4.474e+06  2.072e+06   2.159   0.0309 *  
## AC.dummy1                    5.603e+07  3.553e+07   1.577   0.1150    
## duration                    -8.542e+04  1.361e+05  -0.627   0.5304    
## diff_price                          NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 650200000 on 1881 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.529,  Adjusted R-squared:  0.5247 
## F-statistic: 124.3 on 17 and 1881 DF,  p-value: < 2.2e-16

dff_price가 NA처리 되는 것은 이것이 다른 변수와 aliased coefficients가 있기 때문이다. 따라서 마음이 아프지만 만들었던 파생변수 dff_price를 제외하고 다시 regression을 해 보겠다.

variable$diff_price <- NULL #diff_price 지우기

regression <- lm(Hammer_price ~ ., data=variable)
summary(regression)
## 
## Call:
## lm(formula = Hammer_price ~ ., data = variable)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -8.713e+09 -6.648e+07  5.677e+05  6.992e+07  1.269e+10 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 -4.279e+08  2.200e+08  -1.945   0.0519 .  
## Auction_key                 -4.986e+04  2.340e+04  -2.131   0.0333 *  
## Bid_class1                   5.112e+08  2.062e+08   2.479   0.0133 *  
## Bid_class2                   5.282e+08  2.165e+08   2.440   0.0148 *  
## Claim_price                  4.140e-01  1.204e-02  34.384   <2e-16 ***
## Auction_count                1.704e+07  1.745e+07   0.976   0.3290    
## Auction_miscarriage_count   -3.169e+02  4.819e+02  -0.658   0.5109    
## Total_land_gross_area        1.528e+02  1.693e+02   0.902   0.3669    
## Total_land_real_area         1.585e+03  1.164e+06   0.001   0.9989    
## Total_land_auction_area      1.250e+06  1.076e+06   1.163   0.2451    
## Total_building_area         -1.323e+06  6.153e+05  -2.150   0.0317 *  
## Total_building_auction_area -3.849e-02  7.515e-02  -0.512   0.6086    
## Total_appraisal_price        5.273e-01  5.316e-02   9.920   <2e-16 ***
## Final_result1               -9.214e+07  7.043e+07  -1.308   0.1909    
## Final_result2               -2.984e+06  6.344e+07  -0.047   0.9625    
## Total_floor                  4.474e+06  2.072e+06   2.159   0.0309 *  
## AC.dummy1                    5.603e+07  3.553e+07   1.577   0.1150    
## duration                    -8.542e+04  1.361e+05  -0.627   0.5304    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 650200000 on 1881 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.529,  Adjusted R-squared:  0.5247 
## F-statistic: 124.3 on 17 and 1881 DF,  p-value: < 2.2e-16

F값이 124.3으로 크다고 할 수 있고 p-value의 결과를 보니 0.05보다 낮기 때문에 연구가설인 이 독립변수들이 종속변수인 Hammer_price에 영향을 준다고 할 수 있겠다. 또한 우리의 모델로 종속변수를 52.9%설명할 수 있다(R2값).

3-2. 회귀분석의 기본 가정 충족 여부 plotting으로 확인하기

library(sjPlot)
set_theme(axis.title.size = 1.0, axis.textsize = 1.0)
plot_model(regression, type="diag")

11.png

22.png
33.png
44.png

비상관성 : VIF가 10이상으로 다중공선성의 문제를 해칠만한 변수들이 포착된다.

정규성 : 점들이 선에 앞쪽에는 붙어있다가 뒤에 몇 이상치는 붙어있지 않지만 나름대로 정규성을 띈다고 할 수 있겠다.

등분산 : 정규성과 같은 맥락으로 해석할 수 있다.

#독립성검사
library(lmtest)
dwtest(regression)
## 
##  Durbin-Watson test
## 
## data:  regression
## DW = 1.9777, p-value = 0.3074
## alternative hypothesis: true autocorrelation is greater than 0

독립성 : 2를 크게 벗어나지 않으므로 크게 독립성을 해친다고 할 수 없겠다.

#VIF값 구하기
library(car)
vif(regression)
##                                  GVIF Df GVIF^(1/(2*Df))
## Auction_key                  1.577430  1        1.255958
## Bid_class                    1.419273  2        1.091482
## Claim_price                  1.184050  1        1.088141
## Auction_count                1.217502  1        1.103405
## Auction_miscarriage_count    1.342098  1        1.158489
## Total_land_gross_area        1.063078  1        1.031057
## Total_land_real_area        26.344892  1        5.132728
## Total_land_auction_area     56.593238  1        7.522848
## Total_building_area         19.554426  1        4.422039
## Total_building_auction_area 12.531221  1        3.539946
## Total_appraisal_price        4.075035  1        2.018672
## Final_result                 3.609762  2        1.378382
## Total_floor                  1.825281  1        1.351030
## AC.dummy                     1.078565  1        1.038540
## duration                     1.196941  1        1.094048

Total_land_real_area, Total_land_auction_area,Total_building_area Total_building_auction_area가 다중공선성의 문제를 일으킬 수 있겠는데, 아무래도 변수들이 모두 총 토지 면적에 관한 것이기 때문인 걸로 추측된다. 따라서 vif값이 10근처에 있는 Total_building_auction_area만 빼고 나머지 두 변수들은 삭제하겠다.

3-3. 다중공선성 문제 해결하기

#vif값이 높았던 값들 지우기(Total_building_auction_area만 남기기)
variable <- variable[,-c(6,7,8,9)]

ed_regression <- lm(Hammer_price~.,data=variable)
vif(ed_regression)
##                                 GVIF Df GVIF^(1/(2*Df))
## Auction_key                 1.402354  1        1.184210
## Bid_class                   1.384666  2        1.084766
## Claim_price                 1.183964  1        1.088101
## Auction_count               1.174847  1        1.083904
## Auction_miscarriage_count   1.261699  1        1.123254
## Total_building_auction_area 2.103999  1        1.450517
## Total_appraisal_price       2.637963  1        1.624181
## Final_result                1.771871  2        1.153740
## Total_floor                 1.371149  1        1.170961
## AC.dummy                    1.076427  1        1.037510
## duration                    1.196084  1        1.093656

비슷한 나머지 변수들을 제거하고 보니 vif값이 2근방으로 안전한 모델로 업그레이드 되었당!!

3-4. 새로운 ed_regression 결과 해석하기

summary(ed_regression)
## 
## Call:
## lm(formula = Hammer_price ~ ., data = variable)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -8.729e+09 -6.825e+07  2.260e+06  6.728e+07  1.270e+10 
## 
## Coefficients:
##                               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                 -4.128e+08  2.195e+08  -1.880   0.0602 .  
## Auction_key                 -5.497e+04  2.208e+04  -2.490   0.0129 *  
## Bid_class1                   5.288e+08  2.051e+08   2.578   0.0100 *  
## Bid_class2                   5.470e+08  2.146e+08   2.549   0.0109 *  
## Claim_price                  4.142e-01  1.205e-02  34.379   <2e-16 ***
## Auction_count                1.173e+07  1.715e+07   0.684   0.4942    
## Auction_miscarriage_count   -2.853e+02  4.675e+02  -0.610   0.5418    
## Total_building_auction_area -1.975e-02  3.081e-02  -0.641   0.5217    
## Total_appraisal_price        4.739e-01  4.279e-02  11.073   <2e-16 ***
## Final_result1               -9.077e+07  7.035e+07  -1.290   0.1971    
## Final_result2               -4.638e+07  4.621e+07  -1.004   0.3157    
## Total_floor                  3.588e+06  1.797e+06   1.997   0.0460 *  
## AC.dummy1                    5.425e+07  3.551e+07   1.528   0.1268    
## duration                    -9.088e+04  1.362e+05  -0.667   0.5045    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 650500000 on 1885 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.5275, Adjusted R-squared:  0.5242 
## F-statistic: 161.9 on 13 and 1885 DF,  p-value: < 2.2e-16

F값은 이전의 regression모델보다(124.3) 약 40정도 향상하였고 p-value는 동일하여 여전히 귀무가설을 기각할 수 있겠다. 하지만 R2값은 아무래도 다중공선성으로 겹치는 부분이 있어서인지 이전에는 52.9%가 설명가능했다면 지금은 52.75%로 종속변수의 분산중에서 독립변수에 의해 설명되는 분산은 52.75%라고 할 수 있겠다.

또한 종속변수 낙찰가에 유의한 영향을 주는 독립변수들은 (기준 p-value 0.05) Auction_key, Bid_class1, Bid_class2, Claim_price, Total_appraisal_price, Total_floor정도가 있겠다.

더미변수들 (Bid_class,Final_result,AC.dummy) 결과 해석 : 입찰구분(Bid_class)을 보니 bundle(준거집단)로 한 것 보다 general(Bid_class1) 경매된 것이 낙찰가에 5.288e+08정도 유의한 영향을 주고 individual(Bid_class2)에 경매된 것이 낙찰가에 5.470e+08정도로 general과 bundle보다 더 큰 영향을 주는것을 알 수 있다. (나머지 더미들은 유의하지 않기 때문에 해석을 건너뛰겠다.)

밤을 지새우며 세상에서 제일 힘들게 만든 duration은 너무나도 쓸모없었다….

상호작용 효과

4-1. 유독 낙찰가에 영향을 크게 미친 독립변수 claim_price와 total_appraisal_price의 상호작용 효과 확인하기

#mean centering for claim_price
mean.claim_price <- mean(variable$Claim_price, na.rm=TRUE)
variable$centered.claim_price <- variable$Claim_price - mean.claim_price

#mean centering for total_appraisal_price
mean.total_appraisal_price <- mean(variable$Total_appraisal_price, na.rm=TRUE)
variable$centered.total_appraisal_price <- variable$Total_appraisal_price - mean.total_appraisal_price
#유의한 독립변수만 추리기 + 상호작용 효과도 확인하기 (상호작용 효과 = centered.claim_price*centered.total_appraisal_orice)
cor_regression <- lm(Hammer_price ~ Auction_key + Bid_class + Total_building_auction_area + Final_result + Total_floor + centered.claim_price +centered.total_appraisal_price + centered.claim_price*centered.total_appraisal_price, data=variable)
summary(cor_regression)
## 
## Call:
## lm(formula = Hammer_price ~ Auction_key + Bid_class + Total_building_auction_area + 
##     Final_result + Total_floor + centered.claim_price + centered.total_appraisal_price + 
##     centered.claim_price * centered.total_appraisal_price, data = variable)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -6.885e+09 -1.308e+08 -3.879e+06  1.098e+08  1.014e+10 
## 
## Coefficients:
##                                                       Estimate Std. Error
## (Intercept)                                          6.787e+08  1.917e+08
## Auction_key                                         -1.779e+05  2.048e+04
## Bid_class1                                           2.616e+08  1.837e+08
## Bid_class2                                           2.404e+08  1.922e+08
## Total_building_auction_area                         -8.622e-01  4.779e-02
## Final_result1                                       -9.042e+05  6.172e+07
## Final_result2                                       -4.081e+08  4.096e+07
## Total_floor                                          8.624e+06  1.622e+06
## centered.claim_price                                 3.709e-01  1.091e-02
## centered.total_appraisal_price                       1.790e-01  4.054e-02
## centered.claim_price:centered.total_appraisal_price  2.544e-10  1.175e-11
##                                                     t value Pr(>|t|)    
## (Intercept)                                           3.541 0.000409 ***
## Auction_key                                          -8.688  < 2e-16 ***
## Bid_class1                                            1.424 0.154612    
## Bid_class2                                            1.251 0.211081    
## Total_building_auction_area                         -18.042  < 2e-16 ***
## Final_result1                                        -0.015 0.988313    
## Final_result2                                        -9.965  < 2e-16 ***
## Total_floor                                           5.318 1.17e-07 ***
## centered.claim_price                                 34.011  < 2e-16 ***
## centered.total_appraisal_price                        4.415 1.07e-05 ***
## centered.claim_price:centered.total_appraisal_price  21.656  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 582300000 on 1888 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.6208, Adjusted R-squared:  0.6188 
## F-statistic: 309.1 on 10 and 1888 DF,  p-value: < 2.2e-16
#다중공선성 확인
vif(cor_regression)
##                                                         GVIF Df
## Auction_key                                         1.505702  1
## Bid_class                                           1.320348  2
## Total_building_auction_area                         6.316529  1
## Final_result                                        1.721099  2
## Total_floor                                         1.393913  1
## centered.claim_price                                1.211123  1
## centered.total_appraisal_price                      2.953856  1
## centered.claim_price:centered.total_appraisal_price 6.401551  1
##                                                     GVIF^(1/(2*Df))
## Auction_key                                                1.227070
## Bid_class                                                  1.071944
## Total_building_auction_area                                2.513271
## Final_result                                               1.145385
## Total_floor                                                1.180641
## centered.claim_price                                       1.100510
## centered.total_appraisal_price                             1.718679
## centered.claim_price:centered.total_appraisal_price        2.530129

claim_price와 total_appraisal_price의 상호작용 효과가 유의한 것을 p-value를 통해 확인 할 수 있다. 또한 회귀계수가 2.544e-10로 이 상호작용이 낙찰가에 정적 영향을 미치는 것을 확인할 수 있다.

4-2. 상호작용 효과 plotting으로 확인하기

library("jtools")
interact_plot(cor_regression, pred = "centered.claim_price", modx = "centered.total_appraisal_price")

55.JPG

도표에서 알 수 있듯이 total_appraisal_price 총감정가가 높을때 claim_price 경매 신청인의 청구금액은 낙찰가 영향을 미치는 정도가 크고, 총감정가가 낮으면 신청인의 청구금액은 낙찰가에 영향을 미치는 정도가 작은 것으로 해석할 수 있다.

5. 선택 제거 방법으로 종속변수 낙찰가(Hammer_price)에 영향을 유의하게 주는 독립변수를 찾아보자!

#ed_regression : 다중공선성만 제거하고 모든 독립변수가 들어있는 regression모델
step <- step(ed_regression) 
## Start:  AIC=77087.71
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Auction_count + 
##     Auction_miscarriage_count + Total_building_auction_area + 
##     Total_appraisal_price + Final_result + Total_floor + AC.dummy + 
##     duration
## 
##                               Df  Sum of Sq        RSS   AIC
## - Final_result                 2 8.4702e+17 7.9848e+20 77086
## - Auction_miscarriage_count    1 1.5753e+17 7.9779e+20 77086
## - Total_building_auction_area  1 1.7380e+17 7.9781e+20 77086
## - duration                     1 1.8853e+17 7.9782e+20 77086
## - Auction_count                1 1.9781e+17 7.9783e+20 77086
## <none>                                      7.9764e+20 77088
## - AC.dummy                     1 9.8733e+17 7.9862e+20 77088
## - Total_floor                  1 1.6877e+18 7.9932e+20 77090
## - Bid_class                    2 2.8512e+18 8.0049e+20 77090
## - Auction_key                  1 2.6234e+18 8.0026e+20 77092
## - Total_appraisal_price        1 5.1884e+19 8.4952e+20 77205
## - Claim_price                  1 5.0014e+20 1.2978e+21 78010
## 
## Step:  AIC=77085.73
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Auction_count + 
##     Auction_miscarriage_count + Total_building_auction_area + 
##     Total_appraisal_price + Total_floor + AC.dummy + duration
## 
##                               Df  Sum of Sq        RSS   AIC
## - Auction_miscarriage_count    1 4.5803e+16 7.9853e+20 77084
## - Total_building_auction_area  1 7.5114e+16 7.9856e+20 77084
## - Auction_count                1 1.7036e+17 7.9865e+20 77084
## - duration                     1 2.4266e+17 7.9873e+20 77084
## - AC.dummy                     1 7.3465e+17 7.9922e+20 77085
## <none>                                      7.9848e+20 77086
## - Total_floor                  1 1.5877e+18 8.0007e+20 77088
## - Bid_class                    2 3.0793e+18 8.0156e+20 77089
## - Auction_key                  1 2.6481e+18 8.0113e+20 77090
## - Total_appraisal_price        1 5.2362e+19 8.5084e+20 77204
## - Claim_price                  1 5.0230e+20 1.3008e+21 78010
## 
## Step:  AIC=77083.84
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Auction_count + 
##     Total_building_auction_area + Total_appraisal_price + Total_floor + 
##     AC.dummy + duration
## 
##                               Df  Sum of Sq        RSS   AIC
## - Total_building_auction_area  1 9.6915e+16 7.9863e+20 77082
## - Auction_count                1 1.6925e+17 7.9870e+20 77082
## - duration                     1 2.2838e+17 7.9876e+20 77082
## - AC.dummy                     1 7.4956e+17 7.9928e+20 77084
## <none>                                      7.9853e+20 77084
## - Total_floor                  1 1.6198e+18 8.0015e+20 77086
## - Bid_class                    2 3.1027e+18 8.0163e+20 77087
## - Auction_key                  1 2.6474e+18 8.0118e+20 77088
## - Total_appraisal_price        1 5.2917e+19 8.5145e+20 77204
## - Claim_price                  1 5.0225e+20 1.3008e+21 78008
## 
## Step:  AIC=77082.07
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Auction_count + 
##     Total_appraisal_price + Total_floor + AC.dummy + duration
## 
##                         Df  Sum of Sq        RSS   AIC
## - Auction_count          1 1.5313e+17 7.9878e+20 77080
## - duration               1 1.9663e+17 7.9882e+20 77081
## - AC.dummy               1 7.3062e+17 7.9936e+20 77082
## <none>                                7.9863e+20 77082
## - Total_floor            1 2.1006e+18 8.0073e+20 77085
## - Bid_class              2 3.2896e+18 8.0192e+20 77086
## - Auction_key            1 3.0828e+18 8.0171e+20 77087
## - Total_appraisal_price  1 7.7582e+19 8.7621e+20 77256
## - Claim_price            1 5.0331e+20 1.3019e+21 78008
## 
## Step:  AIC=77080.43
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Total_appraisal_price + 
##     Total_floor + AC.dummy + duration
## 
##                         Df  Sum of Sq        RSS   AIC
## - duration               1 1.1854e+17 7.9890e+20 77079
## - AC.dummy               1 7.6194e+17 7.9954e+20 77080
## <none>                                7.9878e+20 77080
## - Total_floor            1 2.0213e+18 8.0080e+20 77083
## - Bid_class              2 3.2990e+18 8.0208e+20 77084
## - Auction_key            1 3.0134e+18 8.0179e+20 77086
## - Total_appraisal_price  1 7.8420e+19 8.7720e+20 77256
## - Claim_price            1 5.0339e+20 1.3022e+21 78006
## 
## Step:  AIC=77078.71
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Total_appraisal_price + 
##     Total_floor + AC.dummy
## 
##                         Df  Sum of Sq        RSS   AIC
## - AC.dummy               1 7.8113e+17 7.9968e+20 77079
## <none>                                7.9890e+20 77079
## - Total_floor            1 1.9684e+18 8.0087e+20 77081
## - Bid_class              2 3.3344e+18 8.0223e+20 77083
## - Auction_key            1 2.9089e+18 8.0181e+20 77084
## - Total_appraisal_price  1 7.8477e+19 8.7737e+20 77255
## - Claim_price            1 5.0467e+20 1.3036e+21 78007
## 
## Step:  AIC=77078.57
## Hammer_price ~ Auction_key + Bid_class + Claim_price + Total_appraisal_price + 
##     Total_floor
## 
##                         Df  Sum of Sq        RSS   AIC
## <none>                                7.9968e+20 77079
## - Total_floor            1 1.8030e+18 8.0148e+20 77081
## - Bid_class              2 3.2754e+18 8.0295e+20 77082
## - Auction_key            1 2.8989e+18 8.0258e+20 77083
## - Total_appraisal_price  1 7.8193e+19 8.7787e+20 77254
## - Claim_price            1 5.0490e+20 1.3046e+21 78006

선택제거 방법을 통해 AIC값이 77078.57로 가장 작은 독립변수의 조합은 Auction_key + Bid_class + Claim_price + Total_appraisal_price + Total_floor + AC.dummy로 확인된다.

6. 쓸데없는 궁금증

successful bid된 것들의 낙찰가, 감정가, 신청인의 청구금액,총 층수, 총건물경매면적 평균 (독립변수가 유의했던 것들만 집계해보기)

#variable$status : successful bid 된것들과 그렇지 않은 것들 indexing
data$Hammer_price <- as.integer(data$Hammer_price)
variable$status <- data$Hammer_price
variable$status[which(is.na(data$Hammer_price))] <- "successful bid"
variable$status[variable$status!="successful bid"] <- "unsuccessful bid"
  • 한번에 낙찰된 것과 그렇지 않은것의 평균 낙찰가
final_mean_hammer <- aggregate(Hammer_price ~ status,data = variable,mean) ; final_mean_hammer
##             status Hammer_price
## 1   successful bid    486348859
## 2 unsuccessful bid    440056522

한번에 낙찰된 평균 낙찰가는 486,348,859원이고 한번만에 낙찰되지 못한 평균 낙찰가는 440,056,522원이다.



  • 평균 낙찰가의 금액차이(successful bid - unsuccessful bid of hammer price)
h <- final_mean_hammer[1,2]-final_mean_hammer[2,2] ;h
## [1] 46292337

한번에 낙찰된 평균 낙찰가와 한번만에 낙찰되지 못한 평균 낙찰가는 46,292,337원의 금액 차이가 난다.



  • 한번에 낙찰된 것과 그렇지 않은 것의 평균 감정가
final_mean_appraisal <- aggregate(Total_appraisal_price ~ status,data = variable,mean) ; final_mean_appraisal
##             status Total_appraisal_price
## 1   successful bid             496058082
## 2 unsuccessful bid             458813332

한번에 낙찰된 평균 감정가는 496,058,082원이고 한번만에 낙찰되지 못한 평균 감정가는 458,813,332원이다.

successful이든 unsuccessful이든간에 대체로 낙찰가가 감정가보다 낮다는 것을 알 수 있다. 즉 감정은 높게되었지만 실제 낙찰가는 이보다 낮다는 결론을 도출할 수 있겠다.



  • 평균 감정가의 금액차이(successful bid - unsuccessful bid of total apprasial price)
a <- final_mean_appraisal[1,2]-final_mean_appraisal[2,2] ;a
## [1] 37244750

한번에 낙찰된 평균 감정가와 한번만에 낙찰되지 못한 평균 감정가는 37,244,750원의 금액 차이가 난다.



  • 낙찰가 VS 감정가
if(h>a){
  print("낙찰가")
  print(h)
  print("낙찰가 - 감정가")
  print(h-a)
}else{
  print("감정가")
  print(a)
  print("감정가 - 낙찰가")
  print(a-h)
}
## [1] "낙찰가"
## [1] 46292337
## [1] "낙찰가 - 감정가"
## [1] 9047588

한번에 낙찰된 것들과 한번만에 낙찰되지 못한 것들은 낙찰가에서 더 큰 차이를 보였다. 그리고 그 차이는 9,047,588원이다.



  • 신청인의 청구금액
aggregate(Claim_price ~ status,data = variable,mean)
##             status Claim_price
## 1   successful bid   486348859
## 2 unsuccessful bid   323801967

놀랍지 않게도 한번에 낙찰된 것들의 청구금액이 더 높은 것을 볼 수 있다.



  • 총 층수
aggregate(Total_floor~ status,data = variable,mean)
##             status Total_floor
## 1   successful bid    10.21273
## 2 unsuccessful bid    16.45886

결과를 보고 놀랐던것이 필자는 층수가 높으면 낙찰될 가능성이 높을 줄 알았는데, 층수가 높다고 바로 낙찰되는건 아닌가 보다..!



  • 총 건물 경매 면적
final_area <- aggregate(Total_building_auction_area ~ status,data = variable,mean) ;final_area
##             status Total_building_auction_area
## 1   successful bid                   472404733
## 2 unsuccessful bid                      518993

예상은 했지만 한번에 낙찰된 것들의 건물 경매 면적이 훨씬 더 높았다.



  • 총 건물 경매 면적 차이 (successful bid - unsuccessful bid of total_building_auction_area)
final_area[1,2]/final_area[2,2] 
## [1] 910.2333

bid가 바로바로 되는 것들은(successful) 안되는 것(unsuccessful)보다 총 건물 면적이 약 910배 컸다.





감사합니다! 66.JPG





List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 우수 코드 게시판 이용 관련 공지사항 DataMarket 2014.05.21 39654
133 투빅스 10&11기 1주차 Linear Regression - 11기 유기윤 file 유기윤 2019.01.24 741
» 투빅스 10&11기 1주차 Regression - 11기 강수민 file 수민 2019.01.24 1591
131 투빅스 10&11기 1주차 Logistic Regression - 11기 김대웅 file 김대웅 2019.01.23 838
130 투빅스 9&10기 8주차 CNN - 10기 장유영 장유영 2018.09.20 2735
129 투빅스 9기&10기 7주차 알고리즘 - 10기 이민주 file 이민주 2018.09.18 2175
128 투빅스 9&10기 8주차 HOONCHEOLNET for Rock, Scissors, paper - 10기 신훈철 file Henris 2018.09.17 2008
127 투빅스 9&10기 7주차 Pytorch Tutorial - 10기 장유영 장유영 2018.09.17 2193
126 투빅스 9&10기 6주차 tensorflow MNIST- 10기 이준걸 file 이준걸 2018.09.17 2170
125 투빅스 9&10기 6주차 tensorflow- 10기 박규리 file 귤스 2018.09.03 2113
124 투빅스 9기&10기 4주차 K-means - 10기 임진혁 진혁 2018.08.25 2196
123 투빅스 9&10기 5주차 NLP Basic - 10기 장유영 장유영 2018.08.22 2195
122 투빅스 9&10기 4주차 PCA-mnist - 10기 강인구 file kaig 2018.08.16 2621
121 투빅스 9기&10기 4주차 PCA Facebook data - 10기 이준걸 file 이준걸 2018.08.16 2422
120 투빅스 9기&10기 4주차 K-means - 10기 이준걸 file 이준걸 2018.08.16 2380
119 투빅스 9기&10기 4주차 Gibbs Sampling - 10기 이준걸 file 이준걸 2018.08.16 2218
118 투빅스 9기&10기 4주차 알고리즘 - 9기 김수지 file 김수지 2018.08.14 2283
117 투빅스 9&10기 3주차 Ensemble - 10기 정윤호 UNOVATE 2018.08.08 2497
116 투빅스 9&10기 3주차 Support Vector Machine - 10기 장유영 file 장유영 2018.08.08 2637
115 투빅스 9&10기 2주차 KNN, LDA - 10기 박성진 file chad4545 2018.08.01 2399
114 투빅스 9&10기 2주차 Naive Bayes - 10기 장유영 2 file 장유영 2018.08.01 2693
Board Pagination ‹ Prev 1 2 3 4 5 6 7 ... 8 Next ›
/ 8

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5