R_plot_time_series&plot_modeltime_forecast_20240924

Topic(Purpose / Outcome:目的・期待される成果)

Conductor
Conductor

今回はArima Modelの詳しい解説はスキップ。interactiveなファイルはhtml形式で保存の上、wordpress上に展開可能である点を理解する事が目的。

Visualization(How / Output:事実整理 / 最終ゴール)

Visualizer
Visualizer

現状、①HTML形式でローカル保存、②WordpressのメディアサーバーにHTMLファイルを保存、③カスタムHTMLのifameにHTMLリンクを埋め込み。

Script Design / Summary(How:設計図・概要・論理構築)

Wrangler
Wrangler

全体像はこんな感じ

# LIBRARIES ----
library(modeltime)
library(tidymodels)
library(timetk)
library(tidyverse)

# DATA ----
# - Time Series Visualization - Covered in Module 02 of DS4B 203-R Time Series Course

walmart_sales_weekly # this data is coming from the modeltime package.

walmart_sales_weekly %>%
    group_by(id) %>%
    plot_time_series(Date, Weekly_Sales, .facet_ncol = 2)
    # plot_time_series() 関数は、時系列データをプロットします。
    # .facet_ncol = 2 は、2列でプロットすることを指定しています(グラフ画面)。
    # Date がx軸、Weekly_Sales がy軸になっている。
    # id ごとにプロットされている。

# 1.0 NESTING 101 ----
# - Nesting & Iteration - Covered in Week 5 of DS4B 101-R R for Business Course

# Nesting
data_nested <- walmart_sales_weekly %>%
    select(id, Date, Weekly_Sales) %>%
    nest(nested_column = -id)
    # nest() 関数は、データをネスト化します。
    # -id でid列を除いたデータをネスト化している。
    # ネスト化とは具体的には、データフレームの列をリストに変換することです。
    # ここでは、id列を除いたデータをリストに変換しています。
    # 実際には、nested_column という列にリスト(Date, Weekly_Sales列)が格納されています。

data_nested$nested_column
    # nested_column にはリストが格納されている。
    # リストの中身は、Date, Weekly_Sales列が格納されている。

# Unnesting
data_nested %>%
    unnest(nested_column)
    # unnest() 関数は、ネスト化されたデータを元に戻します。


# 2.0 MULTIPLE ARIMA FORECASTS ----
# - Modeltime (ARIMA) - Covered in  Module 8 of DS4B 203-R Time Series Course
# - Nesting, Functions, & Iteration - Covered in Week 5 of DS4B 101-R R for Business Course

