Upgrade to Pro — share decks privately, control downloads, hide ads and more …

状態空間モデルを活用した 時系列データのCausalImpact分析

状態空間モデルを活用した 時系列データのCausalImpact分析

2014年12月18日に開催された「RCOアドテク部主催 エンジニアによるデータドリブンなサービス開発」
- https://atnd.org/events/59264
でのTalk資料です

8a7e83d2e447783ab6d824f553429a09?s=128

Shinichi Takayanagi

January 20, 2015
Tweet

Transcript

  1. 状態空間モデルを活用した 時系列データのCausalImpact分析 株式会社リクルートコミュニケーションズ ICTソリューション局 アドテクノロジーサービス開発部 高柳慎一 2014年12月18日

  2. 目次 1. はじめに 2. 状態空間モデルとは 3. R言語でのCausal Impactの解析 4. Shinyを活用したWebアプリケーション化

    5. まとめ 2 (C) Recruit 2014 Co.,Ltd. All rights reserved.
  3. 1:はじめに 3 (C) Recruit 2014 Co.,Ltd. All rights reserved.

  4. はじめに • 時系列データの取り扱い、特に、状態空間モ デルについての話をします • 具体的にはGoogle のKay H. Brodersenら (1)によるCausal

    Impactの推計モデルの紹介 • この手法を実装したライブラリが、統計解析に 強いR言語での提供されているため、 1. パッケージの基本的な使用法 2. 分析環境のWeb アプリケーション化 についても解説します 4 (C) Recruit 2014 Co.,Ltd. All rights reserved. ※(1) : Kay H. Brodersen, Fabian Gallusser, Jim Koehler, Nicolas Remy, and Steven L. Scott. Inferring causal impact using Bayesian structural time series models, Annals of Applied Statistics, 2014、以降、”論文”と表記
  5. 直近出た面白そうな時系列回りのお話(主観) • 時系列に関する面白そうなBlog記事が二本 • Google – CausalImpact: A new open-source

    package for estimating causal effects in time series (http://google-opensource.blogspot.jp/2014/09/causalimpact-new-open-source-package.html) – ある”施策”の効果(Causal Impact)を推計したい • Twitter – Breakout detection in the wild (https://blog.twitter.com/2014/breakout-detection-in-the-wild) – サーバー負荷が高まるタイミングを推計したい • 特に、今回はGoogle側の論文の紹介 5 (C) Recruit 2014 Co.,Ltd. All rights reserved.
  6. 2:状態空間モデルとは 6 (C) Recruit 2014 Co.,Ltd. All rights reserved.

  7. 状態空間モデルとは • カルマンフィルタ(1)に端を発する、潜在的な観測で きない状態の推定モデル • 観測できない状態(例えばSEO・キャンペーン要 因)を記述する”システムモデル”と、観測できる状 態(例えばWeb会員登録数)と観測できない状態の 関係を記述する”観測モデル”から構成される •

    今回の話では施策を打つ際に見る” KPI”という観 測できる数値を、”トレンド・レベル・季節性・その他 説明変数”という観測できない状態に分解し、施策 の効果を計ることを目標とする • 見えるもので見えないものを推測する手法 7 (C) Recruit 2014 Co.,Ltd. All rights reserved. ※(1)カルマンフィルタは“線形、かつGaussianなノイズ”を仮定
  8. 状態空間モデルとは(図) 8 (C) Recruit 2014 Co.,Ltd. All rights reserved. +1

    +2 +3 ※文字はKay H. Brodersenらの論文に揃えた +1 +2 +3 観測 OK 観測 NG
  9. 状態空間モデルとは(数式) • 観測モデル: = + • システムモデル:+1 = + 9

    (C) Recruit 2014 Co.,Ltd. All rights reserved. • 時系列データ: – = ∈ ℝ; ∈ ℕ – = ∈ ℝ; ∈ ℕ • データのノイズ – ∼ 0, 2 – ∼ 0, • 適当な定数(行列) – , , , ,
  10. 状態空間モデルとは(数式) 前述の • 観測モデル: = + • システムモデル:+1 = +

    をどう置くかがモデリングに相当する。特にをどう 設計するのかがキーポイント 10 (C) Recruit 2014 Co.,Ltd. All rights reserved. ※パラメーター推計はMCMCだそうですが、時間がないので割愛
  11. • 以下3つの要因を組み合わせ、を設定 • ローカル線形トレンド: – +1 = + + ,

    , , ∼ (0, 2) – +1 = + ( − ) + , , , ∼ (0, 2) • 季節性: – +1 = − =0 −2 − + , , : 周期(4,7など) • (施策を打たない)系列データ: ∈ ℝ – = , = 1:静的係数版 – = , = , ,+1 = , + ,, :動的係数版 彼らが提案しているモデル(彼らのαの置き方) 11 (C) Recruit 2014 Co.,Ltd. All rights reserved.
  12. 施策の効果を計算(論文・Figure 1より) • あるKPI(Y)に対する施策の効果(b) • “Point-wise impact = Y –

    Prediction”と算出 12 (C) Recruit 2014 Co.,Ltd. All rights reserved. Figure1:Inferring causal impact through counterfactual predictions
  13. モデルの各コンポーネントの関係図(論文・Figure 2より) 13 (C) Recruit 2014 Co.,Ltd. All rights reserved.

    Figure2:Graphical model for the static-regression variant of the proposed state-space model
  14. 3:R言語でのCausal Impactの解析 14 (C) Recruit 2014 Co.,Ltd. All rights reserved.

  15. R言語とは • オープンソース・フリーのプログラミング言語 • 統計解析やデータ分析/処理に特化(1) • ライブラリ・マニュアルは、”CRAN”というWeb サイトからダウンロード可能(2) • R言語の基本的な操作法は省略。以下のスラ

    イド等を参照のこと – 10分で分かるR言語入門 – はじめての「R」 15 (C) Recruit 2014 Co.,Ltd. All rights reserved. ※(1)一部、機械学習も充実 ※(2) http://www.r-project.org/index.html
  16. CausalImpactパッケージの使い方 • 以下をRのコンソールにて入力 • 必要なパッケージがインストールされる 16 (C) Recruit 2014 Co.,Ltd.

    All rights reserved. #開発者向けパッケージのインストール&ロード install.packages("devtools") library(devtools) #CausalImpactパッケージのインストール&ロード devtools::install_github("google/CausalImpact") library(CausalImpact)
  17. CausalImpactパッケージの使い方 • ダミーデータの生成 17 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. http://google.github.io/CausalImpact/CausalImpact.html より #ARIMAモデルに従うデータ(説明/独立/予測変数)生成 x1 <- 100 + arima.sim(model=list(ar=0.999), n=100) #データ(被説明/従属/応答変数)生成 y <- 1.2 * x1 + rnorm(100) #擬似的な介入効果を上乗せ y[71:100] <- y[71:100] + 10 data <- cbind(y, x1) #ダミーデータを描画 matplot(data, type="l", lty=1, lwd=5)
  18. CausalImpactパッケージの使い方 • ダミーデータの描画(matplot) 18 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. http://google.github.io/CausalImpact/CausalImpact.html より y x
  19. CausalImpactパッケージの使い方 • CausalImpact解析の実行 19 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. #施策前の期間を設定 pre.period <- c(1, 70) #施策後の期間を設定 post.period <- c(71, 100) #CaualImpactを解析 impact <- CausalImpact(data, pre.period, post.period) #結果の描画 plot(impact) http://google.github.io/CausalImpact/CausalImpact.html より ※その他、summary(impact, “report”)と書くと本文が英語のレポート、 impact$summaryを実行すると解析結果の数値サマリーが取得できる
  20. CausalImpactパッケージの使い方 • CausalImpact解析結果の描画(plot) 20 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. http://google.github.io/CausalImpact/CausalImpact.html より 介入の効果 介入 効果 (累積) 実線:生データ(y) 破線:”施策”がないと思った場合のyの予測値 背景色:95%信頼区間 介入 効果 (時点) 実測 予測 系列 介入開始時点(破線)
  21. 4:Shinyを活用したWebアプリケーション化 21 (C) Recruit 2014 Co.,Ltd. All rights reserved.

  22. Shinyとは • Rstudio社が開発している、RにおけるWebア プリケーションフレームワーク • Rを使った解析も含めて、インタラクティブな Webアプリケーションを簡単に作成できる • 基本的なフロントエンド周り(HTML, CSS,

    JavaScript)を知らなくてもなんとかなる (もちろん知っていたほうが何かと拡張できる) 22 (C) Recruit 2014 Co.,Ltd. All rights reserved. http://shiny.rstudio.com/
  23. Shinyに付属している例題を動かす • Rのコンソール上で以下を入力 23 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. #shinyパッケージのインストール install.packages("shiny") #shinyパッケージのロード library(shiny) #パッケージに例として入っている #01_helloというアプリケーションを起動 runExample("01_hello") ※例題のコードは、デフォルトではRをインストールしたフォルダの library/shiny/examples に入っている
  24. Shinyに付属している例題を動かす • 既定のブラウザが起動し、アプリケーションが 起動する 24 (C) Recruit 2014 Co.,Ltd. All

    rights reserved.
  25. Shinyを使ったアプリケーションを作成する • 以前はui.Rとserver.Rと2ファイル必要だった が、最近になって、app.Rという1ファイルを用 意すればOKに • app.RをRのコンソール上で実行するだけ(1) • 開発の際には、適当なディレクトリにapp.Rを 作成し、runApp関数にディレクトリ名を渡して

    実行するのが良い(2) 25 (C) Recruit 2014 Co.,Ltd. All rights reserved. ※(1)shinyApp関数がshiny.appobjオブジェクトを返し、コンソール上でそのオブ ジェクトに紐付いているprint.shiny.appobjが呼ばれ、これがShinyを起動する ※(2)ソースの更新→ブラウザ更新でアプリ側も自動で変更されるため
  26. Shinyを使ったアプリケーションを作成する • 下記内容をapp.Rとして保存 26 (C) Recruit 2014 Co.,Ltd. All rights

    reserved. #サーバーサイドのコード server <- function(input, output) { output$distPlot <- renderPlot({ x <- rnorm(input$obs) hist(x, col='darkgray', border='white') }) } #UI部分のコード ui <- shinyUI(fluidPage( sidebarLayout( sidebarPanel( sliderInput("obs", "number:", min=10^2, max=10^3, value=100) ), mainPanel(plotOutput("distPlot")) ) )) #アプリケーション起動 shinyApp(ui = ui, server = server)
  27. Shinyを使ったアプリケーションを作成する 27 (C) Recruit 2014 Co.,Ltd. All rights reserved. •

    コードをすべてRのコンソール上で実行するか、 runApp関数にディレクトリとして指定する
  28. Causal ImpactパッケージのWebアプリケーション化 28 (C) Recruit 2014 Co.,Ltd. All rights reserved.

    • このshinyを活用し、Causal Impact解析の機 能を持たせたWebアプリケーションを作成
  29. Causal ImpactパッケージのWebアプリケーション化 29 (C) Recruit 2014 Co.,Ltd. All rights reserved.

    • このshinyを活用し、Causal Impact解析の機 能を持たせたWebアプリケーションを作成 DEMO
  30. まとめ • 状態空間モデルに基づいたCausal Impactの 推定モデルについて紹介 • 論文著者らが提供するR言語のCausal Impactパッケージの使用法を紹介 • R言語におけるWebアプリケーションフレーム

    であるShinyを用いた分析環境のWebアプリ ケーション化についても紹介 • このようなデータ活用の取り組みを継続的に 行い、ビジネスの改善に努めていきたい 30 (C) Recruit 2014 Co.,Ltd. All rights reserved.