問題タブ [holtwinters]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - R Holt-Winters 予測トレーニング/テスト
ベース Holt-Winters または R の予測パッケージのいずれかを使用して、予測と同じ範囲で実績をプロットする簡単な例 (またはリンク) を探しています。
実際のデータと予測結果が一緒に表示されている例や、実際のデータが予測の後に続いている例をたくさん見てきましたが、実際のデータと予測されたデータが一緒に実行されているコード例は見つかりませんでした。
この理由は、実際のデータ (トレーニング) のサブセットを使用して予測を作成し、完全なデータセットをドロップして、予測が実際にどれだけうまくいったかを示すことができるようにするためです。それが理にかなっていることを願っています。助けてくれてありがとう!
r - ほとんどの手法でフラットな時系列予測が得られるのはなぜですか?
時系列の簡単な例があります:
データ:
次に、ホルト ウィンターズ スムージング、TBATS スムージング、ARIMA、AR ニューラル ネットの 4 つの異なる時系列予測モデルを次の関数で実行しました: HoltWinters()、tbats()、auto.arima()、nnetar()
36期間(3年)先を予測しました。以下の結果:
私の質問は、HoltWinters が唯一の有意義な予測であると思われる理由です。他のすべての予測でフラット ラインを取得するのは奇妙に思える十分なデータがあります。何かが壊れているか、何かを理解していないようです。特に、TBATS は Holt Winters の一般化された形式であるためです。そして、シリーズ ARIMA を見るだけで、単純な平均以上のものを出力する必要がありますか? 右?(1,1,1) は、違いを考慮に入れることを意味します。また、失敗してnullモデルを返すモデルはないようです。なぜこれらの結果が表示され、どのように解釈されるのか非常に興味深いです。
どんな助けや説明も大歓迎です!
ちなみに、需要はts
オブジェクトです。
以下は私のコードです:
r - ETS を使用した予測出力のプロット
ETS を使用して Holt-Winters を適用しようとしています。ユーザーごとに開始タイムスタンプが異なる可能性があるため (ただし、間隔は 15 分のままです)、DB からデータを読み取っています。
予測結果のプロット/解釈に問題があります。X 軸は、おそらく時系列のインデックス値を表示します。問題を特定できません。サンプル データは次のとおりです。
入力時間形式を保持するための時系列のフォーマット:
この入力のプロットは問題ありません。ここに画像の説明を入力
私は次のように使用してets
います:
fcast90$x
出力を見ることができたときに気づきました。予測の次の 100 期間のタイムスタンプが出力に含まれていませんか?
次の 100 日間を予測して表示するにはどうすればよいですか?
更新 @A5C1D2H2I1M1N2O1R2T1 と @joran の投稿に基づいて、2 つのことを試しました。
一連の日付を生成します (形式: YYYY-MM-DD)
プロットに設定
axes = FALSE
し、独自に軸にラベルを付けます。
#2を機能させることができません
#1で、私のデータでは、開始日はユーザー間で異なります。@A5C1D2H2I1M1N2O1R2T1 の提案を試すために、開始日は決まっていると仮定しました。そのユーザーが頻度を取得するために、最初の日付と最後の日付を読み取ります。
ユーザーごとに開始/終了時間が異なる場合があるため、時系列で日数を計算しています。日数はtime_diff
、予測データ ポイントと同じである必要がありますfcast90 <- forecast(fit2, fcast_days+time_diff)
。
プロット ラベルのシーケンスの生成
しかしseq
、最小の粒度が にあるため、使用すると問題が発生seq
しましたdays
。15分間隔の私の時系列。そのため、データを生成するのではなく、データを読み込む必要があります。このため、 を使用しraw_data$date_time_start <- as.POSIXct(strptime(paste(as.character(raw_data$date_time_start),":00",sep = ""),format="%d/%m/%Y %H:%M:%S"))
ました。これが間違っている場合はお知らせください。
#2 ではaxes = FALSE
、日付のみを印刷するように設定しました。リンクからのコードの再利用:
seq
プロットの問題は、 のデータ ポイントの日数のミスマッチによるものだと思いますfcast90$x
。
私が持っている時系列について、私の手順は正しいですか?