ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CausalImpact(버티카와 연동)
    VERTICA/10.Machine Learning 2018. 10. 1. 18:38
     - 실험데이터가아닌 자연관찰자료(A/B 테스팅과 다름)
       마케팅이 아닌 다른 외부적 사건들, 예를 들어서 배송 최소 구매액을 올린다던지 
       경쟁사가 마케팅을 하는 경우에도 이런 외부의 사건들이 우리 실적에 미치는 영향을 A/B 테스팅으로 알아낼 수는 없음.
       xxx 동영상이 조회수가 올라가는 경우에도 A/B테스팅으로 알수 없음 

     - 두 시점이 아닌 여러 시점의 자료 처리(시계열 분석)
       A/B 테스팅처럼 처치 전 처치 후와 같은데이터가 아닌 여러시점의 데이터를 처리할 수 있다.
     - 다양한 독립변수
       예를들어 매출 혹은 클릭율에 대한 종속변수를 설명하기위한 여러가지 변수를 동시에 사용할 수 있음.
     - 변수 선택
       어떤 변수가 중요한가를 선별해주는 장점이 있음
     - local trend, seasonal effect
       local trend, seasonal effect 를 포함하는 모형
       
    Bayesian structural time-series models 을 이용하여 구현함
    CausalImpact 기본 예제 및 패키지 다운로드url : https://google.github.io/CausalImpact/
    해당패키지로 특정시점을 지정하면
    효과가 어떻게 생기는지
    시간이 지나감에 따라서 효과가 어떻게 변화하는지
    실제자료는 이런데 만약 해당시점에 광고를 안했다면 어떠한 값이 였는지 측정이 가능


    첫번째 그래프 (Original):
     - 검은색선: 이미 관측된 데이터
     - 검정색 점선: 마케팅 캠페인이 없었을 시 예측되는 데이터
    두번째 그래프 (pointwise)
     - 검정색 점선: 관측치(기록된 트래픽량)와 예측치(마케팅캠페인이 없었던 것을 가정한 예상치) 간의 차이
    세번째 그래프 (cumulative)
     - 검정색 점선: 관측치 / 예측치 간의 차이의 누적값을 보여줌
    하늘색 구간:
     - 95% 신뢰수준에서 결과값 구간을 보여줌

    그래프해석은 그리 어렵지 않음
    오픈소스R+통계학적지식+마케팅지식이 필요할듯.
    어떠한 사건에 대해 기록을해두면 해답을 찾는데 좀더 도움을 줄듯.(이벤트,시작시간,종료시간등)
    모형에 포함된 3가지 요소
    1 local linear trend
     - 국지적인 추세를 잡아내기 위한 요소
        (전체추세적인 추세는 상승세 일지라도 순간적으로 떨어지는 추세를 예측하기위해 부분적추세를 포함)
     - 현재 어떤 방향으로 매출이 진행되는지
     
     - 단기간 예측에 도움을 많이 줄 수 있음
       부분적 경향이란 시간의 흐름에서 어느 한 부분에 나타나는 경향을 말함. 
       그리고 이 경향은 장기적으로 어떤 변화를 나타내게 됨. 
       시간의 흐름에 따라 서서히 증가하는데 시간이 갈 수록 증가 폭은 조금씩 감소한다든지. 
       Causal Impact의 분석 모형은 이런 부분적 경향의 장단기적 변화들을 측정. 
     
    2 seasonal effect
     - 종종 매출은 주기적인 경향을 보임
       예 : 아이스크림 매출(봄-여름-가을-겨울) 
            일주일 간 기분(월-화-수-목-금-토-일)
       아이스크림의 판매량을 그래프로 그려보면 매년 여름 쯤에 올라갔다가 가을이 되면 내려가는 주기적인 패턴을 나타냄. 
       이렇게 주기적인 변화를 흔히 '계절 효과'라고 불림. 
       계절이 주기적 변화의 대표적인 예이기 때문임. Causal Impact의 분석 모형은 이런 계절 효과도 같이 측정.
       일반적인 회사원의 일주일간 기분은 월요일은 왠지 우울하다 목요일 밤부터 기분이 좋아지다가 금요일에 최고점을찍는..
    3 Covariates effects
     - 광고비 지출, 새 상품 출시, 기존 광고 종료, 새로운 규제 법안, 기타판촉 등의 이벤트...
       이런것들이 과연 영향력 있는 변수 인가?
       전체적으로 이러한 트렌드를 보여주고있는데 이러한 트렌드에 영향을 주는 변수들은 어떤것인가
       이벤트 시점에서 영향을 주는 변수를 찾아 의사결정하는데 도움을 줄 수 있다.
       예 : x 광고를 하고나서 매출등에 영향을 주는것이 생겼는지 아니면 그냥 기존 트렌드대로 가는지 측정이 가능.
      이렇게 장단기적인 변화와 주기적인 변화를 측정해낼 수 있다면 클릭량이라든지 방문자 수라든지 매출 같은 
      실적들이 앞으로 어떻게 흘러갈지 대략 예측을 할 수 있다. 
      Causal Impact는 여기에 어떤 기간에 발생한 사건 효과도 같이 측정함.
      일정 기간에 일어난 것은 뭐든지 사건이라고 부를 수 있음. 
      예를들어 로켓배송 최소 구매액을 올린다던지 
      경쟁사가 쿠폰등으로 마케팅을 하는 경우, xxx 동영상이 조회수가 폭발적으로 올라가는 경우
      광고모델이 출연하는 TV프로그램중 시청률이 급격히 올라가는 경우  
      또는 야구 경기라든지 아니면 태양의 일식 같은 것도 역시 사건이 될 수 있음. 
      어쨌든 사건의 일어났을 때 이 사건이 미친 효과도 같이 측정이 가능함.


    ##버티카와 연동 TEST

    Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre7')
    library(rJava)

    library(RJDBC)

    vDriver <- JDBC(driverClass="com.vertica.jdbc.Driver", classPath="C:\\ytkim\\util\\vertica-jdbc-7.2.3-0.jar")

    vertica <- dbConnect(vDriver, "jdbc:vertica://아이피/디비명", "계정", "")

    myframe = dbGetQuery(vertica, "select * from public.iris")

    dim(myframe)
    head(myframe)
    View(myframe)

    ## 입력값 추출 첫번째 컬럼은 y값(결과) 두번째컬럼부터 x값(영향을 주는 변수)

    myframe = dbGetQuery(vertica, "쿼리기술")

    vertica_xxx = dbGetQuery(vertica,
    "select ...
    from ...
    where 일자 >= '2014-01-01'
    group by 1
    order by 1
    ) a 
    order by 일자
    ")

    dim(vertica_xxx)
    head(vertica_xxx)
    View(vertica_xxx)

    #2014년도의 추이확인
    plot(1:12,vertica_xxx$sales[1:365],type ='l')

    pre.period <- c(1, 390)
    post.period <- c(391,415)


    vertica_impact <- CausalImpact(vertica_xxx, pre.period, post.period
    , model.args = list(niter = 10000, nseasons = 7, standardize.data = T))

    ## model.args = list(niter = 10000, nseasons = 12, standardize.data = T, dynamic.regression = T))

    summary(vertica_impact)
    plot(vertica_impact)
    plot(vertica_impact$model$bsts.model, 'coefficient')




    중략..

    ## 보통 시계열 데이터는 시퀀스를 숫자가 아닌 날짜로 보는것이 가독성이 좋다.

    ##데이터결과 건수가 742건이므로 
    time.points <- seq.Date(as.Date("2015-01-01"), by = 1, length.out = 742)

    ytkim <- zoo( ytkim, time.points)


    pre.period <- as.Date(c("2015-01-01", "2016-12-11"))
    post.period <- as.Date(c("2016-12-12", "2016-12-13"))

    head(ytkim)

    ## ytkim 데이터셋을 1000번 학습하여 vertica_impact3 모델을 만듬
    vertica_impact3 <- CausalImpact(ytkim, pre.period, post.period
    , model.args = list(niter = 1000, nseasons = 365, standardize.data = T),alpha=0.01)

    ## , model.args = list(niter = 10000, nseasons = 12, standardize.data = T, dynamic.regression = T))

    ##결과 확인 
    summary(vertica_impact3)

    plot(vertica_impact3)

     

     

    vertica_impact4 <- CausalImpact(ytkim, before, after
    , model.args = list(niter = 10000, nseasons = 365, standardize.data = T, dynamic.regression = T))

    summary(vertica_impact4)
    plot(vertica_impact4)
    plot(vertica_impact4, c("original", "pointwise"))
    plot(vertica_impact4, c("original"))
    ##dynamic.regression = T을 적용하면 coefficient 는 확인불가 
    plot(vertica_impact4$model$bsts.model, 'coefficient')

    summary(vertica_impact4, 'report')

     


    'VERTICA > 10.Machine Learning' 카테고리의 다른 글

    머신러닝 관련 기능들  (0) 2017.09.06
    Vertica 에서 Kmeans 수행하기  (0) 2016.12.27

    댓글

Designed by Tistory.