데이터분석2016. 5. 27. 16:56

벌써 5번째 Kaggler Day이군요 쨌든 오늘은 가장 kaggle script중에 가장 많은 관심을 받은 script 하나를 들고 왔습니다. 물론 이문제 또한 kaggle competition이 이루어진 문제구요. 


문제 설명을 하자면,, 가게, 프로모션, 그리고 경쟁자 정보를 가지고 판매량을 예측하는 겁니다. Rossman이라는 브랜드가 있나봅니다 여튼 여기서 아마 competition 문제를 의뢰한거 같구요.    이 회사가 머하는 곳이냐면 7개의 유럽 국가에 3000개의 약국을 운영하고 있는 회사입니다. 현재 Rossmann 가게 매니저들은 미리 6주되기까지 그들의 daily 판매량을 예상하는 일을 받았다고 합니다. 가게 판매는 많은 인자 즉 프로모션, 경쟁 업체, 학교, 그리고 주의 휴일, 계절, 지역특성에 등등 많은 인자에 의해 영향을 받고  수천명의 개별 매니저들과 그들의 특정 환경을 토대로 판매량을 예측하는함에 있어 결과의 정확성은 꽤 변동이 클것이라고 합니다.


그래서!! 캐글에서 Rossman은 독일에 있는 1,115개의 약국의 6개월간의 판매량을 예측하는걸 목표로 한다고 하네요? 신뢰할만한 판매 예측은 가게 매니저에게 생산성과 동기부여를 증가시킬수 있는 효율적인 직원 스케쥴을 만들수 있게 해준다고 하네요. Rossmann이 견고한 예측 모델을 만들도록 도와주면서 우리는 그들에게 고객과 그들의 팀에게 무엇이 가장 중요한지 알려주고자 합니다. 


자 문제 설명은 마쳤구요.. 여기 가보면 데이터셋을 확보할수 있습니다.


데이터셋을 보니 


손님 수, 가게 오픈여부, 주휴일, 학교휴일, 가게타입. assortment(무슨 factor중의 하나겠죠?) 그리고 경쟁업체와의 거리, 그리고 가장가까운 경쟁업체의 오픈 년월일. 프로모션, 프로모션2, 프로모션 주기가 주어져있습니다..


과연 이걸로 얻을수 있을까... 궁금하시죠? 그럼 award를 흠 그러니까 1등한분거는 공개가 안되는거 같으니.. 35k달러의 후보가 될뻔 한 소스를 한번 살펴볼까요.....!!!!



탐색전 분석(Exploratory Analysis)을 해보죠!!


사용한 라이브러리 들이 나오고요 data.table을 사용하여 속도를 높였다고 합니다. 특정 해석을 가능케 하기 위해 unmasked data가 중요하다합니다.


library(data.table)
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(forecast)
## Loading required package: timeDate
## Loading required package: methods
## This is forecast 6.2

저번에는 ggplot을 보았는데 이번엔 ggplot2가 나왔습니다. 그리고 문제에서 주어지는 데이터가 이번엔 아예 test / train 으로 나뉘어져 있군요. 그리고 별도로 store라는 데이터셋이 있어서 가게 대장 정보가 별도로 잇네요.

library(ggplot2)
test <- fread("../input/test.csv")
train <- fread("../input/train.csv")
store <- fread("../input/store.csv")

아래는 입력받은 데이터셋을 간략하게 보기 좋은 함수죠~~

