今回は、Alteryxでどのようにランダム性を実現できるか、を見ていきたいと思います。
ランダム性の使い所とは?
組織内で売上などの数字を集計するような場合、基本的にランダム性は必要なくむしろ排除されます。確実に集計数字があっていることが求められます。
一方で、何かシミュレーションしたいような場合や将来の予測を行う場合はランダム性が求められます。例えばアンケートの無作為抽出、機械学習モデルをトレーニングする場合のデータの抽出、サイコロを振ったときのシミュレーションなどがあげられると思います。
Alteryxでランダムを扱うには
Alteryxではいくつかの方法でランダム性を扱うことができます。基本的には以下の2つに集約されます。
- ランダムな値を得る
- ランダムにデータの抽出を行う
ランダムな値を得る
ランダムな値を得るには関数レベルで行います。以下の関数が利用可能です。
- RAND()
- RANDINT()
- ST_RandomPoint()
RAND関数は、0~1の間でランダムな小数を得る関数です。RANDINT関数は指定した値内でランダムな正数値を得る関数です。乱数を得る場合はSEED値の指定ができるケースが多いですが、Alteryxの関数ではSEED値を指定できません。
ST_RandomPointは少し特殊で、空間用の関数となり、指定した空間オブジェクト内でランダムなポイントを得ることができる関数です。例えば、人口ポリゴンと組み合わせて人口に応じたランダムな位置を作成することなどが可能です(以前の「WeeklyAlteryxTips#32 ポリゴン内にランダムなポイントを打つ」を参照ください)。
ランダムにデータの抽出を行う
抽出の場合はツールレベルで用途に応じた様々なものが用意されています。こちらはSEED値の指定が可能な物が多いです。
- ランダム%サンプリング・・・指定したレコード数もしくは指定した%個のレコードを抽出。ワークフローを実行する事にランダムに出力されます。ランダムにデータを抽出したい場合はこのツールを使うのが基本です。
- サンプリング・・・各レコードに対して指定した確率で抽出(N分の1という指定)。ワークフローを実行する事にランダムに出力されます。SEED値の指定不可。
- サンプル作成・・・全体に対して指定した%でレコードを3つに振り分け。60%、20%、20%のような形でデータを抽出します(データの選び方はランダムですが、SEED値を変えない限り毎回同じレコードが抽出されます)。基本的には機械学習モデルのトレーニング・検証用。
これ以外に、RAND()やRANDINT()関数を使ってランダム抽出することも可能です。
ランダム%サンプリングツール
基本的に、今あるデータセットからランダムにいくつかのデータを取得したい、といった場合はランダム%サンプリングを使うことになります。
サンプリングツール
各レコードに対してある確率でレコードを抽出するかどうか決めたい、といった場合はサンプリングツールの「N分の1の確率で各行を含む」オプションを使うことになります。ただしNは2が最小なので、50%以上の確率は指定できないことに注意してください。
自由に確率を指定したい場合は以下のようなワークフローでRANDINTやRAND関数を使うことができます。
サンプル作成ツール
サンプル作成ツールは機械学習モデルの学習と検証用にデータを分離するツールです。そのため、SEED値が同じであれば各アウトプットに出力されるデータは何度ワークフローを実行しても同じです。
ランダム%サンプリングツール、サンプリングツールはワークフローを実行するたびに値が変化するので気をつけてください。ランダム性の検証には有用ですが、ワークフローの作成途中でワークフローの正しさを検証する必要のあるような場合は生成結果を保存しておくなどの工夫が必要になります。
まとめ
- 今回はAlteryxでランダム性を取り扱うことについて解説しました
- 過去のWeeklyChallengeでランダム性を取り扱ったものがあるのでチャレンジしてみてはいかがでしょうか?「チャレンジ #258: キャッチかドロップか? ランダム性を利用してビジネスの成果を予測する」
サンプルワークフローダウンロード
次回
未定です!
コメント