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

バックエンド開発に優しい小地域推定モデリング

Kumpei Yamada
November 15, 2020

 バックエンド開発に優しい小地域推定モデリング

#statistician-ja 統計勉強会#1 資料.

Kumpei Yamada

November 15, 2020
Tweet

More Decks by Kumpei Yamada

Other Decks in Science

Transcript

  1. About Me Kumpei Yamada @ymdpharm ML Engineer at CyberAgent, Inc.

    web広告 (ちょっと前まで) レコメンドシステム (今) 2
  2. スタイン推定量 各地域 で を観測して を推定したいとき, MLE よりも のほうが誤差平⽅和を⼩さくする. 不偏でない推定量が望ましいときもあるよね,という例. ただし,

    = x ˉ x n 1 i ∑ i w ∝ (x − n 1 i ∑ i ) x ˉ 2 i ∈ {1, .., n} x ∼ i N(θ , σ ) i 2 θ i = θ i ^ x i = θ i S ^ (1 − w)x + i wx ˉ w は実際は σ や n にも依存.また,誤差は何度もサンプリングした結果の誤差.詳しくは 『ベイズモデリングの世界 第Ⅱ 部』 6
  3. Gamma-Poisson Model ⼩地域推定 (ベイズ) の素朴な地域別死亡率モデル 丹後,1988 の⼤きさに応じて事前分布への縮⼩作⽤ が⽣じる. E[p ∣d

    , n ] = i i i β +n −1 i α+d i n , d i i α,β は MCMC 等で定数として取得して,経験ベイズ的な推定モデルとする. 7
  4. Ad Network Product KPI メディア収益額最⼤化 広告効果最⼤化 (CV / cost) 内包される機能

    メディア収益最⼤化のオークション機能 広告効果の⽬標達成する⼊札額決定機能 時間帯予算ペーシング機能, etc. プロダクト規模 daily で数億リクエスト, 数 TB の log エンジニア 4,5 名 ∗1 ∗2 : Thompson Sampling ⽅策による探索と活⽤. : 遅れ,季節性を考慮した CVR 推定 ∗1 ∗2 10
  5. Data メディア 広告 cv engage ... group A a 1

    100 0 A b 2 1000 1 A c 3 10000 1 B a 2 5000 2 (メディア,広告) をあるグループに分割すると CVR の⽔準をうまく分離できる. 実際はこれに加えて広告フォーマットなど様々な属性値がある. 11
  6. お気持ち の従う分布は,期待値が に, 分散が(だいたい) 定数 になるように調整. E[μ ∣ i x

    ] = i α /(α + i i β ) i κ = α + i β i データ とすることで, は に対して2回計上される.(関連を無視する ちょっと強引な仮定を置く) p i,j E[μ ∣ i x ] i 1/κ x = i Σ x j i,j x i,j p i,j 16
  7. 挙動 E[p ∣ x , x ] i,j i i,j

    E[μ ∣ x ] i i = E ∣ x [ α + β + (n − x ) i i i,j i,j α + x i i,j i ] = E ∣ x [ κ + (n − x ) i,j i,j μ κ + x i i,j i ] = (E μ ∣ x κ + x ) κ + (n − x ) i,j i,j 1 [ i i] i,j = α + β + (n − x ) 0 0 i i α + x 0 i 17
  8. Production Code (Scala) 分布の更新と推定器としての関数はすべて実装で表現できる. 共役事前分布のみを⽤いたモデルなため. 事前の分析とハイパラを決めるときのみ Stan を利⽤. case class

    Amount(click: Double, cv: Double) { def positiveAmount(): Double = cv def negativeAmount(): Double = click - cv } case class BetaDist(mu: Double, kappa: Double) { def expectedValue(): Double = mu def capMu(mu1: Double): BetaDist = BetaDist(math.min(mu, mu1), kappa) def setKappa(kappa1: Double): BetaDist = BetaDist(mu, kappa1) def update(amount: Amount): BetaDist = { val a0 = kappa * mu val b0 = kappa * (1 - mu) val a1 = a0 + amount.positiveAmount() val b1 = b0 + amount.negativeAmount() BetaDist(a1 / (a1 + b1), a1 + b1) } } 18
  9. refs 伊庭幸⼈,他 『ベイズモデリングの世界』 久保川 達也,線形混合モデルと⼩地域の推定,応⽤統計学,2006,35巻,3号,p.139-161 Gelman and Hill "Data Analysis

    Using Regression and Multilevel/Hierarchical Models" 丹後 俊郎,死亡指標の経験的ベイズ推定量について,応⽤統計学,1988,17巻,2号,p.81-96 LIVESENSE DATA ANALYTICS BLOG,階層ベイズによる⼩標本データの⽐率の推定 21