レンタサイクルの利用者数を予測するAIをノーコードで作ってみた|第2回:AI作成に向けた時系列データの準備
こんにちは!ヒューマノーム研究所でインターンをしている佐藤です。
今回の連載では、レンタサイクルのデータを当社が開発する Humanome CatData(以下CatData)を用いて分析し、自転車のレンタル数を予測するモデルを学習します。
前回の記事では、データを「可視化」することで、データの傾向の確認を行いました。様々なグラフでデータを確認できて楽しかったです!
今回は、データを分割したり、モデルの学習時に不要となる情報をあらかじめ削除するなどの「データの前処理」を行います。
CatDataを使うと、プログラムを1行も書くことなくデータの前処理とモデルの学習ができます。無料で利用できますので、お気軽にお試しください!
時系列データの分割
今回使用したレンタサイクルデータは、日々の自転車のレンタル数を観測したデータを含みます。このような、時間によって変化する情報を持つデータのことを「時系列データ」と呼びます。
時系列データを使ったAIを作成する場合、一般的には図1Aのように、過去のデータからAIモデルを作成し、それを用いて未来に起こりうる自転車のレンタル数などを予測します。作成したAIを評価するときも同様に、特定の時点よりも前のデータを学習データ、後のデータを評価データとし、AIの学習とその精度を調べる必要があります。
これに対し、下記の記事のように、時系列のないデータを用いてAIを作成する場合は、学習テーブルの一部をランダムに抽出し、評価用データとして利用する、ということがよく行われます。
時系列データに対して、この分割をしてしまうと、図1Bのように本来は知らないはずの未来のデータを用いてAIを作成し、過去のデータに対するAIの予測結果を評価することになり、モデルが不適切に高く評価されてしまいます。このようなモデルを実際に現場で用いると、想定よりも精度の低い予測しかできません。
このため、今回は評価用のデータをランダムに抽出するのではなく、2012/11/01を境目としてデータを分割したものを利用し、モデルの作成と評価を行います。
モデル作成用データ:2011/01/01〜2012/10/31のデータ
モデル評価用データ:2012/11/01〜2012/12/31のデータ
テーブルの新規作成
今回は、モデル学習の前準備として、以下を行います。
2012/11/01を境目としたデータ分割
不要な列の削除
「テーブルの新規作成」からデータを読み込み「可視化」を選択し、「保存」をクリックすると、「前処理:アクションセットの編集」まで自動で移動します (図2)。第1回で作成したものがある人はそれを使ってやってみても良いと思います。
ユーザー利用数の確認
今回使っているレンタサイクルのデータには、3種類の「ユーザー利用数」が存在します。
登録ユーザー利用数
臨時ユーザー利用数
全ユーザー利用数
今回はこの中から”登録ユーザー利用数”を予測します。”登録ユーザー利用数”と”臨時ユーザー利用数”の合計が”全ユーザー利用数”となっています。
実際に、CatDataで”全ユーザー利用数”と”登録ユーザー利用数”の関係性を可視化をしてみましょう。以下の操作をおこないます。
「前処理:アクションセットの編集」にある「可視化」ボタンをクリック
列1を「登録ユーザー利用数」、列2を「全ユーザー数」に設定
可視化してみると、”登録ユーザー利用数”の数が増えるにつれて、”全ユーザー利用数”も増えていることが分かります(図3)。これは”登録ユーザー利用数”と”全ユーザー利用数”に強く関わりがあることを指しています。この関わりのことを相関と言います。
この2つの要素の間では相関が強くみられるため、”全ユーザー利用数”を用いて”登録ユーザー利用数”を予測するモデルを作成することで、高い精度のモデルができそうです。
しかし、今日から1週間後の “登録ユーザー利用数” を予測することを考えると、レンタサイクルの利用者数の一部である ”臨時ユーザー利用数” も ”全ユーザー利用数” も1週間後にならないと観測できません。このため、今回はデータから”臨時ユーザー利用数”、”全ユーザー利用数”を削除してモデルの作成を行います。
不要な列の削除
学習の前準備として、学習には不要なデータの削除を行います。ここでは、前節で確認した”臨時ユーザー利用数”、”全ユーザー利用数”と、”instant”の3列を削除します。”instant”はデータを取り始めてからの日数を表すデータであり、”登録ユーザー数”には関係ない情報なので、今回の削除対象としています。
以下の操作を行って、”instant”、”臨時ユーザー利用数”、”全ユーザー利用数”について削除します(図4)。
”instant”の横にあるメニューアイコン(3本線の記号)をクリック
「列の削除」をクリック
”臨時ユーザー利用数”、”全ユーザー利用数”で同様の操作をする
適用ボタンをクリック
メニューアイコンをクリックすると、列の削除だけではなく、欠損値の個数、平均値、標準偏差、四分位点を確認することもできます。
データ分割
次に、”日付”の列を操作し、データを分割することで、学習用データと予測用データを作成します。先程の説明通り、学習用では2011/01/01〜2012/10/31のデータを、予測用では2012/11/01〜2012/12/31のデータを使います。
学習用データを作成するため、「前処理:アクションセットの編集」の画面で以下の操作を行います(図5)。
”日付”の横にあるメニューアイコンををクリック
スクロールバーを使って「2011/01/01~2012/10/31」の範囲を指定する
追加ボタンをクリック
適用ボタンをクリック
4で適用ボタンをクリックすると、731行のデータの中から、2の条件を満たす670行を抽出することができます。
上記操作の代わりとして、”日付”をクリックして「前処理:アクションの詳細設定」のページに移動することで、データの範囲を指定することもできます。
学習用テーブルの準備
では、学習用テーブルを作成しましょう。可視化のテーブルを複製して学習用テーブルを作成します。「前処理:アクションセットの編集」の画面右上にあるボタンをクリックして、「複製して新規テーブルを作成」を選択します(図6)。
これをクリックすると「Copy from #1」が自動的に作成されます。
「Copy from #1」を選択すると、「テーブルの詳細」へ移動します。この画面にある「利用目的の選択」から「学習」を選択し、保存します(図7)。
「テーブルの詳細」ではテーブル名の変更もできます。ここでは「レンタサイクルデータ–学習用」と変更しておきます。
予測用テーブルの準備
複製したテーブルから学習用テーブルをつくったら、次は可視化に使ったテーブルの設定を変更して、予測テーブルとして使えるように日付を絞り込んでいきます。先ほどとは違うやり方で範囲指定してみましょう。
今回は「前処理:アクションセットの編集」の画面から、”日付”の編集を行ってみます。
テーブルに適用したアクションがまとめて表示されているエリアから、”日付”を探し、横にあるペンのマークをクリックします
移動先の画面で「開始日:2012/11/1」、「終了日:2012/12/31」となるようにに設定します(図8)
追加ボタンをクリック
適用ボタンをクリック
日付を変更できたら、先ほど(学習用テーブルの準備)と同じ方法でテーブルを複製します
「利用目的の選択」画面では「予測」を選択します
学習用のテーブルと同様に、テーブル名を「レンタサイクルデータ-予測用」に変更します
おわりに
今回は、時系列データの前処理やデータの分割を行いました。CatDataのProプランをお使いの場合は、ひとつ編集済みのテーブルが作られていると、そのテーブルを他の用途のテーブルとして複製・転用できるので、その後のデータ編集が楽になります。ぜひお試しください。
次回は、実際に未来の自転車のレンタル数を予測するモデルを学習していきます。
関連記事
表データを利用したAI学習テキスト(Humanome CatData)
画像・動画を利用したAI学習テキスト(Humanome Eyes)
AI・DX・データサイエンスについてのご質問・共同研究等についてはお気軽にお問い合わせ下さい!
この記事が気に入ったらサポートをしてみませんか?