# * Making Multiple ARIMA Models ----
model_table <- data_nested %>%

    # Map Fitted Models
    mutate(fitted_model = map(nested_column, .f = function(df) {
        # map() 関数は、リストの各要素に対して関数を適用します。
        # .f = function(df) で関数を指定しています。ここでは、df にリストの各要素が格納されています。このdfはデータフレームです。
        # dfという文字列は任意の文字列を記載できますか? はい、任意の文字列を記載できます。ここではdfと名付けたという事ですね。
        # 実際の無名関数の役割は、{}に挟まれている内容ですね? はい、{}に挟まれている内容が無名関数の内容です。

        arima_reg(seasonal_period = 52) %>%
            # arima_reg() 関数は、ARIMAモデルを作成します。
            # seasonal_period = 52 で季節性を指定しています。52週間の季節性を指定しています。
            # つまり、週次データの季節性を指定しています。
            # 週次データの季節性を指定することで、季節性を考慮したARIMAモデルを作成します。
            # 週次データの季節性を考慮することで、より正確な予測が可能になります。
            # なぜ52週ですか?年間のデータをとる為ですか? はい、年間のデータを取るためです。
            # その場合、なぜ48週間ではないのですか? 52週間のデータを取ることで、年間のデータを取ることができます。
            set_engine("auto_arima") %>%
            # set_engine() 関数は、モデルのエンジンを指定します。
            # "auto_arima" で自動ARIMAモデルを指定しています。
            # 自動ARIMAモデルは、ARIMAモデルのパラメータを自動的に決定します。
            # つまり、ARIMAモデルのパラメータを手動で設定する必要がなくなります。
            # 自動ARIMAモデルは、ARIMAモデルのパラメータを自動的に決定するため、モデルの作成が簡単になります。
            # ARIMAとは何ですか? ARIMAは、自己回帰和分移動平均モデルです。英語では、AutoRegressive Integrated Moving Average Modelです。
            # 特徴は、時系列データの自己相関と季節性を考慮したモデルです。
            # 自己相関とは、時系列データの過去のデータとの相関関係を指します。
            # 過去のデータで何をしますか? 過去のデータを使って、未来のデータを予測します。
            fit(Weekly_Sales ~ Date, data = df)
            # fit() 関数は、モデルを学習します。
            # Weekly_Sales ~ Date でWeekly_SalesをDateで回帰分析することを指定しています。
            # data = df でデータフレームを指定しています。このdfはfunction()の引数で指定しているデータフレームです。

    })) %>%

    # Map Forecasts
    mutate(nested_forecast = map2(fitted_model, nested_column,
                                  .f = function(arima_model, df) {
    # map2() 関数は、2つのリストの要素に対して関数を適用します。
    # .f = function(arima_model, df) で関数を指定しています。ここでは、arima_model にARIMAモデル、df にリストの各要素が格納されています。このdfはデータフレームです。

        modeltime_table(
            arima_model
            # modeltime_table() 関数は、モデルの予測を作成します。
            # arima_model にARIMAモデルを指定しています。
        ) %>%
            modeltime_forecast(
                h = 52,
                actual_data = df
            )
            # modeltime_forecast() 関数は、モデルの予測を作成します。
            # h = 52 で52週間の予測を指定しています。
            # actual_data = df でデータフレームを指定しています。このdfはfunction()の引数で指定しているデータフレームです。
            # つまり、52週間の予測を作成しています。未来のですか? はい、未来のデータです。
    }))

model_table

# * Unnest ----

model_table %>%
    select(id, nested_forecast) %>%
    unnest(nested_forecast) %>%
    group_by(id) %>%
    plot_modeltime_forecast(.facet_ncol = 2)

Raw data / Wrangling / Feature Engineering(抽出~整形)

Raw data(How:生データ抽出元)

  • Source: the modeltime package.

Raw data(How:生データ抽出方法)

  • SQL読込: –
  • CSV読込: –
  • API読込 : 〇
  • rmarkdown:render()読込:- (.rmdのファイルをtemplate保存しておく必要あり)

Raw data(How:生データの構造 / 種類)

Extractor
Extractor

元々のデータフレーム

Wrangling (How: Loading・生データ読込)

Wrangler
Wrangler

Loading

# Script on Rstudio
# Tips: 読み込み先のファイルは「記載するpath名の始まり」からWorking Directoryとして設定する必要性がある。


modeltime package

Wrangling (How: before output、Output前のデータ構造)

Wrangler
Wrangler

視える化に合わせて編集

メモ

  • 行 (row) :レコード、Observation、観測値(サンプル数)
  • 列 (column):特徴量、変数、次元数、次元の削減(Dimensionality Reduction): 高次元データを少ない次元に圧縮し、モデルの効率を上げるための手法。.xは列を指定している。obs = number of observatins.
  • 値:data point、Feature
  • Wide format:クロス集計表(横持ちデータ)、Long format:縦持ちデータ
  • 情報ソースがWEBサイト(HTMLやCSS)の場合にはどこから抽出するか、が問われるので、HTMLやCSSの知識が必要(スクレイピングを実施するにせよ)。
  • レンダリング(rendering)とはコンピュータがデータを処理して画像や映像、テキストなどを表示させる技術。
  • .fn(単数)と.fns(複数)はfunctionの略で無名関数。~ (tilde:チルダ) も無名関数。

環境設定

  • HTML形式のファイルが「file:///C:/Users/XXXXX/・・・」で保存されている場合、ローカルで保存されている状態。HTMLファイルをウェブサーバー(WordPressサイト)にアップロードする必要があり。
  • RのバージョンとRtoolsのバージョンは合わせる必要性がある。Rstudioは最新版でも問題なし。
  • 初期設定の3点セット:R, Rstudio, Rtools

参考リンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA