データサイエンス100本ノックをAlteryxで。90日目(解答)

100本ノック

このページは解答編です。

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-090: レシート明細データ(receipt.csv)は2017年1月1日〜2019年10月31日までのデータを有している。売上金額(amount)を月次で集計し、学習用に12ヶ月、テスト用に6ヶ月の時系列モデル構築用データを3セット作成せよ。

解答ワークフローは以下のようになります。

今回は時系列予測のためのデータ準備となります。時系列予測も通常の機械学習モデルと同様、学習用データと検証用データに分けるのが普通です。ただし、時系列モデルは普通にフィルターツールで行います。

それでは実際のワークフローを作っていきましょう。まず、セレクトツールでデータ型の変換と不要項目の削除を行いましょう。amountは数値型(Int16)、その他はsales_ymdがあれば十分です。

次に、日時ツールでsales_ymdを日付形式のデータに変更していきましょう。変換するフォーマットは「文字列を日付/時刻形式に変換する」で、変換する文字列フィールドは「sales_ymd」、新しい列名は適当にデフォルトのDateTime_Outとしています。入力された文字列フィールドに一致する形式は、プリセットの「yyyyMMdd」を選択します。

次に、この日付データから年月を取得したいと思います。数値でYYYYMMみたいな形であれば、最初のsales_ymdフィールドにて左から6文字切り取れば良いのですが、今回は日付型のまま進めましょう。この場合、DateTimeTrimという関数を使うことができます。

DateTimeTrim関数

DateTimeTrim(dt,t)
変数対応データ型内容
dtDate/DateTime型関数を適用する値/フィールドを指定します
t文字列型トリミングタイプ。ここで指定したレベルより低いデータを切り捨てます。「year」「month」「day」「hour」「minutes」「Firstofmonth」「lastofmonth」などが利用可能です。「lastofmonth」のみ末日の終わり1秒前になります。それ以外は、午前0時にトリミングされます。

この関数は、指定したレベル以下の日付/時間データを切り捨てます。例をあげると、「2022-12-23 14:00:12」というデータが与えられて、これに対して「月」とすると、月以下は切り捨てられるので「2022-12-01 00:00:00」といったデータが得られます。

実際のフォーミュラツールでは以下のように使います。フィールド名は「sales_ym」、データ型はDate型とします。月ごとに丸めたいため、トリミングタイプは「month」となります。

DateTimeTrim([DateTime_Out],"Month")

次に、集計ツールを使って、月ごとの合計を取得します。sales_ymでグループ化し、amountの合計を取ります。

次に、時間順に並べましょう。ソートツールを使ってsales_ymの昇順で並べ替えます。

これで欲しいものは得られています。あとは、トレーニングデータを3組準備していきます。元々データは「2017年1月1日〜2019年10月31日」までが揃っています。この範囲の中で学習用に12ヶ月、テスト用に6ヶ月というのを3組作ります。つまり以下のようにフィルタリングしていけば良い、ということになります。

セット名学習用データの期間テスト用データの期間
セット12017-01-01~2017-12-312018-01-01~2018-06-30
セット22017-07-01~2018-06-302018-07-01~2018-12-31
セット32018-01-01~2018-12-312019-01-01~2019-06-30

まず、セット1からいきましょう。今回は、フィルターツールを2つ使っていきますが、それぞれのフィルターツールで学習用とテスト用、分けてフィルタすると条件がめんどくさいので、最初のフィルタで学習用+テスト用の全期間で抜き出し、2つ目のフィルタで学習用とテスト用をわけたいと思います。

ですので、最初のフィルタは以下のようにテスト用データの終わりの期間まで取得します。

このあと、2つ目のフィルタを接続します。以下のように学習用データの終わりの日付を記載します。

こうすることで、2つ目のフィルターツールのT出力が学習用、F出力がテスト用、というふうになります。

次に、セット2です。期間全体をカスタムフィルターで抜き出します。

[sales_ym] >= "2017-07-01" AND 
[sales_ym] <= "2018-12-31"

2つ目のフィルタで学習用データの終わりの期間を記載します。

最後のセット3です。1つ目のフィルター。

[sales_ym] >= "2018-01-01" AND 
[sales_ym] <= "2019-06-30"

2つ目のフィルター。

これで完了です。

まとめ

今回も時系列予測の際のデータの準備の触りを行うような問題でした。ここまでできていれば、あとはARIMAツールやETSツールを接続するだけで予測できてしまいます。

解答ワークフローダウンロード

コメント

タイトルとURLをコピーしました