次の方法で共有


pair_probabilities_fl()

カテゴリ変数のペアについて、さまざまな確率と関連するメトリックを計算します。

関数 pair_probabilities_fl()UDF (ユーザー定義関数) であり、カテゴリ変数 A と B のペアの次の確率と関連メトリックを次のように計算します。

  • P(A) は、各値 A=a の確率です
  • P(B) は、各値 B=b の確率です
  • P(A|B) は、B=b が与えられた場合の A=a の条件付き確率です
  • P(B|A) は、A=a が与えられた場合の B=b の条件付き確率です
  • P(A∪B) は、和集合確率 (A=a または B=b) です
  • P(A∩B) は、交差確率です (A=a かつ B=b) です
  • リフト メトリックは、P(A∩B)/P(A)*P(B) として計算されます。 詳細については、リフト メトリックに関するページを参照してください。
    • 1 に近いリフトは、2 つの値の結合確率が、両方の変数が独立している場合に予想されるものと類似していることを意味します。
    • リフト >> 1 は、独立の仮定の下で、値が予想よりも頻繁に共起することを意味します。
    • リフト << 1 は、独立の仮定の下で、値が予想よりも共起する可能性が低いことを意味します。
  • Jaccard 類似度係数 は、P(A∩B)/P(A∪B) として計算されます。 詳細については、Jaccard 類似度係数に関するページを参照してください。
    • 高い (1 に近い) Jaccard 係数は、値が一緒に発生する傾向があることを意味します。
    • 低い (0 に近い) Jaccard 係数は、値が離れたままになる傾向があることを意味します。

構文

pair_probabilities_fl(A, B, Scope)

構文規則について詳しく知る。

パラメーター

名前 必須 説明
A スカラー (scalar) ✔️ 最初のカテゴリ変数。
B スカラー (scalar) ✔️ 2 番目のカテゴリ変数。
スコープ スカラー (scalar) ✔️ スコープを含むフィールド。 AB の確率は、スコープ値ごとに個別に計算されます。

関数の定義

関数を定義するには、次のように、コードをクエリ定義関数として埋め込むか、データベースに格納されている関数として作成します。

次の let ステートメントを使用して関数を定義します。 権限は必要ありません。

重要

let ステートメントは単独では実行できません。 その後に 表形式の式ステートメントを記述する必要があります。 の動作例を実行するには、「pair_probabilities_fl()」を参照してください。

let pair_probabilities_fl = (tbl:(*), A_col:string, B_col:string, scope_col:string)
{
let T = materialize(tbl | extend _A = column_ifexists(A_col, ''), _B = column_ifexists(B_col, ''), _scope = column_ifexists(scope_col, ''));
let countOnScope = T | summarize countAllOnScope = count() by _scope;
let probAB = T | summarize countAB = count() by _A, _B, _scope | join kind = leftouter (countOnScope) on _scope | extend P_AB = todouble(countAB)/countAllOnScope;
let probA  = probAB | summarize countA = sum(countAB), countAllOnScope = max(countAllOnScope) by _A, _scope | extend P_A = todouble(countA)/countAllOnScope;
let probB  = probAB | summarize countB = sum(countAB), countAllOnScope = max(countAllOnScope) by _B, _scope | extend P_B = todouble(countB)/countAllOnScope;
probAB
| join kind = leftouter (probA) on _A, _scope           // probability for each value of A
| join kind = leftouter (probB) on _B, _scope           // probability for each value of B
| extend P_AUB = P_A + P_B - P_AB                       // union probability
       , P_AIB = P_AB/P_B                               // conditional probability of A on B
       , P_BIA = P_AB/P_A                               // conditional probability of B on A
| extend Lift_AB = P_AB/(P_A * P_B)                     // lift metric
       , Jaccard_AB = P_AB/P_AUB                        // Jaccard similarity index
| project _A, _B, _scope, bin(P_A, 0.00001), bin(P_B, 0.00001), bin(P_AB, 0.00001), bin(P_AUB, 0.00001), bin(P_AIB, 0.00001)
, bin(P_BIA, 0.00001), bin(Lift_AB, 0.00001), bin(Jaccard_AB, 0.00001)
| sort by _scope, _A, _B
};
// Write your query to use the function here.

次の例では、 invoke 演算子 を使用して関数を実行します。

クエリ定義関数を使用するには、埋め込み関数定義の後にそれを呼び出します。

