廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

流行の変化を可視化するディリクレ多項分布モデル

モデル

K カテゴリの商品があり、時点 t でのそれぞれの販売数量を W_{t,k} とする。

t 時点目の販売数量 W_{t,1:K} はパラメータ  p_{t-1,1:K} の多項分布に従うとする。

 p_{t-1,1:K} はパラメータ \alpha_t p_{t-1,1:K} のディリクレ分布に従うとする。

 W_{t,1:K} \sim \mathrm{Multinomial}(p_{t,1:K})
 p_{t,1:K} \sim \mathrm{Dirichlet}(\alpha_t p_{t-1,1:K})

\alpha_t は精度(precision)パラメータで前の時点の流行からどれくらい変化しないかを示す。

ただし \alpha_1 は1とする。

パラメータ推定

パラメータの推定アルゴリズムは、
Iwata, Tomoharu, et al. "Topic Tracking Model for Analyzing Consumer Purchase Behavior." IJCAI. Vol. 9. 2009.https://pdfs.semanticscholar.org/99bb/811beb5d061d2b8fac5a1973b49cace93e2f.pdf
とほぼ一緒ですので、そちらを参照してほしい。

※間違ってるかもしれないので注意。

estfunc <- function(W){
  M <- rowSums(W)
  Tim <- nrow(W)
  K <- ncol(W)
  alpha <- rep(1,Tim)
  alpha_new <- alpha
  for(i in 1:100000){
    phat <- (W+alpha)/rowSums(W+alpha)
    alpha_new[-1] <- alpha[-1]*rowSums(phat[-Tim,]*(digamma(W[-1,] +alpha[-1]*phat[-Tim,])-digamma(alpha[-1]*phat[-Tim,])))/
      ((digamma(M[-1] + alpha[-1])-digamma(alpha[-1])))
    if(all(abs(alpha_new - alpha)<1e-2)){
      break
    }
    alpha <- alpha_new
  }
  return(list(phat=phat,alpha=alpha_new,iter=i))
}

bayesm パッケージの tuna データを使う。

data("tuna",package = "bayesm")
fit <- estfunc(as.matrix(tuna[,2:8])) #as.matrixしたほうが計算がはやいっぽい
print(fit$iter)
#  38918
plot(tuna$WEEK,1/fit$alpha,type = "l",xlab = "week", ylab = expression(1/alpha))

 1/\hat \alpha_t をプロット。

精度パラメータの逆数のプロット

流行の変化が大きい時点がわかります。

トピックモデル (機械学習プロフェッショナルシリーズ)

トピックモデル (機械学習プロフェッショナルシリーズ)

トピック追跡モデル(topic tracking model)をはじめ、トピックモデルのいくつかの拡張について、提案者自身による解説が読める。