自転車レンタルの予測を可視化する
前の演習では、標準的な「実測値 vs 予測値」の散布図で自転車モデルの予測を可視化しました。自転車レンタルのデータは時系列なので、時間の経過に伴ってモデルがどう振る舞うかにも関心があるはずです。この演習では、8月の最初の14日間について、時間単位で予測と実測のレンタル数を比較します。
プロットを作成するために、tidyr::pivot_longer()(docs)を使って、bikesAugust にある予測値と実測値を1つの列にまとめます。pivot_longer() は次の引数を取ります。
- ピボットする「ワイド」形式のデータフレーム(パイプで暗黙に渡されます)
- 1つの列に集約する列の名前(キーワード "cols")
- 作成されるキー列の名前 — 集約した列の名前を含みます(キーワード "names_to")
- 作成される値列の名前 — 集約した列の値を含みます(キーワード "values_to")
このピボット後のデータフレームを使って、時間に対する実測と予測のレンタル数を比較します。時間インデックス instant は、データ収集開始からの観測番号を表します。サンプルコードでは、instant を0から始まる日単位に変換しています。
予測値(bikesAugust$pred)を含む bikesAugust データフレームは読み込まれています。
この演習はコースの一部です
R による Supervised Learning:回帰
演習の手順
- 空欄を埋めて、8月の最初の14日間について、時間ごとの予測値と実測値をプロットしてください。
instantを時間ではなく日単位になるように変換するcntとpred列をpivot_longer()で、キー列をvaluetype、値列をvalueという名前にまとめる- 8月の最初の2週間に
filter()する instant(日)に対するvalueをプロットする
モデルは、自転車レンタルの時間的なパターンをおおまかにつかめているでしょうか?
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Plot predictions and cnt by date/time
bikesAugust %>%
# set start to 0, convert unit to days
mutate(instant = (instant - min(instant))/24) %>%
# collect cnt and pred into a value column
pivot_longer(cols = c('cnt', 'pred'), names_to = '___', values_to = '___') %>%
filter(instant < 14) %>% # restric to first 14 days
# plot value by instant
ggplot(aes(x = ___, y = ___, color = valuetype, linetype = valuetype)) +
geom_point() +
geom_line() +
scale_x_continuous("Day", breaks = 0:14, labels = 0:14) +
scale_color_brewer(palette = "Dark2") +
ggtitle("Predicted August bike rentals, Quasipoisson model")