# ======== 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
'R 데이터 분석' 카테고리의 다른 글
[R 데이터 분석 연습] 플롯과 heatmap을 통한 추가적 EDA 탐색적 분석 (0) | 2013.02.08 |
---|---|
[R 데이터 분석 연습] ctree 를 보기 좋게 수정하는 custom 함수 활용 (0) | 2013.02.06 |
[R 데이터 분석 연습] RFM 데이터 준비와 모델링 (0) | 2013.02.05 |
R 마이닝 첫경험[?] [디시젼트리 만들기] (0) | 2013.02.01 |
R을 사용한 데이터 처리 [왕초보용 연습 example] (0) | 2013.01.31 |