str(train)
## Classes 'data.table' and 'data.frame':   1017209 obs. of  9 variables:
##  $ Store        : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ DayOfWeek    : int  5 5 5 5 5 5 5 5 5 5 ...
##  $ Date         : chr  "2015-07-31" "2015-07-31" "2015-07-31" "2015-07-31" ...
##  $ Sales        : int  5263 6064 8314 13995 4822 5651 15344 8492 8565 7185 ...
##  $ Customers    : int  555 625 821 1498 559 589 1414 833 687 681 ...
##  $ Open         : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Promo        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ StateHoliday : chr  "0" "0" "0" "0" ...
##  $ SchoolHoliday: chr  "1" "1" "1" "1" ...
##  - attr(*, ".internal.selfref")=<externalptr>
str(test)
## Classes 'data.table' and 'data.frame':   41088 obs. of  8 variables:
##  $ Id           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Store        : int  1 3 7 8 9 10 11 12 13 14 ...
##  $ DayOfWeek    : int  4 4 4 4 4 4 4 4 4 4 ...
##  $ Date         : chr  "2015-09-17" "2015-09-17" "2015-09-17" "2015-09-17" ...
##  $ Open         : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Promo        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ StateHoliday : chr  "0" "0" "0" "0" ...
##  $ SchoolHoliday: chr  "0" "0" "0" "0" ...
##  - attr(*, ".internal.selfref")=<externalptr>
str(store)
## Classes 'data.table' and 'data.frame':   1115 obs. of  10 variables:
##  $ Store                    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ StoreType                : chr  "c" "a" "a" "c" ...
##  $ Assortment               : chr  "a" "a" "a" "c" ...
##  $ CompetitionDistance      : int  1270 570 14130 620 29910 310 24000 7520 2030 3160 ...
##  $ CompetitionOpenSinceMonth: int  9 11 12 9 4 12 4 10 8 9 ...
##  $ CompetitionOpenSinceYear : int  2008 2007 2006 2009 2015 2013 2013 2014 2000 2009 ...
##  $ Promo2                   : int  0 1 1 0 0 0 0 0 0 0 ...
##  $ Promo2SinceWeek          : int  NA 13 14 NA NA NA NA NA NA NA ...
##  $ Promo2SinceYear          : int  NA 2010 2011 NA NA NA NA NA NA NA ...
##  $ PromoInterval            : chr  "" "Jan,Apr,Jul,Oct" "Jan,Apr,Jul,Oct" "" ... 
##  - attr(*, ".internal.selfref")=<externalptr>
# head(train); tail(train)
# head(test); tail(test)
train[, Date := as.Date(Date)]
test[, Date := as.Date(Date)]
store
##       Store StoreType Assortment CompetitionDistance
##    1:     1         c          a                1270
##    2:     2         a          a                 570
##    3:     3         a          a               14130
##    4:     4         c          c                 620
##    5:     5         a          a               29910
##   ---                                               
## 1111:  1111         a          a                1900
## 1112:  1112         c          c                1880
## 1113:  1113         a          c                9260
## 1114:  1114         a          c                 870
## 1115:  1115         d          c                5350
##       CompetitionOpenSinceMonth CompetitionOpenSinceYear Promo2
##    1:                         9                     2008      0
##    2:                        11                     2007      1
##    3:                        12                     2006      1
##    4:                         9                     2009      0
##    5:                         4                     2015      0
##   ---                                                          
## 1111:                         6                     2014      1
## 1112:                         4                     2006      0
## 1113:                        NA                       NA      0
## 1114:                        NA                       NA      0
## 1115:                        NA                       NA      1
##       Promo2SinceWeek Promo2SinceYear    PromoInterval
##    1:              NA              NA                 
##    2:              13            2010  Jan,Apr,Jul,Oct
##    3:              14            2011  Jan,Apr,Jul,Oct
##    4:              NA              NA                 
##    5:              NA              NA                 
##   ---                                                 
## 1111:              31            2013  Jan,Apr,Jul,Oct
## 1112:              NA              NA                 
## 1113:              NA              NA                 
## 1114:              NA              NA                 
## 1115:              22            2012 Mar,Jun,Sept,Dec
train <- train[order(Date)]
test <- test[order(Date)]
summary(train)
##      Store          DayOfWeek          Date                Sales      
##  Min.   :   1.0   Min.   :1.000   Min.   :2013-01-01   Min.   :    0  
##  1st Qu.: 280.0   1st Qu.:2.000   1st Qu.:2013-08-17   1st Qu.: 3727  
##  Median : 558.0   Median :4.000   Median :2014-04-02   Median : 5744  
##  Mean   : 558.4   Mean   :3.998   Mean   :2014-04-11   Mean   : 5774  
##  3rd Qu.: 838.0   3rd Qu.:6.000   3rd Qu.:2014-12-12   3rd Qu.: 7856  
##  Max.   :1115.0   Max.   :7.000   Max.   :2015-07-31   Max.   :41551  
##    Customers           Open            Promo        StateHoliday      
##  Min.   :   0.0   Min.   :0.0000   Min.   :0.0000   Length:1017209    
##  1st Qu.: 405.0   1st Qu.:1.0000   1st Qu.:0.0000   Class :character  
##  Median : 609.0   Median :1.0000   Median :0.0000   Mode  :character  
##  Mean   : 633.1   Mean   :0.8301   Mean   :0.3815                     
##  3rd Qu.: 837.0   3rd Qu.:1.0000   3rd Qu.:1.0000                     
##  Max.   :7388.0   Max.   :1.0000   Max.   :1.0000                     
##  SchoolHoliday     
##  Length:1017209    
##  Class :character  
##  Mode  :character  
##                    
##                    
## 
summary(test)
##        Id            Store          DayOfWeek          Date           
##  Min.   :    1   Min.   :   1.0   Min.   :1.000   Min.   :2015-08-01  
##  1st Qu.:10273   1st Qu.: 279.8   1st Qu.:2.000   1st Qu.:2015-08-12  
##  Median :20544   Median : 553.5   Median :4.000   Median :2015-08-24  
##  Mean   :20544   Mean   : 555.9   Mean   :3.979   Mean   :2015-08-24  
##  3rd Qu.:30816   3rd Qu.: 832.2   3rd Qu.:6.000   3rd Qu.:2015-09-05  
##  Max.   :41088   Max.   :1115.0   Max.   :7.000   Max.   :2015-09-17  
##                                                                       
##       Open            Promo        StateHoliday       SchoolHoliday     
##  Min.   :0.0000   Min.   :0.0000   Length:41088       Length:41088      
##  1st Qu.:1.0000   1st Qu.:0.0000   Class :character   Class :character  
##  Median :1.0000   Median :0.0000   Mode  :character   Mode  :character  
##  Mean   :0.8543   Mean   :0.3958                                        
##  3rd Qu.:1.0000   3rd Qu.:1.0000                                        
##  Max.   :1.0000   Max.   :1.0000                                        
##  NA's   :11

데이터가 흠 가게 Id는 정수형이고 다 주 5일제고 뭐...손님수는 다양하네요 500~1500명까지.... 휴일여부는 0,1로 나뉘어져있고 네..

여튼 데이터 구경은 이정도면 충분하고. 넘어갑니다.   그리고 summary함수를 통해서 또 최대/최소/최빈값등등을 보면서 대략적이나마 data distribution 형태를 좀 예측할 수 가 있지요... 




앗!!! 다음에 이어하겠습니다.

좀 더 해야하는데.. 다음 6일차때 추가하겠습니다.






























'데이터분석' 카테고리의 다른 글

Kaggler's Day #8  (0) 2016.06.10
Kaggler's Day #7  (0) 2016.06.08
Kaggler's Day #6  (0) 2016.05.31
Kaggler's Day #3  (0) 2016.05.16
Kaggler's Day #1  (0) 2016.05.12
Posted by 억사마