はじめに

はじめまして。データサイエンティスト目指して勉強中の現役大学生(1回生・理学部)です。
今回の記事では、現在SIGNATEで行われている学生限定のコンペティション【SIGNATE Student Cup 2021秋】について書いていきます。
本記事では、データ探索を行った結果(の一部)を紹介し、それをもとにして仮説を立てて検証するという流れになっています。ぜひ最後までご覧ください。

【STEP1】データセットの中身は…?
それではさっそく分析に入っていきます。
まずは提供されたデータセットを確認します。
今回のコンペで提示されたデータセットは以下の4つでした。
- 自転車の台数状況データ(status.csv)
- 利用者の移動履歴データ(trip.csv)
- ステーション情報(station.csv)
- 気象情報(weather.csv)
期間は2013年9月~2015年8月の2年間分のデータで、その後半(2014年9月~2015年8月)の一部が予測対象となっています。
では、それぞれのデータセットについて少し詳しく確認していきます。
自転車の台数状況データ(status)

statusデータでは、各日時において各ステーションが何台利用可能かを知ることができます。
ちなみに、、もともとstatusデータに入っていたのは
- 記録日時(year,month,day,hour)
- ステーションID(station_id)
- 予測対象フラグ(predict)
- 利用可能な台数(bikes_available)
でしたが分析の都合上、他のデータセットと統合したり計算したりして
- 最大収容台数(dock_count)
- 都市(city)
- 利用可能率(avail_rate)
- 曜日(weekday)
を追加してあります。
利用者の移動履歴データ(trip)

tripデータでは
- 移動した時間(duration)
- いつ出発していつ到着したか(start_date,end_date)
- どこから出発してどこに到着したか(start_station_id,end_station_id)
- どの自転車を使ったか(bike_id)
- サブスク客か一時客か(subscription_type)
が分かるようになっています。
ステーション情報(station)

stationデータでは、
- ステーションの位置[緯度・経度] (lat,long)
- 最大収容台数 (dock_count)
- ステーションがある都市 (city)
- ステーションが設置された日 (installation_date)
が分かります。
気象情報(weather)



weatherデータでは、
- 気温[最高/平均/最低]
- 露点温度[最高/平均/最低]
- 湿度[最大/平均/最小]
- 海面気圧[最高/平均/最低]
- 視程[最高/平均/最低]
- 風速[最大/平均]
- 降水量 (precipitation)
- 雲量 (cloud_cover)
- 気象現象 (events)
- 風向 (wind_dir_degrees)
が分かります。
【STEP2】基本的な情報を可視化
さて、ここからは基本的な情報を可視化してデータ探索します。
ここでは
- 各ステーションの最大収容数
- ステーションの位置関係
- 各ステーションの平均利用可能率
- 登録種別
- 移動経路
- 利用可能率・移動数の推移
- 都市と利用数の関係
- 時間帯と利用可能率の関係
- 曜日と利用可能率・利用数の関係
- 曜日と「自転車がない!」発生数の関係
- 曜日と「駐輪できない!」発生数の関係
を棒グラフや散布図・折れ線グラフで表していきます。
最大収容数

最大収容台数の平均値は約17.7台, 標準偏差は約4.0台でした。
都市ごとに見てみると
都市 | 最大収容数(平均) |
city1 | 16.5 |
city2 | 19.0 |
city3 | 16.4 |
city4 | 16.7 |
city5 | 15.0 |
となっています。
ステーションの数が多い「city2」は最大収容数も多いことがわかります。
ステーションの位置

そこで!気になるのはステーションや都市(city1,2,3,4,5)の位置関係です。
緯度と経度の情報を基に可視化したのが上の図です。
とくに「city2」は数が多く密集しているのが分かります。
データセットには緯度と経度の情報があるので、Googleマップで実際の都市名を特定してみました。
その結果、すべての都市はカリフォルニア州の
city1=サンノゼ (96.89万人, 469.7km² )
city2=サンフランシスコ (81.75万人, 600.6km² )
city3=レッドウッドシティ(7.824万人, 89.98km² )
city4=マウンテンビュー(7.548万人,31.79km²)
city5=パロアルト(6.523万人,67.34 km² )
であることがわかりました。(人口は2013年時点)
各ステーションの平均利用可能率

次は、ステーションごとの平均利用可能率です。
全体の平均値は約47.9%で、都市別の平均値は以下の通りです。
都市 | 利用可能率(平均) |
city1 | 50.0% |
city2 | 46.4% |
city3 | 48.6% |
city4 | 48.5% |
city5 | 50.7% |
やはり利用可能率でみても「city2」が最も低く,ほかの都市と比べて利用できる自転車が少なくなっていることがわかります。
サブスク or 一時客

上図は「Customer(一時客)」と「Subscriber(サブスク客)」の移動数を表しています。
「人数」を表しているわけではないことに注意してください。
Customer=103213回 ,Subscriber=566746回でした。
移動経路

最後に、移動履歴データをもとに移動経路を可視化しました。
都市内での移動が基本ですが、都市間の移動も少なからずあることがわかります。
利用可能率と移動数の推移
利用可能率【全体】


利用可能率【都市別】

移動数【全体】


移動数【登録種別】

10月ごろから年末にかけて利用者数が減少していくのが分かります。
やはり寒い冬に自転車をこぐ人は少ないようです。
都市と利用数の関係

city2 は他の都市に比べて利用数が著しく多いことがわかります。
→ 仮説③
時間帯と利用可能率の関係

