-
CausalImpact(버티카와 연동)VERTICA/10.Machine Learning 2018. 10. 1. 18:38- 실험데이터가아닌 자연관찰자료(A/B 테스팅과 다름)마케팅이 아닌 다른 외부적 사건들, 예를 들어서 배송 최소 구매액을 올린다던지경쟁사가 마케팅을 하는 경우에도 이런 외부의 사건들이 우리 실적에 미치는 영향을 A/B 테스팅으로 알아낼 수는 없음.xxx 동영상이 조회수가 올라가는 경우에도 A/B테스팅으로 알수 없음- 두 시점이 아닌 여러 시점의 자료 처리(시계열 분석)A/B 테스팅처럼 처치 전 처치 후와 같은데이터가 아닌 여러시점의 데이터를 처리할 수 있다.- 다양한 독립변수예를들어 매출 혹은 클릭율에 대한 종속변수를 설명하기위한 여러가지 변수를 동시에 사용할 수 있음.- 변수 선택어떤 변수가 중요한가를 선별해주는 장점이 있음- local trend, seasonal effectlocal trend, seasonal effect 를 포함하는 모형Bayesian structural time-series models 을 이용하여 구현함CausalImpact 기본 예제 및 패키지 다운로드url : https://google.github.io/CausalImpact/논문url(2015년에 발표) : https://static.googleusercontent.com/media/research.google.com/ko//pubs/archive/41854.pdf해당패키지로 특정시점을 지정하면효과가 어떻게 생기는지시간이 지나감에 따라서 효과가 어떻게 변화하는지실제자료는 이런데 만약 해당시점에 광고를 안했다면 어떠한 값이 였는지 측정이 가능첫번째 그래프 (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 댓글