見出し画像

レンタサイクルの利用者数を予測するAIをノーコードで作ってみた|第5回:時系列データの取り扱い

こんにちは!ヒューマノーム研究所でインターンをしている佐藤です。

今回の連載では、レンタサイクルのデータについて、当社が開発するHumanome CatData(以下CatData)を用いて分析しています。

第1回から第4回目では、2011年1月1日〜2012年12月31日までに集められたレンタサイクルのデータを2012年11月1日で分割し、2011/01/01〜2012/10/31のデータでモデルを作成し、2012/11/01〜2012/12/31のデータでモデルの評価を行ってきました。

今回は、なぜ過去に行ったポケモンのデータ解析時のように評価データをランダムで抽出せず、過去と未来で分割する必要があったのか?について説明します。

時系列データを過去と未来で分割した理由は、本来知らないはずのデータを使って過去のデータを予測してしまう可能性があるからです(図1)。これを言われても「はて?」となってしまうと思うので、実際に「過去と未来で分割したデータ」と「ランダムに抽出したデータ」それぞれをCatDataを用いて解析し、比較してみましょう!

図1. 時系列を考慮したデータ分割とランダムなデータ分割

過去と未来で分割したデータを使った予想

まず、時系列データに対して適切な処理をした場合を見ていきます。テーブルの設定は以下の通りです。操作に関しては、第3回の記事を参考にしてください。

過去と未来で分割したデータの学習・予測は、今までの連載で使用したテーブルと同じテーブルを使用しても構いません。

学習・予想の設定は以下の通りです。先ほどのものとはデータの分割の仕方が異なります。

  • ”臨時ユーザー利用数”、”全ユーザー利用数”と、”instant”を削除

  • データを”2011/01/01〜2012/10/31”と”2012/11/01〜2012/12/31”の2つを用意する。

学習テーブルの画面で、以下の設定(図2)にしてから、「学習開始」ボタンをクリックします。

  • 予測対象の列:登録ユーザー利用数

  • 手法:Random Forest

  • “モデル評価用に学習データと評価データに分割”にチェックしない

図2. 学習するときの設定

学習を行ったら、予測テーブルに移動します。
「予測結果を比較・評価する」の画面で「予測したい値:登録ユーザー利用数」となるように設定し、予測を行います。終わり次第、評価を見てみましょう。

y=xの直線(回帰直線)は、データの分布傾向を示します。プロットが線に沿っているほど精度が良いと判断できます。また、R2(決定係数)は「モデルが正解データにどれくらい当てはまるか」を示す指標で、割合-1から1までの値を取り、1に近いほど精度が良いと判断できます。

過去と未来でデータを分割して学習・予測を行った場合、R2の値は -0.58546 であり、y=xの線に沿っているとは言えません。このことから、時系列データを過去と未来で分割したデータのモデルは、スコアがよくないことが分かります(図3)。

図3. 過去と未来を分割したデータで予測した結果

ランダムに抽出したデータで予測

次に、時系列データに対して、特に処理せずに予測をしてみた場合を確認していきます。

学習・予測時の設定は以下の通りです。過去と未来で分割したデータを学習・予測する行の数を揃えるため、2ヶ月分を取り出しました。

  • 臨時ユーザー利用数”、”全ユーザー利用数”と、”instant”を削除

  • データは“2011/01/01~2012/12/31”からランダムで2ヶ月分(61日分)取り出したもの

上記の条件に従って、実際に分割したデータを以下にアップロードしてあります。よろしければお使いください。

それでは、新しくテーブルを作成し、”日別自転車レンタルデータ 学習用”を使用し、先ほどと同じ条件にして学習を行っていきます。

  • 予測対象の列:登録ユーザー利用数

  • 手法:Random Forest

  • “モデル評価用に学習データと評価データに分割”はチェックしない

学習が終わり次第、再度新しいテーブルを作成します。”日別レンタルデータ 評価用”を使用し、「予測したい列:登録ユーザー利用数」にして予測をします。このとき、列の方を学習と同じものであることを確認してください。
データをランダムに抽出したデータを学習・予測を行うと、R2の値は0.75586となり、y=xの線にも沿う傾向にあります(図4)。

図4. ランダムに抽出したデータで学習・予測をした結果

2つを比較すると、ランダムに抽出したデータの方がR2の値もグラフもスコアが良いので、一見ランダムに抽出したデータの方がいいモデルに思えます。では、なぜこちらのデータで学習・予測をしなかったのでしょうか。

時系列データを分割した理由

本連載で使用したレンタサイクルデータは、自動車のレンタル数を時系列ごとにまとめたものです。

このような時系列が含まれているデータでAIを作成する時は、一般的に図5-Aのように、過去のデータでモデルを作成し、将来に起こりうる自転車のレンタル数などを予測します。作成したAIを評価するときも同様に、特定の時点よりも前のデータを学習データ、後のデータを評価データとし、AIの学習とその精度を調べる必要があります。

図5. 時系列がないデータと時系列データで予測する時の違い

これに対し、時系列のないデータを用いてAIを作成する場合は、下記の記事の様に学習テーブルの一部をランダムに抽出し、評価用として利用することがよく行われます。

データの中で学習用データと評価用データで分けるとき、上記の方法を用いると、特定の時点に対して未来のデータと過去のデータ関係なくランダムに抽出してしまいます。本来知らないはずの未来のデータを用いてモデルを作成し、そのAIが過去のデータを予測する、という状態になってしまいます(図5-B)。

そうすると、一見モデルの精度はとても高くなりますが、このようなモデルを実際に現場で用いても、想定よりも精度の低い予測しかできません。

そのため、今回使用したレンタサイクルデータでは、評価用のデータをランダムに抽出するのではなく、2011/11/01を境目としてデータを分け、2011/01/01〜2012/10/31のデータでモデルを作り、2012/11/01〜2012/12/31のデータで評価する必要がありました。

終わりに

今回は、時系列データの分割方法について説明しました。理解するのはとても難しいと思います。私も本記事を書きながら、社員の方にたくさん質問をしたりインターネットで調べました。この記事が、この現象を理解するための第一歩になればうれしいです。

※ 筆者紹介
佐藤 美結(慶應義塾大学環境情報学部3年):クマムシの生態に興味があります。好きなものはポケモンです。機械学習、プログラミングを一昨年から学び始めました。
---
私たちは、ワークショップのTAや機械学習ツールの使い方の紹介記事を執筆しています。今後も、AI構築の実際についてご紹介していきますので、お読みいただけると嬉しいです!

この連載の過去記事

関連記事

表データを利用したAI学習テキスト(Humanome CatData

画像・動画を利用したAI学習テキスト(Humanome Eyes


AI・DX・データサイエンスについてのご質問・共同研究等についてはお気軽にお問い合わせ下さい!

この記事が参加している募集

AIとやってみた

この記事が気に入ったらサポートをしてみませんか?