Time Series PreparationプラグインのTime series resamplingの仕様について
Time Series PreparationプラグインのTime series resamplingを利用して日付のリサンプリングを実施しようとしております。
データは以下画像の通り月次、カテゴリ別の欠損行のあるデータで、カテゴリごとにデータが無い月の列を用意することを目的にしています。
Time series resamplingを用いることで実現できる認識なのですが、月次の時の挙動が想定と異なるためご質問です。
添付画像の通り、レシピの設定画面でResampling parametersのTime stepを'1', Unitを'Months'にすることで月次のリサンプリングが実現できる認識ですが、
実行するとすべての日付列が前月最終日となってしまい、値が表示されないという現象が起こります。
① 日付列を1日引いておく
② リサンプリングを実施
③ 日付列に1日足す
という手順を取ることで正常な応答を得ることができるのですが、
粒度を日にしたときは直感通りに日次のリサンプリングが出来るため、月次のこの仕様がバグなのか仕様なのかご存じの方がいらっしゃればご教示頂けますでしょうか?
Best Answer
-
Tsuyoshi Dataiker, PartnerAdmin, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 144 Dataiker
ご説明ありがとうございます!状況、理解いたしました。
関連情報を確認しましたところ、現時点のプラグイン実装では、月のデータを扱う場合、月初の日付ではなく、月末の日付を保持する必要がある仕様となっていることを確認しました。このため、お手数ですが、@希 さんに書いていただいた通り、以下のような処理が必要となります。
① 日付列を1日引いておく
② リサンプリングを実施
③ 日付列に1日足す将来的にプラグイン実装が改善される可能性はありますが、現時点では上記のようにお考えいただければと思います。何卒よろしくお願いいたします。
Answers
-
Tsuyoshi Dataiker, PartnerAdmin, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 144 Dataiker
@希 さん、ご質問の投稿をいただきまして、ありがとうございます!
「Resampling parametersのTime stepを'1', Unitを'Months'」に設定した場合、私の環境では「すべての日付列が前月最終日」にはならず、「すべての日付列が当月最終日」になりました。このように、「すべての日付列が当月最終日」になるのであれば、正しい挙動だと考えられます。(添付いただいた3つ目の画像では、そのようになっているようにも見えます。)
また、「値が表示されない」についてですが、2つ目の画像では、Interpolateが'Constant', Constant valueが'0'となっています。このため、存在しない日付のデータを0に設定した上で、月の値を算出することになり、3つ目の画像の結果になっていると考えられます。
そこで、1つ目の画像のようなデータに対しては、2つ目の画像でInterpolateに'Constant'ではなく、'Previous'を設定することで、想定通りの挙動になると思いますが、この点はいかがでしょうか?
-
希 Partner, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 21 Partner
@Tsuyoshi さん、回答ありがとうございます。
当月最終日:ご認識の通り、私の環境でも当月最終日になりました、失礼しました。
Previousを選択することで、値も保持された状態でresamplingされることは理解できるのですが、以下のようなデータの欠損値を埋めるケースで、Previousを選択すると、
以下の画像のように、欠損行(2022年8月)に前月の値が入ってしまいます。
Val列が売上などを意味する場合、売上が無かった(=0)で埋める必要があると思いますが、そのような使い方をする場合は、
① 日付列を1日引いておく
② リサンプリングを実施
③ 日付列に1日足すという処理が必要という理解であっておりますでしょうか?
ちなみにですが、今回の場合、1日付で月次のデータを集計しているのですが、月の粒度でデータを集計する場合、各月の最終日でレコードを集約することが一般的でしょうか?
ご教示よろしくお願いいたします。
-
希 Partner, Dataiku DSS Core Designer, Dataiku DSS ML Practitioner, Dataiku DSS Adv Designer, Registered Posts: 21 Partner
ありがとうございます、承知しました!