レストランの来客数予測@Kaggle〜データ分析編①

レストランの来客数予測@Kaggle〜データ分析編①

3連休、もう終わりですね。

本来であればこの3連休は阿弥陀岳(南陵ルート)に挑む予定でした。

ですが、低気圧の通過で冬山としては最悪のコンディションが予想されたため延期になり、ぽっかりと連休の予定が空いてしまったのです。

ということで、この連休はKaggleのレストランの来客数予測をやっていました。
※準備編ということで、以前投稿したやつの続きです。

まずはお題となっているデータを個別にみていこうと思います。
(データの結合や、複数次元での分析をしません)

データの読み込み

統計解析言語Rを使って、データをみていきます。

まずは、お題となっているデータを読み込みます。

※具体的にどんなデータなのかは、Kaggleに記載されています。


ざっくりというと、以下のデータとなっています。

データセット(csv)説明
air_reserveRestaurant Boardから得られた予約・来店情報
air_visit_dataAirREGIというクラウド型のレジから得られた来店客情報
air_store_infoAirREGI/Restaurant Boardの店舗情報
hpg_reserveHOT PEPPERグルメの予約・来店情報
hpg_store_infoHOT PEPPERグルメの店舗情報
store_id_relationAirREGI/Restaurant BoardとHOT PEPPERグルメの店舗情報の互換情報
date_info休日などのカレンダー情報

次に、使用するパッケージを読み込みます。

また、1枚に複数のグラフを表示させるために、multiplot関数を外部スクリプトで定義します。
(通常、multiplot関数はggplot2パッケージに内包されるようです。しかし、今回はうまく動作しなかったためにわざわざ外部スクリプトで読み込んでいます。。)

mutiplot関数のスクリプト(rファイル)

上記で定義したrファイルを読み込み、関数として使えるようにします。

AirREGIのデータ

まずはAirREGIシステムで収集されているレストランへの来客数の時系列トレンドを追ってみます。



2016年7月で急激にトレンドがはね上がっています。

AirREGIへ新規登録があったということでしょうか。
(もちろんKaggleのお題となるデータはAirREGIの実データそのものではないので、主催者が意図的にコンペ用に取捨選択したデータとなっています。)

また、2016年12月あたりは来店数が急増しています。

これは忘年会シーズンによるものでしょう。

感覚的にもわかることですが、レストランへの来客数トレンドには周期性がありますね。
(金曜日は華金と言われていて飲み会が多いとか、週初めから飲み会があるとこは多くないとか)

なので、月別、曜日別のトレンドも見てみます。


予想通り、金曜、週末は来客数が多く、月曜と火曜は来客数が減っています。

月別にみると忘年会シーズンの影響なのか、12月の来客数が多いですね。

また、3~5月の来客数も他の月に比べて多いです。

これは、歓送迎のシーズンによるものでしょう。

Restaurant BOARDのデータ

次に、Restaurant BOARDのデータをみてみましょう。

まずは、AirREGIのときと同様に、予約して来客した数の時系列トレンドを追います。



2016年は2017年に比べると、全体的に来客数が低いことがわかります。

AirREGIと同様に、登録店舗数などが関係あるのかもしれません。

また、2016年の年末にかけて急激に来客数が増加していて、2017年に入った後も来客数のベースは底上げされたまま維持されています。

忘年会シーズンは予約が殺到する繁忙期なので、このトレンドは感覚的にも理解できます。

一方で、2016年8月を過ぎたあたりから来客数が激減しています。(データが存在していない?)

今回の予測で必要な学習用データの期間は、少なくとも1Q(4月~6月)あれば十分でしょう。

学習に必要な期間以外のデータはこのデータセットにはないのかもしれませんね。

次に、時間別の予約後来客数をみてみましょう。


11時〜12時(ランチ)と17時〜21時(ディナー)に分布の山が別れています。

特に、18時の予約後来客数が最も多いですね。

予約から来店までのリードタイム(時間)もみてみましょう。


横軸は予約から来店までの経過時間で、縦軸は来客数となります。

見事に24時間周期のパターンが現れています。

当日来店であれば来店の2、3時間前に予約するのが最も多く、翌日以降の来店であればおおよそ24時間単位で事前に予約していることがわかりますね。