状態空間モデル、stanを使って未来を予測する [時系列解析 / 需要予測]
stanには、いくつかの構造があります。
stanコード
有名な data(AirPassengers) を使って予測をするのですが、重要なのがトレンドのメカニズムをどう書くか。
単純に
mu[i] ~ normal(mu[i-1], sd_mu)
としてしまうと、学習期間のトレンドは良いのですが、予測期間においてはうまく予測できません。
上の式は、昨日のトレンドは、今日のトレンドとしてしまっているために、予測するタイミングにおいて、トレンドが一定になってしまうからです。
これを補正するには、色々なアイデアがあります。
例えば、
mu[i] ~ normal(2*mu[i-1] - mu[i-2], sd_mu)
一昨日から昨日の差分は、昨日から今日の差分とすると、ある程度トレンドを維持することができそうです。
これ以外にもさまざまな工夫(自由度)があるのが、状態空間モデルの面白いところです。
stanコード
data {
データの設定
int pred_term; // 予測期間
}
parameters {
パラメータの設定
}
transformed parameters {
新しい変数の設定
}
model {
モデル式(メカニズム)
}
generated quantities{
予測式
}
有名な data(AirPassengers) を使って予測をするのですが、重要なのがトレンドのメカニズムをどう書くか。
単純に
mu[i] ~ normal(mu[i-1], sd_mu)
としてしまうと、学習期間のトレンドは良いのですが、予測期間においてはうまく予測できません。
上の式は、昨日のトレンドは、今日のトレンドとしてしまっているために、予測するタイミングにおいて、トレンドが一定になってしまうからです。
これを補正するには、色々なアイデアがあります。
例えば、
mu[i] ~ normal(2*mu[i-1] - mu[i-2], sd_mu)
一昨日から昨日の差分は、昨日から今日の差分とすると、ある程度トレンドを維持することができそうです。
これ以外にもさまざまな工夫(自由度)があるのが、状態空間モデルの面白いところです。
コメント 0