【練習問題】レンタル自転車の利用者数予測【データコンペ02】

コンペ概要

2年間の季節情報や気象情報から、各日の1時間ごとのレンタル自転車の利用者数を予測するこのモデルを作成していただきます。
昨今、観光地や都内でもレンタル自転車を見かける機会が増えてきました。 目的地周辺の散策に便利で、お財布にも優しいレンタル自転車の利用は今後も増えていくと考えられます。
今回は、レンタル自転車の利用者数の予測にチャレンジしていただきます。

コンペ詳細

目標

"cnt" : int : 利用者数

データ

  • 学習用データ (train.tsv)
  • 評価用データ (test.tsv)
  • 応募用サンプルファイル (sample_submit.csv)

課題種別:時系列
データ種別:多変量
学習データサンプル数:8645
説明変数の数:13
欠損値:無し

評価指標

評価関数「RMSE」: Root Mean Square Error
評価値は0以上の値をとり、精度が高いほど小さな値となります。

情報公開ポリシー

モデル  : 公開可
分析結果 : 公開可

学習の目的

選択理由

2つめの練習問題コンペということでまたしても表形式・テーブル数少のコンペを選択。 01は分類問題だったので回帰問題にしました。

目的・目的

  • 本を参考にしながらデータ分析に慣れること。
  • 学んだことを少しずつ調べながらパラメータなど理解したい。
  • 楽しんで走りきること!!!

分析

ベースライン作成

ベースラインには月、時間、天気の3つの説明変数を使用しました。

  • 月:平均気温などによってレンタルする傾向が出そう。極端に暑い/寒い時期は減ると予想。
  • 時間:時間毎の予測を出すので必要な説明変数と判断。深夜帯などは少ないと予想。
  • 天気:自分の場合は雨だと濡れたり、滑る危険などもあるので自転車には乗らないので説明変数に採用。

気温のデータもあったがその時期に応じて適切な服装をしていそうだと判断してベースラインでの採用は見送ることにしました。

スコア:158.1293480
この値を小さくすることが目標

特徴量

平日と休日でレンタルの傾向が違いそうだと思い、追加の特徴量に追加してみたところまあまあいい感じでした。

model.feature_importance_
#0 hr           3.175439e+08
#1 mnth         9.264302e+07   
#2 workingday  3.271353e+07    
#3 weathersit  1.982500e+07    

そのほかにも体感温度や風速なども説明変数として追加してみましたがそこまでおおきなスコアの改善はみられませんでした。
スコア:129.9833886

特徴量の生成がよくわかっていないなと感じました。なにをしたらいいのかうーん...て感じです。

振り返り

特徴量

yのラグ特徴量

yの値のラグ特徴量を採用している人がいました。 実際にやってみたところ訓練データ/検証データに対してのスコアはかなり上昇しましたが、テストスコアは過学習が起きたのかむしろ上がるという結果になってしまいました。(スコア:171.724735)

ラグ特徴量の扱いが初めてだったのでなにか間違っていたのかもしれません。yの値のラグ特徴量を説明変数に入れること自体間違っている感があるのですがどうなんでしょうか。(y入れたら相関係数高いしそりゃ過学習起きるのでは...と書きながら思っています。)

そもそもテストデータにはyが存在しないので他の説明変数に対してのラグのほうがよい気がします。

→atemp(体感温度)のラグ特徴量を入れてみたところyのラグよりあきらかにスコアが改善しました!やはり過学習でした。
スコア:129.9965818

yを変数変換

yを正規分布に従うように変数変換をすると良いということが書いてあったが、logかsqrtあたりがよさそうかと思って試したみました。

image.png

いまいちスコア自体はそれほど改善せず。自分がまちがえているのかもわからず。
けれど目標値をいじって扱いやすくするという考えは今後も持っておきたいなと思いました。いつかつかえるかも。

モデル

XGBoost

XGBoostを使用している人もいました。あまりスコア事態に大きな改善は見れなかったのですが今後の勉強することとしてメモメモ。

反省点

特徴量生成

これが全然わからなかった。振り返りをしてからlagを使ってみたのが大きな収穫。

目標値を変数変換

これは難しかった。いまだにわかっていない。機械学習正規分布に従うような目標値のほうが予告しやすいのは何となく理解できる。がそれ以上の実感を得ることはできなかった。

時系列データ

今回扱ったのは時系列の情報があるデータ。分類問題と同じく最初はshuffle=Trueで回していたが、lag特徴量をつかうときは最初からshuffleしてはだめだなと。

情報の可視化

今回は前回と違って少し多くの人が情報をネットに出してくれていました。そこで多く見ることができたのは情報/データを可視化していたこと。
これは今回の途中から真似してみてはいたが、まだまだ使いこなせていないので次回以降も意識して可視化してグラフにバンバン表してきたいと思います。

最後に

うーん。2つめにしてはなかなかハードな練習問題でした。がたくさん手を動かして試行錯誤したので得るものもたくさんありました。(結果はそれほど伸びず) でも楽しくはありました。

次回は時系列がない回帰問題に挑戦して可視化と特徴量生成を意識して取り組みたいと思います。