>RE::VISION CRM

R 데이터 분석

R 디시젼 트리 기본적인 옵션 활용

YONG_X 2013. 2. 2. 09:16

# ========  adjusting decision tree =================

 

k3 <- read.table("kbo_batterbox.txt", header=TRUE, sep=",")
k3

library(party)

 

# 이번에는 OPS 만이 아니라 atbat 타수, hr 홈런수, double 2루타수 까지

# 하나가 아닌 복수의 input 독립변수를 사용

# 더하기 기호를 사용한다는 것이 좀 낯설기도 하지만 ...

# 변수지정 순서를 보면 target인 종속변수를 먼저 쓰는 두괄식


k10 <- ctree(rbi ~ OPS + atbat + hr + double , data=k3)
k10

 

# ======= 아래는 k10의 생성 결과 ===============

# 실행시킬 코드가 아님!!

# 생성된 규칙을 보면 OPS 뿐 아니라, atbat (타수)가 중요도 있음 나타남

 

  Conditional inference tree with 4 terminal nodes

Response:  rbi
Inputs:  OPS, atbat, hr, double
Number of observations:  48

1) OPS <= 0.825; criterion = 1, statistic = 32.993
  2) atbat <= 151; criterion = 0.992, statistic = 9.433
    3)*  weights = 7
  2) atbat > 151
    4) OPS <= 0.768; criterion = 0.987, statistic = 8.611
      5)*  weights = 22
    4) OPS > 0.768
      6)*  weights = 7
1) OPS > 0.825
  7)*  weights = 12

 

# ==== creating the tree plot of k10 tree model ===========

plot(k10, main="RBI classification tree_ KBO batterbox")

 

 

# 트리 플롯을 보면 atbat 타수가 많지 않더라도 OPS가 높은 슬러거들은 타점이 많음

# OPS가 높지 않아도 atbat 타수가 많으면 아무래도 타점이 많을수 밖에 없을 것

# 역시 디시젼 트리는 다수의 변수가 한 변수와 가지는 관계를 파악하는데 적절

# 어떤 구간에서는 OPS가 어떤 구간에서는 atbat이 중요한지를 파악

# 반대로 트리가 포함하지 않은 다른 변수들은 무엇인지 (즉, 상대적 중요도가 낮은)

# 여기서는 홈런이나 2루타의 수 자체 보다는 상대적으로 OPS와 atbat이 중요했음

 

# 간단한 옵션을 하나 변경. input 을 데이터 셋에 존재하는 모두로 설정

# 점 하나만 찍어주면 끝

k10 <- ctree(rbi ~  ., data=k3 )
k10

 

#============ 트리 생성 결과 ===========

    Conditional inference tree with 3 terminal nodes

Response:  rbi
Inputs:  rank_id, palyer, team, position, games, atbat, run, single, double, triple, hr, steal, ballfour, SO, rhit, rlong, robase, OPS
Number of observations:  48

1) rlong <= 0.45; criterion = 1, statistic = 47
  2) rlong <= 0.351; criterion = 0.987, statistic = 35
    3)*  weights = 15
  2) rlong > 0.351
    4)*  weights = 21
1) rlong > 0.45
  5)*  weights = 12

 

# 생성된 새로운 디시젼 트리 plot 보기

plot(k10)

 

 

# 입력변수가 많아지다 보니 트리는 다른 결과를 보여줌

# rlong은 장타율. 장타율로 거의 대부분이 설명됨

# 이전의 모델에서 OPS 가 중요했는데, OPS=출루율+장타율

# 출루율 보다도 그 안에 포함된 장타율이 중요했음을 확인

 

# 트리에 대한 추가적인 옵션들을 보기 위해서는 help를 참조

# 그중에서도 많이 사용할 controls 옵션을 살펴보고

help(ctree)


 

# controls 옵션중 하나를 사용해서 트리를 단순화시킴. maxdepth=1 옵션은 한번의 split만 허용

# default 값은 0 이므로 가능한한 울창한 트리를 만들게 되어 있음

# 복잡함을 줄여서 보려면 (대량의 데이터에 다수의 입력변수가 있는 경우 통상 매우 큰 트리가 되므로)

# 옵션을 3~5 사이 정도로 보는 것이 헤메지 않는 Tip

k10 <- ctree(rbi ~  ., data=k3, controls = ctree_control(maxdepth = 1))

 

# 이번에도 제목을 별도로 지정하지 않고 플롯을 그려보기

plot(k10)

 

 

 

 

#=== use a category variable as dependent target variable
# 앞선 예에서는 target 변수로 RBI라는 수치형 변수를 사용했으나

# ctree는 dependent variable로 어떤 타입의 변수를 쓰든 상관 없음

# 이번에는 category 변수인 team과 position을 사용해보기로

 

k10 <- ctree(team ~  ., data=k3 )
plot(k10)

 

 

 

 

# 결과를 보니 롯데가 타력이 좋아보이고, 삼성, 한화는 좀 못해보이고(^^)

# 하지만, 타격과 관련된 여러 변수중에 팀을 제대로 구분해 낼 정도의 차이는

# 보이지 않았기 때문에 split이 이루어지지 않았고

# 하지만, 플롯 자체를 보는 용도 정도의 의미는 있어 보임(^^)


k10 <- ctree(position ~  ., data=k3 )
plot(k10)

 

 

#  포지션 별로 보면, LF좌익수와 1B 일루수들이 타격이 좋은 편인 듯

#  포수 cat 와 유격수 SS 는 역시 수비가 중요한 자리다 보니 그다지

#  타격이 좋지는 못함

#  외야수 중에서는 LF > CF > RF  순. 중견수는 수비 부담이 크고

#  우익수는 왼손이 많아서 일까?

#  여기서는 48명의 주요 선수만 분석한 것이니 (연습용)

#  진짜 분석을 원한다면 http://www.koreabaseball.com/Record/HitterRecord.aspx

#  KBO 웹사이트에서 타자 삼백명 가량에 대한 데이터를 가져다가 해볼 것!(^^)

 

# -- last update : 2013. 02. 02