let pair_probabilities_fl = (tbl:(*), A_col:string, B_col:string, scope_col:string)
{
let T = materialize(tbl | extend _A = column_ifexists(A_col, ''), _B = column_ifexists(B_col, ''), _scope = column_ifexists(scope_col, ''));
let countOnScope = T | summarize countAllOnScope = count() by _scope;
let probAB = T | summarize countAB = count() by _A, _B, _scope | join kind = leftouter (countOnScope) on _scope | extend P_AB = todouble(countAB)/countAllOnScope;
let probA  = probAB | summarize countA = sum(countAB), countAllOnScope = max(countAllOnScope) by _A, _scope | extend P_A = todouble(countA)/countAllOnScope;
let probB  = probAB | summarize countB = sum(countAB), countAllOnScope = max(countAllOnScope) by _B, _scope | extend P_B = todouble(countB)/countAllOnScope;
probAB
| join kind = leftouter (probA) on _A, _scope           // probability for each value of A
| join kind = leftouter (probB) on _B, _scope           // probability for each value of B
| extend P_AUB = P_A + P_B - P_AB                       // union probability
       , P_AIB = P_AB/P_B                               // conditional probability of A on B
       , P_BIA = P_AB/P_A                               // conditional probability of B on A
| extend Lift_AB = P_AB/(P_A * P_B)                     // lift metric
       , Jaccard_AB = P_AB/P_AUB                        // Jaccard similarity index
| project _A, _B, _scope, bin(P_A, 0.00001), bin(P_B, 0.00001), bin(P_AB, 0.00001), bin(P_AUB, 0.00001), bin(P_AIB, 0.00001)
, bin(P_BIA, 0.00001), bin(Lift_AB, 0.00001), bin(Jaccard_AB, 0.00001)
| sort by _scope, _A, _B
};
//
let dancePairs = datatable(boy:string, girl:string, dance_class:string)[
    'James',   'Mary',      'Modern',
    'James',   'Mary',      'Modern',
    'Robert',  'Mary',      'Modern',
    'Robert',  'Mary',      'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Patricia',  'Modern',
    'Robert',  'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Linda',     'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Linda',     'Modern',
    'Robert',  'Linda',     'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Mary',      'Modern',
    'Michael', 'Patricia',  'Modern',
    'Michael', 'Patricia',  'Modern',
    'James',   'Linda',     'Modern',
    'Robert',  'Mary',      'Classic',
    'Robert',  'Linda',     'Classic',
    'James',   'Mary',      'Classic',
    'James',   'Linda',     'Classic'
];
dancePairs
| invoke pair_probabilities_fl('boy','girl', 'dance_class')

出力

おそらくランダムに 2 つのダンス クラスでダンスをしている人々のペアの一覧から、何か特異に見えるもの (つまり、ランダムではないもの) を見つけましょう。 最初に、各クラスを単独で見ていきます。

Michael と Patricia のペアのリフト メトリックは 2.375 で、これは 1 を大幅に上回る値です。 この値は、このペアリングがランダムである場合に予想されるものよりもはるかに頻繁に彼らが一緒に見られることを意味します。 その Jaccard 係数は 0.75 で、1 に近い値です。 ペアでダンスをするとき、彼らは好んで一緒に踊っています。

A B scope P_A P_B P_AB P_AUB P_AIB P_BIA Lift_AB Jaccard_AB
Robert パトリシア モダン 0.31578 0.42105 0.05263 0.68421 0.12499 0.16666 0.39583 0.07692
Robert Mary モダン 0.31578 0.26315 0.15789 0.42105 0.59999 0.49999 1.89999 0.37499
Robert Linda モダン 0.31578 0.31578 0.10526 0.52631 0.33333 0.33333 1.05555 0.2
Michael パトリシア モダン 0.31578 0.42105 0.31578 0.42105 0.75 0.99999 2.375 0.75
James パトリシア モダン 0.36842 0.42105 0.05263 0.73684 0.12499 0.14285 0.33928 0.07142
James Mary モダン 0.36842 0.26315 0.10526 0.52631 0.4 0.28571 1.08571 0.2
James Linda モダン 0.36842 0.31578 0.21052 0.47368 0.66666 0.57142 1.80952 0.44444
Robert Mary クラシック 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
Robert Linda クラシック 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
James Mary クラシック 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333
James Linda クラシック 0.49999 0.49999 0.24999 0.75 0.49999 0.49999 0.99999 0.33333