Alteryxのワークフローをテストする方法
こんにちは、小澤です。
Alteryxを使うと今までゴリゴリとコードを書いて行っていた、前処理, ETL, 分析, レポーティングなどのデータ分析の一連のプロセスがGUI上でワークフローを実装することで実現できるようになります。 Alteryxは"セルフサービス"データアナリティクスということで、決められた機能のみをボタン1つで実行するようなツールではなく、あくまでもワークフローを組み立てることになります。 そうなってくると気になるのがそのワークフローの実装が本当にあっているのか?、ですよね。
というわけで、今回はAlteryxで生成されたデータを検証する方法を紹介したいと思います。
プログラムとテスト
さて、プログラミングの世界では書いたコードが思い通りに動いているのかのテストをします。 テストの種類には単体テストや結合テスト、負荷テストなど様々ありますが機能要件, 非機能要件含めて正しく動作しているかを確認するプロセスになります。
TDD(テスト駆動開発)なんかだと、プログラム本体よりもテストを先に書き、そのテストが通るような実装をするといったことも行われます。 これによって、テストの内容がそのまま仕様として使えたりするわけですね。
データ分析でのテスト
さて、データ分析を行うコードのテストは非常に難しい側面があったりします。 通常のシステムと異なり、「この処理を実行した場合、出力結果が必ずこの通りになる」という定義ができないようなシーンが多々あったりします。
また、ビッグデータなんかを扱っていると、正常ではないパターンのデータにどんなものがありそうかの事前予測をはるかに超える汚いデータが入ってくることもありますし、そういったデータは本当に弾いてしまっていいものなのかを都度人がみて判断する必要があるような場面にも遭遇するでしょう。
ETLなどのバッチリこのデータならこの結果にしてほしい!というが明確に決まっていたとしても、それらがすべて網羅できるようなテストデータを作成するのが非常にコストの高い作業であったり、分析のプロセスの中で必要な処理がどんどん変わっていくこともあります。
さらに言うと、分析の結果に基づいた施策によって初めて結果の良し悪しがわかるなんてこともあります。
そういった点を念頭に置いて、何をどこまでテストするのかという部分に関しては適切な判断をする必要があります。 今回は、そういった要素には踏み込まず、Alteryxを使ったテストがどのように行えるかのみを見ていきます。
Alteryxのワークフローのテスト
Alteryxのワークフローをどのようにテストするのか考えてみましょう。
プログラムで実装されたものの単体テストであれば、テストデータを与えてその処理を呼び出した結果が目的のものになっているかで判断します。 例をあげると、「2つの値を受け取って足し合わせた結果を返す」プログラムのテストであれば、「1と2を与えて3が帰ってくるか」などがテスト項目になります。
さて、この仕組みをAlteryxで実現するには少々問題があります。 Alteryxでは、この「外から呼び出す」という仕組みを実現するのにAutomation add-onを導入する、ServerにAPIアクセスする、などが必要になります。 あるいはワークフロー全体をマクロにしてしまうかですね。 困りました。このままでは、目視チェックでしか確認できません。
そこで、ワークフロー内でデータのテストをして正常な結果でないならエラーとするTestツールというものが存在ます。
このツールを使うことで、ワークフロー内にテストを仕込めそうです。
やってみる
さて、では実際にこのTestツールを使ってどんなテストができるのかを見ていきましょう。 今回は、非常に簡単なワークフローで動きを見てみます。
irisデータセットに対して品種ごとにPetal Lengthの平均値を出しています。
データ件数の確認
2つ接続したTestツールのうち、まずは下側を見てみましょう。
これだけだと何をやってるかわからないですね。 Testツールでは、ここにテスト内容を追加していきます。 「Add」を押すと以下のようなウインドウが表示されます。
Test Nameには何をテストしているかがわかるように好きな名前をつけておきます。 この名前が先ほどの設定の部分に一覧として表示されます。
続いてのInput Connectionでは、テスト対象のデータを選択します。 Testツールでは、複数個の入力を受けるけるのでそのうちのどれをテストするかを選択します。 ワークフロー中のコネクション部分にも「#1」のような表示があるのが確認できるかと思います。 なぜ複数の入力を受け付けといてわざわざここでテスト対象を指定するのかについては、この次の項目で使う可能性があるからです。
続いて、Test Typeを指定します。この項目には4つの選択肢があります。
項目 | やること | 備考 |
---|---|---|
Record Count Matches Specific Value | データ件数がTest Valueで指定した値と一致しているをテストする | |
Record Count Matches Other Input's Recourd Count | 複数入力のうち、テスト対象じゃない方のでデータと件数が一致するかテストする | 複数入力受け付けられるのはこのため |
Expression is True for All Records | Test ValueにTrue/Falseを返すフォーミュラ式を記述する。すべてのデータ行がTrueを返せばこのテストは成功となる | |
Expression is True for First Record | 先頭行のみでFormula式によるテストをする |
テスト内容としては、「データ件数が一致しているか」、「個々のデータが特定の条件を満たしているか」の選択を行うことになります。
前者の場合だと、例えば今回のようにカテゴリごとにグループ化したデータに対して、カテゴリ数とデータの行数は一致するはずなので、そうなってない場合は不正なデータが含まれているから弾く処理を実装する必要がある、などのテストが行えます。
後者の場合だと、個々の値が「マイナスになることはない」, 「0-1の範囲に収まる」, 「列Aの値が列Bの値より大きくなることはない」などのテストが行えます。
ここでのテストでは、品種でグループ化すると3種類になるはずなので、データ件数が3件になっているかのテストをしています。
データの性質チェック
さて、今回求めているのはirisデータセットにおける品種ごとのPetal Lengthの平均値です。 このデータの特徴として、setosaはこの値がversicolorやvirginicaと比較して小さな値となります。
そのため、もしそうなっていなければ集計の仕方に間違いがあることになります。 それを確認するためのテストが上側のTestツールになります。
このテストを行う際に比較対象が同じ行になっている必要があるため、Cross Tabツールで変換しています。
このように、本筋の分析では使わないがテストを行うために必要な加工がはさまる場合があります。
その後、setosaがvirginicaより小さくなっていることを確認するテストを行っています。
テストがNGになるとどうなるか
さて、このワークフローはテストが成功します。 ここでテスト項目を書き換えて失敗するようにした場合、どのような結果になるのか見てみましょう。
下側のテストを4行かの確認に変更してワークフローを実行すると、以下のような実行ログが出力されます。
Testツールの結果がエラーになるとともに、期待されていた値と実際の値がエラーメッセージとして表示されているのがわかります。
実際のテストを含むワークフローではこの結果を元に間違っている処理の部分を適切なものに変更していくことになります。
おわりに
今回はAlteryxのTestツールを使ったワークフローのテスト方法を紹介しまいた。
実際には、このツールを利用するに際して何をどこまでテストするかを決めておく必要があります。 また、テスト内容に応じて本筋とは関係ない処理を組み立てておく必要がある場面の出てくるかと思います。
Alteryxではワークフローを組み立てながらできたところまでを実行してその内容を確認していくことができます。 その時についでにTestも挟んでおくなどするといいかもしれません。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。