ピークは朝の7時~9時と夕方の17時~19時ごろ。ランチの時間帯も利用可能率が若干減少しています。
通勤通学に利用する人が多いのだろうと推測できます。
曜日と利用可能率・利用者数の関係


曜日ごとに見てみると、平日に利用する人が多いことがわかります。
先ほど「時間帯と利用可能率の関係」で見たように、通勤通学に使う人が多いことが考えられます。
曜日と「自転車がない!」の関係

利用可能率が 0% となってしまった回数をカウントし、曜日別に集計しました。
→ 仮説③
曜日と「駐輪できない!」の関係

利用可能率が 100% となり駐輪できない状態になった回数をカウントし、曜日別に集計しました。
→ 仮説③
【STEP3】仮説検証
最後に、自分なりに立てた仮説のうち3つを検証していくことにします。
仮説1
気温が高いと利用可能率が下がり、気温が低いと利用可能率が上がる。
気温が高いと利用可能率が下がり、気温が低いと利用可能率が上がる、という傾向はおおむねみられるものの、ばらつきが大きい。



推移をみると、気温が高いと利用可能率が低く、気温が低いと利用可能率が高い傾向がおおむねみられます。
しかし所々で例外がみられ、散布図をみてもばらつきが結構あるので、単純に気温と結びつけられるわけではないと分かります。
仮説2
風が強い日は利用可能率が上がるのではないか。
風が強い日ほど利用可能率は低い。(!?)


平均風速と利用可能率の間には弱い負の相関(r≒-0.394)がみられ、予想とは逆の結果になりました。
しかし、なぜでしょうか…。風の強い日にはなるべく自転車には乗りたくない。追い風ならラッキーですが向かい風だったら最悪です。とても違和感があります。
そこで「交絡因子が悪さをしているのではないか」と考えました。先ほどの仮説①では「気温が高いときは利用可能率が低い傾向がある」と分かりました。そして気温と風速の関係を調べると「(気温が高い)夏は風が強い傾向にある」ということがわかります(相関係数:約0.47)。
つまりこんな感じの関係になっている、ということです。↓

で、交絡因子(と推定される)「平均気温」の影響を取り除いてみました。その結果が下の散布図です。

うーん、まだ負の相関が残ってしまっていますが少し相関は弱まりました(相関係数-0.394→-0.293)。まだまだ交絡因子はありそうな気がしますね…。
では今度は「利用可能率」ではなく、移動履歴から得られる「移動数」(≒利用者数)に着目して考えてみます。平均風速と利用者数の関係は下図のようになりました。

色の濃淡は、その日の移動履歴のうち何%がサブスク客だったか?を表しています。
これを見てわかることは次の二つ。
- サブスク未加入の場合、風が強い日ほど移動数が減少する。
- サブスク加入の場合、風が強くても移動数はほぼ変わらない(若干増加?)。
もう少し詳しく調べるために、サブスク客はどんな人なのかを推測します。
STEP2で見たように通勤通学で使う人が多いようなので、その人たちがサブスクに加入しているのではないか?と仮説を立てました。この仮説が正しいなら、サブスク率が高い日=平日,サブスク率が低い日=休日になるはずです。
実際に集計した結果が下のグラフです。

なるほど、おおむね仮説は当たっていました。サブスク客は平日利用が中心で、中には休日にも利用する人もいると推測されます。そしてサブスク未加入者は平日はほぼ使わず旅行や遊びで利用するくらい、といったところでしょうか。
以上のことをまとめると、「風が強い日ほど利用可能率が低くなる」というナゾの関係がみられたのは、
- 気温が高い(季節が夏である)といった交絡因子があるから
- 通勤通学利用客と一時利用客で状況が違っており、それが混ざり合った結果
ということになります。
仮説3
「自転車がない!」「駐輪できない!」の多発は city2(サンフランシスコ) の利用集中が原因ではないか?
「自転車がない!」「駐輪できない!」の発生数のうち9割弱が city2(サンフランシスコ) で起こっている。
STEP2で見たように、サイクルステーションに行っても「自転車がない!」「駐輪できない!」という事態がかなり多く発生していることがわかりました。
また、STEP2で見た下の図からわかるように、city2 における移動が著しく多くなっています。

そこで、シェアサイクル利用が盛んな city2 に注目して、city2ではそのような事態が発生しているかを調べてみました。その結果が下の棒グラフです。

「自転車がない!」事態は全体の88.6%が、「駐輪できない!」事態は全体の87.2%が city2で発生していることがわかりました。
「自転車がない!」となると他のステーションを探さなきゃいけなかったりしますし、せっかくの利用してくれる顧客を逃してしまう可能性も大いにあります。
一方「駐輪できない!」となるとステーションが自転車で溢れかえってしまって道などをふさいでしまったり、景観的にも問題が発生したりすることが考えられます。
最後に
今回はこれで終わりです。
分析する前は全く見当もつかず、ただただデータをいじくり回すだけでしたが、分析を進めていくにつれて少しずつではありましたが全体像が見えてきました。今回の記事は、私の勉強不足もあって分析と仮説検証だけで終わってしまいましたが、時系列データの予測に関しても、チュートリアルや各情報サイト,書籍等を参考にしながら勉強して挑戦したいと思います。
最後までお読みいただきありがとうございました。
この記事に関するご意見・感想は、ページ下部から投稿できます。

記事への意見・感想はコチラ