AI
2022/12/20
SiNCE 編集部

SQLで時系列データを特徴量モデリングしてみた

特微量とは特徴を数値化したものであり、人に例えると体重や身長などの数値になります。
特微量モデリングとは、これらの数値を合わせて新しい特徴を作成、選択することを言います。

特微量モデリングとは

「特微量」とは特徴を数値化したものであり、人間であれば体重や身長が特微量になります。

特微量モデリングとは、いくつかの特徴から新たな特徴を作り出し、予測の精度を上げることです。

機械は人間とは違い、「どのデータがより重要で学習に大切なものなのか」を判断できません。そのため、学習する際に特微量を選択する必要があり、特微量同士を組み合わせて新たな特微量を作ることも必要になってきます。

特微量とは何なのかを理解したところで、特微量同士を組み合わせて新たな特微量を作成してみます。

今回作る特徴量は、過去同一時間帯における任意の区間の滞在時間平均です。7日前から前日まで、14日前から7日前、30日前から15日前の3種類を作っています。

分析関数を利用して移動平均を出す

最初に、過去の移動平均を出すために「分析関数」を使用します。

「集計関数」は全ての列を集計しますが、分析関数では任意の範囲で集計することができます。今回は範囲を指定して使いたいので、分析関数を使用します。

集計関数と分析関数は、関数名に違いはありません。OVERを文頭につけることで、分析関数として認識されます。



以下、このコードの説明です。

・PARTITION BYは、GROUP BYと同じ機能を持つ関数です。この場合は同一時刻のみを集計したいため、time_で区切っています。

・ORDER BYは分析関数を利用するために、必須の句です。今回は時間(hh)で並べたものを日付で並べることで、同一時間帯を日付の昇順で並べています。

・rows between は集約する行の指定をする句です。

・preceding は現在の行(集約された結果が表示される行)から数えて、何行戻るかを指定します。なおrows betweenでand以降を省略可能です。省略した場合は、現在行まで集計範囲となります。

これによって、過去の移動平均を出すことができました。

客の滞在時間の計算

次に客の滞在時間を求めます。

「通常滞在時間」は、チェックアウトの時間からチェックインの時間を引くだけで求まります。

しかし今回、それぞれの時刻は時刻を4桁のint型で表されています。例えばチェックインが23:30でチェックアウトが25:30の時、25:30は「01:30」と記載されるため、単純に引き算しただけでは滞在時間がマイナスになってしまいます。

これを解決するため、チェックインが10時以降かつチェックアウトが2時前のレコードに限り、チェックアウトの時間に2400を足しています。また、計算後にマイナスになったレコードに2400を足すことによってもこの問題を解決することができます。

まとめとコード全文

以上の操作によって、特微量を組み合わせから過去同一時間帯における任意の区間の滞在時間平均が作成することができました。

今回は特微量の作成という点に重点を置いた記事でした。実際にはこの後にモデルを作成し予測精度の改善具合を見てまた特微量を作成、指定することが必要になります。

以下コード全文になりますのでご参考になれば幸いです。



New call-to-action