Use historical markdown data to predict store sales
何かこのシリーズめちゃくちゃ久しぶりなんですが(汗)、ちょっと最近問題意識を抱いている話題があるのでそれに関連した形でStanでやってみようと思います。 それは時系列の「トレンド」の扱い。ビジネスの現場では、時系列を意識しなくても良い*1クロスセクションデータでは普通に線形*2モデルを組んだりしますが、ことパネルなど時系列データとなると途端にモデルを組んだりせずに「手なり」で適当に近似曲線を引いてしまったり、みたいなことが少なくない印象があります。特に見た目にそれっぽい「トレンド」がある場合は尚更。 ところがどっこい、最近このブログでも取り上げている動的線形モデルのように、時系列データであってもある程度はモデリングできるわけで、ならばいつまでも「見た目」でトレンドを憶測し「手なり」に近似曲線を引く、なんてことはせずにモデリングでズバリ推定するべきだと僕は思うわけです。 とは言え、内容として
台風の経路情報を題材にして、Dynamic Time Warping (DTW) を用いた時系列データの類似度の計算を試してみます。DTW は二つの時系列データの類似度を測る方法の一つで、英語版の Wikipedia に簡単な説明と実装例があります。 Dynamic time warping - Wikipedia, the free encyclopedia 過去の台風の経路情報は、各国の機関によって公表されているようです。たとえば、気象庁のデータや、米軍の Joint Typhoon Warning Center (JTWC) という機関のデータが、それぞれ以下のウェブページで公表されています。 気象庁|過去の台風資料 Joint Typhoon Warning Center (JTWC) これらのデータは各機関が独自の観測によって取得したもので、同一の台風を表す情報でも少しずつ数値が
いま手元に 20万件くらいの時系列があって、それらを適当にクラスタリングしたい。どうしたもんかなあ、と調べていたら {TSclust} というまさになパッケージがあることを知った。 このパッケージでは時系列の類似度を測るためのさまざまな手法 (=クラスタリングのための距離) を定義している。うちいくつかの手法を確認し、動的時間伸縮法 / DTW (Dynamic Time Warping) を試してみることにした。 DTWの概要 時系列相関 (CCF) の場合は 片方を 並行移動させているだけなので 2つの系列の周期が異なる場合は 相関はでにくい。 DTW では 2つの時系列の各点の距離を総当りで比較した上で、系列同士の距離が最短となるパスを見つける。これが DTW 距離 になる。そのため、2つの系列の周期性が違っても / 長さが違っても DTW 距離を定義することができる。 アルゴリズム
where \(m =\) number of observations per year. We use uppercase notation for the seasonal parts of the model, and lowercase notation for the non-seasonal parts of the model. The seasonal part of the model consists of terms that are similar to the non-seasonal components of the model, but involve backshifts of the seasonal period. For example, an ARIMA(1,1,1)(1,1,1)\(_{4}\) model (without a constan
ログデータの異常検知を行う必要が発生したので、変化点検出の統計的な手法をざっくりと調べてみた。 偏差の累積和による方法 各データ点に対して標本平均との偏差の累積和を求め、これが最も大きくなる点を変化点とする方法。 手順は下記の通り。 系列全体の平均値(標本平均)を計算して、各点について平均値との差を求める 平均値との差の累積和を計算し、絶対値が最大になる点を変化点とする。 変化点によって区切られた各区間について、1,2を再帰的に繰り返す。 平均値でなく分散を使うバージョンもある。 特徴 1次元のデータ列に適用可能。 変化していない部分のデータは同一の確率分布に従い、かつ観測値はすべて互いに独立であることを仮定。 上記を満たしていれば、データが特定の分布に従うことを仮定しない。 もちろんデータの独立性が仮定できなければ使えないので、ログのような時間相関のありがちなデータにおいて使える場面は限
動機 仕事で変化点検知をする機会がありました。その時は時間がなかった事もあり、yokkunsさんがやられていたARIMAモデルを使ったアルゴリズムを参考にさせていただき作りました。ただ、ARIMAモデルだと色々と面倒なところがあったのでkalman filterで書き換えを試みた次第です。 ARIMAモデルの問題点 パラメタ調整が面倒 対象とするwindow以上のデータが溜まるまで解析できない window内に同一データのみが並んだベクトルとなった場合、逆行列が計算出来ない 参考文献 データマイニングによる異常検知 ベイズ統計データ解析 (Rで学ぶデータサイエンス 3) 主に参考にしたのは、みんな大好き「データマイニングによる異常検知」です。 概要 計算ステップは以下のとおりです。 計算は大きく分けて、学習ステップとスコア計算ステップに分けることができます。 学習ステップ こちらは新しいデ
前回の記事で機械的に選択されたモデルは、非定常なデータに当ててしまったものなので瑕疵があると思われる。その確認として2つの調査を実施した。ひとつは前回作成のモデルに対して、基本的なモデル診断を実施すること、もうひとつはデータを学習用データと検証用データに分けて評価してみることだ。前者の確認は過去の記事で一度実施していることだが、復習も兼ねて前者の調査からまとめたい。 ■ライブラリ >>> import numpy as np >>> from pandas import * >>> import statsmodels.tsa.stattools as stattools >>> from statsmodels.tsa import arima_model >>> import matplotlib.pyplot as plt >>> from pylab import * ■データ >
Rで機械学習(PRML):SVM vs ランダムフォレストモデル (株価シナリオ②)日経平均値動き幅 過去日連動性検証 【 検証事項 】 日経平均株価の各日の(取引時間内)の値動き幅(ボラティリティ: ((当日終値-当日始値)/当日始値)100) )は、X日前の値動きボラティリティ ( ((X日前の終値-X日前の始値)/X日前の始値)100) ) と、どのような関連性があるか。※X = 1 ~ 7 【 事前仮説 】 当日の値動きボラティリティ( ((当日終値-当日始値)/当日始値)100) )は、Xの値がより小さい X日前の値動きボラティリティ ( ((X日前の終値-X日前の始値)/X日前の始値)100) ) から、強い影響を受けている 【 背景にある知見 】 ( GARCHモデル ) ある日の株価ボラティリティは、近い過去日のボラティリティに引っ張られる」(上げ(下げ)相場が続いている期
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く