レンタサイクルの利用者数を予測する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を用いて解析し、比較してみましょう!
過去と未来で分割したデータを使った予想
まず、時系列データに対して適切な処理をした場合を見ていきます。テーブルの設定は以下の通りです。操作に関しては、第3回の記事を参考にしてください。
過去と未来で分割したデータの学習・予測は、今までの連載で使用したテーブルと同じテーブルを使用しても構いません。
学習・予想の設定は以下の通りです。先ほどのものとはデータの分割の仕方が異なります。
”臨時ユーザー利用数”、”全ユーザー利用数”と、”instant”を削除
データを”2011/01/01〜2012/10/31”と”2012/11/01〜2012/12/31”の2つを用意する。
学習テーブルの画面で、以下の設定(図2)にしてから、「学習開始」ボタンをクリックします。
予測対象の列:登録ユーザー利用数
手法:Random Forest
“モデル評価用に学習データと評価データに分割”にチェックしない
学習を行ったら、予測テーブルに移動します。
「予測結果を比較・評価する」の画面で「予測したい値:登録ユーザー利用数」となるように設定し、予測を行います。終わり次第、評価を見てみましょう。
y=xの直線(回帰直線)は、データの分布傾向を示します。プロットが線に沿っているほど精度が良いと判断できます。また、R2(決定係数)は「モデルが正解データにどれくらい当てはまるか」を示す指標で、割合-1から1までの値を取り、1に近いほど精度が良いと判断できます。
過去と未来でデータを分割して学習・予測を行った場合、R2の値は -0.58546 であり、y=xの線に沿っているとは言えません。このことから、時系列データを過去と未来で分割したデータのモデルは、スコアがよくないことが分かります(図3)。
ランダムに抽出したデータで予測
次に、時系列データに対して、特に処理せずに予測をしてみた場合を確認していきます。
学習・予測時の設定は以下の通りです。過去と未来で分割したデータを学習・予測する行の数を揃えるため、2ヶ月分を取り出しました。
臨時ユーザー利用数”、”全ユーザー利用数”と、”instant”を削除
データは“2011/01/01~2012/12/31”からランダムで2ヶ月分(61日分)取り出したもの
上記の条件に従って、実際に分割したデータを以下にアップロードしてあります。よろしければお使いください。
それでは、新しくテーブルを作成し、”日別自転車レンタルデータ 学習用”を使用し、先ほどと同じ条件にして学習を行っていきます。
予測対象の列:登録ユーザー利用数
手法:Random Forest
“モデル評価用に学習データと評価データに分割”はチェックしない
学習が終わり次第、再度新しいテーブルを作成します。”日別レンタルデータ 評価用”を使用し、「予測したい列:登録ユーザー利用数」にして予測をします。このとき、列の方を学習と同じものであることを確認してください。
データをランダムに抽出したデータを学習・予測を行うと、R2の値は0.75586となり、y=xの線にも沿う傾向にあります(図4)。
2つを比較すると、ランダムに抽出したデータの方がR2の値もグラフもスコアが良いので、一見ランダムに抽出したデータの方がいいモデルに思えます。では、なぜこちらのデータで学習・予測をしなかったのでしょうか。
時系列データを分割した理由
本連載で使用したレンタサイクルデータは、自動車のレンタル数を時系列ごとにまとめたものです。
このような時系列が含まれているデータでAIを作成する時は、一般的に図5-Aのように、過去のデータでモデルを作成し、将来に起こりうる自転車のレンタル数などを予測します。作成したAIを評価するときも同様に、特定の時点よりも前のデータを学習データ、後のデータを評価データとし、AIの学習とその精度を調べる必要があります。
これに対し、時系列のないデータを用いてAIを作成する場合は、下記の記事の様に学習テーブルの一部をランダムに抽出し、評価用として利用することがよく行われます。
データの中で学習用データと評価用データで分けるとき、上記の方法を用いると、特定の時点に対して未来のデータと過去のデータ関係なくランダムに抽出してしまいます。本来知らないはずの未来のデータを用いてモデルを作成し、そのAIが過去のデータを予測する、という状態になってしまいます(図5-B)。
そうすると、一見モデルの精度はとても高くなりますが、このようなモデルを実際に現場で用いても、想定よりも精度の低い予測しかできません。
そのため、今回使用したレンタサイクルデータでは、評価用のデータをランダムに抽出するのではなく、2011/11/01を境目としてデータを分け、2011/01/01〜2012/10/31のデータでモデルを作り、2012/11/01〜2012/12/31のデータで評価する必要がありました。
終わりに
今回は、時系列データの分割方法について説明しました。理解するのはとても難しいと思います。私も本記事を書きながら、社員の方にたくさん質問をしたりインターネットで調べました。この記事が、この現象を理解するための第一歩になればうれしいです。
この連載の過去記事
関連記事
表データを利用したAI学習テキスト(Humanome CatData)
画像・動画を利用したAI学習テキスト(Humanome Eyes)
AI・DX・データサイエンスについてのご質問・共同研究等についてはお気軽にお問い合わせ下さい!
この記事が気に入ったらサポートをしてみませんか?